[Buildroot] [PATCH 1/1] support/testing: add ntp runtime test

Arnout Vandecappelle arnout at mind.be
Wed Jun 19 20:33:59 UTC 2024



On 09/06/2024 19:21, Julien Olivain wrote:
> Signed-off-by: Julien Olivain <ju.o at free.fr>

  Applied to master, thanks.

  Regards,
  Arnout

> ---
>   DEVELOPERS                                    |  2 +
>   support/testing/tests/package/test_ntp.py     | 86 +++++++++++++++++++
>   .../test_ntp/rootfs-overlay/etc/ntp.conf      | 10 +++
>   3 files changed, 98 insertions(+)
>   create mode 100644 support/testing/tests/package/test_ntp.py
>   create mode 100644 support/testing/tests/package/test_ntp/rootfs-overlay/etc/ntp.conf
> 
> diff --git a/DEVELOPERS b/DEVELOPERS
> index 03aa7bfa742..0fc43592c26 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -1870,6 +1870,8 @@ F:	support/testing/tests/package/test_netsnmp/
>   F:	support/testing/tests/package/test_nftables.py
>   F:	support/testing/tests/package/test_nftables/
>   F:	support/testing/tests/package/test_ngrep.py
> +F:	support/testing/tests/package/test_ntp.py
> +F:	support/testing/tests/package/test_ntp/
>   F:	support/testing/tests/package/test_numactl.py
>   F:	support/testing/tests/package/test_numactl/
>   F:	support/testing/tests/package/test_octave.py
> diff --git a/support/testing/tests/package/test_ntp.py b/support/testing/tests/package/test_ntp.py
> new file mode 100644
> index 00000000000..13fff6419be
> --- /dev/null
> +++ b/support/testing/tests/package/test_ntp.py
> @@ -0,0 +1,86 @@
> +import os
> +import re
> +import time
> +
> +import infra.basetest
> +
> +
> +class TestNtp(infra.basetest.BRTest):
> +    rootfs_overlay = \
> +        infra.filepath("tests/package/test_ntp/rootfs-overlay")
> +    config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
> +        f"""
> +        BR2_PACKAGE_NTP=y
> +        BR2_PACKAGE_NTP_NTPD=y
> +        BR2_PACKAGE_NTP_NTPQ=y
> +        BR2_ROOTFS_OVERLAY="{rootfs_overlay}"
> +        BR2_TARGET_ROOTFS_CPIO=y
> +        # BR2_TARGET_ROOTFS_TAR is not set
> +        """
> +
> +    def dict_from_ntpq_output(self, output):
> +        d = {}
> +        for line in output:
> +            if ':' not in line:
> +                continue
> +            fields = re.split(r":", line, maxsplit=2)
> +            name = fields[0].strip()
> +            value = fields[1].strip()
> +            d[name] = value
> +        return d
> +
> +    def test_run(self):
> +        cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
> +        self.emulator.boot(arch="armv5",
> +                           kernel="builtin",
> +                           options=["-initrd", cpio_file])
> +        self.emulator.login()
> +
> +        # Check our binaries can execute.
> +        self.assertRunOk("ntpd --version")
> +        self.assertRunOk("ntpq --version")
> +
> +        # The ntp daemon is expected to be started from init startup
> +        # scripts, for the Buildroot package recipe. We wait a bit
> +        # here to let the daemon settle. The next test step checks for
> +        # the local peer to be the system peer (by checking the
> +        # '*'). If querying the peers too soon after startup the peer
> +        # will not be marked as such.
> +        time.sleep(3 * self.timeout_multiplier)
> +
> +        # We query the ntp daemon peers. From our test configuration
> +        # file, we should have exactly one.
> +        out, ret = self.emulator.run("ntpq --peers")
> +        self.assertEqual(ret, 0)
> +        # ntpq --peers produces two lines of headers. So we check we
> +        # have at least 3 lines of output.
> +        self.assertGreaterEqual(len(out), 3)
> +        # We check we see our undisciplined local clock and it's the
> +        # system peer.
> +        self.assertTrue(out[2].startswith("*LOCAL(0)"))
> +
> +        # We query the refid variable. We expect to see our
> +        # undisciplined local clock.
> +        out, ret = self.emulator.run("ntpq -c 'readvar 0 refid'")
> +        self.assertEqual(ret, 0)
> +        self.assertEqual(out[0], "refid=LOCAL(0)")
> +
> +        # We query the ntp system info. We check the reference ID is
> +        # the same as in the test configuration file.
> +        out, ret = self.emulator.run("ntpq -c sysinfo")
> +        self.assertEqual(ret, 0)
> +        sysinfo = self.dict_from_ntpq_output(out)
> +        refid = "reference ID"
> +        self.assertIn(refid, sysinfo)
> +        self.assertEqual(sysinfo[refid], "127.127.1.0")
> +
> +        # Finally, we query the ntp system statistics. We check we can
> +        # see some uptime. We waited a bit at the beginning of this
> +        # test, plus the few queries we previously did should have
> +        # accumulated some uptime.
> +        out, ret = self.emulator.run("ntpq -c sysstats")
> +        self.assertEqual(ret, 0)
> +        sysstats = self.dict_from_ntpq_output(out)
> +        up = "uptime"
> +        self.assertIn(up, sysstats)
> +        self.assertGreater(int(sysstats[up]), 0)
> diff --git a/support/testing/tests/package/test_ntp/rootfs-overlay/etc/ntp.conf b/support/testing/tests/package/test_ntp/rootfs-overlay/etc/ntp.conf
> new file mode 100644
> index 00000000000..2ead3deb6ab
> --- /dev/null
> +++ b/support/testing/tests/package/test_ntp/rootfs-overlay/etc/ntp.conf
> @@ -0,0 +1,10 @@
> +# Set an undisciplined local clock for testing without the need of
> +# network connectivity.
> +server 127.127.1.0 iburst prefer
> +fudge  127.127.1.0 stratum 10
> +
> +# Keep standard access control setup. The test is doing local queries
> +# from 127.0.0.1.
> +restrict default nomodify nopeer noquery limited kod
> +restrict 127.0.0.1
> +restrict [::1]


More information about the buildroot mailing list