From 50f2c32cd5477bb42bf9a26e4aefd7230c2574c7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 16 Nov 2022 09:49:30 +0100 Subject: [PATCH] tests: add a simple test that bootctl output is valid json python's json.tool module is used because it does validation. jq is more forgiving. Also, json is in the stdlib, so it should be always available. --- meson.build | 10 +++++++++- test/meson.build | 1 + test/test-bootctl-json.sh | 24 ++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100755 test/test-bootctl-json.sh diff --git a/meson.build b/meson.build index 37d46dfae2..2fb5102971 100644 --- a/meson.build +++ b/meson.build @@ -2583,7 +2583,7 @@ if conf.get('HAVE_BLKID') == 1 and conf.get('HAVE_GNU_EFI') == 1 boot_link_with = [libsystemd_static, libshared_static] endif - public_programs += executable( + exe = executable( 'bootctl', 'src/boot/bootctl.c', include_directories : includes, @@ -2592,6 +2592,14 @@ if conf.get('HAVE_BLKID') == 1 and conf.get('HAVE_GNU_EFI') == 1 versiondep], install_rpath : rootpkglibdir, install : true) + public_programs += exe + + if want_tests != 'false' + test('test-bootctl-json', + test_bootctl_json_sh, + args : exe.full_path(), + depends : exe) + endif public_programs += executable( 'systemd-bless-boot', diff --git a/test/meson.build b/test/meson.build index f2080b5a9a..93f0e679fe 100644 --- a/test/meson.build +++ b/test/meson.build @@ -89,6 +89,7 @@ if install_tests install_dir : testdata_dir) endif +test_bootctl_json_sh = find_program('test-bootctl-json.sh') test_fstab_generator_sh = find_program('test-fstab-generator.sh') test_network_generator_conversion_sh = find_program('test-network-generator-conversion.sh') test_systemctl_enable_sh = find_program('test-systemctl-enable.sh') diff --git a/test/test-bootctl-json.sh b/test/test-bootctl-json.sh new file mode 100755 index 0000000000..7a660a8ea7 --- /dev/null +++ b/test/test-bootctl-json.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: LGPL-2.1-or-later +set -e +set -o pipefail + +bootctl="${1:?}" + +"$bootctl" --no-pager list >/dev/null || { + echo "$bootctl list failed, skipping tests" 1>&2 + exit 77 +} + +set -x + +"$bootctl" list --json=pretty | python3 -m json.tool >/dev/null +"$bootctl" list --json=short | python3 -m json.tool >/dev/null + +command -v jq >/dev/null || { + echo "jq is not available, skipping jq tests" 1>&2 + exit 0 +} + +"$bootctl" list --json=pretty | jq . >/dev/null +"$bootctl" list --json=short | jq . >/dev/null -- 2.25.1