semian 0.6.0 → 0.6.1
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 +4 -4
- data/ext/semian/resource.c +257 -0
- data/ext/semian/resource.h +75 -0
- data/ext/semian/semian.c +42 -303
- data/ext/semian/semian.h +67 -0
- data/ext/semian/types.h +45 -0
- data/lib/semian/version.rb +1 -1
- metadata +7 -29
- data/.gitignore +0 -8
- data/.rubocop.yml +0 -113
- data/.ruby-version +0 -1
- data/.travis.yml +0 -15
- data/CHANGELOG.md +0 -11
- data/Gemfile +0 -10
- data/LICENSE.md +0 -21
- data/README.md +0 -576
- data/Rakefile +0 -56
- data/repodb.yml +0 -1
- data/scripts/install_toxiproxy.sh +0 -25
- data/semian.gemspec +0 -29
- data/test/circuit_breaker_test.rb +0 -133
- data/test/fixtures/binary.sql +0 -1
- data/test/helpers/background_helper.rb +0 -25
- data/test/instrumentation_test.rb +0 -61
- data/test/mysql2_test.rb +0 -296
- data/test/net_http_test.rb +0 -515
- data/test/redis_test.rb +0 -237
- data/test/resource_test.rb +0 -322
- data/test/semian_test.rb +0 -32
- data/test/simple_integer_test.rb +0 -49
- data/test/simple_sliding_window_test.rb +0 -65
- data/test/simple_state_test.rb +0 -45
- data/test/test_helper.rb +0 -33
- data/test/unprotected_resource_test.rb +0 -60
data/test/semian_test.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestSemian < Minitest::Test
|
4
|
-
def setup
|
5
|
-
Semian.destroy(:testing)
|
6
|
-
rescue
|
7
|
-
nil
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_unsupported_acquire_yields
|
11
|
-
acquired = false
|
12
|
-
Semian.register :testing, tickets: 1, error_threshold: 1, error_timeout: 2, success_threshold: 1
|
13
|
-
Semian[:testing].acquire { acquired = true }
|
14
|
-
assert acquired
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_unsuported_constants
|
18
|
-
assert defined?(Semian::BaseError)
|
19
|
-
assert defined?(Semian::SyscallError)
|
20
|
-
assert defined?(Semian::TimeoutError)
|
21
|
-
assert defined?(Semian::InternalError)
|
22
|
-
assert defined?(Semian::Resource)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_disabled_via_env_var
|
26
|
-
ENV['SEMIAN_SEMAPHORES_DISABLED'] = '1'
|
27
|
-
|
28
|
-
refute Semian.semaphores_enabled?
|
29
|
-
ensure
|
30
|
-
ENV.delete('SEMIAN_SEMAPHORES_DISABLED')
|
31
|
-
end
|
32
|
-
end
|
data/test/simple_integer_test.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestSimpleInteger < Minitest::Test
|
4
|
-
CLASS = ::Semian::Simple::Integer
|
5
|
-
|
6
|
-
def setup
|
7
|
-
@integer = CLASS.new
|
8
|
-
end
|
9
|
-
|
10
|
-
def teardown
|
11
|
-
@integer.destroy
|
12
|
-
end
|
13
|
-
|
14
|
-
module IntegerTestCases
|
15
|
-
def test_access_value
|
16
|
-
assert_equal(0, @integer.value)
|
17
|
-
@integer.value = 99
|
18
|
-
assert_equal(99, @integer.value)
|
19
|
-
time_now = (Time.now).to_i
|
20
|
-
@integer.value = time_now
|
21
|
-
assert_equal(time_now, @integer.value)
|
22
|
-
@integer.value = 6
|
23
|
-
assert_equal(6, @integer.value)
|
24
|
-
@integer.value = 6
|
25
|
-
assert_equal(6, @integer.value)
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_increment
|
29
|
-
@integer.increment(4)
|
30
|
-
assert_equal(4, @integer.value)
|
31
|
-
@integer.increment
|
32
|
-
assert_equal(5, @integer.value)
|
33
|
-
@integer.increment(-2)
|
34
|
-
assert_equal(3, @integer.value)
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_reset_on_init
|
38
|
-
assert_equal(0, @integer.value)
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_reset
|
42
|
-
@integer.increment(5)
|
43
|
-
@integer.reset
|
44
|
-
assert_equal(0, @integer.value)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
include IntegerTestCases
|
49
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestSimpleSlidingWindow < Minitest::Test
|
4
|
-
CLASS = ::Semian::Simple::SlidingWindow
|
5
|
-
|
6
|
-
def setup
|
7
|
-
@sliding_window = CLASS.new(max_size: 6)
|
8
|
-
@sliding_window.clear
|
9
|
-
end
|
10
|
-
|
11
|
-
def teardown
|
12
|
-
@sliding_window.destroy
|
13
|
-
end
|
14
|
-
|
15
|
-
module SlidingWindowTestCases
|
16
|
-
def test_sliding_window_push
|
17
|
-
assert_equal(0, @sliding_window.size)
|
18
|
-
@sliding_window << 1
|
19
|
-
assert_sliding_window(@sliding_window, [1], 6)
|
20
|
-
@sliding_window << 5
|
21
|
-
assert_sliding_window(@sliding_window, [1, 5], 6)
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_sliding_window_resize
|
25
|
-
assert_equal(0, @sliding_window.size)
|
26
|
-
@sliding_window << 1 << 2 << 3 << 4 << 5 << 6
|
27
|
-
assert_sliding_window(@sliding_window, [1, 2, 3, 4, 5, 6], 6)
|
28
|
-
@sliding_window.resize_to 6
|
29
|
-
assert_sliding_window(@sliding_window, [1, 2, 3, 4, 5, 6], 6)
|
30
|
-
@sliding_window.resize_to 5
|
31
|
-
assert_sliding_window(@sliding_window, [2, 3, 4, 5, 6], 5)
|
32
|
-
@sliding_window.resize_to 6
|
33
|
-
assert_sliding_window(@sliding_window, [2, 3, 4, 5, 6], 6)
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_sliding_window_edge_falloff
|
37
|
-
assert_equal(0, @sliding_window.size)
|
38
|
-
@sliding_window << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7
|
39
|
-
assert_sliding_window(@sliding_window, [2, 3, 4, 5, 6, 7], 6)
|
40
|
-
@sliding_window.shift
|
41
|
-
assert_sliding_window(@sliding_window, [3, 4, 5, 6, 7], 6)
|
42
|
-
end
|
43
|
-
|
44
|
-
def resize_to_less_than_1_raises
|
45
|
-
assert_raises ArgumentError do
|
46
|
-
@sliding_window.resize_to 0
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
module SlidingWindowUtilityMethods
|
52
|
-
def assert_sliding_window(sliding_window, array, max_size)
|
53
|
-
# Get private member, the sliding_window doesn't expose the entire array
|
54
|
-
data = sliding_window.instance_variable_get("@window")
|
55
|
-
assert_equal(array, data)
|
56
|
-
assert_equal(max_size, sliding_window.max_size)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
include SlidingWindowTestCases
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
include SlidingWindowUtilityMethods
|
65
|
-
end
|
data/test/simple_state_test.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestSimpleEnum < Minitest::Test
|
4
|
-
CLASS = ::Semian::Simple::State
|
5
|
-
|
6
|
-
def setup
|
7
|
-
@state = CLASS.new
|
8
|
-
end
|
9
|
-
|
10
|
-
def teardown
|
11
|
-
@state.destroy
|
12
|
-
end
|
13
|
-
|
14
|
-
module StateTestCases
|
15
|
-
def test_start_closed?
|
16
|
-
assert @state.closed?
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_open
|
20
|
-
@state.open
|
21
|
-
assert @state.open?
|
22
|
-
assert_equal @state.value, :open
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_close
|
26
|
-
@state.close
|
27
|
-
assert @state.closed?
|
28
|
-
assert_equal @state.value, :closed
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_half_open
|
32
|
-
@state.half_open
|
33
|
-
assert @state.half_open?
|
34
|
-
assert_equal @state.value, :half_open
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_reset
|
38
|
-
@state.reset
|
39
|
-
assert @state.closed?
|
40
|
-
assert_equal @state.value, :closed
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
include StateTestCases
|
45
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'semian'
|
3
|
-
require 'semian/mysql2'
|
4
|
-
require 'semian/redis'
|
5
|
-
require 'toxiproxy'
|
6
|
-
require 'timecop'
|
7
|
-
require 'tempfile'
|
8
|
-
require 'fileutils'
|
9
|
-
|
10
|
-
require 'helpers/background_helper'
|
11
|
-
|
12
|
-
Semian.logger = Logger.new(nil)
|
13
|
-
Toxiproxy.populate([
|
14
|
-
{
|
15
|
-
name: 'semian_test_mysql',
|
16
|
-
upstream: 'localhost:3306',
|
17
|
-
listen: 'localhost:13306',
|
18
|
-
},
|
19
|
-
{
|
20
|
-
name: 'semian_test_redis',
|
21
|
-
upstream: 'localhost:6379',
|
22
|
-
listen: 'localhost:16379',
|
23
|
-
},
|
24
|
-
{
|
25
|
-
name: 'semian_test_net_http',
|
26
|
-
upstream: 'localhost:31050',
|
27
|
-
listen: 'localhost:31051',
|
28
|
-
},
|
29
|
-
])
|
30
|
-
|
31
|
-
class Minitest::Test
|
32
|
-
include BackgroundHelper
|
33
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class UnprotectedResourceTest < Minitest::Test
|
4
|
-
def setup
|
5
|
-
@resource = Semian::UnprotectedResource.new(:foo)
|
6
|
-
end
|
7
|
-
|
8
|
-
def test_interface_is_the_same
|
9
|
-
diff = Semian::ProtectedResource.public_instance_methods - Semian::UnprotectedResource.public_instance_methods
|
10
|
-
assert_equal [], diff
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_resource_name
|
14
|
-
assert_equal :foo, @resource.name
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_resource_tickets
|
18
|
-
assert_equal(-1, @resource.tickets)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_resource_count
|
22
|
-
assert_equal 0, @resource.count
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_resource_semid
|
26
|
-
assert_equal 0, @resource.semid
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_resource_reset
|
30
|
-
@resource.reset
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_resource_destroy
|
34
|
-
@resource.destroy
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_resource_acquire
|
38
|
-
acquired = false
|
39
|
-
@resource.acquire do
|
40
|
-
acquired = true
|
41
|
-
end
|
42
|
-
assert acquired
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_resource_acquire_with_timeout
|
46
|
-
acquired = false
|
47
|
-
@resource.acquire(timeout: 2) do
|
48
|
-
acquired = true
|
49
|
-
end
|
50
|
-
assert acquired
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_request_is_allowed
|
54
|
-
assert @resource.request_allowed?
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_mark_failed
|
58
|
-
@resource.mark_failed(:error)
|
59
|
-
end
|
60
|
-
end
|