nonnative 1.19.0 → 1.20.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 +4 -4
- data/.rubocop.yml +11 -2
- data/Gemfile.lock +13 -12
- data/README.md +4 -2
- data/lib/nonnative.rb +3 -2
- data/lib/nonnative/chaos_proxy.rb +30 -2
- data/lib/nonnative/configuration.rb +5 -5
- data/lib/nonnative/configuration_process.rb +1 -6
- data/lib/nonnative/configuration_proxy.rb +1 -2
- data/lib/nonnative/configuration_server.rb +9 -6
- data/lib/nonnative/pool.rb +5 -0
- data/lib/nonnative/server.rb +5 -8
- data/lib/nonnative/version.rb +1 -1
- data/nonnative.gemspec +5 -4
- metadata +42 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b63357ad2bb8db426b0c2958835121c3fad6611240fbf74b3695d262850cc043
|
4
|
+
data.tar.gz: 2e69404a282502b0b244dccd62c471d32d80b12e624a26ef158a5400eca057ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 289a4846e961fa08c9b851c81db5b66ee0689970dd4a6469ce1d344d19cfeb2bea26317510a203e50d7b5601d734489deabd95fdcb5966f2d8d687e8dd1de174
|
7
|
+
data.tar.gz: 6cf36198555ed5c189a37fac91a4d6f61b2a4361a3a0380b4c4c24040b22dc7d18b060ab708cb343e9af9ec95a346c7e84193307f250aa29f42dcb601ddde575
|
data/.rubocop.yml
CHANGED
@@ -6,10 +6,10 @@ Layout/LineLength:
|
|
6
6
|
Max: 120
|
7
7
|
|
8
8
|
Metrics/MethodLength:
|
9
|
-
Max:
|
9
|
+
Max: 20
|
10
10
|
|
11
11
|
Metrics/BlockLength:
|
12
|
-
Max:
|
12
|
+
Max: 60
|
13
13
|
|
14
14
|
Metrics/AbcSize:
|
15
15
|
Max: 20
|
@@ -58,3 +58,12 @@ Style/RedundantRegexpEscape:
|
|
58
58
|
|
59
59
|
Style/RedundantFetchBlock:
|
60
60
|
Enabled: true
|
61
|
+
|
62
|
+
Style/AccessorGrouping:
|
63
|
+
Enabled: true
|
64
|
+
|
65
|
+
Style/BisectedAttrAccessor:
|
66
|
+
Enabled: true
|
67
|
+
|
68
|
+
Style/RedundantAssignment:
|
69
|
+
Enabled: true
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nonnative (1.
|
4
|
+
nonnative (1.20.0)
|
5
|
+
concurrent-ruby (~> 1.0, >= 1.0.5)
|
5
6
|
cucumber (~> 3.1, >= 3.1.2)
|
6
|
-
grpc (~> 1.
|
7
|
+
grpc (~> 1.30, >= 1.30.1)
|
7
8
|
puma (~> 4.3, >= 4.3.3)
|
8
9
|
rest-client (~> 2.1)
|
9
10
|
rspec-benchmark (~> 0.6.0)
|
@@ -57,10 +58,10 @@ GEM
|
|
57
58
|
google-protobuf (3.12.2)
|
58
59
|
googleapis-common-protos-types (1.0.5)
|
59
60
|
google-protobuf (~> 3.11)
|
60
|
-
grpc (1.
|
61
|
-
google-protobuf (~> 3.
|
61
|
+
grpc (1.30.1)
|
62
|
+
google-protobuf (~> 3.12)
|
62
63
|
googleapis-common-protos-types (~> 1.0)
|
63
|
-
grpc-tools (1.
|
64
|
+
grpc-tools (1.30.1)
|
64
65
|
http-accept (1.7.0)
|
65
66
|
http-cookie (1.0.3)
|
66
67
|
domain_name (~> 0.5)
|
@@ -81,7 +82,7 @@ GEM
|
|
81
82
|
ruby2_keywords (~> 0.0.1)
|
82
83
|
netrc (0.11.0)
|
83
84
|
nio4r (2.5.2)
|
84
|
-
nokogiri (1.10.
|
85
|
+
nokogiri (1.10.10)
|
85
86
|
mini_portile2 (~> 2.4.0)
|
86
87
|
parallel (1.19.2)
|
87
88
|
parser (2.7.1.4)
|
@@ -125,13 +126,13 @@ GEM
|
|
125
126
|
diff-lcs (>= 1.2.0, < 2.0)
|
126
127
|
rspec-support (~> 3.9.0)
|
127
128
|
rspec-support (3.9.3)
|
128
|
-
rubocop (0.
|
129
|
+
rubocop (0.87.1)
|
129
130
|
parallel (~> 1.10)
|
130
|
-
parser (>= 2.7.
|
131
|
+
parser (>= 2.7.1.1)
|
131
132
|
rainbow (>= 2.2.2, < 4.0)
|
132
133
|
regexp_parser (>= 1.7)
|
133
134
|
rexml
|
134
|
-
rubocop-ast (>= 0.0
|
135
|
+
rubocop-ast (>= 0.1.0, < 1.0)
|
135
136
|
ruby-progressbar (~> 1.7)
|
136
137
|
unicode-display_width (>= 1.4.0, < 2.0)
|
137
138
|
rubocop-ast (0.1.0)
|
@@ -187,12 +188,12 @@ PLATFORMS
|
|
187
188
|
DEPENDENCIES
|
188
189
|
bundler (~> 2.1, >= 2.1.4)
|
189
190
|
chutney (~> 2.0, >= 2.0.3.1)
|
190
|
-
grpc-tools (~> 1.
|
191
|
+
grpc-tools (~> 1.30, >= 1.30.1)
|
191
192
|
nonnative!
|
192
193
|
rake (~> 13.0, >= 13.0.1)
|
193
|
-
rubocop (~> 0.
|
194
|
+
rubocop (~> 0.87.1)
|
194
195
|
simplecov (~> 0.17.1)
|
195
|
-
solargraph (~> 0.39.
|
196
|
+
solargraph (~> 0.39.11)
|
196
197
|
|
197
198
|
BUNDLED WITH
|
198
199
|
2.1.4
|
data/README.md
CHANGED
data/lib/nonnative.rb
CHANGED
@@ -10,6 +10,7 @@ require 'sinatra'
|
|
10
10
|
require 'rest-client'
|
11
11
|
require 'puma'
|
12
12
|
require 'puma/server'
|
13
|
+
require 'concurrent'
|
13
14
|
|
14
15
|
require 'nonnative/version'
|
15
16
|
require 'nonnative/error'
|
@@ -35,10 +36,10 @@ require 'nonnative/proxy'
|
|
35
36
|
require 'nonnative/no_proxy'
|
36
37
|
require 'nonnative/chaos_proxy'
|
37
38
|
|
38
|
-
Thread.abort_on_exception = true
|
39
|
-
|
40
39
|
module Nonnative
|
41
40
|
class << self
|
41
|
+
attr_reader :pool
|
42
|
+
|
42
43
|
def load_configuration(path)
|
43
44
|
@configuration ||= Nonnative::Configuration.load_file(path) # rubocop:disable Naming/MemoizedInstanceVariableName
|
44
45
|
end
|
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
module Nonnative
|
4
4
|
class ChaosProxy < Nonnative::Proxy
|
5
|
+
def initialize(service)
|
6
|
+
@connections = Concurrent::Hash.new
|
7
|
+
@mutex = Mutex.new
|
8
|
+
@state = :none
|
9
|
+
|
10
|
+
super service
|
11
|
+
end
|
12
|
+
|
5
13
|
def start
|
6
14
|
@tcp_server = ::TCPServer.new('0.0.0.0', service.port)
|
7
15
|
@thread = Thread.new { perform_start }
|
@@ -12,21 +20,32 @@ module Nonnative
|
|
12
20
|
tcp_server.close
|
13
21
|
end
|
14
22
|
|
23
|
+
def close_all
|
24
|
+
apply_state :close_all
|
25
|
+
end
|
26
|
+
|
27
|
+
def reset
|
28
|
+
apply_state :none
|
29
|
+
end
|
30
|
+
|
15
31
|
def port
|
16
32
|
service.proxy.port
|
17
33
|
end
|
18
34
|
|
19
35
|
private
|
20
36
|
|
21
|
-
attr_reader :tcp_server, :thread
|
37
|
+
attr_reader :tcp_server, :thread, :connections, :mutex, :state
|
22
38
|
|
23
39
|
def perform_start
|
24
40
|
loop do
|
25
|
-
Thread.start(tcp_server.accept) { |local_socket| connect(local_socket) }
|
41
|
+
thread = Thread.start(tcp_server.accept) { |local_socket| connect(local_socket) }
|
42
|
+
connections[thread.object_id] = thread
|
26
43
|
end
|
27
44
|
end
|
28
45
|
|
29
46
|
def connect(local_socket)
|
47
|
+
return local_socket.close if state?(:close_all)
|
48
|
+
|
30
49
|
remote_socket = create_remote_socket
|
31
50
|
return unless remote_socket
|
32
51
|
|
@@ -41,6 +60,7 @@ module Nonnative
|
|
41
60
|
ensure
|
42
61
|
local_socket.close
|
43
62
|
remote_socket&.close
|
63
|
+
connections.delete(Thread.current.object_id)
|
44
64
|
end
|
45
65
|
|
46
66
|
def create_remote_socket
|
@@ -62,5 +82,13 @@ module Nonnative
|
|
62
82
|
|
63
83
|
false
|
64
84
|
end
|
85
|
+
|
86
|
+
def apply_state(state)
|
87
|
+
mutex.synchronize { @state = state }
|
88
|
+
end
|
89
|
+
|
90
|
+
def state?(state)
|
91
|
+
mutex.synchronize { @state == state }
|
92
|
+
end
|
65
93
|
end
|
66
94
|
end
|
@@ -42,8 +42,10 @@ module Nonnative
|
|
42
42
|
proxy = fd['proxy']
|
43
43
|
|
44
44
|
if proxy
|
45
|
-
s.proxy
|
46
|
-
|
45
|
+
s.proxy = {
|
46
|
+
type: proxy['type'],
|
47
|
+
port: proxy['port']
|
48
|
+
}
|
47
49
|
end
|
48
50
|
end
|
49
51
|
end
|
@@ -56,9 +58,7 @@ module Nonnative
|
|
56
58
|
self.servers = []
|
57
59
|
end
|
58
60
|
|
59
|
-
attr_accessor :strategy
|
60
|
-
attr_accessor :processes
|
61
|
-
attr_accessor :servers
|
61
|
+
attr_accessor :strategy, :processes, :servers
|
62
62
|
|
63
63
|
def process
|
64
64
|
process = Nonnative::ConfigurationProcess.new
|
@@ -2,11 +2,6 @@
|
|
2
2
|
|
3
3
|
module Nonnative
|
4
4
|
class ConfigurationProcess
|
5
|
-
attr_accessor :name
|
6
|
-
attr_accessor :command
|
7
|
-
attr_accessor :timeout
|
8
|
-
attr_accessor :port
|
9
|
-
attr_accessor :file
|
10
|
-
attr_accessor :signal
|
5
|
+
attr_accessor :name, :command, :timeout, :port, :file, :signal
|
11
6
|
end
|
12
7
|
end
|
@@ -2,14 +2,17 @@
|
|
2
2
|
|
3
3
|
module Nonnative
|
4
4
|
class ConfigurationServer
|
5
|
-
attr_accessor :name
|
6
|
-
|
7
|
-
|
8
|
-
attr_accessor :port
|
9
|
-
attr_accessor :proxy
|
5
|
+
attr_accessor :name, :klass, :timeout, :port
|
6
|
+
|
7
|
+
attr_reader :proxy
|
10
8
|
|
11
9
|
def initialize
|
12
|
-
|
10
|
+
@proxy = Nonnative::ConfigurationProxy.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def proxy=(value)
|
14
|
+
proxy.type = value[:type]
|
15
|
+
proxy.port = value[:port]
|
13
16
|
end
|
14
17
|
end
|
15
18
|
end
|
data/lib/nonnative/pool.rb
CHANGED
@@ -14,6 +14,11 @@ module Nonnative
|
|
14
14
|
[processes, servers].each { |t| process(t, :stop, :closed?, &block) }
|
15
15
|
end
|
16
16
|
|
17
|
+
def server_by_name(name)
|
18
|
+
index = configuration.servers.find_index { |s| s.name == name }
|
19
|
+
servers[index].first
|
20
|
+
end
|
21
|
+
|
17
22
|
private
|
18
23
|
|
19
24
|
attr_reader :configuration
|
data/lib/nonnative/server.rb
CHANGED
@@ -2,8 +2,9 @@
|
|
2
2
|
|
3
3
|
module Nonnative
|
4
4
|
class Server < Nonnative::Service
|
5
|
+
attr_reader :proxy
|
6
|
+
|
5
7
|
def initialize(service)
|
6
|
-
@id = SecureRandom.hex(5)
|
7
8
|
@proxy = Nonnative::ProxyFactory.create(service)
|
8
9
|
|
9
10
|
super service
|
@@ -17,7 +18,7 @@ module Nonnative
|
|
17
18
|
wait_start
|
18
19
|
end
|
19
20
|
|
20
|
-
|
21
|
+
object_id
|
21
22
|
end
|
22
23
|
|
23
24
|
def stop
|
@@ -30,15 +31,11 @@ module Nonnative
|
|
30
31
|
wait_stop
|
31
32
|
end
|
32
33
|
|
33
|
-
|
34
|
+
object_id
|
34
35
|
end
|
35
36
|
|
36
|
-
protected
|
37
|
-
|
38
|
-
attr_reader :id
|
39
|
-
|
40
37
|
private
|
41
38
|
|
42
|
-
attr_reader :
|
39
|
+
attr_reader :thread
|
43
40
|
end
|
44
41
|
end
|
data/lib/nonnative/version.rb
CHANGED
data/nonnative.gemspec
CHANGED
@@ -24,8 +24,9 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
25
|
spec.require_paths = ['lib']
|
26
26
|
|
27
|
+
spec.add_dependency 'concurrent-ruby', '~> 1.0', '>= 1.0.5'
|
27
28
|
spec.add_dependency 'cucumber', '~> 3.1', '>= 3.1.2'
|
28
|
-
spec.add_dependency 'grpc', '~> 1.
|
29
|
+
spec.add_dependency 'grpc', '~> 1.30', '>= 1.30.1'
|
29
30
|
spec.add_dependency 'puma', '~> 4.3', '>= 4.3.3'
|
30
31
|
spec.add_dependency 'rest-client', '~> 2.1'
|
31
32
|
spec.add_dependency 'rspec-benchmark', '~> 0.6.0'
|
@@ -34,9 +35,9 @@ Gem::Specification.new do |spec|
|
|
34
35
|
|
35
36
|
spec.add_development_dependency 'bundler', '~> 2.1', '>= 2.1.4'
|
36
37
|
spec.add_development_dependency 'chutney', '~> 2.0', '>= 2.0.3.1'
|
37
|
-
spec.add_development_dependency 'grpc-tools', '~> 1.
|
38
|
+
spec.add_development_dependency 'grpc-tools', '~> 1.30', '>= 1.30.1'
|
38
39
|
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1'
|
39
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
40
|
+
spec.add_development_dependency 'rubocop', '~> 0.87.1'
|
40
41
|
spec.add_development_dependency 'simplecov', '~> 0.17.1'
|
41
|
-
spec.add_development_dependency 'solargraph', '~> 0.39.
|
42
|
+
spec.add_development_dependency 'solargraph', '~> 0.39.11'
|
42
43
|
end
|
metadata
CHANGED
@@ -1,15 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nonnative
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.20.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Falkowski
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: concurrent-ruby
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.0.5
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.0.5
|
13
33
|
- !ruby/object:Gem::Dependency
|
14
34
|
name: cucumber
|
15
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -36,14 +56,20 @@ dependencies:
|
|
36
56
|
requirements:
|
37
57
|
- - "~>"
|
38
58
|
- !ruby/object:Gem::Version
|
39
|
-
version: '1.
|
59
|
+
version: '1.30'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 1.30.1
|
40
63
|
type: :runtime
|
41
64
|
prerelease: false
|
42
65
|
version_requirements: !ruby/object:Gem::Requirement
|
43
66
|
requirements:
|
44
67
|
- - "~>"
|
45
68
|
- !ruby/object:Gem::Version
|
46
|
-
version: '1.
|
69
|
+
version: '1.30'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 1.30.1
|
47
73
|
- !ruby/object:Gem::Dependency
|
48
74
|
name: puma
|
49
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,14 +204,20 @@ dependencies:
|
|
178
204
|
requirements:
|
179
205
|
- - "~>"
|
180
206
|
- !ruby/object:Gem::Version
|
181
|
-
version: '1.
|
207
|
+
version: '1.30'
|
208
|
+
- - ">="
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
version: 1.30.1
|
182
211
|
type: :development
|
183
212
|
prerelease: false
|
184
213
|
version_requirements: !ruby/object:Gem::Requirement
|
185
214
|
requirements:
|
186
215
|
- - "~>"
|
187
216
|
- !ruby/object:Gem::Version
|
188
|
-
version: '1.
|
217
|
+
version: '1.30'
|
218
|
+
- - ">="
|
219
|
+
- !ruby/object:Gem::Version
|
220
|
+
version: 1.30.1
|
189
221
|
- !ruby/object:Gem::Dependency
|
190
222
|
name: rake
|
191
223
|
requirement: !ruby/object:Gem::Requirement
|
@@ -212,14 +244,14 @@ dependencies:
|
|
212
244
|
requirements:
|
213
245
|
- - "~>"
|
214
246
|
- !ruby/object:Gem::Version
|
215
|
-
version: 0.
|
247
|
+
version: 0.87.1
|
216
248
|
type: :development
|
217
249
|
prerelease: false
|
218
250
|
version_requirements: !ruby/object:Gem::Requirement
|
219
251
|
requirements:
|
220
252
|
- - "~>"
|
221
253
|
- !ruby/object:Gem::Version
|
222
|
-
version: 0.
|
254
|
+
version: 0.87.1
|
223
255
|
- !ruby/object:Gem::Dependency
|
224
256
|
name: simplecov
|
225
257
|
requirement: !ruby/object:Gem::Requirement
|
@@ -240,14 +272,14 @@ dependencies:
|
|
240
272
|
requirements:
|
241
273
|
- - "~>"
|
242
274
|
- !ruby/object:Gem::Version
|
243
|
-
version: 0.39.
|
275
|
+
version: 0.39.11
|
244
276
|
type: :development
|
245
277
|
prerelease: false
|
246
278
|
version_requirements: !ruby/object:Gem::Requirement
|
247
279
|
requirements:
|
248
280
|
- - "~>"
|
249
281
|
- !ruby/object:Gem::Version
|
250
|
-
version: 0.39.
|
282
|
+
version: 0.39.11
|
251
283
|
description: Allows you to keep using the power of ruby to test other systems
|
252
284
|
email:
|
253
285
|
- alexrfalkowski@gmail.com
|