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