support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
import infra.basetest
|
2022-10-22 22:09:50 +02:00
|
|
|
import re
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
from tests.init.base import InitSystemBase as InitSystemBase
|
|
|
|
|
2017-10-05 23:42:09 +02:00
|
|
|
|
2022-10-22 22:09:50 +02:00
|
|
|
# In the following tests, the read-only cases use the default settings,
|
|
|
|
# which historically used both a factory to populate a tmpfs on /var,
|
|
|
|
# and pre-populated /var at buildtime. Since these are the default
|
|
|
|
# settings, and they proved to generate a system that ultimately boots,
|
|
|
|
# we still want to keep testing that. See later, below, for the
|
|
|
|
# specialised test cases.
|
|
|
|
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
class InitSystemSystemdBase(InitSystemBase):
|
|
|
|
config = \
|
|
|
|
"""
|
|
|
|
BR2_arm=y
|
support/testing: fix systemd test by using a more recent gcc
As reported on the mailing list [0], there is a build issue with systemd
245 when using gcc < 5.0, due to the following build issue:
../src/shared/gpt.c:7:9: error: initializer element is not constant
{ GPT_ROOT_X86, "root-x86" },
The pre-built external toolchain we have for armv5 (the default with
just BR2_arm=y) is a very old toolchain from CodeSourcery, which has a
gcc 4.8; we have no other pre-built toolchains for armv5, except by
using a custom one, like those from the Bootlin toolchain builder. But
using a custom toolchain is not nice, as we want our runtime test to
test nominal configurations.
So, switch the systemd tests to use a Cortex-A9, so that we can use the
ARM 2019.12 toolchain, and with VFP, so that it can boot in the qemu
vexpress machine we use for the test-cases.
Fixes:
https://gitlab.com/buildroot.org/buildroot/-/jobs/498144403
https://gitlab.com/buildroot.org/buildroot/-/jobs/498144405
https://gitlab.com/buildroot.org/buildroot/-/jobs/498144406
https://gitlab.com/buildroot.org/buildroot/-/jobs/498144408
https://gitlab.com/buildroot.org/buildroot/-/jobs/498144410
https://gitlab.com/buildroot.org/buildroot/-/jobs/498144412
[0] http://lists.busybox.net/pipermail/buildroot/2020-April/278931.html
Signed-off-by: Romain Naour <romain.naour@gmail.com>
[yann.morin.1998@free.fr:
- just use cortex-a9_VFP, instead of using a bootlin toolchain
- adapt the commit log accordingly
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2020-04-05 00:08:41 +02:00
|
|
|
BR2_cortex_a9=y
|
|
|
|
BR2_ARM_ENABLE_VFP=y
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
BR2_TOOLCHAIN_EXTERNAL=y
|
support/run-test: add test for systemd using dbus-broker
Add four new tests for systemd (rw and ro in each case):
- use dbus-broker instead of the original dbus
- use the original dbus, with dbus-broker installed
The first two extend the existing IfUpDown test cases by just enabling
dbus-broker; the second ones extend this further, by explicitly enabling
the original dbus.
For one of the tests, we overload the test_run() function to test that
the dbus-broker daemon is indeed running as root. We need not replicate
that check in the other dbus-broker-only test, and it does not make
sense to test that in tests that have the original dbus enabled.
Presence of the original dbus and dbus-broker on the same system is
valid: the original dbus is used as the default system bus daemon. We do
not test switching between the two at runtime, though as this is really
too corner-case specific. We just test to ensure the original dbus
system bus daemon is not impacted by the presence of dbus-broker.
Note: the 'full' test-case enables all systemd options, and some of them
do pull the original dbus package, so we can't use that to test the
integration of dbus-broker; instead, we extend the ifupdown case, which
does not enable the original dbus.
The default external toolchain for cortex-A9 is the old ARM toolchain
which has kernel headers 4.10 Since dbus-broker needs toolchain headers
>= 4.17, it can't be selected with this toolchain. Switch the systemd
tests to the Bootlin toolchains instead. We switch all of them to make
things easier. Note that we will need to take care in the future that
the headers version used in the bootlin toolchain doesn't get bigger
than the kernel that is used. The kernel is currently 5.10, the headers
in the bleeding edge bootlin toolchain are 5.4.
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Norbert Lange <nolange79@gmail.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
2022-01-09 23:16:50 +01:00
|
|
|
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
BR2_INIT_SYSTEMD=y
|
|
|
|
BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
|
|
|
|
# BR2_TARGET_ROOTFS_TAR is not set
|
2022-12-24 10:18:13 +01:00
|
|
|
BR2_PER_PACKAGE_DIRECTORIES=y
|
2022-07-27 18:13:09 +02:00
|
|
|
"""
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
|
2022-01-09 23:16:49 +01:00
|
|
|
def check_systemd(self, fs):
|
2022-10-22 22:09:50 +02:00
|
|
|
if "BR2_LINUX_KERNEL=y" in self.config:
|
|
|
|
self.start_emulator(fs, "zImage", "vexpress-v2p-ca9")
|
|
|
|
else:
|
|
|
|
self.start_emulator(fs)
|
2022-01-09 23:16:49 +01:00
|
|
|
self.check_init("/lib/systemd/systemd")
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
|
2018-03-04 18:06:17 +01:00
|
|
|
# Test all units are OK
|
|
|
|
output, _ = self.emulator.run("systemctl --no-pager --failed --no-legend")
|
|
|
|
self.assertEqual(len(output), 0)
|
|
|
|
|
|
|
|
# Test we can reach the DBus daemon
|
2021-06-26 15:32:38 +02:00
|
|
|
self.assertRunOk("busctl --no-pager")
|
2018-03-04 18:06:17 +01:00
|
|
|
|
|
|
|
# Test we can read at least one line from the journal
|
|
|
|
output, _ = self.emulator.run("journalctl --no-pager --lines 1 --quiet")
|
|
|
|
self.assertEqual(len(output), 1)
|
|
|
|
|
2022-01-09 23:16:49 +01:00
|
|
|
# Check the network is up
|
|
|
|
self.check_network("eth0")
|
|
|
|
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
|
2017-08-02 00:52:24 +02:00
|
|
|
class TestInitSystemSystemdRoNetworkd(InitSystemSystemdBase):
|
|
|
|
config = InitSystemSystemdBase.config + \
|
|
|
|
"""
|
|
|
|
BR2_SYSTEM_DHCP="eth0"
|
|
|
|
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
|
|
|
BR2_TARGET_ROOTFS_SQUASHFS=y
|
2022-10-22 22:09:50 +02:00
|
|
|
"""
|
2017-08-02 00:52:24 +02:00
|
|
|
|
|
|
|
def test_run(self):
|
2022-01-09 23:16:49 +01:00
|
|
|
self.check_systemd("squashfs")
|
2017-08-02 00:52:24 +02:00
|
|
|
|
|
|
|
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
class TestInitSystemSystemdRwNetworkd(InitSystemSystemdBase):
|
|
|
|
config = InitSystemSystemdBase.config + \
|
|
|
|
"""
|
|
|
|
BR2_SYSTEM_DHCP="eth0"
|
|
|
|
BR2_TARGET_ROOTFS_EXT2=y
|
|
|
|
"""
|
|
|
|
|
|
|
|
def test_run(self):
|
2022-01-09 23:16:49 +01:00
|
|
|
self.check_systemd("ext2")
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
|
|
|
|
|
2017-08-02 00:52:24 +02:00
|
|
|
class TestInitSystemSystemdRoIfupdown(InitSystemSystemdBase):
|
|
|
|
config = InitSystemSystemdBase.config + \
|
|
|
|
"""
|
|
|
|
BR2_SYSTEM_DHCP="eth0"
|
|
|
|
# BR2_PACKAGE_SYSTEMD_NETWORKD is not set
|
|
|
|
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
|
|
|
BR2_TARGET_ROOTFS_SQUASHFS=y
|
|
|
|
"""
|
|
|
|
|
|
|
|
def test_run(self):
|
2022-01-09 23:16:49 +01:00
|
|
|
self.check_systemd("squashfs")
|
2017-08-02 00:52:24 +02:00
|
|
|
|
|
|
|
|
support/run-test: add test for systemd using dbus-broker
Add four new tests for systemd (rw and ro in each case):
- use dbus-broker instead of the original dbus
- use the original dbus, with dbus-broker installed
The first two extend the existing IfUpDown test cases by just enabling
dbus-broker; the second ones extend this further, by explicitly enabling
the original dbus.
For one of the tests, we overload the test_run() function to test that
the dbus-broker daemon is indeed running as root. We need not replicate
that check in the other dbus-broker-only test, and it does not make
sense to test that in tests that have the original dbus enabled.
Presence of the original dbus and dbus-broker on the same system is
valid: the original dbus is used as the default system bus daemon. We do
not test switching between the two at runtime, though as this is really
too corner-case specific. We just test to ensure the original dbus
system bus daemon is not impacted by the presence of dbus-broker.
Note: the 'full' test-case enables all systemd options, and some of them
do pull the original dbus package, so we can't use that to test the
integration of dbus-broker; instead, we extend the ifupdown case, which
does not enable the original dbus.
The default external toolchain for cortex-A9 is the old ARM toolchain
which has kernel headers 4.10 Since dbus-broker needs toolchain headers
>= 4.17, it can't be selected with this toolchain. Switch the systemd
tests to the Bootlin toolchains instead. We switch all of them to make
things easier. Note that we will need to take care in the future that
the headers version used in the bootlin toolchain doesn't get bigger
than the kernel that is used. The kernel is currently 5.10, the headers
in the bleeding edge bootlin toolchain are 5.4.
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Norbert Lange <nolange79@gmail.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
2022-01-09 23:16:50 +01:00
|
|
|
class TestInitSystemSystemdRoIfupdownDbusbroker(TestInitSystemSystemdRoIfupdown):
|
|
|
|
config = TestInitSystemSystemdRoIfupdown.config + \
|
|
|
|
"""
|
|
|
|
BR2_PACKAGE_DBUS_BROKER=y
|
|
|
|
"""
|
|
|
|
|
|
|
|
def test_run(self):
|
|
|
|
# Parent class' test_run() method does exactly that, no more:
|
|
|
|
self.check_systemd("squashfs")
|
|
|
|
|
|
|
|
# Check that the dbus-broker daemon is running as non-root
|
|
|
|
cmd = "find /proc/$(pidof dbus-broker) -maxdepth 1 -name exe -user dbus"
|
|
|
|
out, _ = self.emulator.run(cmd)
|
|
|
|
self.assertEqual(len(out), 1)
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoIfupdownDbusbrokerDbus(TestInitSystemSystemdRoIfupdownDbusbroker):
|
|
|
|
config = TestInitSystemSystemdRoIfupdownDbusbroker.config + \
|
|
|
|
"""
|
|
|
|
BR2_PACKAGE_DBUS=y
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
class TestInitSystemSystemdRwIfupdown(InitSystemSystemdBase):
|
|
|
|
config = InitSystemSystemdBase.config + \
|
|
|
|
"""
|
|
|
|
BR2_SYSTEM_DHCP="eth0"
|
|
|
|
# BR2_PACKAGE_SYSTEMD_NETWORKD is not set
|
|
|
|
BR2_TARGET_ROOTFS_EXT2=y
|
|
|
|
"""
|
|
|
|
|
|
|
|
def test_run(self):
|
2022-01-09 23:16:49 +01:00
|
|
|
self.check_systemd("ext2")
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
|
|
|
|
|
support/run-test: add test for systemd using dbus-broker
Add four new tests for systemd (rw and ro in each case):
- use dbus-broker instead of the original dbus
- use the original dbus, with dbus-broker installed
The first two extend the existing IfUpDown test cases by just enabling
dbus-broker; the second ones extend this further, by explicitly enabling
the original dbus.
For one of the tests, we overload the test_run() function to test that
the dbus-broker daemon is indeed running as root. We need not replicate
that check in the other dbus-broker-only test, and it does not make
sense to test that in tests that have the original dbus enabled.
Presence of the original dbus and dbus-broker on the same system is
valid: the original dbus is used as the default system bus daemon. We do
not test switching between the two at runtime, though as this is really
too corner-case specific. We just test to ensure the original dbus
system bus daemon is not impacted by the presence of dbus-broker.
Note: the 'full' test-case enables all systemd options, and some of them
do pull the original dbus package, so we can't use that to test the
integration of dbus-broker; instead, we extend the ifupdown case, which
does not enable the original dbus.
The default external toolchain for cortex-A9 is the old ARM toolchain
which has kernel headers 4.10 Since dbus-broker needs toolchain headers
>= 4.17, it can't be selected with this toolchain. Switch the systemd
tests to the Bootlin toolchains instead. We switch all of them to make
things easier. Note that we will need to take care in the future that
the headers version used in the bootlin toolchain doesn't get bigger
than the kernel that is used. The kernel is currently 5.10, the headers
in the bleeding edge bootlin toolchain are 5.4.
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Norbert Lange <nolange79@gmail.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
2022-01-09 23:16:50 +01:00
|
|
|
class TestInitSystemSystemdRwIfupdownDbusbroker(TestInitSystemSystemdRwIfupdown):
|
|
|
|
config = TestInitSystemSystemdRwIfupdown.config + \
|
|
|
|
"""
|
|
|
|
BR2_PACKAGE_DBUS_BROKER=y
|
|
|
|
"""
|
|
|
|
|
|
|
|
def test_run(self):
|
|
|
|
# Parent class' test_run() method does exactly that, no more:
|
|
|
|
self.check_systemd("ext2")
|
|
|
|
|
|
|
|
# Check that the dbus-broker daemon is running as non-root
|
|
|
|
cmd = "find /proc/$(pidof dbus-broker) -maxdepth 1 -name exe -user dbus"
|
|
|
|
out, _ = self.emulator.run(cmd)
|
|
|
|
self.assertEqual(len(out), 1)
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRwIfupdownDbusbrokerDbus(TestInitSystemSystemdRwIfupdownDbusbroker):
|
|
|
|
config = TestInitSystemSystemdRwIfupdownDbusbroker.config + \
|
|
|
|
"""
|
|
|
|
BR2_PACKAGE_DBUS=y
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
2017-08-02 00:52:24 +02:00
|
|
|
class TestInitSystemSystemdRoFull(InitSystemSystemdBase):
|
|
|
|
config = InitSystemSystemdBase.config + \
|
|
|
|
"""
|
|
|
|
BR2_SYSTEM_DHCP="eth0"
|
|
|
|
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
2020-11-08 21:53:44 +01:00
|
|
|
BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y
|
2017-08-02 00:52:24 +02:00
|
|
|
BR2_PACKAGE_SYSTEMD_BACKLIGHT=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_BINFMT=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_COREDUMP=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_FIRSTBOOT=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_HIBERNATE=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_IMPORTD=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_LOCALED=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_LOGIND=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_MACHINED=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_POLKIT=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_QUOTACHECK=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_RANDOMSEED=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_RFKILL=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_SMACK_SUPPORT=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_SYSUSERS=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_VCONSOLE=y
|
|
|
|
BR2_TARGET_ROOTFS_SQUASHFS=y
|
|
|
|
"""
|
|
|
|
|
|
|
|
def test_run(self):
|
2022-01-09 23:16:49 +01:00
|
|
|
self.check_systemd("squashfs")
|
2017-08-02 00:52:24 +02:00
|
|
|
|
|
|
|
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
class TestInitSystemSystemdRwFull(InitSystemSystemdBase):
|
|
|
|
config = InitSystemSystemdBase.config + \
|
|
|
|
"""
|
|
|
|
BR2_SYSTEM_DHCP="eth0"
|
2020-11-08 21:53:44 +01:00
|
|
|
BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y
|
support/testing: add runtime testing for init systems
The "builtin" kernel does not boot a systemd-based system, so
we resort to building the same one as currently used by our
qemu_arm_vexpress_defconfig.
We test the 8 following combinations:
- busybox, read-only, without network
- busybox, read-only, with network
- busybox, read-write, without network
- busybox, read-write, with network
- basic systemd, read-write, network w/ ifupdown
- basic systemd, read-write, network w/ networkd
- full systemd, read-write, network w/ networkd
- no init system, read-only, without network
The tests just verify what the /sbin/init binary is, and that we were
able to grab an IP address. More tests can be added later, for example
to check each systemd features (journal, tmpfiles...)
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
[Arnout: update .gitlab-ci.yml]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-08-02 00:52:11 +02:00
|
|
|
BR2_PACKAGE_SYSTEMD_BACKLIGHT=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_BINFMT=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_COREDUMP=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_FIRSTBOOT=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_HIBERNATE=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_IMPORTD=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_LOCALED=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_LOGIND=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_MACHINED=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_POLKIT=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_QUOTACHECK=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_RANDOMSEED=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_RFKILL=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_SMACK_SUPPORT=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_SYSUSERS=y
|
|
|
|
BR2_PACKAGE_SYSTEMD_VCONSOLE=y
|
|
|
|
BR2_TARGET_ROOTFS_EXT2=y
|
|
|
|
"""
|
|
|
|
|
|
|
|
def test_run(self):
|
2022-01-09 23:16:49 +01:00
|
|
|
self.check_systemd("ext2")
|
2022-10-22 22:09:50 +02:00
|
|
|
|
|
|
|
|
|
|
|
# The following tests are all about read-only rootfs, and exercise either
|
|
|
|
# using an un-populated factory for /var, or an overlaysfs ontop of a
|
|
|
|
# pre-populated /var. They all specialise the TestInitSystemSystemdRo*
|
|
|
|
# test cases above.
|
|
|
|
|
|
|
|
|
|
|
|
# Helper class for factory-based tests
|
|
|
|
class InitSystemSystemdBaseFactory():
|
|
|
|
config = \
|
|
|
|
"""
|
|
|
|
# BR2_INIT_SYSTEMD_POPULATE_TMPFILES is not set
|
|
|
|
BR2_ROOTFS_OVERLAY="{}"
|
|
|
|
""".format(infra.filepath("tests/init/systemd-factory"))
|
|
|
|
|
|
|
|
def test_run(self):
|
|
|
|
super().test_run()
|
|
|
|
|
|
|
|
# This one must be executed on the target, to check that
|
|
|
|
# the factory feature works as expected
|
|
|
|
out, exit_code = self.emulator.run("cat /var/foo/bar")
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
self.assertEqual(out[0], "foobar")
|
|
|
|
|
|
|
|
# /var/foo/bar is from the /var factory
|
|
|
|
_, exit_code = self.emulator.run("test -e /usr/share/factory/var/foo/bar")
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
|
|
|
|
# We can write in /var/foo/bar
|
|
|
|
_, exit_code = self.emulator.run("echo barfoo >/var/foo/bar")
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
# ... and it contains the new content
|
|
|
|
out, exit_code = self.emulator.run("cat /var/foo/bar")
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
self.assertEqual(out[0], "barfoo")
|
|
|
|
# ... but the factory is umodified
|
|
|
|
out, exit_code = self.emulator.run("cat /usr/share/factory/var/foo/bar")
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
self.assertEqual(out[0], "foobar")
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoNetworkdFactory(
|
|
|
|
InitSystemSystemdBaseFactory,
|
|
|
|
TestInitSystemSystemdRoNetworkd,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseFactory.config + \
|
|
|
|
TestInitSystemSystemdRoNetworkd.config
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoIfupdownFactory(
|
|
|
|
InitSystemSystemdBaseFactory,
|
|
|
|
TestInitSystemSystemdRoIfupdown,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseFactory.config + \
|
|
|
|
TestInitSystemSystemdRoIfupdown.config
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoIfupdownDbusbrokerFactory(
|
|
|
|
InitSystemSystemdBaseFactory,
|
|
|
|
TestInitSystemSystemdRoIfupdownDbusbroker,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseFactory.config + \
|
|
|
|
TestInitSystemSystemdRoIfupdownDbusbroker.config
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoIfupdownDbusbrokerDbusFactory(
|
|
|
|
InitSystemSystemdBaseFactory,
|
|
|
|
TestInitSystemSystemdRoIfupdownDbusbrokerDbus,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseFactory.config + \
|
|
|
|
TestInitSystemSystemdRoIfupdownDbusbrokerDbus.config
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoFullFactory(
|
|
|
|
InitSystemSystemdBaseFactory,
|
|
|
|
TestInitSystemSystemdRoFull,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseFactory.config + \
|
|
|
|
TestInitSystemSystemdRoFull.config
|
|
|
|
|
|
|
|
|
|
|
|
# Helper class for overlayfs-based tests
|
|
|
|
class InitSystemSystemdBaseOverlayfs():
|
|
|
|
config = \
|
|
|
|
"""
|
|
|
|
# BR2_INIT_SYSTEMD_VAR_FACTORY is not set
|
|
|
|
BR2_INIT_SYSTEMD_VAR_OVERLAYFS=y
|
|
|
|
BR2_ROOTFS_OVERLAY="{}"
|
|
|
|
BR2_LINUX_KERNEL=y
|
|
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
2023-12-06 23:44:21 +01:00
|
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.202"
|
2022-10-22 22:09:50 +02:00
|
|
|
BR2_LINUX_KERNEL_DEFCONFIG="vexpress"
|
|
|
|
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{}"
|
|
|
|
BR2_LINUX_KERNEL_DTS_SUPPORT=y
|
|
|
|
BR2_LINUX_KERNEL_INTREE_DTS_NAME="vexpress-v2p-ca9"
|
|
|
|
""".format(infra.filepath("tests/init/systemd-factory"),
|
|
|
|
infra.filepath("conf/overlayfs-kernel-fragment.config"))
|
|
|
|
|
|
|
|
def test_run(self):
|
|
|
|
super().test_run()
|
|
|
|
|
|
|
|
# This one must be executed on the target, to check that
|
|
|
|
# the tmpfiles pre-populate works as expected
|
|
|
|
out, exit_code = self.emulator.run("cat /var/foo/bar")
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
self.assertEqual(out[0], "foobar")
|
|
|
|
|
|
|
|
# /var/foo/bar is from the pre-populated /var, so it should
|
|
|
|
# not be present in the upper of the overlay
|
|
|
|
_, exit_code = self.emulator.run("test -e /run/buildroot/mounts/var/upper/foo/bar")
|
|
|
|
self.assertNotEqual(exit_code, 0)
|
|
|
|
|
|
|
|
# We can write in /var/foo/bar
|
|
|
|
_, exit_code = self.emulator.run("echo barfoo >/var/foo/bar")
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
# ... and it contains the new content
|
|
|
|
out, exit_code = self.emulator.run("cat /var/foo/bar")
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
self.assertEqual(out[0], "barfoo")
|
|
|
|
# ... and it to appears in the upper
|
|
|
|
_, exit_code = self.emulator.run("test -e /run/buildroot/mounts/var/upper/foo/bar")
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
# ... with the new content
|
|
|
|
out, exit_code = self.emulator.run("cat /run/buildroot/mounts/var/upper/foo/bar")
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
self.assertEqual(out[0], "barfoo")
|
|
|
|
# ... while the lower still has the oldcontent
|
|
|
|
out, exit_code = self.emulator.run("cat /run/buildroot/mounts/var/lower/foo/bar")
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
self.assertEqual(out[0], "foobar")
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoNetworkdOverlayfs(
|
|
|
|
InitSystemSystemdBaseOverlayfs,
|
|
|
|
TestInitSystemSystemdRoNetworkd,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseOverlayfs.config + \
|
|
|
|
TestInitSystemSystemdRoNetworkd.config
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoIfupdownOverlayfs(
|
|
|
|
InitSystemSystemdBaseOverlayfs,
|
|
|
|
TestInitSystemSystemdRoIfupdown,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseOverlayfs.config + \
|
|
|
|
TestInitSystemSystemdRoIfupdown.config
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoIfupdownDbusbrokerOverlayfs(
|
|
|
|
InitSystemSystemdBaseOverlayfs,
|
|
|
|
TestInitSystemSystemdRoIfupdownDbusbroker,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseOverlayfs.config + \
|
|
|
|
TestInitSystemSystemdRoIfupdownDbusbroker.config
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoIfupdownDbusbrokerDbusOverlayfs(
|
|
|
|
InitSystemSystemdBaseOverlayfs,
|
|
|
|
TestInitSystemSystemdRoIfupdownDbusbrokerDbus,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseOverlayfs.config + \
|
|
|
|
TestInitSystemSystemdRoIfupdownDbusbrokerDbus.config
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoFullOverlayfs(
|
|
|
|
InitSystemSystemdBaseOverlayfs,
|
|
|
|
TestInitSystemSystemdRoFull,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseOverlayfs.config + \
|
|
|
|
TestInitSystemSystemdRoFull.config
|
|
|
|
|
|
|
|
|
|
|
|
class InitSystemSystemdBaseOverlayfsVarBacking(InitSystemBase):
|
|
|
|
@classmethod
|
|
|
|
def gen_config(cls, overlaydir: str) -> str:
|
|
|
|
return re.sub(
|
|
|
|
r'^\s*BR2_ROOTFS_OVERLAY="(.*)"$',
|
|
|
|
'BR2_ROOTFS_OVERLAY="\\1 {}"'.format(infra.filepath(overlaydir)),
|
|
|
|
TestInitSystemSystemdRoFullOverlayfs.config,
|
|
|
|
flags=re.MULTILINE,
|
|
|
|
)
|
|
|
|
|
|
|
|
def check_var_mounted(self):
|
|
|
|
self.assertRunOk("grep '^other-var-backing-store /run/buildroot/mounts/var tmpfs' /proc/mounts")
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoFullOverlayfsVarBackingMountUnit(
|
|
|
|
TestInitSystemSystemdRoFullOverlayfs,
|
|
|
|
InitSystemSystemdBaseOverlayfsVarBacking,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseOverlayfsVarBacking.gen_config(
|
|
|
|
'tests/init/systemd-overlay-mount-unit',
|
|
|
|
)
|
|
|
|
|
|
|
|
def test_run(self):
|
|
|
|
super().test_run()
|
|
|
|
self.check_var_mounted()
|
|
|
|
|
|
|
|
|
|
|
|
class TestInitSystemSystemdRoFullOverlayfsVarBackingFstab(
|
|
|
|
TestInitSystemSystemdRoFullOverlayfs,
|
|
|
|
InitSystemSystemdBaseOverlayfsVarBacking,
|
|
|
|
):
|
|
|
|
config = InitSystemSystemdBaseOverlayfsVarBacking.gen_config(
|
|
|
|
'tests/init/systemd-overlay-fstab',
|
|
|
|
)
|
|
|
|
|
|
|
|
def test_run(self):
|
|
|
|
super().test_run()
|
|
|
|
self.check_var_mounted()
|