1 /*
2  * Copyright (C) 2009-2020 Codership Oy <info@codership.com>
3  */
4 
5 
6 #include "check_gcomm.hpp"
7 
8 #include "gcomm/view.hpp"
9 #include "gcomm/types.hpp"
10 #include "gcomm/map.hpp"
11 
12 #include <utility>
13 #include <iostream>
14 #include <stdexcept>
15 
16 using std::pair;
17 using std::make_pair;
18 using std::string;
19 
20 #include "check_templ.hpp"
21 
22 #include <check.h>
23 
24 using namespace gcomm;
25 
START_TEST(test_uuid)26 START_TEST(test_uuid)
27 {
28     UUID uuid;
29     ck_assert_msg(uuid.full_str() == "00000000-0000-0000-0000-000000000000",
30                   "%s", uuid.full_str().c_str());
31     for (size_t i = 0; i < 159; ++i)
32     {
33         UUID uuidrnd(0, 0);
34         log_debug << uuidrnd;
35     }
36 
37     UUID uuid1(0, 0);
38     UUID uuid2(0, 0);
39 
40     ck_assert(uuid1 < uuid2);
41 
42     // Verify that the first 8 chars of the short UUID notation matches
43     // with first 8 chars of full uuid string.
44     std::string full(uuid1.full_str());
45     std::ostringstream os;
46     os << uuid1;
47     ck_assert_msg(full.compare(0, 8, os.str().substr(0, 8)) == 0,
48                 "%s != %s", full.c_str(), os.str().c_str());
49 
50 }
51 END_TEST
52 
53 
START_TEST(test_view)54 START_TEST(test_view)
55 {
56     const UUID uuid1(1);
57     const UUID uuid2(2);
58     const UUID uuid3(3);
59 
60     // View id ordering:
61     // 1) view seq less than
62     // 2) uuid newer than (higher timestamp, greater leading bytes)
63     // 3) view type (reg, trans, non-prim, prim)
64     ViewId v1(V_REG,   uuid2, 1);
65     ViewId v2(V_REG,   uuid1, 1);
66     ViewId v3(V_TRANS, uuid1, 1);
67 
68     ViewId v4(V_TRANS, uuid3, 2);
69     ViewId v5(V_REG,   uuid2, 2);
70 
71     ViewId v6(V_REG,   uuid1, 2);
72     ViewId v7(V_TRANS, uuid1, 2);
73 
74     ck_assert(v1 < v2);
75     ck_assert(v2 < v3);
76     ck_assert(v3 < v4);
77     ck_assert(v4 < v5);
78     ck_assert(v5 < v6);
79     ck_assert(v6 < v7);
80 
81 
82 
83     ViewId vid;
84     ck_assert(vid.uuid() == UUID());
85     ck_assert(vid.seq() == 0);
86 
87     UUID uuid(0, 0);
88 
89     vid = ViewId(V_REG, uuid, 7);
90     ck_assert(vid.uuid() == uuid);
91     ck_assert(vid.seq() == 7);
92 
93 
94     NodeList nl;
95 
96     for (size_t i = 0; i < 7; ++i)
97     {
98         nl.insert(make_pair(UUID(0, 0), Node(0)));
99     }
100 
101     ck_assert(nl.size() == 7);
102 
103 }
104 END_TEST
105 
106 
types_suite()107 Suite* types_suite()
108 {
109     Suite* s = suite_create("types");
110     TCase* tc;
111 
112     tc = tcase_create("test_uuid");
113     tcase_add_test(tc, test_uuid);
114     suite_add_tcase(s, tc);
115 
116     tc = tcase_create("test_view");
117     tcase_add_test(tc, test_view);
118     suite_add_tcase(s, tc);
119 
120     return s;
121 }
122