mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
selftest: Add module for testing rootfs postcommands
The initial implementation adds tests for 'tidy_shadowutils_files'. (From OE-Core rev: 9640ce00c986626573a748859129b6e2eeeafa35) Signed-off-by: Andrei Gherzan <andrei.gherzan@huawei.com> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
fe796c2a17
commit
50f150e7e3
97
meta/lib/oeqa/selftest/cases/rootfspostcommandstests.py
Normal file
97
meta/lib/oeqa/selftest/cases/rootfspostcommandstests.py
Normal file
|
@ -0,0 +1,97 @@
|
|||
# SPDX-FileCopyrightText: Huawei Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
import os
|
||||
import oe
|
||||
import unittest
|
||||
from oeqa.selftest.case import OESelftestTestCase
|
||||
from oeqa.utils.commands import bitbake, get_bb_vars
|
||||
|
||||
class ShadowUtilsTidyFiles(OESelftestTestCase):
|
||||
"""
|
||||
Check if shadow image rootfs files are tidy.
|
||||
|
||||
The tests are focused on testing the functionality provided by the
|
||||
'tidy_shadowutils_files' rootfs postprocess command (via
|
||||
SORT_PASSWD_POSTPROCESS_COMMAND).
|
||||
"""
|
||||
|
||||
def sysconf_build(self):
|
||||
"""
|
||||
Verify if shadow tidy files tests are to be run and if yes, build a
|
||||
test image and return its sysconf rootfs path.
|
||||
"""
|
||||
|
||||
test_image = "core-image-minimal"
|
||||
|
||||
config = 'IMAGE_CLASSES += "extrausers"\n'
|
||||
config += 'EXTRA_USERS_PARAMS = "groupadd -g 1000 oeqatester; "\n'
|
||||
config += 'EXTRA_USERS_PARAMS += "useradd -p \'\' -u 1000 -N -g 1000 oeqatester; "\n'
|
||||
self.write_config(config)
|
||||
|
||||
vars = get_bb_vars(("IMAGE_ROOTFS", "SORT_PASSWD_POSTPROCESS_COMMAND", "sysconfdir"),
|
||||
test_image)
|
||||
passwd_postprocess_cmd = vars["SORT_PASSWD_POSTPROCESS_COMMAND"]
|
||||
self.assertIsNotNone(passwd_postprocess_cmd)
|
||||
if (passwd_postprocess_cmd.strip() != 'tidy_shadowutils_files;'):
|
||||
raise unittest.SkipTest("Testcase skipped as 'tidy_shadowutils_files' "
|
||||
"rootfs post process command is not the set SORT_PASSWD_POSTPROCESS_COMMAND.")
|
||||
|
||||
rootfs = vars["IMAGE_ROOTFS"]
|
||||
self.assertIsNotNone(rootfs)
|
||||
sysconfdir = vars["sysconfdir"]
|
||||
bitbake(test_image)
|
||||
self.assertIsNotNone(sysconfdir)
|
||||
|
||||
return oe.path.join(rootfs, sysconfdir)
|
||||
|
||||
def test_shadowutils_backup_files(self):
|
||||
"""
|
||||
Test that the rootfs doesn't include any known shadow backup files.
|
||||
"""
|
||||
|
||||
backup_files = (
|
||||
'group-',
|
||||
'gshadow-',
|
||||
'passwd-',
|
||||
'shadow-',
|
||||
'subgid-',
|
||||
'subuid-',
|
||||
)
|
||||
|
||||
rootfs_sysconfdir = self.sysconf_build()
|
||||
found = []
|
||||
for backup_file in backup_files:
|
||||
backup_filepath = oe.path.join(rootfs_sysconfdir, backup_file)
|
||||
if os.path.exists(backup_filepath):
|
||||
found.append(backup_file)
|
||||
if (found):
|
||||
raise Exception('The following shadow backup files were found in '
|
||||
'the rootfs: %s' % found)
|
||||
|
||||
def test_shadowutils_sorted_files(self):
|
||||
"""
|
||||
Test that the 'passwd' and the 'group' shadow utils files are ordered
|
||||
by ID.
|
||||
"""
|
||||
|
||||
files = (
|
||||
'passwd',
|
||||
'group',
|
||||
)
|
||||
|
||||
rootfs_sysconfdir = self.sysconf_build()
|
||||
unsorted = []
|
||||
for file in files:
|
||||
filepath = oe.path.join(rootfs_sysconfdir, file)
|
||||
with open(filepath, 'rb') as f:
|
||||
ids = []
|
||||
lines = f.readlines()
|
||||
for line in lines:
|
||||
entries = line.split(b':')
|
||||
ids.append(int(entries[2]))
|
||||
if (ids != sorted(ids)):
|
||||
unsorted.append(file)
|
||||
if (unsorted):
|
||||
raise Exception("The following files were not sorted by ID as expected: %s" % unsorted)
|
Loading…
Reference in New Issue
Block a user