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 short UUID notation matches with first 8 chars
43 // 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()) == 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