/
612-repl-start.t
123 lines (98 loc) · 3.77 KB
/
612-repl-start.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
use v6;
use Test;
use lib 't';
use Test-support;
use MongoDB;
use MongoDB::Client;
use MongoDB::Server;
use MongoDB::MDBConfig;
use BSON::Document;
#-------------------------------------------------------------------------------
drop-send-to('mongodb');
drop-send-to('screen');
#modify-send-to( 'screen', :level(MongoDB::MdbLoglevels::Debug));
info-message("Test $?FILE start");
my MongoDB::Test-support $ts .= new;
my @serverkeys = $ts.serverkeys.sort;
#-------------------------------------------------------------------------------
subtest {
my Str $host = 'localhost';
my Hash $config = MongoDB::MDBConfig.instance.config;
my Int $p1 = $ts.server-control.get-port-number(@serverkeys[0]);
my Str $rs1-s1 = $config<server>{@serverkeys[0]}<replicate1><replSet>;
my Int $p2 = $ts.server-control.get-port-number(@serverkeys[1]);
my Str $rs1-s2 = $config<server>{@serverkeys[1]}<replicate1><replSet>;
my Int $p3 = $ts.server-control.get-port-number(@serverkeys[2]);
my Str $rs1-s3 = $config<server>{@serverkeys[2]}<replicate1><replSet>;
diag "\nStart server @serverkeys[0] in pre-init mode in replicaset $rs1-s1";
ok $ts.server-control.stop-mongod(@serverkeys[0]),
"Server @serverkeys[0] stopped";
ok $ts.server-control.start-mongod( @serverkeys[0], 'replicate1'),
"Server @serverkeys[0] started in replica set '$rs1-s1'";
diag "Start server @serverkeys[1] pre-init in replicaset $rs1-s3";
ok $ts.server-control.stop-mongod(@serverkeys[2]), "Server @serverkeys[2] stopped";
ok $ts.server-control.start-mongod( @serverkeys[2], 'replicate1'),
"Server @serverkeys[2] started in replica set '$rs1-s3'";
diag "Connect to server replica primary from of $rs1-s2";
my MongoDB::Client $client .= new(
:uri("mongodb://$host:$p2/?replicaSet=$rs1-s2")
);
my MongoDB::Server $server = $client.select-server;
ok $server.defined, "Server $server.name() selected";
is $server.get-status<status>, SS-RSPrimary, "Server $host:$p2 is primary";
#my BSON::Document $doc = $server.raw-query( 'test.$cmd', BSON::Document.new((isMaster => 1,)));
#diag $doc.perl;
diag "Get server info. Get the repl version and update version";
my BSON::Document $doc = $server.raw-query(
'test.$cmd', BSON::Document.new((isMaster => 1,))
);
$doc = $doc<documents>[0];
my Int $new-version = $doc<setVersion> + 1;
$doc = $server.raw-query(
'admin.$cmd',
BSON::Document.new( (
replSetReconfig => (
_id => $rs1-s2,
version => $new-version,
members => [ (
_id => 0,
host => "$host:$p2",
# tags => ( name => 'server2', )
),(
_id => 1,
host => "$host:$p1",
# tags => ( name => 'server1', )
),(
_id => 2,
host => "$host:$p3",
# tags => ( name => 'server3', )
),
]
)
)
)
);
$doc = $doc<documents>[0];
ok ?$doc<ok>, 'Servers are added';
$doc = $server.raw-query( 'test.$cmd', BSON::Document.new((isMaster => 1,)));
diag $doc.perl;
if @serverkeys[0] ~~ any <s4 s5 s6> {
skip 'difficulties comparing hostlist on 2.6.* servers caused by duplicates', 1;
}
else {
$doc = $doc<documents>[0];
is-deeply $doc<hosts>.sort,
( "$host:$p1", "$host:$p2", "$host:$p3").sort,
"servers in replica: {$doc<hosts>}";
}
$server = $client.select-server(:servername("$host:$p3"));
is $server.get-status<status>, SS-RSSecondary,
"Server $host:$p3 is secondary";
is $client.topology, TT-ReplicaSetWithPrimary,
'Replicaset with primary topology';
}, "Adding replica servers";
#-------------------------------------------------------------------------------
# Cleanup
info-message("Test $?FILE stop");
done-testing;
exit(0);