ACK: [autotest-client-tests][PATCH 1/1] UBUNTU: SAUCE: Remove zfs-related packages after test
Sean Feole
sean.feole at canonical.com
Wed Apr 20 12:42:46 UTC 2022
Thanks for taking care of this, code looks good pretty solid and I know
you already triaged it.
+1 lgtm
On 4/20/22 08:39, Po-Hsu Lin wrote:
> BugLink:https://bugs.launchpad.net/bugs/1892124
>
> Stop zfs daemon and remove zfs related packages after test to prevent
> manually provisioned system from booting with out-of-tree zfs modules
> and failed with the kernel_tainted test in ubuntu_boot like:
> Kernel taint value is 4097
> Taint bit value: 0 (proprietary module was loaded)
> * Modules with GPL Incompatible Licenses:
> zfs: CDDL
> zunicode: CDDL
> zcommon: CDDL
> znvpair: CDDL
> zavl: CDDL
> icp: CDDL
> Taint bit value: 12 (externally-built ('out-of-tree') module was loaded)
> * Modules not in-tree:
> zfs
> zunicode
> zzstd
> zlua
> zcommon
> znvpair
> zavl
> icp
> spl
>
> This is done by adding a sub-test called post-test-zfs-cleanup and
> catch it in run_once(). Not using cleanup() because it will be
> triggered after each sub test. It's fine for test like
> ubuntu_zfs_stress, but it will be complicated for test with multiple
> sub-tests e.g. ubuntu_zfs_xfs_generic
>
> The downside of this is that if you're trying to run it again on
> the same SUT manully without removing the autotest/client/tmp/
> directory, the setup task won't be triggered as the test version
> didn't change. To workaround this we will need to move the code in
> setup() to initialize() like what we did for ubuntu_sysdig_smoke_test,
> to trigger the package installation, or, remove the .version file in
> autotest/client/tmp/TESTNAME/
>
> Search criteria to locate tests that need this change:
> grep -r zfsutils-linux *
>
> Signed-off-by: Po-Hsu Lin<po-hsu.lin at canonical.com>
> ---
> ubuntu_performance_fio/control | 1 +
> ubuntu_performance_fio/ubuntu_performance_fio.py | 9 +++++++++
> ubuntu_performance_zfs_encryption/control | 1 +
> .../ubuntu_performance_zfs_encryption.py | 10 ++++++++++
> ubuntu_zfs/control | 6 ++++--
> ubuntu_zfs/ubuntu_zfs.py | 9 +++++++++
> ubuntu_zfs_fstest/control | 5 +++--
> ubuntu_zfs_fstest/ubuntu_zfs_fstest.py | 11 ++++++++++-
> ubuntu_zfs_smoke_test/control | 1 +
> ubuntu_zfs_smoke_test/ubuntu_zfs_smoke_test.py | 10 ++++++++++
> ubuntu_zfs_stress/control | 5 ++---
> ubuntu_zfs_stress/ubuntu_zfs_stress.py | 10 ++++++++++
> ubuntu_zfs_xfs_generic/control | 3 ++-
> ubuntu_zfs_xfs_generic/ubuntu_zfs_xfs_generic.py | 12 +++++++++++-
> 14 files changed, 83 insertions(+), 10 deletions(-)
>
> diff --git a/ubuntu_performance_fio/control b/ubuntu_performance_fio/control
> index f43edc6c..557c7b76 100644
> --- a/ubuntu_performance_fio/control
> +++ b/ubuntu_performance_fio/control
> @@ -27,6 +27,7 @@ tests = [
>
> 'rd-75,wr-25,rand,blk-128k,jobs-16',
> 'rd-75,wr-25,rand,blk-8k,jobs-64',
> + 'post-test-zfs-cleanup',
> ]
>
> results = job.run_test_detail('ubuntu_performance_fio', test_name='setup', tag='setup', media='', timeout=60*30)
> diff --git a/ubuntu_performance_fio/ubuntu_performance_fio.py b/ubuntu_performance_fio/ubuntu_performance_fio.py
> index c1affc7f..364f1b74 100644
> --- a/ubuntu_performance_fio/ubuntu_performance_fio.py
> +++ b/ubuntu_performance_fio/ubuntu_performance_fio.py
> @@ -408,6 +408,15 @@ class ubuntu_performance_fio(test.test):
> self.setup()
> self.get_sysinfo()
> return
> + elif test_name == 'post-test-zfs-cleanup':
> + utils.system('systemctl stop zed')
> + utils.system('modprobe -r zfs')
> + # No need to consider ubuntu-zfs package on P/T as they've been blacklisted
> + utils.system('apt-get remove --yes --force-yes zfsutils-linux')
> + # Remove .version for the test, in order to trigger setup() again if we want re-test it
> + cmd = 'rm {}/.version'.format(self.srcdir)
> + utils.system(cmd)
> + return
>
> #
> # Drop cache to get a good idea of how much free memory can be used
> diff --git a/ubuntu_performance_zfs_encryption/control b/ubuntu_performance_zfs_encryption/control
> index aa9eaecb..b0d4bf95 100644
> --- a/ubuntu_performance_zfs_encryption/control
> +++ b/ubuntu_performance_zfs_encryption/control
> @@ -13,6 +13,7 @@ DOC = ""
> tests = [
> 'setup',
> 'performance-test-encryption',
> + 'post-test-zfs-cleanup',
> ]
>
> import os
> diff --git a/ubuntu_performance_zfs_encryption/ubuntu_performance_zfs_encryption.py b/ubuntu_performance_zfs_encryption/ubuntu_performance_zfs_encryption.py
> index ed09eb10..912543f2 100644
> --- a/ubuntu_performance_zfs_encryption/ubuntu_performance_zfs_encryption.py
> +++ b/ubuntu_performance_zfs_encryption/ubuntu_performance_zfs_encryption.py
> @@ -38,6 +38,16 @@ class ubuntu_performance_zfs_encryption(test.test):
> def run_once(self, test_name):
> if test_name == 'setup':
> return
> + elif test_name == 'post-test-zfs-cleanup':
> + utils.system('systemctl stop zed')
> + utils.system('modprobe -r zfs')
> + # No need to consider ubuntu-zfs package on P/T as they've been blacklisted
> + utils.system('apt-get remove --yes --force-yes zfsutils-linux')
> + # Remove .version for the test, in order to trigger setup() again if we want re-test it
> + cmd = 'rm {}/.version'.format(self.srcdir)
> + utils.system(cmd)
> + return
> +
> cmd = '%s/%s %s' % (self.bindir, test_name, self.srcdir)
> self.results = utils.system_output(cmd, retain_output=True)
> print(self.results)
> diff --git a/ubuntu_zfs/control b/ubuntu_zfs/control
> index 32ae4d34..69729c2c 100644
> --- a/ubuntu_zfs/control
> +++ b/ubuntu_zfs/control
> @@ -12,7 +12,7 @@ DOC = ""
>
> # This forces setup() to be run, it is in fact a no-op test
> #
> -results = job.run_test_detail('ubuntu_zfs', test_name='setup', timeout=60*20)
> +results = job.run_test_detail(NAME, test_name='setup', timeout=60*20)
>
> import os
> srcdir = os.path.join(job.bindir, 'tmp', NAME, 'src')
> @@ -22,7 +22,9 @@ for fid in os.listdir(os.path.join(srcdir, 'tests')):
> for line in fin:
> fout.write(line.replace('PATHNAME', os.path.join(srcdir, 'test/zfs-tests')))
>
> - results = job.run_test_detail('ubuntu_zfs', test_name='zfs-tests', tag='zfs-tests.%s' % os.path.split(fid)[-1].split('-', 1)[1], timeout=60*60*3)
> + results = job.run_test_detail(NAME, test_name='zfs-tests', tag='zfs-tests.%s' % os.path.split(fid)[-1].split('-', 1)[1], timeout=60*60*3)
> +
> +job.run_test_detail(NAME, test_name='post-test-zfs-cleanup', tag='post-test-zfs-cleanup', timeout=60*10)
>
>
> # vi:set ts=4 sw=4 expandtab syntax=python:
> diff --git a/ubuntu_zfs/ubuntu_zfs.py b/ubuntu_zfs/ubuntu_zfs.py
> index 5e7bef03..f91bf4e2 100644
> --- a/ubuntu_zfs/ubuntu_zfs.py
> +++ b/ubuntu_zfs/ubuntu_zfs.py
> @@ -77,6 +77,15 @@ class ubuntu_zfs(test.test):
> def run_once(self, test_name):
> if test_name == 'setup':
> return
> + elif test_name == 'post-test-zfs-cleanup':
> + utils.system('systemctl stop zed')
> + utils.system('modprobe -r zfs')
> + # No need to consider ubuntu-zfs package on P/T as they've been blacklisted
> + utils.system('apt-get remove --yes --force-yes zfsutils-linux')
> + # Remove .version for the test, in order to trigger setup() again if we want re-test it
> + cmd = 'rm {}/.version'.format(self.srcdir)
> + utils.system(cmd)
> + return
>
> os.chdir(self.srcdir)
> cmd = 'RUNFILE="-c %s/linux.run" make test' % self.srcdir
> diff --git a/ubuntu_zfs_fstest/control b/ubuntu_zfs_fstest/control
> index e897830b..bfb27d81 100644
> --- a/ubuntu_zfs_fstest/control
> +++ b/ubuntu_zfs_fstest/control
> @@ -10,9 +10,10 @@ TEST_CATEGORY = 'Functional'
> TEST_TYPE = "client"
> DOC = ""
>
> -results = job.run_test_detail('ubuntu_zfs_fstest', test_name='setup', tag='setup', timeout=30*60)
> +results = job.run_test_detail(NAME, test_name='setup', tag='setup', timeout=30*60)
> print("Invoking zfs fstest functional tests..")
> -results = job.run_test_detail('ubuntu_zfs_fstest', test_name='zfs-tests', tag='zfs-tests', timeout=10*60)
> +results = job.run_test_detail(NAME, test_name='zfs-tests', tag='zfs-tests', timeout=10*60)
> +job.run_test_detail(NAME, test_name='post-test-zfs-cleanup', tag='post-test-zfs-cleanup', timeout=10*60)
>
> print("Done!") diff --git a/ubuntu_zfs_fstest/ubuntu_zfs_fstest.py
> b/ubuntu_zfs_fstest/ubuntu_zfs_fstest.py index 434272fd..a557ed5b
> 100644 --- a/ubuntu_zfs_fstest/ubuntu_zfs_fstest.py +++
> b/ubuntu_zfs_fstest/ubuntu_zfs_fstest.py @@ -64,7 +64,16 @@ class
> ubuntu_zfs_fstest(test.test): # invoked, then we can run run_once per
> test # if test_name == 'setup': - return + return + elif test_name ==
> 'post-test-zfs-cleanup': + utils.system('systemctl stop zed') +
> utils.system('modprobe -r zfs') + # No need to consider ubuntu-zfs
> package on P/T as they've been blacklisted + utils.system('apt-get
> remove --yes --force-yes zfsutils-linux') + # Remove .version for the
> test, in order to trigger setup() again if we want re-test it + cmd =
> 'rm {}/.version'.format(self.srcdir) + utils.system(cmd) + return
> os.chdir(self.srcdir) tmp_pool = os.path.join(self.srcdir, 'pool.img')
> diff --git a/ubuntu_zfs_smoke_test/control
> b/ubuntu_zfs_smoke_test/control index 5fabc334..30a9d158 100644 ---
> a/ubuntu_zfs_smoke_test/control +++ b/ubuntu_zfs_smoke_test/control @@
> -26,6 +26,7 @@ tests = [ 'kernel-smoke-test-send-receive',
> 'kernel-smoke-test-scrub', 'kernel-smoke-test-encrypt', +
> 'post-test-zfs-cleanup', ] import os diff --git
> a/ubuntu_zfs_smoke_test/ubuntu_zfs_smoke_test.py
> b/ubuntu_zfs_smoke_test/ubuntu_zfs_smoke_test.py index
> 73d15cdc..6ad6b4c7 100644 ---
> a/ubuntu_zfs_smoke_test/ubuntu_zfs_smoke_test.py +++
> b/ubuntu_zfs_smoke_test/ubuntu_zfs_smoke_test.py @@ -38,6 +38,16 @@
> class ubuntu_zfs_smoke_test(test.test): def run_once(self, test_name):
> if test_name == 'setup': return + elif test_name ==
> 'post-test-zfs-cleanup': + utils.system('systemctl stop zed') +
> utils.system('modprobe -r zfs') + # No need to consider ubuntu-zfs
> package on P/T as they've been blacklisted + utils.system('apt-get
> remove --yes --force-yes zfsutils-linux') + # Remove .version for the
> test, in order to trigger setup() again if we want re-test it + cmd =
> 'rm {}/.version'.format(self.srcdir) + utils.system(cmd) + return +
> cmd = '%s/%s %s' % (self.bindir, test_name, self.srcdir) self.results
> = utils.system_output(cmd, retain_output=True) diff --git
> a/ubuntu_zfs_stress/control b/ubuntu_zfs_stress/control index
> 567d842f..2bc02210 100644 --- a/ubuntu_zfs_stress/control +++
> b/ubuntu_zfs_stress/control @@ -12,11 +12,10 @@ TEST_CATEGORY =
> 'Functional' TEST_TYPE = "client"
> DOC = ""
>
> -name = 'ubuntu_zfs_stress'
> -
> if platform.machine() in ['riscv64', 'riscv']:
> print("Test skipped as it takes too long to run on this platform\n")
> else:
> - results = job.run_test_detail('ubuntu_zfs_stress', test_name='zfs-stress', tag='zfs-stress', timeout=60*60*5) # 5hr. timeout
> + results = job.run_test_detail(NAME, test_name='zfs-stress', tag='zfs-stress', timeout=60*60*5) # 5hr. timeout
> + job.run_test_detail(NAME, test_name='post-test-zfs-cleanup', tag='post-test-zfs-cleanup', timeout=60*10)
>
> # vi:set ts=4 sw=4 expandtab syntax=python:
> diff --git a/ubuntu_zfs_stress/ubuntu_zfs_stress.py b/ubuntu_zfs_stress/ubuntu_zfs_stress.py
> index db49ee65..e2e68799 100644
> --- a/ubuntu_zfs_stress/ubuntu_zfs_stress.py
> +++ b/ubuntu_zfs_stress/ubuntu_zfs_stress.py
> @@ -63,6 +63,16 @@ class ubuntu_zfs_stress(test.test):
> utils.system('modprobe zfs')
>
> def run_once(self, test_name):
> + if test_name == 'post-test-zfs-cleanup':
> + utils.system('systemctl stop zed')
> + utils.system('modprobe -r zfs')
> + # No need to consider ubuntu-zfs package on P/T as they've been blacklisted
> + utils.system('apt-get remove --yes --force-yes zfsutils-linux')
> + # Remove .version for the test, in order to trigger setup() again if we want re-test it
> + cmd = 'rm {}/.version'.format(self.srcdir)
> + utils.system(cmd)
> + return
> +
> stress_ng = os.path.join(self.srcdir, 'stress-ng', 'stress-ng')
> #
> # temp logfile
> diff --git a/ubuntu_zfs_xfs_generic/control b/ubuntu_zfs_xfs_generic/control
> index 03d1babf..591d6b8d 100644
> --- a/ubuntu_zfs_xfs_generic/control
> +++ b/ubuntu_zfs_xfs_generic/control
> @@ -32,7 +32,8 @@ else:
> '184', '169', '192', '215', '221', '236',
> '237', '241', '245', '246', '247', '248', '249',
> '257', '258', '285', '294', '306', '307',
> - '308', '309', '310', '313'
> + '308', '309', '310', '313',
> + 'post-test-zfs-cleanup'
> ]
>
> #
> diff --git a/ubuntu_zfs_xfs_generic/ubuntu_zfs_xfs_generic.py b/ubuntu_zfs_xfs_generic/ubuntu_zfs_xfs_generic.py
> index f5ede8b8..11bae635 100644
> --- a/ubuntu_zfs_xfs_generic/ubuntu_zfs_xfs_generic.py
> +++ b/ubuntu_zfs_xfs_generic/ubuntu_zfs_xfs_generic.py
> @@ -131,7 +131,17 @@ class ubuntu_zfs_xfs_generic(test.test):
> # invoked, then we can run run_once per test
> #
> if test_name == 'setup':
> - return
> + return
> + elif test_name == 'post-test-zfs-cleanup':
> + utils.system('systemctl stop zed')
> + utils.system('modprobe -r zfs')
> + # No need to consider ubuntu-zfs package on P/T as they've been blacklisted
> + utils.system('apt-get remove --yes --force-yes zfsutils-linux')
> + # Remove .version for the test, in order to trigger setup() again if we want re-test it
> + cmd = 'rm {}/.version'.format(self.srcdir)
> + utils.system(cmd)
> + return
> +
> os.chdir(os.path.join(self.srcdir, 'xfstests-bld', 'xfstests-dev'))
> cmd = '%s/ubuntu_zfs_xfs_generic.sh %s %s' % (self.bindir, test_name, self.srcdir)
> print("Running: " + cmd)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20220420/21253702/attachment-0001.html>
More information about the kernel-team
mailing list