12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import os
- import infra.basetest
- class TestMicroPython(infra.basetest.BRTest):
- config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
- f"""
- BR2_PACKAGE_MICROPYTHON=y
- BR2_PACKAGE_MICROPYTHON_LIB=y
- BR2_ROOTFS_OVERLAY="{infra.filepath("tests/package/test_micropython/rootfs-overlay")}"
- BR2_TARGET_ROOTFS_CPIO=y
- # BR2_TARGET_ROOTFS_TAR is not set
- """
- def run_upy_code(self, python_code, opts=""):
- cmd = f'micropython {opts} -c "{python_code}"'
- output, ret = self.emulator.run(cmd)
- self.assertEqual(ret, 0, f"could not run '{cmd}', returned {ret}: '{output}'")
- return output
- def test_run(self):
- cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
- self.emulator.boot(arch="armv5",
- kernel="builtin",
- options=["-initrd", cpio_file])
- self.emulator.login()
- # The micropython binary can execute.
- self.assertRunOk("micropython -h")
- # Query interpreter version and implementation.
- py_code = "import sys ; "
- py_code += "print('Version:', sys.version) ; "
- py_code += "print('Implementation:', sys.implementation)"
- self.run_upy_code(py_code)
- # Check implementation is 'micropython'.
- py_code = "import sys ; print(sys.implementation.name)"
- output = self.run_upy_code(py_code)
- self.assertEqual(output[0], "micropython")
- # Check micropython optimization are correctly reported.
- py_code = "import micropython ; print(micropython.opt_level())"
- for opt_level in range(4):
- output = self.run_upy_code(py_code, f"-O{opt_level}")
- self.assertEqual(
- int(output[0]),
- opt_level,
- f"Running '{py_code}' at -O{opt_level} returned '{output}'"
- )
- # Check micropython can return a non-zero exit code.
- expected_code = 123
- py_code = "import sys ; "
- py_code += f"sys.exit({expected_code})"
- cmd = f'micropython -c "{py_code}"'
- _, exit_code = self.emulator.run(cmd)
- self.assertEqual(exit_code, expected_code)
- # Check micropython computes correctly.
- input_value = 1234
- expected_output = str(sum(range(input_value)))
- py_code = f"print(sum(range(({input_value}))))"
- output = self.run_upy_code(py_code)
- self.assertEqual(output[0], expected_output)
- # Check a small script can execute.
- self.assertRunOk("/root/mandel.py", timeout=10)
- # Check we can use a micropython-lib module.
- msg = "Hello Buildroot!"
- filename = "file.txt"
- gz_filename = f"{filename}.gz"
- self.assertRunOk(f"echo '{msg}' > {filename}")
- self.assertRunOk(f"gzip {filename}")
- out, ret = self.emulator.run(f"/root/zcat.py {gz_filename}")
- self.assertEqual(ret, 0)
- self.assertEqual(out[0], msg)
|