/
test_connection_pool_timed_stack.rb
150 lines (103 loc) · 2.57 KB
/
test_connection_pool_timed_stack.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
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
require_relative "helper"
class TestConnectionPoolTimedStack < Minitest::Test
def setup
@stack = ConnectionPool::TimedStack.new { Object.new }
end
def test_empty_eh
stack = ConnectionPool::TimedStack.new(1) { Object.new }
refute_empty stack
popped = stack.pop
assert_empty stack
stack.push popped
refute_empty stack
end
def test_length
stack = ConnectionPool::TimedStack.new(1) { Object.new }
assert_equal 1, stack.length
popped = stack.pop
assert_equal 0, stack.length
stack.push popped
assert_equal 1, stack.length
end
def test_object_creation_fails
stack = ConnectionPool::TimedStack.new(2) { raise "failure" }
begin
stack.pop
rescue => error
assert_equal "failure", error.message
end
begin
stack.pop
rescue => error
assert_equal "failure", error.message
end
refute_empty stack
assert_equal 2, stack.length
end
def test_pop
object = Object.new
@stack.push object
popped = @stack.pop
assert_same object, popped
end
def test_pop_empty
e = assert_raises(ConnectionPool::TimeoutError) { @stack.pop timeout: 0 }
assert_equal "Waited 0 sec", e.message
end
def test_pop_empty_2_0_compatibility
e = assert_raises(Timeout::Error) { @stack.pop 0 }
assert_equal "Waited 0 sec", e.message
end
def test_pop_full
stack = ConnectionPool::TimedStack.new(1) { Object.new }
popped = stack.pop
refute_nil popped
assert_empty stack
end
def test_pop_wait
thread = Thread.start {
@stack.pop
}
Thread.pass while thread.status == "run"
object = Object.new
@stack.push object
assert_same object, thread.value
end
def test_pop_shutdown
@stack.shutdown {}
assert_raises ConnectionPool::PoolShuttingDownError do
@stack.pop
end
end
def test_pop_shutdown_reload
stack = ConnectionPool::TimedStack.new(1) { Object.new }
object = stack.pop
stack.push(object)
stack.shutdown(reload: true) {}
refute_equal object, stack.pop
end
def test_push
stack = ConnectionPool::TimedStack.new(1) { Object.new }
conn = stack.pop
stack.push conn
refute_empty stack
end
def test_push_shutdown
called = []
@stack.shutdown do |object|
called << object
end
@stack.push Object.new
refute_empty called
assert_empty @stack
end
def test_shutdown
@stack.push Object.new
called = []
@stack.shutdown do |object|
called << object
end
refute_empty called
assert_empty @stack
end
end