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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d50a3cb35c875fa077d8ca3bd756e11d10deaffec26a90b142dc8e70a690ba97
4
- data.tar.gz: 8396fbee42d4d138ca270a39cf916f701a3874aa55c62312f05bc613de39b1ed
3
+ metadata.gz: b63357ad2bb8db426b0c2958835121c3fad6611240fbf74b3695d262850cc043
4
+ data.tar.gz: 2e69404a282502b0b244dccd62c471d32d80b12e624a26ef158a5400eca057ba
5
5
  SHA512:
6
- metadata.gz: f7b04f930d6743048cbb33bf5e7cdcfc915aee45ce1f788ec392fe100edab8a2a39e714fe6bb51a8bfd376d51c00c15870a3a3d5f79bd7449ce1ffaefbeea628
7
- data.tar.gz: 35df2beddc2ef0c9aae2c5f4c5c4f4e0a3ea013af03571a01024aa0cf329804f0867bd59d8087ec04c91eef10a53150a2a251998cf4fa4a1d07a4f66812f6328
6
+ metadata.gz: 289a4846e961fa08c9b851c81db5b66ee0689970dd4a6469ce1d344d19cfeb2bea26317510a203e50d7b5601d734489deabd95fdcb5966f2d8d687e8dd1de174
7
+ data.tar.gz: 6cf36198555ed5c189a37fac91a4d6f61b2a4361a3a0380b4c4c24040b22dc7d18b060ab708cb343e9af9ec95a346c7e84193307f250aa29f42dcb601ddde575
@@ -6,10 +6,10 @@ Layout/LineLength:
6
6
  Max: 120
7
7
 
8
8
  Metrics/MethodLength:
9
- Max: 15
9
+ Max: 20
10
10
 
11
11
  Metrics/BlockLength:
12
- Max: 50
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
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nonnative (1.19.0)
4
+ nonnative (1.20.0)
5
+ concurrent-ruby (~> 1.0, >= 1.0.5)
5
6
  cucumber (~> 3.1, >= 3.1.2)
6
- grpc (~> 1.28)
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.28.0)
61
- google-protobuf (~> 3.11)
61
+ grpc (1.30.1)
62
+ google-protobuf (~> 3.12)
62
63
  googleapis-common-protos-types (~> 1.0)
63
- grpc-tools (1.28.0)
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.9)
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.86.0)
129
+ rubocop (0.87.1)
129
130
  parallel (~> 1.10)
130
- parser (>= 2.7.0.1)
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.3, < 1.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.28)
191
+ grpc-tools (~> 1.30, >= 1.30.1)
191
192
  nonnative!
192
193
  rake (~> 13.0, >= 13.0.1)
193
- rubocop (~> 0.86.0)
194
+ rubocop (~> 0.87.1)
194
195
  simplecov (~> 0.17.1)
195
- solargraph (~> 0.39.7)
196
+ solargraph (~> 0.39.11)
196
197
 
197
198
  BUNDLED WITH
198
199
  2.1.4
data/README.md CHANGED
@@ -309,8 +309,10 @@ Nonnative.configure do |config|
309
309
  config.strategy = :manual
310
310
 
311
311
  config.server do |d|
312
- d.proxy.type = 'chaos'
313
- d.proxy.port = 20_000
312
+ d.proxy = {
313
+ type: 'chaos',
314
+ port: 20_000
315
+ }
314
316
  end
315
317
  end
316
318
  ```
@@ -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.type = proxy['type']
46
- s.proxy.port = proxy['port']
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,8 +2,7 @@
2
2
 
3
3
  module Nonnative
4
4
  class ConfigurationProxy
5
- attr_accessor :type
6
- attr_accessor :port
5
+ attr_accessor :type, :port
7
6
 
8
7
  def initialize
9
8
  self.type = 'none'
@@ -2,14 +2,17 @@
2
2
 
3
3
  module Nonnative
4
4
  class ConfigurationServer
5
- attr_accessor :name
6
- attr_accessor :klass
7
- attr_accessor :timeout
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
- self.proxy = Nonnative::ConfigurationProxy.new
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
@@ -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
@@ -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
- id
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
- id
34
+ object_id
34
35
  end
35
36
 
36
- protected
37
-
38
- attr_reader :id
39
-
40
37
  private
41
38
 
42
- attr_reader :proxy, :thread
39
+ attr_reader :thread
43
40
  end
44
41
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Nonnative
4
- VERSION = '1.19.0'
4
+ VERSION = '1.20.0'
5
5
  end
@@ -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.28'
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.28'
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.86.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.7'
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.19.0
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-05 00:00:00.000000000 Z
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.28'
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.28'
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.28'
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.28'
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.86.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.86.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.7
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.7
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