On Wed, Feb 5, 2020 at 3:18 PM Randy MacLeod <randy.macl...@windriver.com> wrote:
> On 1/25/20 3:25 AM, Tim Orling wrote: > > This test case is intentionally limited to only tesing one > > python package/recipe at a time, because the use case is to > > determine whether dependencies have been met for a minimal > > image with 'only' the package under test installed. This > > dependency checking must include the packages-split python > > standard library modules that OE/YP creates from the python > > manifest. > > > > TODO: Be smarter about PYTHON_IMPORTS_UNDER_TEST, as this > > should be discoverable from /usr/lib/python2.7/site-packages > > or from the rpm/deb/ipk of the python package itself. > > What we do NOT want to do is use pkgdata or some other > > magical Python script that will add dependencies to the > > test image. We need as pristine and minimalist a test > > environment as we can get. > > > > TODO: Use a minimal master test image and install the package under > > test from a package feed using a package manager in the master > > test image. This would allow for much shorter developement > > cycles. > > > > TODO: Parse the ImportError and give hints about what dependencies > > are missing. > > This looks useful. Do you have the python3 version done but not sent > or should Trevor see if he can get that to work? > > > > > Example configuration in local.conf: > > > > IMAGE_CLASSES += " testimage" > > DISTRO_FEAURES_append = " ptest" > > EXTRA_IMAGE_FEATURES = "debug-tweaks" > > TESTIMAGE_AUTO = "1" > > TEST_SUITES = " ping ssh python2 ptest python2_module" > > TEST_QEMUPARAMS += "-smp 4 -m 8192" > > TEST_RUNQEMUPARAMS += "kvm gl" > > IMAGE_ROOTFS_SIZE ?= "8192" > > IMAGE_ROOTFS_EXTRA_SPACE_append = > "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 4096", "", d)}" > > IMAGE_INSTALL_append = " ptest-runner dropbear procps coreutils iproute2 > sysstat" > Is this really a minimal set of dependencies and if so, why do you need: > procps coreutils iproute2 sysstat > ? > > Those are required to make the QEMU runner dump any missing things, like TUN/TAP. So no, not required. The host_dump stuff isn't really all that helpful anyway. If you can run "testimage" with KVM, TUN/TAP and virgl/gl then you have all the speed ups that I was trying to make sure were working on the platform running these tests (with gitlab ci runner) The fact that the docker-executor in gitlab does not allow the --add-groups option to the docker command line gets in the way anyway... so you would have to run the container privileged and I'm not going to do that ;) The user in the docker container does not have permissions on /dev/kvm, etc. But that has nothing to do with this code :) > I should probably try it before replying but > it's already been a long day! > > ../Randy > > > PYTHON_PACKAGE_UNDER_TEST = "python-pymongo" > > IMAGE_INSTALL_append = " ${PYTHON_PACKAGE_UNDER_TEST}" > > PYTHON_IMPORTS_UNDER_TEST = "bson gridfs pymongo" > > > > Signed-off-by: Tim Orling <ticot...@gmail.com> > > --- > > lib/oeqa/runtime/cases/python2_module.py | 97 ++++++++++++++++++++++++ > > 1 file changed, 97 insertions(+) > > create mode 100644 lib/oeqa/runtime/cases/python2_module.py > > > > diff --git a/lib/oeqa/runtime/cases/python2_module.py > b/lib/oeqa/runtime/cases/python2_module.py > > new file mode 100644 > > index 00000000..59ae00fb > > --- /dev/null > > +++ b/lib/oeqa/runtime/cases/python2_module.py > > @@ -0,0 +1,97 @@ > > +# > > +# SPDX-License-Identifier: MIT > > +# > > + > > +import os > > + > > +from oeqa.runtime.case import OERuntimeTestCase > > +from oeqa.core.decorator.depends import OETestDepends > > +from oeqa.core.decorator.data import OETestDataDepends > > +from oeqa.runtime.decorator.package import OEHasPackage > > + > > + > > +class PythonModuleTest(OERuntimeTestCase): > > + """This test case is intentionally limited to only tesing one > > + python package/recipe at a time, because the use case is to > > + determine whether dependencies have been met for a minimal > > + image with 'only' the package under test installed. This > > + dependency checking must include the packages-split python > > + standard library modules that OE/YP creates from the python > > + manifest. > > + > > + TODO: Be smarter about PYTHON_IMPORTS_UNDER_TEST, as this > > + should be discoverable from > /usr/lib/python2.7/site-packages > > + or from the rpm/deb/ipk of the python package itself. > > + What we do NOT want to do is use pkgdata or some other > > + magical Python script that will add dependencies to the > > + test image. We need as pristine and minimalist a test > > + environment as we can get. > > + > > + TODO: Use a minimal master test image and install the package > under > > + test from a package feed using a package manager in the > master > > + test image. This would allow for much shorter developement > > + cycles. > > + > > + TODO: Parse the ImportError and give hints about what > dependencies > > + are missing. > > + > > + > > + Example configuration in local.conf: > > + > > + IMAGE_CLASSES += " testimage" > > + DISTRO_FEAURES_append = " ptest" > > + EXTRA_IMAGE_FEATURES = "debug-tweaks" > > + TESTIMAGE_AUTO = "1" > > + TEST_SUITES = " ping ssh python2 ptest python2_module" > > + TEST_QEMUPARAMS += "-smp 4 -m 8192" > > + TEST_RUNQEMUPARAMS += "kvm gl" > > + IMAGE_ROOTFS_SIZE ?= "8192" > > + IMAGE_ROOTFS_EXTRA_SPACE_append = > "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 4096", "", d)}" > > + IMAGE_INSTALL_append = " ptest-runner dropbear procps coreutils > iproute2 sysstat" > > + PYTHON_PACKAGE_UNDER_TEST = "python-engineio" > > + IMAGE_INSTALL_append = " ${PYTHON_PACKAGE_UNDER_TEST}" > > + PYTHON_IMPORTS_UNDER_TEST = "engineio" > > + """ > > + > > + package = "" > > + imports = [] > > + > > + @classmethod > > + def setUp(cls): > > + if 'PYTHON_PACKAGE_UNDER_TEST' in cls.tc.td: > > + cls.package = cls.tc.td.get('PYTHON_PACKAGE_UNDER_TEST') > > + cls.logger.debug('Running import test on "%s" recipe' % > cls.package) > > + else: > > + cls.logger.error('No recipe to test found in > configuration.\n' > > + 'Please set in PYTHON_PACKAGE_UNDER_TEST') > > + if 'PYTHON_IMPORTS_UNDER_TEST' in cls.tc.td: > > + cls.imports = > cls.tc.td.get('PYTHON_IMPORTS_UNDER_TEST').split() > > + if isinstance(cls.imports, list) and len(cls.imports) > 0: > > + cls.logger.info('Importing from %s' % cls.imports) > > + else: > > + cls.logger.error("PYTHON_IMPORTS_UNDER_TEST should be a > space delimited list") > > + cls.logger.error("typeof(PYTHON_IMPORTS_UNDER_TEST) is > %s" % type(cls.imports)) > > + else: > > + cls.logger.error("No modules to import found in > configuration.\n" > > + "Please set in variable > PYTHON_IMPORTS_UNDER_TEST") > > + > > + > > +class PythonModuleImportTest(PythonModuleTest): > > + @OETestDepends(['ssh.SSHTest.test_ssh']) > > + @OETestDepends(['python2.PythonTest.test_python']) > > + @OETestDataDepends(['PYTHON_PACKAGE_UNDER_TEST']) > > + @OETestDataDepends(['PYTHON_IMPORTS_UNDER_TEST']) > > + def test_python_module(self): > > + # We can't use the OEHasPackage decorator, because 'package' > isn't defined > > + # until the class has already been instantiated > > + msg = 'Checking if "%s" is installed' % self.package > > + self.logger.debug(msg) > > + if not self.package in self.tc.image_packages: > > + msg = 'Test requires "%s" to be installed' % self.package > > + self.skipTest(msg) > > + > > + for python_import in self.imports: > > + cmd = 'python -c "import %s"' % python_import > > + status, output = self.target.run(cmd) > > + msg = 'Exit status was not 0. Output: %s' % output > > + self.assertEqual(status, 0, msg=msg) > > > > > -- > # Randy MacLeod > # Wind River Linux > -- > _______________________________________________ > Openembedded-devel mailing list > Openembedded-devel@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-devel > -- _______________________________________________ Openembedded-devel mailing list Openembedded-devel@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-devel