1 /*
2 * Copyright (C) 2018 Codership Oy <info@codership.com>
3 *
4 * This file is part of wsrep-lib.
5 *
6 * Wsrep-lib is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * Wsrep-lib is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with wsrep-lib. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 #include "wsrep/view.hpp"
21 #include <boost/test/unit_test.hpp>
22
BOOST_AUTO_TEST_CASE(view_test_member_index)23 BOOST_AUTO_TEST_CASE(view_test_member_index)
24 {
25 std::vector<wsrep::view::member> members;
26 members.push_back(wsrep::view::member(wsrep::id("1"), "", ""));
27 members.push_back(wsrep::view::member(wsrep::id("2"), "", ""));
28 members.push_back(wsrep::view::member(wsrep::id("3"), "", ""));
29
30 wsrep::view view(wsrep::gtid(wsrep::id("cluster"), wsrep::seqno(1)),
31 wsrep::seqno(1),
32 wsrep::view::primary,
33 0,
34 1,
35 0,
36 members);
37 BOOST_REQUIRE(view.member_index(wsrep::id("1")) == 0);
38 BOOST_REQUIRE(view.member_index(wsrep::id("2")) == 1);
39 BOOST_REQUIRE(view.member_index(wsrep::id("3")) == 2);
40 BOOST_REQUIRE(view.member_index(wsrep::id("4")) == -1);
41 }
42
BOOST_AUTO_TEST_CASE(view_test_equal_membership)43 BOOST_AUTO_TEST_CASE(view_test_equal_membership)
44 {
45 std::vector<wsrep::view::member> m1;
46 m1.push_back(wsrep::view::member(wsrep::id("1"), "", ""));
47 m1.push_back(wsrep::view::member(wsrep::id("2"), "", ""));
48 m1.push_back(wsrep::view::member(wsrep::id("3"), "", ""));
49
50 std::vector<wsrep::view::member> m2;
51 m2.push_back(wsrep::view::member(wsrep::id("2"), "", ""));
52 m2.push_back(wsrep::view::member(wsrep::id("3"), "", ""));
53 m2.push_back(wsrep::view::member(wsrep::id("1"), "", ""));
54
55 std::vector<wsrep::view::member> m3;
56 m3.push_back(wsrep::view::member(wsrep::id("1"), "", ""));
57 m3.push_back(wsrep::view::member(wsrep::id("2"), "", ""));
58 m3.push_back(wsrep::view::member(wsrep::id("3"), "", ""));
59 m3.push_back(wsrep::view::member(wsrep::id("4"), "", ""));
60
61 wsrep::view v1(wsrep::gtid(wsrep::id("cluster"), wsrep::seqno(1)),
62 wsrep::seqno(1),
63 wsrep::view::primary,
64 0,
65 1,
66 0,
67 m1);
68
69 wsrep::view v2(wsrep::gtid(wsrep::id("cluster"), wsrep::seqno(1)),
70 wsrep::seqno(1),
71 wsrep::view::primary,
72 0,
73 1,
74 0,
75 m2);
76
77 wsrep::view v3(wsrep::gtid(wsrep::id("cluster"), wsrep::seqno(1)),
78 wsrep::seqno(1),
79 wsrep::view::primary,
80 0,
81 1,
82 0,
83 m3);
84
85 BOOST_REQUIRE(v1.equal_membership(v2));
86 BOOST_REQUIRE(v2.equal_membership(v1));
87 BOOST_REQUIRE(!v1.equal_membership(v3));
88 BOOST_REQUIRE(!v3.equal_membership(v1));
89 }
90
BOOST_AUTO_TEST_CASE(view_test_is_member)91 BOOST_AUTO_TEST_CASE(view_test_is_member)
92 {
93 wsrep::view view(wsrep::gtid(wsrep::id("cluster"), wsrep::seqno(1)),
94 wsrep::seqno(1),
95 wsrep::view::primary,
96 0,
97 1,
98 0,
99 { wsrep::view::member(wsrep::id("1"), "", ""),
100 wsrep::view::member(wsrep::id("2"), "", "") });
101
102 BOOST_REQUIRE(view.is_member(wsrep::id("2")));
103 BOOST_REQUIRE(view.is_member(wsrep::id("1")));
104 BOOST_REQUIRE(not view.is_member(wsrep::id("0")));
105 }
106