1 #include <cppunit/CompilerOutputter.h>
2 #include <cppunit/TestCaller.h>
3 #include <cppunit/TestFixture.h>
4 #include <cppunit/extensions/TestFactoryRegistry.h>
5 #include <cppunit/ui/text/TestRunner.h>
6 
7 #include "metadata.hh"
8 
9 class MetaDataTest : public CppUnit::TestFixture {
10    public:
suite()11     static CppUnit::TestSuite *suite() {
12         CppUnit::TestSuite *suiteOfTests =
13             new CppUnit::TestSuite("Meta Data Test");
14 
15         suiteOfTests->addTest(new CppUnit::TestCaller<MetaDataTest>(
16             "should set and get meta data", &MetaDataTest::basic));
17 
18         suiteOfTests->addTest(new CppUnit::TestCaller<MetaDataTest>(
19             "should get proper size", &MetaDataTest::size));
20 
21         suiteOfTests->addTest(new CppUnit::TestCaller<MetaDataTest>(
22             "should throw on non-existing key",
23             &MetaDataTest::throwOnNonExistingKey));
24 
25         suiteOfTests->addTest(new CppUnit::TestCaller<MetaDataTest>(
26             "should deserialize empty SecureArray",
27             &MetaDataTest::serializeEmptySecureArray));
28 
29         suiteOfTests->addTest(new CppUnit::TestCaller<MetaDataTest>(
30             "should throw on deserializing invalid SecureArray",
31             &MetaDataTest::throwOnInvalidSecureArray));
32 
33         suiteOfTests->addTest(new CppUnit::TestCaller<MetaDataTest>(
34             "should serialize and deserialize",
35             &MetaDataTest::serializeAndDeserialize));
36         return suiteOfTests;
37     }
38 
basic()39     void basic() {
40         yapet::MetaData metaData;
41 
42         metaData.setValue("test", 42);
43         CPPUNIT_ASSERT(metaData.getValue("test") == 42);
44     }
45 
size()46     void size() {
47         yapet::MetaData metaData;
48         CPPUNIT_ASSERT(metaData.size() == 0);
49 
50         metaData.setValue("test", 42);
51         CPPUNIT_ASSERT(metaData.size() == 1);
52     }
53 
throwOnNonExistingKey()54     void throwOnNonExistingKey() {
55         yapet::MetaData metaData;
56 
57         CPPUNIT_ASSERT_THROW(metaData.getValue("non-existing"),
58                              std::out_of_range);
59     }
60 
serializeEmptySecureArray()61     void serializeEmptySecureArray() {
62         yapet::MetaData metaData{yapet::SecureArray{}};
63     }
64 
throwOnInvalidSecureArray()65     void throwOnInvalidSecureArray() {
66         yapet::SecureArray secureArray{yapet::toSecureArray("test")};
67 
68         CPPUNIT_ASSERT_THROW(yapet::MetaData{secureArray},
69                              std::invalid_argument);
70     }
71 
serializeAndDeserialize()72     void serializeAndDeserialize() {
73         yapet::MetaData metaData;
74         metaData.setValue("a", 42);
75         metaData.setValue("longerName", 5);
76         metaData.setValue("b", 3);
77 
78         auto serialized{metaData.serialize()};
79 
80         yapet::MetaData deserialized{serialized};
81         CPPUNIT_ASSERT(deserialized.getValue("a") == 42);
82         CPPUNIT_ASSERT(deserialized.getValue("b") == 3);
83         CPPUNIT_ASSERT(deserialized.getValue("longerName") == 5);
84     }
85 };
86 
main()87 int main() {
88     CppUnit::TextUi::TestRunner runner;
89     runner.addTest(MetaDataTest::suite());
90     return runner.run() ? 0 : 1;
91 }
92