Add testing for single section CPER.
diff --git a/tests/ir-tests.cpp b/tests/ir-tests.cpp
index 86ec021..23c23af 100644
--- a/tests/ir-tests.cpp
+++ b/tests/ir-tests.cpp
@@ -18,15 +18,20 @@
*/
//Tests a single randomly generated CPER section of the given type to ensure CPER-JSON IR validity.
-void single_section_ir_test(const char *section_name)
+void cper_log_section_ir_test(const char *section_name, int single_section)
{
- //Generate CPER record for the given type.
+ //Generate full CPER record for the given type.
char *buf;
size_t size;
- FILE *record = generate_record_memstream(§ion_name, 1, &buf, &size);
+ FILE *record = generate_record_memstream(§ion_name, 1, &buf, &size,
+ single_section);
//Convert to IR, free resources.
- json_object *ir = cper_to_ir(record);
+ json_object *ir;
+ if (single_section)
+ ir = cper_single_section_to_ir(record);
+ else
+ ir = cper_to_ir(record);
fclose(record);
free(buf);
@@ -34,30 +39,43 @@
char error_message[JSON_ERROR_MSG_MAX_LEN] = { 0 };
int valid = validate_schema_from_file("./specification/cper-json.json",
ir, error_message);
- ASSERT_TRUE(valid) << error_message;
+ ASSERT_TRUE(valid)
+ << "IR validation test failed (single section mode = "
+ << single_section << ") with message: " << error_message;
}
//Checks for binary round-trip equality for a given randomly generated CPER record.
-void single_section_binary_test(const char *section_name)
+void cper_log_section_binary_test(const char *section_name, int single_section)
{
//Generate CPER record for the given type.
char *buf;
size_t size;
- FILE *record = generate_record_memstream(§ion_name, 1, &buf, &size);
+ FILE *record = generate_record_memstream(§ion_name, 1, &buf, &size,
+ single_section);
- //Convert to IR, then back to binary, getting a stream out.
- json_object *ir = cper_to_ir(record);
+ //Convert to IR.
+ json_object *ir;
+ if (single_section)
+ ir = cper_single_section_to_ir(record);
+ else
+ ir = cper_to_ir(record);
+
+ //Now convert back to binary, and get a stream out.
char *cper_buf;
size_t cper_buf_size;
FILE *stream = open_memstream(&cper_buf, &cper_buf_size);
- ir_to_cper(ir, stream);
+ if (single_section)
+ ir_single_section_to_cper(ir, stream);
+ else
+ ir_to_cper(ir, stream);
size_t cper_len = ftell(stream);
fclose(stream);
//Validate the two are identical.
ASSERT_GE(size, cper_len);
ASSERT_EQ(memcmp(buf, cper_buf, cper_len), 0)
- << "Binary output was not identical to input.";
+ << "Binary output was not identical to input (single section mode = "
+ << single_section << ").";
//Free everything up.
fclose(record);
@@ -65,171 +83,186 @@
free(cper_buf);
}
+//Tests randomly generated CPER sections for IR validity of a given type, in both single section mode and full CPER log mode.
+void cper_log_section_dual_ir_test(const char *section_name)
+{
+ cper_log_section_ir_test(section_name, 0);
+ cper_log_section_ir_test(section_name, 1);
+}
+
+//Tests randomly generated CPER sections for binary compatibility of a given type, in both single section mode and full CPER log mode.
+void cper_log_section_dual_binary_test(const char *section_name)
+{
+ cper_log_section_binary_test(section_name, 0);
+ cper_log_section_binary_test(section_name, 1);
+}
+
/*
* Single section tests.
*/
+
//Generic processor tests.
TEST(GenericProcessorTests, IRValid)
{
- single_section_ir_test("generic");
+ cper_log_section_dual_ir_test("generic");
}
TEST(GenericProcessorTests, BinaryEqual)
{
- single_section_binary_test("generic");
+ cper_log_section_dual_binary_test("generic");
}
//IA32/x64 tests.
TEST(IA32x64Tests, IRValid)
{
- single_section_ir_test("ia32x64");
+ cper_log_section_dual_ir_test("ia32x64");
}
TEST(IA32x64Tests, BinaryEqual)
{
- single_section_binary_test("ia32x64");
+ cper_log_section_dual_binary_test("ia32x64");
}
// TEST(IPFTests, IRValid) {
-// single_section_ir_test("ipf");
+// cper_log_section_dual_ir_test("ipf");
// }
//ARM tests.
TEST(ArmTests, IRValid)
{
- single_section_ir_test("arm");
+ cper_log_section_dual_ir_test("arm");
}
TEST(ArmTests, BinaryEqual)
{
- single_section_binary_test("arm");
+ cper_log_section_dual_binary_test("arm");
}
//Memory tests.
TEST(MemoryTests, IRValid)
{
- single_section_ir_test("memory");
+ cper_log_section_dual_ir_test("memory");
}
TEST(MemoryTests, BinaryEqual)
{
- single_section_binary_test("memory");
+ cper_log_section_dual_binary_test("memory");
}
//Memory 2 tests.
TEST(Memory2Tests, IRValid)
{
- single_section_ir_test("memory2");
+ cper_log_section_dual_ir_test("memory2");
}
TEST(Memory2Tests, BinaryEqual)
{
- single_section_binary_test("memory2");
+ cper_log_section_dual_binary_test("memory2");
}
//PCIe tests.
TEST(PCIeTests, IRValid)
{
- single_section_ir_test("pcie");
+ cper_log_section_dual_ir_test("pcie");
}
TEST(PCIeTests, BinaryEqual)
{
- single_section_binary_test("pcie");
+ cper_log_section_dual_binary_test("pcie");
}
//Firmware tests.
TEST(FirmwareTests, IRValid)
{
- single_section_ir_test("firmware");
+ cper_log_section_dual_ir_test("firmware");
}
TEST(FirmwareTests, BinaryEqual)
{
- single_section_binary_test("firmware");
+ cper_log_section_dual_binary_test("firmware");
}
//PCI Bus tests.
TEST(PCIBusTests, IRValid)
{
- single_section_ir_test("pcibus");
+ cper_log_section_dual_ir_test("pcibus");
}
TEST(PCIBusTests, BinaryEqual)
{
- single_section_binary_test("pcibus");
+ cper_log_section_dual_binary_test("pcibus");
}
//PCI Device tests.
TEST(PCIDevTests, IRValid)
{
- single_section_ir_test("pcidev");
+ cper_log_section_dual_ir_test("pcidev");
}
TEST(PCIDevTests, BinaryEqual)
{
- single_section_binary_test("pcidev");
+ cper_log_section_dual_binary_test("pcidev");
}
//Generic DMAr tests.
TEST(DMArGenericTests, IRValid)
{
- single_section_ir_test("dmargeneric");
+ cper_log_section_dual_ir_test("dmargeneric");
}
TEST(DMArGenericTests, BinaryEqual)
{
- single_section_binary_test("dmargeneric");
+ cper_log_section_dual_binary_test("dmargeneric");
}
//VT-d DMAr tests.
TEST(DMArVtdTests, IRValid)
{
- single_section_ir_test("dmarvtd");
+ cper_log_section_dual_ir_test("dmarvtd");
}
TEST(DMArVtdTests, BinaryEqual)
{
- single_section_binary_test("dmarvtd");
+ cper_log_section_dual_binary_test("dmarvtd");
}
//IOMMU DMAr tests.
TEST(DMArIOMMUTests, IRValid)
{
- single_section_ir_test("dmariommu");
+ cper_log_section_dual_ir_test("dmariommu");
}
TEST(DMArIOMMUTests, BinaryEqual)
{
- single_section_binary_test("dmariommu");
+ cper_log_section_dual_binary_test("dmariommu");
}
//CCIX PER tests.
TEST(CCIXPERTests, IRValid)
{
- single_section_ir_test("ccixper");
+ cper_log_section_dual_ir_test("ccixper");
}
TEST(CCIXPERTests, BinaryEqual)
{
- single_section_binary_test("ccixper");
+ cper_log_section_dual_binary_test("ccixper");
}
//CXL Protocol tests.
TEST(CXLProtocolTests, IRValid)
{
- single_section_ir_test("cxlprotocol");
+ cper_log_section_dual_ir_test("cxlprotocol");
}
TEST(CXLProtocolTests, BinaryEqual)
{
- single_section_binary_test("cxlprotocol");
+ cper_log_section_dual_binary_test("cxlprotocol");
}
//CXL Component tests.
TEST(CXLComponentTests, IRValid)
{
- single_section_ir_test("cxlcomponent");
+ cper_log_section_dual_ir_test("cxlcomponent");
}
TEST(CXLComponentTests, BinaryEqual)
{
- single_section_binary_test("cxlcomponent");
+ cper_log_section_dual_binary_test("cxlcomponent");
}
//Unknown section tests.
TEST(UnknownSectionTests, IRValid)
{
- single_section_ir_test("unknown");
+ cper_log_section_dual_ir_test("unknown");
}
TEST(UnknownSectionTests, BinaryEqual)
{
- single_section_binary_test("unknown");
+ cper_log_section_dual_binary_test("unknown");
}
//Entrypoint for the testing program.