From: "Paul Barker" <pbarker@konsulko.com>
To: Ricardo Ribalda Delgado <ricardo@ribalda.com>
Cc: openembedded-core <openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH v6 06/10] oeqa: wic: Add tests for permissions and change-directory
Date: Sat, 18 Apr 2020 21:07:52 +0100 [thread overview]
Message-ID: <20200418210752.6b7727c8@ub1910> (raw)
In-Reply-To: <20200414133614.1830058-7-ricardo@ribalda.com>
On Tue, 14 Apr 2020 15:36:10 +0200
Ricardo Ribalda Delgado <ricardo@ribalda.com> wrote:
> Make sure that the permissions and username are respected when using all
> the rootfs modifiers.
>
> Add tests for change-directory command
>
> Cc: Paul Barker <pbarker@konsulko.com>
> Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
> ---
> meta/lib/oeqa/selftest/cases/wic.py | 91 +++++++++++++++++++++++++++++
> 1 file changed, 91 insertions(+)
>
> diff --git a/meta/lib/oeqa/selftest/cases/wic.py b/meta/lib/oeqa/selftest/cases/wic.py
> index 626a217e69..8ef08c3d77 100644
> --- a/meta/lib/oeqa/selftest/cases/wic.py
> +++ b/meta/lib/oeqa/selftest/cases/wic.py
> @@ -62,6 +62,12 @@ def extract_files(debugfs_output):
> return [line.split('/')[5].strip() for line in \
> debugfs_output.strip().split('/\n')]
>
> +def files_own_by_root(debugfs_output):
> + for line in debugfs_output.strip().split('/\n'):
> + if line.split('/')[3:5] != ['0', '0']:
> + print(debugfs_output)
> + return False
> + return True
>
> class WicTestCase(OESelftestTestCase):
> """Wic test class."""
> @@ -84,6 +90,7 @@ class WicTestCase(OESelftestTestCase):
> self.skipTest('wic-tools cannot be built due its (intltool|gettext)-native dependency and NLS disable')
>
> bitbake('core-image-minimal')
> + bitbake('core-image-minimal-mtdutils')
> WicTestCase.image_is_ready = True
>
> rmtree(self.resultdir, ignore_errors=True)
> @@ -506,6 +513,90 @@ part /part2 --source rootfs --ondisk mmcblk0 --fstype=ext4 --include-path %s"""
> % (wks_file, self.resultdir), ignore_status=True).status)
> os.remove(wks_file)
>
> + def test_permissions(self):
> + """Test permissions are respected"""
> +
> + oldpath = os.environ['PATH']
> + os.environ['PATH'] = get_bb_var("PATH", "wic-tools")
> +
> + t_normal = """
> +part / --source rootfs --fstype=ext4
> +"""
> + t_exclude = """
> +part / --source rootfs --fstype=ext4 --exclude-path=home
> +"""
> + t_multi = """
> +part / --source rootfs --ondisk sda --fstype=ext4
> +part /export --source rootfs --rootfs=core-image-minimal-mtdutils --fstype=ext4
> +"""
> + t_change = """
> +part / --source rootfs --ondisk sda --fstype=ext4 --exclude-path=etc/
> +part /etc --source rootfs --fstype=ext4 --change-directory=etc
> +"""
> + tests = [t_normal, t_exclude, t_multi, t_change]
> +
> + try:
> + for test in tests:
> + include_path = os.path.join(self.resultdir, 'test-include')
> + os.makedirs(include_path)
> + wks_file = os.path.join(include_path, 'temp.wks')
> + with open(wks_file, 'w') as wks:
> + wks.write(test)
> + runCmd("wic create %s -e core-image-minimal -o %s" \
> + % (wks_file, self.resultdir))
> +
> + for part in glob(os.path.join(self.resultdir, 'temp-*.direct.p*')):
> + res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % (part))
> + self.assertEqual(True, files_own_by_root(res.output))
> +
> + rmtree(self.resultdir, ignore_errors=True)
> +
> + finally:
> + os.environ['PATH'] = oldpath
> +
> + def test_change_directory(self):
> + """Test --change-directory wks option."""
> +
> + oldpath = os.environ['PATH']
> + os.environ['PATH'] = get_bb_var("PATH", "wic-tools")
> +
> + try:
> + include_path = os.path.join(self.resultdir, 'test-include')
> + os.makedirs(include_path)
> + wks_file = os.path.join(include_path, 'temp.wks')
> + with open(wks_file, 'w') as wks:
> + rootfs_dir = get_bb_var('IMAGE_ROOTFS', 'core-image-minimal')
> + wks.write("part /etc --source rootfs --fstype=ext4 --change-directory=etc")
> + runCmd("wic create %s -e core-image-minimal -o %s" \
> + % (wks_file, self.resultdir))
> +
> + part1 = glob(os.path.join(self.resultdir, 'temp-*.direct.p1'))[0]
> +
> + res = runCmd("debugfs -R 'ls -p' %s 2>/dev/null" % (part1))
> + files = extract_files(res.output)
> + self.assertIn('shadow', files)
This fails if `shadow` isn't part of the image:
2020-04-18 20:57:31,625 - oe-selftest - INFO - test_change_directory (wic.Wic)
2020-04-18 20:57:42,105 - oe-selftest - INFO - ... FAIL
2020-04-18 20:57:42,105 - oe-selftest - INFO - Traceback (most recent call last):
File "/home/pbarker/Projects/Yocto/poky/meta/lib/oeqa/selftest/cases/wic.py", line 639, in test_change_directory
self.assertIn('shadow', files)
AssertionError: 'shadow' not found in [...]
> +
> + finally:
> + os.environ['PATH'] = oldpath
> +
> + def test_change_directory_errors(self):
> + """Test --change-directory wks option error handling."""
> + wks_file = 'temp.wks'
> +
> + # Absolute argument.
> + with open(wks_file, 'w') as wks:
> + wks.write("part / --source rootfs --fstype=ext4 --change-directory /usr")
> + self.assertNotEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \
> + % (wks_file, self.resultdir), ignore_status=True).status)
> + os.remove(wks_file)
> +
> + # Argument pointing to parent directory.
> + with open(wks_file, 'w') as wks:
> + wks.write("part / --source rootfs --fstype=ext4 --change-directory ././..")
> + self.assertNotEqual(0, runCmd("wic create %s -e core-image-minimal -o %s" \
> + % (wks_file, self.resultdir), ignore_status=True).status)
> + os.remove(wks_file)
> +
> class Wic2(WicTestCase):
>
> def test_bmap_short(self):
--
Paul Barker
Konsulko Group
next prev parent reply other threads:[~2020-04-18 20:07 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-14 13:36 [PATCH v6 00/10] Fix permissions and embed-rotofs Ricardo Ribalda
2020-04-14 13:36 ` [PATCH v6 01/10] wic: Fix permissions when using exclude or include path Ricardo Ribalda
2020-04-18 19:03 ` Paul Barker
2020-04-14 13:36 ` [PATCH v6 02/10] wic: Fix multi images .wks with bitbake Ricardo Ribalda
2020-04-14 13:36 ` [PATCH v6 03/10] wic: Add --change-directory argument Ricardo Ribalda
2020-04-14 13:36 ` [PATCH v6 04/10] wic: Continue if excluded_path does not exist Ricardo Ribalda
2020-04-14 13:36 ` [PATCH v6 05/10] wic: Avoid creating invalid pseudo directory Ricardo Ribalda
2020-04-14 13:36 ` [PATCH v6 06/10] oeqa: wic: Add tests for permissions and change-directory Ricardo Ribalda
2020-04-18 20:07 ` Paul Barker [this message]
2020-04-14 13:36 ` [PATCH v6 07/10] wic: misc: Do not find for executables in ALREADY_PROVIDED Ricardo Ribalda
2020-04-14 13:36 ` [PATCH v6 08/10] wic: root: Add an opt. destination on include-path Ricardo Ribalda
2020-04-18 19:02 ` Paul Barker
2020-04-14 13:36 ` [PATCH v6 09/10] wic: rootfs: Combine path_validation in one function Ricardo Ribalda
2020-04-14 13:36 ` [PATCH v6 10/10] oeqa: wic: Add more tests for include_path Ricardo Ribalda
2020-04-18 20:10 ` Paul Barker
2020-04-18 20:16 ` [OE-core] " Ricardo Ribalda
[not found] ` <1607034A6B86A480.2683@lists.openembedded.org>
2020-04-18 21:39 ` Ricardo Ribalda
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200418210752.6b7727c8@ub1910 \
--to=pbarker@konsulko.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=ricardo@ribalda.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.