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 "header10.hh"
8 #include "headererror.hh"
9 
10 class Header10Test : public CppUnit::TestFixture {
11    public:
suite()12     static CppUnit::TestSuite *suite() {
13         CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite("Header 1.0");
14 
15         suiteOfTests->addTest(new CppUnit::TestCaller<Header10Test>(
16             "should serialize and deserialize with constructor",
17             &Header10Test::serializeAndDeserializeWithCtor));
18         suiteOfTests->addTest(new CppUnit::TestCaller<Header10Test>(
19             "should serialize and deserialize by assignment",
20             &Header10Test::serializeAndDeserializeWithAssignment));
21         suiteOfTests->addTest(new CppUnit::TestCaller<Header10Test>(
22             "should throw on deserializing invalid header",
23             &Header10Test::invalidHeader));
24 
25         return suiteOfTests;
26     }
27 
serializeAndDeserializeWithCtor()28     void serializeAndDeserializeWithCtor() {
29         yapet::Header10 header10{};
30 
31         yapet::SecureArray serialized{header10.serialize()};
32 
33         yapet::Header10 fromSerializedHeader{serialized};
34 
35         CPPUNIT_ASSERT(header10.passwordSetTime() ==
36                        fromSerializedHeader.passwordSetTime());
37         CPPUNIT_ASSERT(header10.version() == fromSerializedHeader.version());
38     }
39 
serializeAndDeserializeWithAssignment()40     void serializeAndDeserializeWithAssignment() {
41         yapet::Header10 header10{};
42 
43         yapet::SecureArray serialized = header10.serialize();
44 
45         yapet::Header10 fromSerializedHeader{serialized};
46 
47         CPPUNIT_ASSERT(header10.passwordSetTime() ==
48                        fromSerializedHeader.passwordSetTime());
49         CPPUNIT_ASSERT(header10.version() == fromSerializedHeader.version());
50     }
51 
invalidHeader()52     void invalidHeader() {
53         yapet::Header10 invalidHeader{std::time(0), 3};
54 
55         yapet::SecureArray serialized{invalidHeader.serialize()};
56 
57         yapet::Header10 deserializedHeader{};
58         CPPUNIT_ASSERT_THROW(deserializedHeader = serialized,
59                              yapet::HeaderError);
60 
61         yapet::Header10 header{};
62 
63         serialized = header.serialize();
64         (*serialized)[4] = 'Z';
65 
66         CPPUNIT_ASSERT_THROW(deserializedHeader = serialized,
67                              yapet::ControlStringMismatch);
68     }
69 };
70 
main()71 int main() {
72     CppUnit::TextUi::TestRunner runner;
73     runner.addTest(Header10Test::suite());
74     return runner.run() ? 0 : 1;
75 }