From 347a712ab19b33867efc1e58bcd2f3219271cd3f Mon Sep 17 00:00:00 2001 From: Viktor Mihajlovski Date: Fri, 14 Dec 2012 16:08:25 +0100 Subject: [PATCH] tests: Add tests for sysinfo Test cases for virSysinfoRead. Initially, there are tests for x86 (DMI based) and s390 (/proc/... based). In lack of PPC data, I have stubbed out the test for it, but it can be added with a minimal effort. Signed-off-by: Viktor Mihajlovski --- cfg.mk | 2 +- tests/Makefile.am | 6 + tests/sysinfodata/dmidecode.sh | 3 + tests/sysinfodata/s390cpuinfo.data | 12 ++ tests/sysinfodata/s390sysinfo.data | 114 +++++++++++++++ tests/sysinfodata/s390sysinfo.expect | 25 ++++ tests/sysinfodata/x86sysinfo.data | 83 +++++++++++ tests/sysinfodata/x86sysinfo.expect | 53 +++++++ tests/sysinfotest.c | 200 +++++++++++++++++++++++++++ 9 files changed, 497 insertions(+), 1 deletion(-) create mode 100755 tests/sysinfodata/dmidecode.sh create mode 100644 tests/sysinfodata/s390cpuinfo.data create mode 100644 tests/sysinfodata/s390sysinfo.data create mode 100644 tests/sysinfodata/s390sysinfo.expect create mode 100644 tests/sysinfodata/x86sysinfo.data create mode 100644 tests/sysinfodata/x86sysinfo.expect create mode 100644 tests/sysinfotest.c diff --git a/cfg.mk b/cfg.mk index 1fe007e794..84cc942f63 100644 --- a/cfg.mk +++ b/cfg.mk @@ -821,7 +821,7 @@ exclude_file_name_regexp--sc_require_config_h = ^(examples/|tools/virsh-$(_virsh exclude_file_name_regexp--sc_require_config_h_first = ^(examples/|tools/virsh-$(_virsh_includes)\.c$$) exclude_file_name_regexp--sc_trailing_blank = \ - (/qemuhelpdata/|\.(fig|gif|ico|png)$$) + (/qemuhelpdata/|/sysinfodata/.*\.data|\.(fig|gif|ico|png)$$) exclude_file_name_regexp--sc_unmarked_diagnostics = \ ^(docs/apibuild.py|tests/virt-aa-helper-test)$$ diff --git a/tests/Makefile.am b/tests/Makefile.am index 5fb26ad47e..b603ea3128 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -76,6 +76,7 @@ EXTRA_DIST = \ storagevolschematest \ storagevolxml2xmlin \ storagevolxml2xmlout \ + sysinfodata \ test-lib.sh \ vmx2xmldata \ xencapsdata \ @@ -96,6 +97,7 @@ test_programs = virshtest sockettest \ virbitmaptest \ virlockspacetest \ virstringtest \ + sysinfotest \ $(NULL) if WITH_SECDRIVER_SELINUX @@ -637,6 +639,10 @@ shunloadtest_SOURCES = \ shunloadtest_LDADD = $(LIB_PTHREAD) shunloadtest_DEPENDENCIES = libshunload.la +sysinfotest_SOURCES = \ + sysinfotest.c testutils.h testutils.c +sysinfotest_LDADD = $(LDADDS) + if WITH_CIL CILOPTFLAGS = CILOPTINCS = diff --git a/tests/sysinfodata/dmidecode.sh b/tests/sysinfodata/dmidecode.sh new file mode 100755 index 0000000000..28aed61459 --- /dev/null +++ b/tests/sysinfodata/dmidecode.sh @@ -0,0 +1,3 @@ +#!/bin/sh +DATAFILE=`dirname $0`/x86sysinfo.data +cat $DATAFILE diff --git a/tests/sysinfodata/s390cpuinfo.data b/tests/sysinfodata/s390cpuinfo.data new file mode 100644 index 0000000000..e44b28e7a9 --- /dev/null +++ b/tests/sysinfodata/s390cpuinfo.data @@ -0,0 +1,12 @@ +vendor_id : IBM/S390 +# processors : 3 +bogomips per cpu: 14367.00 +features : esan3 zarch stfle msa ldisp eimm dfp etf3eh highgprs +cache0 : level=1 type=Data scope=Private size=128K line_size=256 associativity=8 +cache1 : level=1 type=Instruction scope=Private size=64K line_size=256 associativity=4 +cache2 : level=2 type=Unified scope=Private size=1536K line_size=256 associativity=12 +cache3 : level=3 type=Unified scope=Shared size=24576K line_size=256 associativity=12 +cache4 : level=4 type=Unified scope=Shared size=196608K line_size=256 associativity=24 +processor 0: version = FF, identification = 000123, machine = 2817 +processor 1: version = FF, identification = 100123, machine = 2817 +processor 2: version = FF, identification = 200123, machine = 2817 diff --git a/tests/sysinfodata/s390sysinfo.data b/tests/sysinfodata/s390sysinfo.data new file mode 100644 index 0000000000..e338e2dd71 --- /dev/null +++ b/tests/sysinfodata/s390sysinfo.data @@ -0,0 +1,114 @@ +Manufacturer: IBM +Type: 2817 +Model: 703 M66 +Sequence Code: 0000000000012345 +Plant: 02 +Model Capacity: 703 00000408 +Model Perm. Capacity: 703 00000408 +Model Temp. Capacity: 703 00000408 +Nominal Cap. Rating: 00000408 +Nominal Perm. Rating: 00000408 +Nominal Temp. Rating: 00000408 +Capacity Adj. Ind.: 100 +Capacity Ch. Reason: 0 +Capacity Transient: 0 +Type 1 Percentage: 0 +Type 2 Percentage: 0 +Type 3 Percentage: 0 +Type 4 Percentage: 0 +Type 5 Percentage: 0 + +CPUs Total: 69 +CPUs Configured: 3 +CPUs Standby: 0 +CPUs Reserved: 66 +Capability: 696 +Nominal Capability: 696 +Secondary Capability: 696 +Adjustment 02-way: 61900 +Adjustment 03-way: 60280 +Adjustment 04-way: 59080 +Adjustment 05-way: 57740 +Adjustment 06-way: 56900 +Adjustment 07-way: 56040 +Adjustment 08-way: 55120 +Adjustment 09-way: 53950 +Adjustment 10-way: 52980 +Adjustment 11-way: 52000 +Adjustment 12-way: 51080 +Adjustment 13-way: 50380 +Adjustment 14-way: 49600 +Adjustment 15-way: 48760 +Adjustment 16-way: 47860 +Adjustment 17-way: 47310 +Adjustment 18-way: 46860 +Adjustment 19-way: 46300 +Adjustment 20-way: 46020 +Adjustment 21-way: 45520 +Adjustment 22-way: 45260 +Adjustment 23-way: 44960 +Adjustment 24-way: 44690 +Adjustment 25-way: 44390 +Adjustment 26-way: 44140 +Adjustment 27-way: 43860 +Adjustment 28-way: 43460 +Adjustment 29-way: 43200 +Adjustment 30-way: 42900 +Adjustment 31-way: 42620 +Adjustment 32-way: 42360 +Adjustment 33-way: 42060 +Adjustment 34-way: 41800 +Adjustment 35-way: 41600 +Adjustment 36-way: 41440 +Adjustment 37-way: 41280 +Adjustment 38-way: 41040 +Adjustment 39-way: 40820 +Adjustment 40-way: 40570 +Adjustment 41-way: 40350 +Adjustment 42-way: 40260 +Adjustment 43-way: 40060 +Adjustment 44-way: 39910 +Adjustment 45-way: 39750 +Adjustment 46-way: 39540 +Adjustment 47-way: 39360 +Adjustment 48-way: 39260 +Adjustment 49-way: 39180 +Adjustment 50-way: 39000 +Adjustment 51-way: 38840 +Adjustment 52-way: 38740 +Adjustment 53-way: 38640 +Adjustment 54-way: 38520 +Adjustment 55-way: 38440 +Adjustment 56-way: 38330 +Adjustment 57-way: 38240 +Adjustment 58-way: 38160 +Adjustment 59-way: 38080 +Adjustment 60-way: 37960 +Adjustment 61-way: 37880 +Adjustment 62-way: 37780 +Adjustment 63-way: 37680 +Adjustment 64-way: 37580 +Adjustment 65-way: 37480 +Adjustment 66-way: 37360 +Adjustment 67-way: 37240 +Adjustment 68-way: 37120 +Adjustment 69-way: 36970 + +LPAR Number: 47 +LPAR Characteristics: Shared +LPAR Name: VIRLP01 +LPAR Adjustment: 253 +LPAR CPUs Total: 16 +LPAR CPUs Configured: 16 +LPAR CPUs Standby: 0 +LPAR CPUs Reserved: 0 +LPAR CPUs Dedicated: 0 +LPAR CPUs Shared: 16 + +VM00 Name: VIRVM01 +VM00 Control Program: z/VM 6.2.0 +VM00 Adjustment: 187 +VM00 CPUs Total: 3 +VM00 CPUs Configured: 3 +VM00 CPUs Standby: 0 +VM00 CPUs Reserved: 0 diff --git a/tests/sysinfodata/s390sysinfo.expect b/tests/sysinfodata/s390sysinfo.expect new file mode 100644 index 0000000000..21712db577 --- /dev/null +++ b/tests/sysinfodata/s390sysinfo.expect @@ -0,0 +1,25 @@ + + + IBM + 0000000000012345 + 2817 + + + 2817 + IBM/S390 + FF + 000123 + + + 2817 + IBM/S390 + FF + 100123 + + + 2817 + IBM/S390 + FF + 200123 + + diff --git a/tests/sysinfodata/x86sysinfo.data b/tests/sysinfodata/x86sysinfo.data new file mode 100644 index 0000000000..03aa1175ee --- /dev/null +++ b/tests/sysinfodata/x86sysinfo.data @@ -0,0 +1,83 @@ +BIOS Information + Vendor: LENOVO + Version: 6DET62WW (3.12 ) + Release Date: 01/12/2010 + Address: 0xE0000 + Runtime Size: 128 kB + ROM Size: 8192 kB + Characteristics: + PCI is supported + PC Card (PCMCIA) is supported + PNP is supported + BIOS is upgradeable + BIOS shadowing is allowed + ESCD support is available + Boot from CD is supported + Selectable boot is supported + BIOS ROM is socketed + EDD is supported + ACPI is supported + USB legacy is supported + BIOS boot specification is supported + Targeted content distribution is supported + BIOS Revision: 3.18 + Firmware Revision: 1.6 + +System Information + Manufacturer: LENOVO + Product Name: 7458AU2 + Version: ThinkPad X200 + Serial Number: L3AAK6G + UUID: 4CD00C81-4A85-11CB-88EC-A5A7A8F13986 + Wake-up Type: Power Switch + SKU Number: Not Specified + Family: ThinkPad X200 + +Processor Information + Socket Designation: None + Type: Central Processor + Family: Other + Manufacturer: GenuineIntel + ID: 76 06 01 00 FF FB EB BF + Version: Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz + Voltage: 1.2 V + External Clock: 266 MHz + Max Speed: 2400 MHz + Current Speed: 2400 MHz + Status: Populated, Enabled + Upgrade: None + Serial Number: Not Specified + Asset Tag: Not Specified + Part Number: Not Specified + +Memory Device + Total Width: 64 bits + Data Width: 64 bits + Size: 2048 MB + Form Factor: SODIMM + Set: None + Locator: DIMM 1 + Bank Locator: Bank 0/1 + Type: + Type Detail: Synchronous + Speed: 1066 MHz (0.9 ns) + Manufacturer: 80CE + Serial Number: 46614E40 + Asset Tag: 0841 + Part Number: M471B5673DZ1-CF8 + +Memory Device + Total Width: 64 bits + Data Width: 64 bits + Size: 2048 MB + Form Factor: SODIMM + Set: None + Locator: DIMM 2 + Bank Locator: Bank 2/3 + Type: + Type Detail: Synchronous + Speed: 1066 MHz (0.9 ns) + Manufacturer: 8551 + Serial Number: 29057112 + Asset Tag: 0839 + Part Number: IMSH2GS13A1F1C-10F diff --git a/tests/sysinfodata/x86sysinfo.expect b/tests/sysinfodata/x86sysinfo.expect new file mode 100644 index 0000000000..fcdd790cbd --- /dev/null +++ b/tests/sysinfodata/x86sysinfo.expect @@ -0,0 +1,53 @@ + + + LENOVO + 6DET62WW (3.12 ) + 01/12/2010 + 3.18 + + + LENOVO + 7458AU2 + ThinkPad X200 + L3AAK6G + 4CD00C81-4A85-11CB-88EC-A5A7A8F13986 + Not Specified + ThinkPad X200 + + + None + Central Processor + Other + GenuineIntel + Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz + 266 MHz + 2400 MHz + Populated, Enabled + Not Specified + Not Specified + + + 2048 MB + SODIMM + DIMM 1 + Bank 0/1 + <OUT OF SPEC> + Synchronous + 1066 MHz (0.9 ns) + 80CE + 46614E40 + M471B5673DZ1-CF8 + + + 2048 MB + SODIMM + DIMM 2 + Bank 2/3 + <OUT OF SPEC> + Synchronous + 1066 MHz (0.9 ns) + 8551 + 29057112 + IMSH2GS13A1F1C-10F + + diff --git a/tests/sysinfotest.c b/tests/sysinfotest.c new file mode 100644 index 0000000000..79ee1286a2 --- /dev/null +++ b/tests/sysinfotest.c @@ -0,0 +1,200 @@ +/* + * sysinfotest.c: Testcase(s) for virSysinfoRead + * + * Copyright IBM Corp. 2012 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + * + * Authors: + * Viktor Mihajlovski + */ + +#include + +#include +#include +#include +#include + +#include "internal.h" + +#include "buf.h" +#include "sysinfo.h" +#include "testutils.h" +#include "util.h" +#include "virfile.h" + +#if defined (__linux__) + +/* from sysinfo.c */ +void virSysinfoSetup(const char *decoder, + const char *sysinfo, + const char *cpuinfo); + +struct testSysinfoData { + char *decoder; /* name of dmi decoder binary/script */ + char *sysinfo; /* name of /proc/sysinfo substitute file */ + char *cpuinfo; /* name of /proc/cpuinfo substitute file */ + char *expected; /* (required) file containing output of virSysinfoFormat */ +}; + +# if defined(__powerpc__) || defined(__powerpc64__) +/* TODO ppc: remove the if defined() branch + to enable the real test run after providing test data, see below. + */ +static int +testSysinfo(const void *data ATTRIBUTE_UNUSED) +{ + return EXIT_AM_SKIP; +} + +static int +sysinfotest_run(const char *test ATTRIBUTE_UNUSED, + const char *decoder ATTRIBUTE_UNUSED, + const char *sysinfo ATTRIBUTE_UNUSED, + const char *cpuinfo ATTRIBUTE_UNUSED, + const char *expected ATTRIBUTE_UNUSED) +{ + return testSysinfo(NULL); +} +# else + +static int +testSysinfo(const void *data) +{ + int result = -1; + char *sysfsExpectData = NULL; + const char *sysfsActualData; + virSysinfoDefPtr ret = NULL; + virBuffer buf = VIR_BUFFER_INITIALIZER; + const struct testSysinfoData *testdata = data; + + virSysinfoSetup(testdata->decoder, testdata->sysinfo, testdata->cpuinfo); + + if (!testdata->expected || + virtTestLoadFile(testdata->expected, &sysfsExpectData) < 0 || + !(ret = virSysinfoRead())) { + goto cleanup; + } + + if (virSysinfoFormat(&buf,ret) < 0) + goto cleanup; + + if (!(sysfsActualData = virBufferCurrentContent(&buf))) + goto cleanup; + + if (STRNEQ(sysfsActualData, sysfsExpectData)) { + virtTestDifference(stderr, sysfsActualData, sysfsExpectData); + goto cleanup; + } + + result = 0; + +cleanup: + VIR_FREE(sysfsExpectData); + virSysinfoDefFree(ret); + virBufferFreeAndReset(&buf); + + return result; +} + +static int +sysinfotest_run(const char *test, + const char *decoder, + const char *sysinfo, + const char *cpuinfo, + const char *expected) +{ + struct testSysinfoData testdata = { NULL }; + int ret = EXIT_FAILURE; + + if ((decoder && + virAsprintf(&testdata.decoder, "%s/%s", abs_srcdir, decoder) < 0) || + (sysinfo && + virAsprintf(&testdata.sysinfo, "%s/%s", abs_srcdir, sysinfo) < 0) || + (cpuinfo && + virAsprintf(&testdata.cpuinfo, "%s/%s", abs_srcdir, cpuinfo) < 0) || + (expected && + virAsprintf(&testdata.expected, "%s/%s", abs_srcdir, expected) < 0)) { + goto error; + } + + if (virtTestRun(test, 1, testSysinfo, &testdata) < 0) + goto error; + + ret = EXIT_SUCCESS; + +error: + VIR_FREE(testdata.decoder); + VIR_FREE(testdata.sysinfo); + VIR_FREE(testdata.cpuinfo); + VIR_FREE(testdata.expected); + return ret; +} +# endif /* defined(__powerpc__) ... */ + +# if defined(__s390__) || defined(__s390x__) +static int +test_s390(void) +{ + return sysinfotest_run("s390 sysinfo", + NULL, + "/sysinfodata/s390sysinfo.data", + "/sysinfodata/s390cpuinfo.data", + "/sysinfodata/s390sysinfo.expect"); +} + +VIRT_TEST_MAIN(test_s390) +# elif defined(__powerpc__) || defined(__powerpc64__) +/* TODO for PPC owner: provide test data + and enable the real sysinfotest_run above +*/ +static int +test_ppc(void) +{ + return sysinfotest_run("ppc sysinfo", + NULL, + NULL, + "/sysinfodata/ppccpuinfo.data", + "/sysinfodata/ppcsysinfo.expect"); +} + +VIRT_TEST_MAIN(test_ppc) +# elif defined(__i386__) || defined(__x86_64__) || defined(__amd64__) +static int +test_x86(void) +{ + return sysinfotest_run("x86 sysinfo", + "/sysinfodata/dmidecode.sh", + NULL, + NULL, + "/sysinfodata/x86sysinfo.expect"); +} + +VIRT_TEST_MAIN(test_x86) +# else +int +main(void) +{ + return EXIT_AM_SKIP; +} +# endif /* defined(__s390__) ... */ +#else +int +main(void) +{ + return EXIT_AM_SKIP; +} +#endif /* defined(__linux__) */