From 2b7b142e97b42e08bf7386e2afe69dfa12306daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 16 Dec 2020 12:21:43 +0100 Subject: [PATCH 1/2] meson: make each dmidecode a separate test This allows them to be executed in parallel and also gives us better reporting. The dump files are renamed to avoid repeating "dmidecode-dump", since that string is already present in the subdirectory name. --- src/udev/meson.build | 26 +++++++++----- ...code-dump.bin => Lenovo-ThinkPad-X280.bin} | Bin ...p.bin.txt => Lenovo-ThinkPad-X280.bin.txt} | 0 ...-dump.bin => Lenovo-Thinkcentre-m720s.bin} | Bin ...n.txt => Lenovo-Thinkcentre-m720s.bin.txt} | 0 test/meson.build | 28 ++++++++++++--- test/udev-dmi-memory-id-test.sh | 34 ++++++------------ 7 files changed, 51 insertions(+), 37 deletions(-) rename test/dmidecode-dumps/{Lenovo-ThinkPad-X280-dmidecode-dump.bin => Lenovo-ThinkPad-X280.bin} (100%) rename test/dmidecode-dumps/{Lenovo-ThinkPad-X280-dmidecode-dump.bin.txt => Lenovo-ThinkPad-X280.bin.txt} (100%) rename test/dmidecode-dumps/{Lenovo-Thinkcentre-m720s-dmidecode-dump.bin => Lenovo-Thinkcentre-m720s.bin} (100%) rename test/dmidecode-dumps/{Lenovo-Thinkcentre-m720s-dmidecode-dump.bin.txt => Lenovo-Thinkcentre-m720s.bin.txt} (100%) diff --git a/src/udev/meson.build b/src/udev/meson.build index 0ed3b86135..5a1d2149d7 100644 --- a/src/udev/meson.build +++ b/src/udev/meson.build @@ -184,15 +184,23 @@ if dmi_arches.contains(host_machine.cpu_family()) endif foreach prog : udev_id_progs - executable(prog[0].split('/')[0], - prog, - include_directories : includes, - c_args : ['-DLOG_REALM=LOG_REALM_UDEV'], - dependencies : [versiondep], - link_with : udev_link_with, - install_rpath : udev_rpath, - install : true, - install_dir : udevlibexecdir) + name = prog[0].split('/')[0] + + exe = executable( + name, + prog, + include_directories : includes, + c_args : ['-DLOG_REALM=LOG_REALM_UDEV'], + dependencies : [versiondep], + link_with : udev_link_with, + install_rpath : udev_rpath, + install : true, + install_dir : udevlibexecdir) + + # TODO: let's use a dictionary instead as soon as we can depend on meson >= 0.47. + if name == 'dmi_memory_id' + dmi_memory_id_path = exe.full_path() + endif endforeach if install_sysconfdir diff --git a/test/dmidecode-dumps/Lenovo-ThinkPad-X280-dmidecode-dump.bin b/test/dmidecode-dumps/Lenovo-ThinkPad-X280.bin similarity index 100% rename from test/dmidecode-dumps/Lenovo-ThinkPad-X280-dmidecode-dump.bin rename to test/dmidecode-dumps/Lenovo-ThinkPad-X280.bin diff --git a/test/dmidecode-dumps/Lenovo-ThinkPad-X280-dmidecode-dump.bin.txt b/test/dmidecode-dumps/Lenovo-ThinkPad-X280.bin.txt similarity index 100% rename from test/dmidecode-dumps/Lenovo-ThinkPad-X280-dmidecode-dump.bin.txt rename to test/dmidecode-dumps/Lenovo-ThinkPad-X280.bin.txt diff --git a/test/dmidecode-dumps/Lenovo-Thinkcentre-m720s-dmidecode-dump.bin b/test/dmidecode-dumps/Lenovo-Thinkcentre-m720s.bin similarity index 100% rename from test/dmidecode-dumps/Lenovo-Thinkcentre-m720s-dmidecode-dump.bin rename to test/dmidecode-dumps/Lenovo-Thinkcentre-m720s.bin diff --git a/test/dmidecode-dumps/Lenovo-Thinkcentre-m720s-dmidecode-dump.bin.txt b/test/dmidecode-dumps/Lenovo-Thinkcentre-m720s.bin.txt similarity index 100% rename from test/dmidecode-dumps/Lenovo-Thinkcentre-m720s-dmidecode-dump.bin.txt rename to test/dmidecode-dumps/Lenovo-Thinkcentre-m720s.bin.txt diff --git a/test/meson.build b/test/meson.build index 3a930436f9..1e8a56aa90 100644 --- a/test/meson.build +++ b/test/meson.build @@ -124,6 +124,8 @@ else message('Skipping udev-test because perl is not available') endif +############################################################ + if conf.get('ENABLE_HWDB') == 1 hwdb_test_sh = find_program('hwdb-test.sh') if want_tests != 'false' @@ -133,11 +135,29 @@ if conf.get('ENABLE_HWDB') == 1 endif endif -if want_tests != false and dmi_arches.contains(host_machine.cpu_family()) +############################################################ + +if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family()) udev_dmi_memory_id_test = find_program('udev-dmi-memory-id-test.sh') - test('udev-dmi-memory-id-test', - udev_dmi_memory_id_test, - timeout : 90) + + if git.found() + out = run_command( + git, + '--git-dir=@0@/.git'.format(project_source_root), + 'ls-files', ':/test/dmidecode-dumps/*.bin') + else + out = run_command( + 'sh', '-c', 'ls @0@/test/dmidecode-dumps/*.bin'.format(project_source_root)) + endif + + foreach p : out.stdout().split() + source = join_paths(project_source_root, p) + name = 'dmidecode_' + p.split('/')[-1].split('.')[0] + + test(name, + udev_dmi_memory_id_test, + args : [dmi_memory_id_path, source, source + '.txt']) + endforeach endif subdir('fuzz') diff --git a/test/udev-dmi-memory-id-test.sh b/test/udev-dmi-memory-id-test.sh index 2b6dee5b74..e8b69245d8 100755 --- a/test/udev-dmi-memory-id-test.sh +++ b/test/udev-dmi-memory-id-test.sh @@ -1,31 +1,17 @@ #!/bin/sh # SPDX-License-Identifier: LGPL-2.1-or-later -# set -e -export SYSTEMD_LOG_LEVEL=info -ROOTDIR=$(dirname $(dirname $(readlink -f $0))) -UDEV_DMI_MEMORY_ID=./src/udev/dmi_memory_id +dmi_memory_id="$1" +input="$2" +expected="$3" -if [ ! -x "$UDEV_DMI_MEMORY_ID" ]; then - echo "$UDEV_DMI_MEMORY_ID does not exist, please build first" - exit 1 -fi +output=$(mktemp --tmpdir "test-udev-dmi-memory-id.XXXXXXXXXX") +trap "rm '$output'" EXIT INT QUIT PIPE -D=$(mktemp --tmpdir --directory "udev-dmi-memory-id.XXXXXXXXXX") -trap "rm -rf '$D'" EXIT INT QUIT PIPE - -for i in $ROOTDIR/test/dmidecode-dumps/*.bin ; do - $("$UDEV_DMI_MEMORY_ID" -F "$i" 2>&1 > "$D"/out.txt) && rc= || rc=$? - if [ -n "$rc" ]; then - echo "$UDEV_DMI_MEMORY_ID returned $rc" - exit $rc - fi - err=$(diff -u "$D"/out.txt "$i.txt" 2>&1) && rc= || rc=$? - if [ -n "$rc" ]; then - echo "Parsing DMI memory information from \"$i\" didn't match expected:" - echo "$err" - exit $rc - fi -done +( + set -x + "$dmi_memory_id" -F "$input" >$output + diff -u "$output" "$expected" +) From 7bbdef621f745ebeb8b5f06e1e589529a09f2a46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 17 Dec 2020 08:54:50 +0100 Subject: [PATCH 2/2] test: add one more dmidecode dump --- test/dmidecode-dumps/HP-Z600.bin | Bin 0 -> 2924 bytes test/dmidecode-dumps/HP-Z600.bin.txt | 94 +++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 test/dmidecode-dumps/HP-Z600.bin create mode 100644 test/dmidecode-dumps/HP-Z600.bin.txt diff --git a/test/dmidecode-dumps/HP-Z600.bin b/test/dmidecode-dumps/HP-Z600.bin new file mode 100644 index 0000000000000000000000000000000000000000..cf759042b0771b70cdebb3434af8e31ff7052d74 GIT binary patch literal 2924 zcmbVOU2ofD6h5!*I7zcC%`&=j#XGb%B;`?bHU) z(4-cw5dWb31H=VC03;C7uDL+k1y^v*6?aHT3+H{EHfh#&5{~5foaa2xIp_Vd>#kKF z8WZFucvs!9iuLtUh@yE1E&&V^AOid$j_rOkagD_!{9?M@E;K*8-)yxeD~;8Ajjg+o z$)@L%^iw40xT2~6WJEv#QEL7Dn{s>S&*%@o*TdI-3{1&BxnHADp(|-c zp^KYa_qJP&*81iKP|#QOxSC8R(<`uOD5)9k7N|->ucs1;L~02@h=@FaFANe4K)reZnT>Bz5BQ`L6@4F8|)vW=u#@3Qs^9wPo*>Sh0g(# z$j2lZfDoKIoJ9SfN&GQCkX_g%yCi_6gXHst*KkevV*wyv5RgIUpbx=#7YqXV zl7IqA2Mm-FU2xze+0aR{r;e8m1j9gH1E8)})f9k0@O0P4}c0c zGW$%|PBA+Mg#EduQ`AaSW6x)Cq{*4Vnwz6M#YdSql$9R|FPO_Yo3SwbRqi@%*)`W>HqH=`@CC=z9BLJH z=6b!yRVtQES}Zg7#U6LT)Qn2OE}PRVz^+wUz#FW+@CC00t!5N$@SYE%>81S~cwPYs zjX5`xe4O7zDnOg3E^@#PR7KykzSO zOj7Ac+KZSdSF2X-G99nvrc0*5Icf*ji(YZTXdKA*1ENH5Hv@>^mh389y1{4y$ai5$ z5;zd?0G!ldGzsKeWQZIX^#EMV!DxyxL`mYnxCh{>4o1^>aQZ|{AY+aU zElY(PreW%|Xk5uER5Ku_XEnvlDp0VhNp-%K(eh4KpRDAV;5#oCjQ0y>(^`5ak<1?{ zc%2IZs}NrutU`QX6?!iZR$-zm2o!%<#vIHZ-`PNm=u3OC;B$Rtj1vTNT=1B_ zyb7Q1Ys7%7*p~nTz*qQ^#St0A;lK-bWYx5&V_N{R2%a-|wcE2ecsS9qNFL2Obcm$m zm`8_1&>_rv5k-K1u4BY?%z%`$u^R^t1B%QAKts6Y_OGwx60EEMj6^J?t$OZV!q-i{ zu>r6bE5nX7g5OAB0g*(4D;}fmzG#(pqAOms05*@tm5k9hG5W)OZKv7TqWW56dwYGG zvGCB^i#Z-mgquk76N%H@lW4eE_F`3!CV|^StM$_ITbmoL=hEHscs{80@D_V{R`bE; z)}w>^mOO$V7JCTGNNDc2rLV0&bepaHaai#PL0CQ@j1IjEWEJpB<4cHBG}xP#wH_(_P1_tzj_Fc&eyj&v9A{{dew6fOV& literal 0 HcmV?d00001 diff --git a/test/dmidecode-dumps/HP-Z600.bin.txt b/test/dmidecode-dumps/HP-Z600.bin.txt new file mode 100644 index 0000000000..d17fb8307f --- /dev/null +++ b/test/dmidecode-dumps/HP-Z600.bin.txt @@ -0,0 +1,94 @@ +MEMORY_ARRAY_LOCATION=System Board Or Motherboard +MEMORY_ARRAY_EC_TYPE=Multi-bit ECC +MEMORY_ARRAY_MAX_CAPACITY=12884901888 +MEMORY_ARRAY_NUM_DEVICES=3 +MEMORY_ARRAY_LOCATION=System Board Or Motherboard +MEMORY_ARRAY_EC_TYPE=Multi-bit ECC +MEMORY_ARRAY_MAX_CAPACITY=12884901888 +MEMORY_ARRAY_NUM_DEVICES=3 +MEMORY_DEVICE_0_TOTAL_WIDTH=72 +MEMORY_DEVICE_0_DATA_WIDTH=64 +MEMORY_DEVICE_0_SIZE=8589934592 +MEMORY_DEVICE_0_FORM_FACTOR=DIMM +MEMORY_DEVICE_0_LOCATOR=CPU0 DIMM1 +MEMORY_DEVICE_0_BANK_LOCATOR=Not Specified +MEMORY_DEVICE_0_TYPE=DDR3 +MEMORY_DEVICE_0_TYPE_DETAIL=Synchronous Unbuffered (Unregistered) +MEMORY_DEVICE_0_SPEED_MTS=1600 +MEMORY_DEVICE_0_MANUFACTURER=JEDEC ID:80 AD +MEMORY_DEVICE_0_SERIAL_NUMBER=BC8A0E80 +MEMORY_DEVICE_0_ASSET_TAG=Not Specified +MEMORY_DEVICE_0_PART_NUMBER=HMT41GU7AFR8C-PB +MEMORY_DEVICE_0_RANK=2 +MEMORY_DEVICE_1_TOTAL_WIDTH=72 +MEMORY_DEVICE_1_DATA_WIDTH=64 +MEMORY_DEVICE_1_SIZE=8589934592 +MEMORY_DEVICE_1_FORM_FACTOR=DIMM +MEMORY_DEVICE_1_LOCATOR=CPU0 DIMM2 +MEMORY_DEVICE_1_BANK_LOCATOR=Not Specified +MEMORY_DEVICE_1_TYPE=DDR3 +MEMORY_DEVICE_1_TYPE_DETAIL=Synchronous Unbuffered (Unregistered) +MEMORY_DEVICE_1_SPEED_MTS=1600 +MEMORY_DEVICE_1_MANUFACTURER=JEDEC ID:80 AD +MEMORY_DEVICE_1_SERIAL_NUMBER=86A6934F +MEMORY_DEVICE_1_ASSET_TAG=Not Specified +MEMORY_DEVICE_1_PART_NUMBER=HMT41GU7AFR8C-PB +MEMORY_DEVICE_1_RANK=2 +MEMORY_DEVICE_2_DATA_WIDTH=64 +MEMORY_DEVICE_2_PRESENT=0 +MEMORY_DEVICE_2_FORM_FACTOR=DIMM +MEMORY_DEVICE_2_LOCATOR=CPU0 DIMM3 +MEMORY_DEVICE_2_BANK_LOCATOR=Not Specified +MEMORY_DEVICE_2_TYPE=DDR3 +MEMORY_DEVICE_2_TYPE_DETAIL=Synchronous +MEMORY_DEVICE_2_MANUFACTURER=JEDEC ID: +MEMORY_DEVICE_2_ASSET_TAG=Not Specified +MEMORY_DEVICE_3_TOTAL_WIDTH=72 +MEMORY_DEVICE_3_DATA_WIDTH=64 +MEMORY_DEVICE_3_SIZE=8589934592 +MEMORY_DEVICE_3_FORM_FACTOR=DIMM +MEMORY_DEVICE_3_LOCATOR=CPU1 DIMM1 +MEMORY_DEVICE_3_BANK_LOCATOR=Not Specified +MEMORY_DEVICE_3_TYPE=DDR3 +MEMORY_DEVICE_3_TYPE_DETAIL=Synchronous Unbuffered (Unregistered) +MEMORY_DEVICE_3_SPEED_MTS=1600 +MEMORY_DEVICE_3_MANUFACTURER=JEDEC ID:80 AD +MEMORY_DEVICE_3_SERIAL_NUMBER=A18A0E80 +MEMORY_DEVICE_3_ASSET_TAG=Not Specified +MEMORY_DEVICE_3_PART_NUMBER=HMT41GU7AFR8C-PB +MEMORY_DEVICE_3_RANK=2 +MEMORY_DEVICE_4_TOTAL_WIDTH=72 +MEMORY_DEVICE_4_DATA_WIDTH=64 +MEMORY_DEVICE_4_SIZE=8589934592 +MEMORY_DEVICE_4_FORM_FACTOR=DIMM +MEMORY_DEVICE_4_LOCATOR=CPU1 DIMM2 +MEMORY_DEVICE_4_BANK_LOCATOR=Not Specified +MEMORY_DEVICE_4_TYPE=DDR3 +MEMORY_DEVICE_4_TYPE_DETAIL=Synchronous Unbuffered (Unregistered) +MEMORY_DEVICE_4_SPEED_MTS=1600 +MEMORY_DEVICE_4_MANUFACTURER=JEDEC ID:80 AD +MEMORY_DEVICE_4_SERIAL_NUMBER=7D8A0E80 +MEMORY_DEVICE_4_ASSET_TAG=Not Specified +MEMORY_DEVICE_4_PART_NUMBER=HMT41GU7AFR8C-PB +MEMORY_DEVICE_4_RANK=2 +MEMORY_DEVICE_5_DATA_WIDTH=64 +MEMORY_DEVICE_5_PRESENT=0 +MEMORY_DEVICE_5_FORM_FACTOR=DIMM +MEMORY_DEVICE_5_LOCATOR=CPU1 DIMM3 +MEMORY_DEVICE_5_BANK_LOCATOR=Not Specified +MEMORY_DEVICE_5_TYPE=DDR3 +MEMORY_DEVICE_5_TYPE_DETAIL=Synchronous +MEMORY_DEVICE_5_MANUFACTURER=JEDEC ID: +MEMORY_DEVICE_5_ASSET_TAG=Not Specified +MEMORY_DEVICE_6_TOTAL_WIDTH=2 +MEMORY_DEVICE_6_DATA_WIDTH=2 +MEMORY_DEVICE_6_SIZE=2097152 +MEMORY_DEVICE_6_FORM_FACTOR=Chip +MEMORY_DEVICE_6_LOCATOR=SYSTEM ROM +MEMORY_DEVICE_6_BANK_LOCATOR=Not Specified +MEMORY_DEVICE_6_TYPE=Flash +MEMORY_DEVICE_6_TYPE_DETAIL=Non-Volatile +MEMORY_DEVICE_6_MANUFACTURER=Not Specified +MEMORY_DEVICE_6_SERIAL_NUMBER=Not Specified +MEMORY_DEVICE_6_ASSET_TAG=Not Specified +MEMORY_DEVICE_6_PART_NUMBER=Not Specified