* [PATCH] oeqa/runtime/dnf: streamline test case
@ 2022-09-23 15:48 Ross Burton
2022-09-25 21:32 ` [OE-core] " Alexandre Belloni
0 siblings, 1 reply; 2+ messages in thread
From: Ross Burton @ 2022-09-23 15:48 UTC (permalink / raw)
To: openembedded-core; +Cc: nd
The DNF test case exercises a lot of functionality that we don't really
care about in the runtime QA: we mainly care that DNF is capable of
connecting to a remote repository and installing a package.
Specifically, we don't need to exercise so many different ways of
installing or the installroot functionality: if an image has been built
then it's clearly functional.
Also, change the package that we install/reinstall to netbase and
friends from run-postinsts, as run-postinsts has non-trivial
side-effects such as causing systemd to reload, which might be causing
issues for other tests being ran.
[ YOCTO #14787 ], hopefully
Signed-off-by: Ross Burton <ross.burton@arm.com>
---
meta/classes-recipe/testimage.bbclass | 6 +-
meta/lib/oeqa/runtime/cases/dnf.py | 182 +++++---------------------
2 files changed, 34 insertions(+), 154 deletions(-)
diff --git a/meta/classes-recipe/testimage.bbclass b/meta/classes-recipe/testimage.bbclass
index 819c7d2bf4c..d53f1a3d6f1 100644
--- a/meta/classes-recipe/testimage.bbclass
+++ b/meta/classes-recipe/testimage.bbclass
@@ -468,10 +468,8 @@ def create_rpm_index(d):
package_list = glob.glob(idx_path + "*/*.rpm")
for pkg in package_list:
- if os.path.basename(pkg).startswith(("curl-ptest")):
- bb.utils.remove(pkg)
-
- if not os.path.basename(pkg).startswith(("rpm", "run-postinsts", "busybox", "bash", "update-alternatives", "libc6", "curl", "musl")):
+ basename = os.path.basename(pkg)
+ if basename.startswith("curl-ptest") or not basename.startswith("curl"):
bb.utils.remove(pkg)
bb.utils.unlockfile(lf)
diff --git a/meta/lib/oeqa/runtime/cases/dnf.py b/meta/lib/oeqa/runtime/cases/dnf.py
index e0b91090b20..ef8bebfec0e 100644
--- a/meta/lib/oeqa/runtime/cases/dnf.py
+++ b/meta/lib/oeqa/runtime/cases/dnf.py
@@ -5,53 +5,14 @@
#
import os
-import re
-import subprocess
from oeqa.utils.httpserver import HTTPService
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
-from oeqa.core.decorator.data import skipIfNotDataVar, skipIfNotFeature, skipIfInDataVar, skipIfNotInDataVar
+from oeqa.core.decorator.data import skipIfNotDataVar, skipIfNotFeature
from oeqa.runtime.decorator.package import OEHasPackage
class DnfTest(OERuntimeTestCase):
-
- def dnf(self, command, expected = 0):
- command = 'dnf %s' % command
- status, output = self.target.run(command, 1500)
- message = os.linesep.join([command, output])
- self.assertEqual(status, expected, message)
- return output
-
-class DnfBasicTest(DnfTest):
-
- @skipIfNotFeature('package-management',
- 'Test requires package-management to be in IMAGE_FEATURES')
- @skipIfNotDataVar('IMAGE_PKGTYPE', 'rpm',
- 'RPM is not the primary package manager')
- @OEHasPackage(['dnf'])
- @OETestDepends(['ssh.SSHTest.test_ssh'])
- def test_dnf_help(self):
- self.dnf('--help')
-
- @OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
- def test_dnf_version(self):
- self.dnf('--version')
-
- @OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
- def test_dnf_info(self):
- self.dnf('info dnf')
-
- @OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
- def test_dnf_search(self):
- self.dnf('search dnf')
-
- @OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
- def test_dnf_history(self):
- self.dnf('history')
-
-class DnfRepoTest(DnfTest):
-
@classmethod
def setUpClass(cls):
cls.repo_server = HTTPService(os.path.join(cls.tc.td['WORKDIR'], 'oe-testimage-repo'),
@@ -63,6 +24,13 @@ class DnfRepoTest(DnfTest):
def tearDownClass(cls):
cls.repo_server.stop()
+ def dnf(self, command, expected = 0):
+ command = 'dnf %s' % command
+ status, output = self.target.run(command, 1500)
+ message = os.linesep.join([command, output])
+ self.assertEqual(status, expected, message)
+ return output
+
def dnf_with_repo(self, command):
pkgarchs = os.listdir(os.path.join(self.tc.td['WORKDIR'], 'oe-testimage-repo'))
deploy_url = 'http://%s:%s/' %(self.target.server_ip, self.repo_server.port)
@@ -71,123 +39,37 @@ class DnfRepoTest(DnfTest):
output = self.dnf(" ".join(cmdlinerepoopts) + " --nogpgcheck " + command)
return output
- @OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
+ @skipIfNotFeature('package-management',
+ 'Test requires package-management to be in IMAGE_FEATURES')
+ @skipIfNotDataVar('IMAGE_PKGTYPE', 'rpm',
+ 'RPM is not the primary package manager')
+ @OEHasPackage(['dnf'])
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ def test_dnf_help(self):
+ self.dnf('--help')
+
+ @OETestDepends(['dnf.DnfTest.test_dnf_help'])
def test_dnf_makecache(self):
self.dnf_with_repo('makecache')
-
-# Does not work when repo is specified on the command line
-# @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
-# def test_dnf_repolist(self):
-# self.dnf_with_repo('repolist')
-
- @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
+ @OETestDepends(['dnf.DnfTest.test_dnf_makecache'])
def test_dnf_repoinfo(self):
- self.dnf_with_repo('repoinfo')
+ output = self.dnf_with_repo('repoinfo')
+ self.assertIn("Added oe-testimage-repo-noarch", output)
- @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
+ @OETestDepends(['dnf.DnfTest.test_dnf_makecache'])
def test_dnf_install(self):
- output = self.dnf_with_repo('list run-postinsts-dev')
- if 'Installed Packages' in output:
- self.dnf_with_repo('remove -y run-postinsts-dev')
- self.dnf_with_repo('install -y run-postinsts-dev')
+ self.dnf_with_repo('remove -y curl-dev')
+ self.dnf_with_repo('install -y curl-dev')
- @OETestDepends(['dnf.DnfRepoTest.test_dnf_install'])
- def test_dnf_install_dependency(self):
- self.dnf_with_repo('remove -y run-postinsts')
- self.dnf_with_repo('install -y run-postinsts-dev')
-
- @OETestDepends(['dnf.DnfRepoTest.test_dnf_install_dependency'])
- def test_dnf_install_from_disk(self):
- self.dnf_with_repo('remove -y run-postinsts-dev')
- self.dnf_with_repo('install -y --downloadonly run-postinsts-dev')
- status, output = self.target.run('find /var/cache/dnf -name run-postinsts-dev*rpm', 1500)
- self.assertEqual(status, 0, output)
- self.dnf_with_repo('install -y %s' % output)
-
- @OETestDepends(['dnf.DnfRepoTest.test_dnf_install_from_disk'])
- def test_dnf_install_from_http(self):
- output = subprocess.check_output('%s %s -name run-postinsts-dev*' % (bb.utils.which(os.getenv('PATH'), "find"),
- os.path.join(self.tc.td['WORKDIR'], 'oe-testimage-repo')), shell=True).decode("utf-8")
- rpm_path = output.split("/")[-2] + "/" + output.split("/")[-1]
- url = 'http://%s:%s/%s' %(self.target.server_ip, self.repo_server.port, rpm_path)
- self.dnf_with_repo('remove -y run-postinsts-dev')
- self.dnf_with_repo('install -y %s' % url)
-
- @OETestDepends(['dnf.DnfRepoTest.test_dnf_install'])
+ @OETestDepends(['dnf.DnfTest.test_dnf_makecache'])
def test_dnf_reinstall(self):
- self.dnf_with_repo('reinstall -y run-postinsts-dev')
-
- @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
- @skipIfInDataVar('DISTRO_FEATURES', 'usrmerge', 'Test run when not enable usrmerge')
- @OEHasPackage('busybox')
- def test_dnf_installroot(self):
- rootpath = '/home/root/chroot/test'
- #Copy necessary files to avoid errors with not yet installed tools on
- #installroot directory.
- self.target.run('mkdir -p %s/etc' % rootpath, 1500)
- self.target.run('mkdir -p %s/bin %s/sbin %s/usr/bin %s/usr/sbin' % (rootpath, rootpath, rootpath, rootpath), 1500)
- self.target.run('mkdir -p %s/dev' % rootpath, 1500)
- #Handle different architectures lib dirs
- self.target.run('mkdir -p %s/lib' % rootpath, 1500)
- self.target.run('mkdir -p %s/libx32' % rootpath, 1500)
- self.target.run('mkdir -p %s/lib64' % rootpath, 1500)
- self.target.run('cp /lib/libtinfo.so.5 %s/lib' % rootpath, 1500)
- self.target.run('cp /libx32/libtinfo.so.5 %s/libx32' % rootpath, 1500)
- self.target.run('cp /lib64/libtinfo.so.5 %s/lib64' % rootpath, 1500)
- self.target.run('cp -r /etc/rpm %s/etc' % rootpath, 1500)
- self.target.run('cp -r /etc/dnf %s/etc' % rootpath, 1500)
- self.target.run('cp /bin/sh %s/bin' % rootpath, 1500)
- self.target.run('mount -o bind /dev %s/dev/' % rootpath, 1500)
- self.dnf_with_repo('install --installroot=%s -v -y --rpmverbosity=debug busybox run-postinsts' % rootpath)
- status, output = self.target.run('test -e %s/var/cache/dnf' % rootpath, 1500)
- self.assertEqual(0, status, output)
- status, output = self.target.run('test -e %s/bin/busybox' % rootpath, 1500)
- self.assertEqual(0, status, output)
-
- @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
- @skipIfNotInDataVar('DISTRO_FEATURES', 'usrmerge', 'Test run when enable usrmerge')
- @OEHasPackage('busybox')
- def test_dnf_installroot_usrmerge(self):
- rootpath = '/home/root/chroot/test'
- #Copy necessary files to avoid errors with not yet installed tools on
- #installroot directory.
- self.target.run('mkdir -p %s/etc' % rootpath, 1500)
- self.target.run('mkdir -p %s/usr/bin %s/usr/sbin' % (rootpath, rootpath), 1500)
- self.target.run('ln -sf -r %s/usr/bin %s/bin' % (rootpath, rootpath), 1500)
- self.target.run('ln -sf -r %s/usr/sbin %s/sbin' % (rootpath, rootpath), 1500)
- self.target.run('mkdir -p %s/dev' % rootpath, 1500)
- #Handle different architectures lib dirs
- self.target.run('mkdir -p %s/usr/lib' % rootpath, 1500)
- self.target.run('mkdir -p %s/usr/libx32' % rootpath, 1500)
- self.target.run('mkdir -p %s/usr/lib64' % rootpath, 1500)
- self.target.run('cp /lib/libtinfo.so.5 %s/usr/lib' % rootpath, 1500)
- self.target.run('cp /libx32/libtinfo.so.5 %s/usr/libx32' % rootpath, 1500)
- self.target.run('cp /lib64/libtinfo.so.5 %s/usr/lib64' % rootpath, 1500)
- self.target.run('ln -sf -r %s/lib %s/usr/lib' % (rootpath,rootpath), 1500)
- self.target.run('ln -sf -r %s/libx32 %s/usr/libx32' % (rootpath,rootpath), 1500)
- self.target.run('ln -sf -r %s/lib64 %s/usr/lib64' % (rootpath,rootpath), 1500)
- self.target.run('cp -r /etc/rpm %s/etc' % rootpath, 1500)
- self.target.run('cp -r /etc/dnf %s/etc' % rootpath, 1500)
- self.target.run('cp /bin/sh %s/bin' % rootpath, 1500)
- self.target.run('mount -o bind /dev %s/dev/' % rootpath, 1500)
- self.dnf_with_repo('install --installroot=%s -v -y --rpmverbosity=debug busybox run-postinsts' % rootpath)
- status, output = self.target.run('test -e %s/var/cache/dnf' % rootpath, 1500)
- self.assertEqual(0, status, output)
- status, output = self.target.run('test -e %s/bin/busybox' % rootpath, 1500)
- self.assertEqual(0, status, output)
+ self.dnf_with_repo('reinstall -y curl')
- @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
+ @OETestDepends(['dnf.DnfTest.test_dnf_makecache'])
def test_dnf_exclude(self):
- excludepkg = 'curl-dev'
- self.dnf_with_repo('install -y curl*')
- self.dnf('list %s' % excludepkg, 0)
- #Avoid remove dependencies to skip some errors on different archs and images
- self.dnf_with_repo('remove --setopt=clean_requirements_on_remove=0 -y curl*')
- #check curl-dev is not installed adter removing all curl occurrences
- status, output = self.target.run('dnf list --installed | grep %s'% excludepkg, 1500)
- self.assertEqual(1, status, "%s was not removed, is listed as installed"%excludepkg)
- self.dnf_with_repo('install -y --exclude=%s --exclude=curl-staticdev curl*' % excludepkg)
- #check curl-dev is not installed after being excluded
- status, output = self.target.run('dnf list --installed | grep %s'% excludepkg , 1500)
- self.assertEqual(1, status, "%s was not excluded, is listed as installed"%excludepkg)
+ self.dnf_with_repo('remove -y curl-dev')
+ self.dnf_with_repo('install -y --exclude=curl-dev curl*')
+ output = self.dnf('list --installed curl*')
+ self.assertIn("curl.", output)
+ self.assertNotIn("curl-dev.", output)
--
2.34.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [OE-core] [PATCH] oeqa/runtime/dnf: streamline test case
2022-09-23 15:48 [PATCH] oeqa/runtime/dnf: streamline test case Ross Burton
@ 2022-09-25 21:32 ` Alexandre Belloni
0 siblings, 0 replies; 2+ messages in thread
From: Alexandre Belloni @ 2022-09-25 21:32 UTC (permalink / raw)
To: Ross Burton; +Cc: openembedded-core, nd
Hi,
On 23/09/2022 16:48:10+0100, Ross Burton wrote:
> The DNF test case exercises a lot of functionality that we don't really
> care about in the runtime QA: we mainly care that DNF is capable of
> connecting to a remote repository and installing a package.
> Specifically, we don't need to exercise so many different ways of
> installing or the installroot functionality: if an image has been built
> then it's clearly functional.
>
> Also, change the package that we install/reinstall to netbase and
> friends from run-postinsts, as run-postinsts has non-trivial
> side-effects such as causing systemd to reload, which might be causing
> issues for other tests being ran.
>
> [ YOCTO #14787 ], hopefully
>
This is the cause of https://autobuilder.yoctoproject.org/typhoon/#/builders/79/builds/4168/steps/14/logs/stdio
> Signed-off-by: Ross Burton <ross.burton@arm.com>
> ---
> meta/classes-recipe/testimage.bbclass | 6 +-
> meta/lib/oeqa/runtime/cases/dnf.py | 182 +++++---------------------
> 2 files changed, 34 insertions(+), 154 deletions(-)
>
> diff --git a/meta/classes-recipe/testimage.bbclass b/meta/classes-recipe/testimage.bbclass
> index 819c7d2bf4c..d53f1a3d6f1 100644
> --- a/meta/classes-recipe/testimage.bbclass
> +++ b/meta/classes-recipe/testimage.bbclass
> @@ -468,10 +468,8 @@ def create_rpm_index(d):
> package_list = glob.glob(idx_path + "*/*.rpm")
>
> for pkg in package_list:
> - if os.path.basename(pkg).startswith(("curl-ptest")):
> - bb.utils.remove(pkg)
> -
> - if not os.path.basename(pkg).startswith(("rpm", "run-postinsts", "busybox", "bash", "update-alternatives", "libc6", "curl", "musl")):
> + basename = os.path.basename(pkg)
> + if basename.startswith("curl-ptest") or not basename.startswith("curl"):
> bb.utils.remove(pkg)
>
> bb.utils.unlockfile(lf)
> diff --git a/meta/lib/oeqa/runtime/cases/dnf.py b/meta/lib/oeqa/runtime/cases/dnf.py
> index e0b91090b20..ef8bebfec0e 100644
> --- a/meta/lib/oeqa/runtime/cases/dnf.py
> +++ b/meta/lib/oeqa/runtime/cases/dnf.py
> @@ -5,53 +5,14 @@
> #
>
> import os
> -import re
> -import subprocess
> from oeqa.utils.httpserver import HTTPService
>
> from oeqa.runtime.case import OERuntimeTestCase
> from oeqa.core.decorator.depends import OETestDepends
> -from oeqa.core.decorator.data import skipIfNotDataVar, skipIfNotFeature, skipIfInDataVar, skipIfNotInDataVar
> +from oeqa.core.decorator.data import skipIfNotDataVar, skipIfNotFeature
> from oeqa.runtime.decorator.package import OEHasPackage
>
> class DnfTest(OERuntimeTestCase):
> -
> - def dnf(self, command, expected = 0):
> - command = 'dnf %s' % command
> - status, output = self.target.run(command, 1500)
> - message = os.linesep.join([command, output])
> - self.assertEqual(status, expected, message)
> - return output
> -
> -class DnfBasicTest(DnfTest):
> -
> - @skipIfNotFeature('package-management',
> - 'Test requires package-management to be in IMAGE_FEATURES')
> - @skipIfNotDataVar('IMAGE_PKGTYPE', 'rpm',
> - 'RPM is not the primary package manager')
> - @OEHasPackage(['dnf'])
> - @OETestDepends(['ssh.SSHTest.test_ssh'])
> - def test_dnf_help(self):
> - self.dnf('--help')
> -
> - @OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
> - def test_dnf_version(self):
> - self.dnf('--version')
> -
> - @OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
> - def test_dnf_info(self):
> - self.dnf('info dnf')
> -
> - @OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
> - def test_dnf_search(self):
> - self.dnf('search dnf')
> -
> - @OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
> - def test_dnf_history(self):
> - self.dnf('history')
> -
> -class DnfRepoTest(DnfTest):
> -
> @classmethod
> def setUpClass(cls):
> cls.repo_server = HTTPService(os.path.join(cls.tc.td['WORKDIR'], 'oe-testimage-repo'),
> @@ -63,6 +24,13 @@ class DnfRepoTest(DnfTest):
> def tearDownClass(cls):
> cls.repo_server.stop()
>
> + def dnf(self, command, expected = 0):
> + command = 'dnf %s' % command
> + status, output = self.target.run(command, 1500)
> + message = os.linesep.join([command, output])
> + self.assertEqual(status, expected, message)
> + return output
> +
> def dnf_with_repo(self, command):
> pkgarchs = os.listdir(os.path.join(self.tc.td['WORKDIR'], 'oe-testimage-repo'))
> deploy_url = 'http://%s:%s/' %(self.target.server_ip, self.repo_server.port)
> @@ -71,123 +39,37 @@ class DnfRepoTest(DnfTest):
> output = self.dnf(" ".join(cmdlinerepoopts) + " --nogpgcheck " + command)
> return output
>
> - @OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
> + @skipIfNotFeature('package-management',
> + 'Test requires package-management to be in IMAGE_FEATURES')
> + @skipIfNotDataVar('IMAGE_PKGTYPE', 'rpm',
> + 'RPM is not the primary package manager')
> + @OEHasPackage(['dnf'])
> + @OETestDepends(['ssh.SSHTest.test_ssh'])
> + def test_dnf_help(self):
> + self.dnf('--help')
> +
> + @OETestDepends(['dnf.DnfTest.test_dnf_help'])
> def test_dnf_makecache(self):
> self.dnf_with_repo('makecache')
>
> -
> -# Does not work when repo is specified on the command line
> -# @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
> -# def test_dnf_repolist(self):
> -# self.dnf_with_repo('repolist')
> -
> - @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
> + @OETestDepends(['dnf.DnfTest.test_dnf_makecache'])
> def test_dnf_repoinfo(self):
> - self.dnf_with_repo('repoinfo')
> + output = self.dnf_with_repo('repoinfo')
> + self.assertIn("Added oe-testimage-repo-noarch", output)
>
> - @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
> + @OETestDepends(['dnf.DnfTest.test_dnf_makecache'])
> def test_dnf_install(self):
> - output = self.dnf_with_repo('list run-postinsts-dev')
> - if 'Installed Packages' in output:
> - self.dnf_with_repo('remove -y run-postinsts-dev')
> - self.dnf_with_repo('install -y run-postinsts-dev')
> + self.dnf_with_repo('remove -y curl-dev')
> + self.dnf_with_repo('install -y curl-dev')
>
> - @OETestDepends(['dnf.DnfRepoTest.test_dnf_install'])
> - def test_dnf_install_dependency(self):
> - self.dnf_with_repo('remove -y run-postinsts')
> - self.dnf_with_repo('install -y run-postinsts-dev')
> -
> - @OETestDepends(['dnf.DnfRepoTest.test_dnf_install_dependency'])
> - def test_dnf_install_from_disk(self):
> - self.dnf_with_repo('remove -y run-postinsts-dev')
> - self.dnf_with_repo('install -y --downloadonly run-postinsts-dev')
> - status, output = self.target.run('find /var/cache/dnf -name run-postinsts-dev*rpm', 1500)
> - self.assertEqual(status, 0, output)
> - self.dnf_with_repo('install -y %s' % output)
> -
> - @OETestDepends(['dnf.DnfRepoTest.test_dnf_install_from_disk'])
> - def test_dnf_install_from_http(self):
> - output = subprocess.check_output('%s %s -name run-postinsts-dev*' % (bb.utils.which(os.getenv('PATH'), "find"),
> - os.path.join(self.tc.td['WORKDIR'], 'oe-testimage-repo')), shell=True).decode("utf-8")
> - rpm_path = output.split("/")[-2] + "/" + output.split("/")[-1]
> - url = 'http://%s:%s/%s' %(self.target.server_ip, self.repo_server.port, rpm_path)
> - self.dnf_with_repo('remove -y run-postinsts-dev')
> - self.dnf_with_repo('install -y %s' % url)
> -
> - @OETestDepends(['dnf.DnfRepoTest.test_dnf_install'])
> + @OETestDepends(['dnf.DnfTest.test_dnf_makecache'])
> def test_dnf_reinstall(self):
> - self.dnf_with_repo('reinstall -y run-postinsts-dev')
> -
> - @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
> - @skipIfInDataVar('DISTRO_FEATURES', 'usrmerge', 'Test run when not enable usrmerge')
> - @OEHasPackage('busybox')
> - def test_dnf_installroot(self):
> - rootpath = '/home/root/chroot/test'
> - #Copy necessary files to avoid errors with not yet installed tools on
> - #installroot directory.
> - self.target.run('mkdir -p %s/etc' % rootpath, 1500)
> - self.target.run('mkdir -p %s/bin %s/sbin %s/usr/bin %s/usr/sbin' % (rootpath, rootpath, rootpath, rootpath), 1500)
> - self.target.run('mkdir -p %s/dev' % rootpath, 1500)
> - #Handle different architectures lib dirs
> - self.target.run('mkdir -p %s/lib' % rootpath, 1500)
> - self.target.run('mkdir -p %s/libx32' % rootpath, 1500)
> - self.target.run('mkdir -p %s/lib64' % rootpath, 1500)
> - self.target.run('cp /lib/libtinfo.so.5 %s/lib' % rootpath, 1500)
> - self.target.run('cp /libx32/libtinfo.so.5 %s/libx32' % rootpath, 1500)
> - self.target.run('cp /lib64/libtinfo.so.5 %s/lib64' % rootpath, 1500)
> - self.target.run('cp -r /etc/rpm %s/etc' % rootpath, 1500)
> - self.target.run('cp -r /etc/dnf %s/etc' % rootpath, 1500)
> - self.target.run('cp /bin/sh %s/bin' % rootpath, 1500)
> - self.target.run('mount -o bind /dev %s/dev/' % rootpath, 1500)
> - self.dnf_with_repo('install --installroot=%s -v -y --rpmverbosity=debug busybox run-postinsts' % rootpath)
> - status, output = self.target.run('test -e %s/var/cache/dnf' % rootpath, 1500)
> - self.assertEqual(0, status, output)
> - status, output = self.target.run('test -e %s/bin/busybox' % rootpath, 1500)
> - self.assertEqual(0, status, output)
> -
> - @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
> - @skipIfNotInDataVar('DISTRO_FEATURES', 'usrmerge', 'Test run when enable usrmerge')
> - @OEHasPackage('busybox')
> - def test_dnf_installroot_usrmerge(self):
> - rootpath = '/home/root/chroot/test'
> - #Copy necessary files to avoid errors with not yet installed tools on
> - #installroot directory.
> - self.target.run('mkdir -p %s/etc' % rootpath, 1500)
> - self.target.run('mkdir -p %s/usr/bin %s/usr/sbin' % (rootpath, rootpath), 1500)
> - self.target.run('ln -sf -r %s/usr/bin %s/bin' % (rootpath, rootpath), 1500)
> - self.target.run('ln -sf -r %s/usr/sbin %s/sbin' % (rootpath, rootpath), 1500)
> - self.target.run('mkdir -p %s/dev' % rootpath, 1500)
> - #Handle different architectures lib dirs
> - self.target.run('mkdir -p %s/usr/lib' % rootpath, 1500)
> - self.target.run('mkdir -p %s/usr/libx32' % rootpath, 1500)
> - self.target.run('mkdir -p %s/usr/lib64' % rootpath, 1500)
> - self.target.run('cp /lib/libtinfo.so.5 %s/usr/lib' % rootpath, 1500)
> - self.target.run('cp /libx32/libtinfo.so.5 %s/usr/libx32' % rootpath, 1500)
> - self.target.run('cp /lib64/libtinfo.so.5 %s/usr/lib64' % rootpath, 1500)
> - self.target.run('ln -sf -r %s/lib %s/usr/lib' % (rootpath,rootpath), 1500)
> - self.target.run('ln -sf -r %s/libx32 %s/usr/libx32' % (rootpath,rootpath), 1500)
> - self.target.run('ln -sf -r %s/lib64 %s/usr/lib64' % (rootpath,rootpath), 1500)
> - self.target.run('cp -r /etc/rpm %s/etc' % rootpath, 1500)
> - self.target.run('cp -r /etc/dnf %s/etc' % rootpath, 1500)
> - self.target.run('cp /bin/sh %s/bin' % rootpath, 1500)
> - self.target.run('mount -o bind /dev %s/dev/' % rootpath, 1500)
> - self.dnf_with_repo('install --installroot=%s -v -y --rpmverbosity=debug busybox run-postinsts' % rootpath)
> - status, output = self.target.run('test -e %s/var/cache/dnf' % rootpath, 1500)
> - self.assertEqual(0, status, output)
> - status, output = self.target.run('test -e %s/bin/busybox' % rootpath, 1500)
> - self.assertEqual(0, status, output)
> + self.dnf_with_repo('reinstall -y curl')
>
> - @OETestDepends(['dnf.DnfRepoTest.test_dnf_makecache'])
> + @OETestDepends(['dnf.DnfTest.test_dnf_makecache'])
> def test_dnf_exclude(self):
> - excludepkg = 'curl-dev'
> - self.dnf_with_repo('install -y curl*')
> - self.dnf('list %s' % excludepkg, 0)
> - #Avoid remove dependencies to skip some errors on different archs and images
> - self.dnf_with_repo('remove --setopt=clean_requirements_on_remove=0 -y curl*')
> - #check curl-dev is not installed adter removing all curl occurrences
> - status, output = self.target.run('dnf list --installed | grep %s'% excludepkg, 1500)
> - self.assertEqual(1, status, "%s was not removed, is listed as installed"%excludepkg)
> - self.dnf_with_repo('install -y --exclude=%s --exclude=curl-staticdev curl*' % excludepkg)
> - #check curl-dev is not installed after being excluded
> - status, output = self.target.run('dnf list --installed | grep %s'% excludepkg , 1500)
> - self.assertEqual(1, status, "%s was not excluded, is listed as installed"%excludepkg)
> + self.dnf_with_repo('remove -y curl-dev')
> + self.dnf_with_repo('install -y --exclude=curl-dev curl*')
> + output = self.dnf('list --installed curl*')
> + self.assertIn("curl.", output)
> + self.assertNotIn("curl-dev.", output)
> --
> 2.34.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#171000): https://lists.openembedded.org/g/openembedded-core/message/171000
> Mute This Topic: https://lists.openembedded.org/mt/93872994/3617179
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-09-25 21:33 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-23 15:48 [PATCH] oeqa/runtime/dnf: streamline test case Ross Burton
2022-09-25 21:32 ` [OE-core] " Alexandre Belloni
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.