ezpool 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/.travis.yml +11 -0
- data/Changes.md +131 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +165 -0
- data/Rakefile +6 -0
- data/ezpool.gemspec +21 -0
- data/lib/ezpool.rb +190 -0
- data/lib/ezpool/connection_manager.rb +37 -0
- data/lib/ezpool/connection_wrapper.rb +20 -0
- data/lib/ezpool/errors.rb +8 -0
- data/lib/ezpool/monotonic_time.rb +66 -0
- data/lib/ezpool/timed_stack.rb +207 -0
- data/lib/ezpool/version.rb +3 -0
- data/test/helper.rb +8 -0
- data/test/test_ezpool.rb +519 -0
- data/test/test_ezpool_timed_stack.rb +159 -0
- metadata +109 -0
@@ -0,0 +1,159 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class TestEzPoolTimedStack < Minitest::Test
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@manager = EzPool::ConnectionManager.new(
|
7
|
+
lambda { Object.new }
|
8
|
+
)
|
9
|
+
@stack = EzPool::TimedStack.new(@manager, 0)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_empty_eh
|
13
|
+
stack = EzPool::TimedStack.new(@manager, 1)
|
14
|
+
|
15
|
+
refute_empty stack
|
16
|
+
|
17
|
+
popped = stack.pop
|
18
|
+
|
19
|
+
assert_empty stack
|
20
|
+
|
21
|
+
stack.push popped
|
22
|
+
|
23
|
+
refute_empty stack
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_length
|
27
|
+
stack = EzPool::TimedStack.new(@manager, 1)
|
28
|
+
|
29
|
+
assert_equal 1, stack.length
|
30
|
+
|
31
|
+
popped = stack.pop
|
32
|
+
|
33
|
+
assert_equal 0, stack.length
|
34
|
+
|
35
|
+
stack.push popped
|
36
|
+
|
37
|
+
assert_equal 1, stack.length
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_object_creation_fails
|
41
|
+
@manager.connect_with do
|
42
|
+
raise 'failure'
|
43
|
+
end
|
44
|
+
stack = EzPool::TimedStack.new(@manager, 2)
|
45
|
+
|
46
|
+
begin
|
47
|
+
stack.pop
|
48
|
+
rescue => error
|
49
|
+
assert_equal 'failure', error.message
|
50
|
+
end
|
51
|
+
|
52
|
+
begin
|
53
|
+
stack.pop
|
54
|
+
rescue => error
|
55
|
+
assert_equal 'failure', error.message
|
56
|
+
end
|
57
|
+
|
58
|
+
refute_empty stack
|
59
|
+
assert_equal 2, stack.length
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_pop
|
63
|
+
object = Object.new
|
64
|
+
@stack.push object
|
65
|
+
|
66
|
+
popped = @stack.pop
|
67
|
+
|
68
|
+
assert_same object, popped
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_pop_empty
|
72
|
+
e = assert_raises Timeout::Error do
|
73
|
+
@stack.pop timeout: 0
|
74
|
+
end
|
75
|
+
|
76
|
+
assert_equal 'Waited 0 sec', e.message
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_pop_empty_2_0_compatibility
|
80
|
+
e = assert_raises Timeout::Error do
|
81
|
+
@stack.pop 0
|
82
|
+
end
|
83
|
+
|
84
|
+
assert_equal 'Waited 0 sec', e.message
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_pop_full
|
88
|
+
stack = EzPool::TimedStack.new(@manager, 1)
|
89
|
+
|
90
|
+
popped = stack.pop
|
91
|
+
|
92
|
+
refute_nil popped
|
93
|
+
assert_empty stack
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_pop_wait
|
97
|
+
thread = Thread.start do
|
98
|
+
@stack.pop
|
99
|
+
end
|
100
|
+
|
101
|
+
Thread.pass while thread.status == 'run'
|
102
|
+
|
103
|
+
object = Object.new
|
104
|
+
|
105
|
+
@stack.push object
|
106
|
+
|
107
|
+
assert_same object, thread.value
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_pop_shutdown
|
111
|
+
@stack.shutdown { }
|
112
|
+
|
113
|
+
assert_raises EzPool::PoolShuttingDownError do
|
114
|
+
@stack.pop
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_push
|
119
|
+
stack = EzPool::TimedStack.new(@manager, 1)
|
120
|
+
|
121
|
+
conn = stack.pop
|
122
|
+
|
123
|
+
stack.push conn
|
124
|
+
|
125
|
+
refute_empty stack
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_push_shutdown
|
129
|
+
called = []
|
130
|
+
|
131
|
+
@manager.disconnect_with do |object|
|
132
|
+
called << object
|
133
|
+
end
|
134
|
+
|
135
|
+
@stack.shutdown
|
136
|
+
|
137
|
+
@stack.push @manager.create_new
|
138
|
+
|
139
|
+
refute_empty called
|
140
|
+
assert_empty @stack
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_shutdown
|
144
|
+
@stack.push @manager.create_new
|
145
|
+
|
146
|
+
called = []
|
147
|
+
|
148
|
+
@manager.disconnect_with do |object|
|
149
|
+
called << object
|
150
|
+
end
|
151
|
+
|
152
|
+
@stack.shutdown
|
153
|
+
|
154
|
+
refute_empty called
|
155
|
+
assert_empty @stack
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
159
|
+
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ezpool
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike Perham
|
8
|
+
- Damian Janowski
|
9
|
+
- James Brown
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2016-12-07 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: bundler
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - '>='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: minitest
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - '>='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 5.0.0
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 5.0.0
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: rake
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
description: More featureful generic connection pool for Ruby
|
58
|
+
email:
|
59
|
+
- oss@easypost.com
|
60
|
+
executables: []
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files: []
|
63
|
+
files:
|
64
|
+
- .gitignore
|
65
|
+
- .travis.yml
|
66
|
+
- Changes.md
|
67
|
+
- Gemfile
|
68
|
+
- LICENSE
|
69
|
+
- README.md
|
70
|
+
- Rakefile
|
71
|
+
- ezpool.gemspec
|
72
|
+
- lib/ezpool.rb
|
73
|
+
- lib/ezpool/connection_manager.rb
|
74
|
+
- lib/ezpool/connection_wrapper.rb
|
75
|
+
- lib/ezpool/errors.rb
|
76
|
+
- lib/ezpool/monotonic_time.rb
|
77
|
+
- lib/ezpool/timed_stack.rb
|
78
|
+
- lib/ezpool/version.rb
|
79
|
+
- test/helper.rb
|
80
|
+
- test/test_ezpool.rb
|
81
|
+
- test/test_ezpool_timed_stack.rb
|
82
|
+
homepage: https://github.com/EasyPost/ezpool
|
83
|
+
licenses:
|
84
|
+
- MIT
|
85
|
+
metadata: {}
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
requirements: []
|
101
|
+
rubyforge_project:
|
102
|
+
rubygems_version: 2.0.14.1
|
103
|
+
signing_key:
|
104
|
+
specification_version: 4
|
105
|
+
summary: More featureful generic connection pool for Ruby
|
106
|
+
test_files:
|
107
|
+
- test/helper.rb
|
108
|
+
- test/test_ezpool.rb
|
109
|
+
- test/test_ezpool_timed_stack.rb
|