From: Zbigniew Jędrzejewski-Szmek Date: Wed, 16 Nov 2022 08:49:30 +0000 (+0100) Subject: tests: add a simple test that bootctl output is valid json X-Git-Tag: v253-rc1~334^2~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=50f2c32cd5477bb42bf9a26e4aefd7230c2574c7;p=thirdparty%2Fsystemd.git 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. --- diff --git a/meson.build b/meson.build index 37d46dfae2a..2fb51029712 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 f2080b5a9a1..93f0e679fe3 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 00000000000..7a660a8ea76 --- /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