active_utils 1.0.5 → 2.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.
- data/lib/active_utils/common/connection.rb +22 -3
- data/lib/active_utils/common/network_connection_retries.rb +15 -4
- data/lib/active_utils/common/posts_data.rb +8 -0
- data/lib/active_utils/version.rb +1 -1
- data/lib/certs/cacert.pem +3693 -7588
- data/test/unit/connection_test.rb +35 -3
- data/test/unit/network_connection_retries_test.rb +14 -2
- data/test/unit/posts_data_test.rb +23 -0
- metadata +41 -21
@@ -63,7 +63,17 @@ class ConnectionTest < Test::Unit::TestCase
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
+
def test_override_max_retries
|
67
|
+
assert_not_equal 1, @connection.max_retries
|
68
|
+
@connection.max_retries = 1
|
69
|
+
assert_equal 1, @connection.max_retries
|
70
|
+
end
|
66
71
|
|
72
|
+
def test_override_ssl_version
|
73
|
+
assert_not_equal :SSLv3, @connection.ssl_version
|
74
|
+
@connection.ssl_version = :SSLv3
|
75
|
+
assert_equal :SSLv3, @connection.ssl_version
|
76
|
+
end
|
67
77
|
|
68
78
|
def test_default_read_timeout
|
69
79
|
assert_equal ActiveMerchant::Connection::READ_TIMEOUT, @connection.read_timeout
|
@@ -88,8 +98,30 @@ class ConnectionTest < Test::Unit::TestCase
|
|
88
98
|
assert_equal false, @connection.verify_peer
|
89
99
|
end
|
90
100
|
|
101
|
+
def test_default_ca_file
|
102
|
+
assert_equal ActiveMerchant::Connection::CA_FILE, @connection.ca_file
|
103
|
+
assert_equal ActiveMerchant::Connection::CA_FILE, @connection.send(:http).ca_file
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_override_ca_file
|
107
|
+
@connection.ca_file = "/bogus"
|
108
|
+
assert_equal "/bogus", @connection.ca_file
|
109
|
+
assert_equal "/bogus", @connection.send(:http).ca_file
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_default_ca_path
|
113
|
+
assert_equal ActiveMerchant::Connection::CA_PATH, @connection.ca_path
|
114
|
+
assert_equal ActiveMerchant::Connection::CA_PATH, @connection.send(:http).ca_path
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_override_ca_path
|
118
|
+
@connection.ca_path = "/bogus"
|
119
|
+
assert_equal "/bogus", @connection.ca_path
|
120
|
+
assert_equal "/bogus", @connection.send(:http).ca_path
|
121
|
+
end
|
122
|
+
|
91
123
|
def test_unrecoverable_exception
|
92
|
-
@connection.logger.expects(:
|
124
|
+
@connection.logger.expects(:info).once
|
93
125
|
Net::HTTP.any_instance.expects(:post).raises(EOFError)
|
94
126
|
|
95
127
|
assert_raises(ActiveMerchant::ConnectionError) do
|
@@ -98,7 +130,7 @@ class ConnectionTest < Test::Unit::TestCase
|
|
98
130
|
end
|
99
131
|
|
100
132
|
def test_failure_then_success_with_recoverable_exception
|
101
|
-
@connection.logger.expects(:
|
133
|
+
@connection.logger.expects(:info).never
|
102
134
|
Net::HTTP.any_instance.expects(:post).times(2).raises(Errno::ECONNREFUSED).then.returns(@ok)
|
103
135
|
|
104
136
|
assert_nothing_raised do
|
@@ -107,7 +139,7 @@ class ConnectionTest < Test::Unit::TestCase
|
|
107
139
|
end
|
108
140
|
|
109
141
|
def test_failure_limit_reached
|
110
|
-
@connection.logger.expects(:
|
142
|
+
@connection.logger.expects(:info).once
|
111
143
|
Net::HTTP.any_instance.expects(:post).times(ActiveMerchant::Connection::MAX_RETRIES).raises(Errno::ECONNREFUSED)
|
112
144
|
|
113
145
|
assert_raises(ActiveMerchant::ConnectionError) do
|
@@ -23,7 +23,7 @@ class NetworkConnectionRetriesTest < Test::Unit::TestCase
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_unrecoverable_exception_logged_if_logger_provided
|
26
|
-
@logger.expects(:
|
26
|
+
@logger.expects(:info).once
|
27
27
|
assert_raises(ActiveMerchant::ConnectionError) do
|
28
28
|
retry_exceptions :logger => @logger do
|
29
29
|
raise EOFError
|
@@ -52,7 +52,7 @@ class NetworkConnectionRetriesTest < Test::Unit::TestCase
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def test_failure_limit_reached_logs_final_error
|
55
|
-
@logger.expects(:
|
55
|
+
@logger.expects(:info).times(3)
|
56
56
|
@requester.expects(:post).times(ActiveMerchant::NetworkConnectionRetries::DEFAULT_RETRIES).raises(Errno::ECONNREFUSED)
|
57
57
|
|
58
58
|
assert_raises(ActiveMerchant::ConnectionError) do
|
@@ -72,6 +72,18 @@ class NetworkConnectionRetriesTest < Test::Unit::TestCase
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
+
def test_failure_then_success_logs_success
|
76
|
+
@logger.expects(:info).with(regexp_matches(/dropped/))
|
77
|
+
@logger.expects(:info).with(regexp_matches(/success/))
|
78
|
+
@requester.expects(:post).times(2).raises(EOFError).then.returns(@ok)
|
79
|
+
|
80
|
+
assert_nothing_raised do
|
81
|
+
retry_exceptions(:logger => @logger, :retry_safe => true) do
|
82
|
+
@requester.post
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
75
87
|
def test_mixture_of_failures_with_retry_safe_enabled
|
76
88
|
@requester.expects(:post).times(3).raises(Errno::ECONNRESET).
|
77
89
|
raises(Errno::ECONNREFUSED).
|
@@ -13,6 +13,29 @@ class PostsDataTest < Test::Unit::TestCase
|
|
13
13
|
@poster = SSLPoster.new
|
14
14
|
end
|
15
15
|
|
16
|
+
def test_ssl_request_retried_three_times_by_default
|
17
|
+
requester = stubs(:requester)
|
18
|
+
requester.expects(:post).raises(Errno::ECONNREFUSED).times(3)
|
19
|
+
Connection.any_instance.stubs(:http => requester)
|
20
|
+
|
21
|
+
assert_raises ActiveMerchant::ConnectionError do
|
22
|
+
@poster.raw_ssl_request(:post, "https://shopify.com", "", {})
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_ssl_request_never_retried_if_max_retries_set
|
27
|
+
SSLPoster.max_retries = 1
|
28
|
+
requester = stubs(:requester)
|
29
|
+
requester.expects(:post).raises(Errno::ECONNREFUSED).times(1)
|
30
|
+
Connection.any_instance.stubs(:http => requester)
|
31
|
+
|
32
|
+
assert_raises ActiveMerchant::ConnectionError do
|
33
|
+
@poster.raw_ssl_request(:post, "https://shopify.com", "", {})
|
34
|
+
end
|
35
|
+
ensure
|
36
|
+
SSLPoster.max_retries = ActiveMerchant::Connection::MAX_RETRIES
|
37
|
+
end
|
38
|
+
|
16
39
|
def test_logger_warns_if_ssl_strict_disabled
|
17
40
|
@poster.logger = stub()
|
18
41
|
@poster.logger.expects(:warn).with("PostsDataTest::SSLPoster using ssl_strict=false, which is insecure")
|
metadata
CHANGED
@@ -1,60 +1,80 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.5
|
5
4
|
prerelease:
|
5
|
+
version: 2.0.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Shopify
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-07-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
|
16
|
-
requirement: &70097925445800 !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 2.3.11
|
20
|
+
none: false
|
21
|
+
name: activesupport
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
requirement: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ! '>='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: 2.3.11
|
28
29
|
none: false
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
version_requirements: !ruby/object:Gem::Requirement
|
29
32
|
requirements:
|
30
33
|
- - ! '>='
|
31
34
|
- !ruby/object:Gem::Version
|
32
35
|
version: '0'
|
36
|
+
none: false
|
37
|
+
name: i18n
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
39
45
|
none: false
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
48
|
requirements:
|
41
49
|
- - ! '>='
|
42
50
|
- !ruby/object:Gem::Version
|
43
51
|
version: '0'
|
52
|
+
none: false
|
53
|
+
name: rake
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
50
61
|
none: false
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
64
|
requirements:
|
52
65
|
- - ! '>='
|
53
66
|
- !ruby/object:Gem::Version
|
54
67
|
version: '0'
|
68
|
+
none: false
|
69
|
+
name: mocha
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
none: false
|
58
78
|
description:
|
59
79
|
email:
|
60
80
|
- developers@jadedpixel.com
|
@@ -96,20 +116,20 @@ rdoc_options: []
|
|
96
116
|
require_paths:
|
97
117
|
- lib
|
98
118
|
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
-
none: false
|
100
119
|
requirements:
|
101
120
|
- - ! '>='
|
102
121
|
- !ruby/object:Gem::Version
|
103
122
|
version: '0'
|
104
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
123
|
none: false
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
125
|
requirements:
|
107
126
|
- - ! '>='
|
108
127
|
- !ruby/object:Gem::Version
|
109
128
|
version: '0'
|
129
|
+
none: false
|
110
130
|
requirements: []
|
111
131
|
rubyforge_project: active_utils
|
112
|
-
rubygems_version: 1.8.
|
132
|
+
rubygems_version: 1.8.23
|
113
133
|
signing_key:
|
114
134
|
specification_version: 3
|
115
135
|
summary: Common utils used by active_merchant, active_fulfillment, and active_shipping
|