/
node_spec.rb
84 lines (70 loc) · 2.05 KB
/
node_spec.rb
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
require 'spec_helper'
module RedisFailover
describe Node do
let(:node) { Node.new(:host => 'localhost', :port => '123') }
before(:each) do
node.extend(RedisStubSupport)
end
describe '#initialize' do
it 'creates a new instance' do
node.host.should == 'localhost'
node.port.should == 123
end
it 'reports error if host missing' do
expect { Node.new }.to raise_error(InvalidNodeError)
end
end
describe '#ping' do
it 'responds properly if node is available' do
expect { node.ping }.to_not raise_error
end
it 'responds properly if node is unavailable' do
node.redis.make_unavailable!
expect { node.ping }.to raise_error(NodeUnavailableError)
end
end
describe '#master?' do
it 'responds properly if node is master' do
node.should be_master
end
it 'responds properly if node is not master' do
node.make_slave!(Node.new(:host => 'masterhost'))
node.should_not be_master
end
end
describe '#slave?' do
it 'responds properly if node is slave' do
node.should_not be_slave
end
it 'responds properly if node is not slave' do
node.make_master!
node.should be_master
end
end
describe '#wait' do
it 'should wait until node dies' do
thread = Thread.new { node.wait }
thread.should be_alive
node.redis.make_unavailable!
expect { thread.value }.to raise_error
end
end
describe '#wakeup' do
it 'should gracefully stop waiting' do
thread = Thread.new { node.wait }
thread.should be_alive
node.wakeup
sleep 0.2
thread.should_not be_alive
thread.value.should be_nil
end
end
describe '#perform_operation' do
it 'raises error for any operation that hangs for too long' do
expect do
node.send(:perform_operation) { 1_000_000.times { sleep 0.1 } }
end.to raise_error(NodeUnavailableError)
end
end
end
end