diff options
Diffstat (limited to 'meta/lib/oeqa/sdk/cases/maturin.py')
-rw-r--r-- | meta/lib/oeqa/sdk/cases/maturin.py | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/meta/lib/oeqa/sdk/cases/maturin.py b/meta/lib/oeqa/sdk/cases/maturin.py new file mode 100644 index 0000000000..ea10f568b2 --- /dev/null +++ b/meta/lib/oeqa/sdk/cases/maturin.py | |||
@@ -0,0 +1,79 @@ | |||
1 | # | ||
2 | # Copyright OpenEmbedded Contributors | ||
3 | # | ||
4 | # SPDX-License-Identifier: MIT | ||
5 | # | ||
6 | |||
7 | import os | ||
8 | import shutil | ||
9 | import unittest | ||
10 | |||
11 | from oeqa.core.utils.path import remove_safe | ||
12 | from oeqa.sdk.case import OESDKTestCase | ||
13 | from oeqa.utils.subprocesstweak import errors_have_output | ||
14 | |||
15 | errors_have_output() | ||
16 | |||
17 | |||
18 | class MaturinTest(OESDKTestCase): | ||
19 | def setUp(self): | ||
20 | if not ( | ||
21 | self.tc.hasHostPackage("nativesdk-python3-maturin") | ||
22 | or self.tc.hasHostPackage("python3-maturin-native") | ||
23 | ): | ||
24 | raise unittest.SkipTest("No python3-maturin package in the SDK") | ||
25 | |||
26 | def test_maturin_list_python(self): | ||
27 | py_major = self._run("python3 -c 'import sys; print(sys.version_info.major)'") | ||
28 | py_minor = self._run("python3 -c 'import sys; print(sys.version_info.minor)'") | ||
29 | python_version = "%s.%s" % (py_major.strip(), py_minor.strip()) | ||
30 | cmd = "maturin list-python" | ||
31 | output = self._run(cmd) | ||
32 | self.assertRegex(output, r"^🐍 1 python interpreter found:\n") | ||
33 | self.assertRegex( | ||
34 | output, | ||
35 | r" - CPython %s (.+)/usr/bin/python%s$" % (python_version, python_version), | ||
36 | ) | ||
37 | |||
38 | |||
39 | class MaturinDevelopTest(OESDKTestCase): | ||
40 | @classmethod | ||
41 | def setUpClass(self): | ||
42 | targetdir = os.path.join(self.tc.sdk_dir, "guessing-game") | ||
43 | try: | ||
44 | shutil.rmtree(targetdir) | ||
45 | except FileNotFoundError: | ||
46 | pass | ||
47 | shutil.copytree( | ||
48 | os.path.join(self.tc.files_dir, "maturin/guessing-game"), targetdir | ||
49 | ) | ||
50 | |||
51 | def setUp(self): | ||
52 | machine = self.td.get("MACHINE") | ||
53 | if not ( | ||
54 | self.tc.hasHostPackage("nativesdk-python3-maturin") | ||
55 | or self.tc.hasHostPackage("python3-maturin-native") | ||
56 | ): | ||
57 | raise unittest.SkipTest("No python3-maturin package in the SDK") | ||
58 | if not ( | ||
59 | self.tc.hasHostPackage("packagegroup-rust-cross-canadian-%s" % machine) | ||
60 | ): | ||
61 | raise unittest.SkipTest( | ||
62 | "Testing 'maturin develop' requires Rust cross-canadian in the SDK" | ||
63 | ) | ||
64 | |||
65 | def test_maturin_develop(self): | ||
66 | """ | ||
67 | This test case requires: | ||
68 | (1) that a .venv can been created. | ||
69 | (2) a functional 'rustc' and 'cargo' | ||
70 | """ | ||
71 | self._run("cd %s/guessing-game; python3 -m venv .venv" % self.tc.sdk_dir) | ||
72 | cmd = "cd %s/guessing-game; maturin develop" % self.tc.sdk_dir | ||
73 | output = self._run(cmd) | ||
74 | self.assertRegex(output, r"🔗 Found pyo3 bindings with abi3 support for Python ≥ 3.8") | ||
75 | self.assertRegex(output, r"🐍 Not using a specific python interpreter") | ||
76 | self.assertRegex(output, r"📡 Using build options features from pyproject.toml") | ||
77 | self.assertRegex(output, r"Compiling guessing-game v0.1.0") | ||
78 | self.assertRegex(output, r"📦 Built wheel for abi3 Python ≥ 3.8") | ||
79 | self.assertRegex(output, r"🛠 Installed guessing-game-0.1.0") | ||