nonnative 1.40.0 → 1.45.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/.coveralls.yml +1 -0
- data/CHANGELOG.md +50 -0
- data/Gemfile.lock +29 -18
- data/README.md +231 -38
- data/lib/nonnative.rb +12 -2
- data/lib/nonnative/before.rb +0 -2
- data/lib/nonnative/close_all_socket_pair.rb +0 -1
- data/lib/nonnative/configuration.rb +37 -3
- data/lib/nonnative/configuration_process.rb +2 -2
- data/lib/nonnative/configuration_runner.rb +19 -0
- data/lib/nonnative/configuration_server.rb +2 -14
- data/lib/nonnative/configuration_service.rb +6 -0
- data/lib/nonnative/cucumber.rb +31 -0
- data/lib/nonnative/fault_injection_proxy.rb +2 -2
- data/lib/nonnative/not_found_error.rb +6 -0
- data/lib/nonnative/pool.rb +26 -6
- data/lib/nonnative/{command.rb → process.rb} +13 -11
- data/lib/nonnative/runner.rb +29 -0
- data/lib/nonnative/server.rb +1 -9
- data/lib/nonnative/service.rb +5 -18
- data/lib/nonnative/version.rb +1 -1
- data/nonnative.gemspec +3 -3
- metadata +16 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 85f5fe8fb5f61dce67f48ddf86ea0d2b76a6446e0e249af0f5afd22229bf3d3d
|
|
4
|
+
data.tar.gz: 178d46b667d50d4f8b68b0e18946ca2aa265e41fd3f8c869229a6e464ddf6e41
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 782d41b50946ad3741bdf1deedaff39c47db9d890d00f6e2d3ea854c8dff0a9ca3e96d3960f6e2c9d8776b41f4dc6170ca7d0fd65fb86fb65809922258b9f2df
|
|
7
|
+
data.tar.gz: 317a75048db20140a4cd99dfc87ab8001fa4bcbfda7fc750fc3fb00ab8bfb7f7e25e16a38be17faff2c100c683281fac4f1fa9054cc4a39f510baabf6f174bb6
|
data/.coveralls.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
repo_token: x3EcMK4Nr770BeIFZengeQ2DLDCDjNfNo
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,56 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [1.45.0](https://github.com/alexfalkowski/nonnative/compare/v1.44.1...v1.45.0) (2021-05-10)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* add loading go command through config ([#86](https://github.com/alexfalkowski/nonnative/issues/86)) ([2f500d3](https://github.com/alexfalkowski/nonnative/commit/2f500d34ef6eb536b223651f84213f4f3d10c496))
|
|
11
|
+
|
|
12
|
+
### [1.44.1](https://github.com/alexfalkowski/nonnative/compare/v1.44.0...v1.44.1) (2021-05-06)
|
|
13
|
+
|
|
14
|
+
## [1.44.0](https://github.com/alexfalkowski/nonnative/compare/v1.43.0...v1.44.0) (2021-05-01)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* move to reusable steps ([#84](https://github.com/alexfalkowski/nonnative/issues/84)) ([37b6175](https://github.com/alexfalkowski/nonnative/commit/37b6175e920dfb70f3d6f13226240dd045c2db3d))
|
|
20
|
+
|
|
21
|
+
## [1.43.0](https://github.com/alexfalkowski/nonnative/compare/v1.42.2...v1.43.0) (2021-04-30)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Features
|
|
25
|
+
|
|
26
|
+
* release version 1.43.0 ([#83](https://github.com/alexfalkowski/nonnative/issues/83)) ([b51526d](https://github.com/alexfalkowski/nonnative/commit/b51526d99d24522a26f534d28769cc8cdee4af04))
|
|
27
|
+
|
|
28
|
+
### [1.42.2](https://github.com/alexfalkowski/nonnative/compare/v1.42.1...v1.42.2) (2021-04-30)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Bug Fixes
|
|
32
|
+
|
|
33
|
+
* make sure we parse services config ([#82](https://github.com/alexfalkowski/nonnative/issues/82)) ([2a52af7](https://github.com/alexfalkowski/nonnative/commit/2a52af74b75443674a2235c424d69f15516ab60f))
|
|
34
|
+
|
|
35
|
+
### [1.42.1](https://github.com/alexfalkowski/nonnative/compare/v1.42.0...v1.42.1) (2021-04-30)
|
|
36
|
+
|
|
37
|
+
## [1.42.0](https://github.com/alexfalkowski/nonnative/compare/v1.41.0...v1.42.0) (2021-04-30)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### Features
|
|
41
|
+
|
|
42
|
+
* add services ([#80](https://github.com/alexfalkowski/nonnative/issues/80)) ([454980e](https://github.com/alexfalkowski/nonnative/commit/454980e1eb141995c96203fcf9254bfe2cb0133e))
|
|
43
|
+
|
|
44
|
+
## [1.41.0](https://github.com/alexfalkowski/nonnative/compare/v1.40.2...v1.41.0) (2021-04-30)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
### Features
|
|
48
|
+
|
|
49
|
+
* add proxy to processes ([#79](https://github.com/alexfalkowski/nonnative/issues/79)) ([d52b2bb](https://github.com/alexfalkowski/nonnative/commit/d52b2bb6fad91612f9b9a64817c861d1c227ef0b))
|
|
50
|
+
|
|
51
|
+
### [1.40.2](https://github.com/alexfalkowski/nonnative/compare/v1.40.1...v1.40.2) (2021-04-27)
|
|
52
|
+
|
|
53
|
+
### [1.40.1](https://github.com/alexfalkowski/nonnative/compare/v1.40.0...v1.40.1) (2021-04-27)
|
|
54
|
+
|
|
5
55
|
## [1.40.0](https://github.com/alexfalkowski/nonnative/compare/v1.39.0...v1.40.0) (2021-04-25)
|
|
6
56
|
|
|
7
57
|
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
nonnative (1.
|
|
4
|
+
nonnative (1.45.0)
|
|
5
5
|
concurrent-ruby (~> 1.0, >= 1.0.5)
|
|
6
6
|
cucumber (>= 6, < 7)
|
|
7
7
|
grpc (>= 1, < 2)
|
|
@@ -15,7 +15,7 @@ PATH
|
|
|
15
15
|
GEM
|
|
16
16
|
remote: https://rubygems.org/
|
|
17
17
|
specs:
|
|
18
|
-
activesupport (6.1.3.
|
|
18
|
+
activesupport (6.1.3.2)
|
|
19
19
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
20
20
|
i18n (>= 1.6, < 2)
|
|
21
21
|
minitest (>= 5.1)
|
|
@@ -29,6 +29,12 @@ GEM
|
|
|
29
29
|
benchmark-trend (0.4.0)
|
|
30
30
|
builder (3.2.4)
|
|
31
31
|
concurrent-ruby (1.1.8)
|
|
32
|
+
coveralls (0.8.23)
|
|
33
|
+
json (>= 1.8, < 3)
|
|
34
|
+
simplecov (~> 0.16.1)
|
|
35
|
+
term-ansicolor (~> 1.3)
|
|
36
|
+
thor (>= 0.19.4, < 2.0)
|
|
37
|
+
tins (~> 1.6)
|
|
32
38
|
cucumber (6.0.0)
|
|
33
39
|
builder (~> 3.2, >= 3.2.4)
|
|
34
40
|
cucumber-core (~> 9.0, >= 9.0.0)
|
|
@@ -67,19 +73,20 @@ GEM
|
|
|
67
73
|
unf (>= 0.0.5, < 1.0.0)
|
|
68
74
|
e2mmap (0.1.0)
|
|
69
75
|
ffi (1.15.0)
|
|
70
|
-
google-protobuf (3.
|
|
76
|
+
google-protobuf (3.16.0)
|
|
71
77
|
googleapis-common-protos-types (1.0.6)
|
|
72
78
|
google-protobuf (~> 3.14)
|
|
73
|
-
grpc (1.37.
|
|
79
|
+
grpc (1.37.1)
|
|
74
80
|
google-protobuf (~> 3.15)
|
|
75
81
|
googleapis-common-protos-types (~> 1.0)
|
|
76
|
-
grpc-tools (1.37.
|
|
82
|
+
grpc-tools (1.37.1)
|
|
77
83
|
http-accept (1.7.0)
|
|
78
84
|
http-cookie (1.0.3)
|
|
79
85
|
domain_name (~> 0.5)
|
|
80
86
|
i18n (1.8.10)
|
|
81
87
|
concurrent-ruby (~> 1.0)
|
|
82
88
|
jaro_winkler (1.5.4)
|
|
89
|
+
json (2.5.1)
|
|
83
90
|
kramdown (2.3.1)
|
|
84
91
|
rexml
|
|
85
92
|
kramdown-parser-gfm (1.1.0)
|
|
@@ -99,14 +106,14 @@ GEM
|
|
|
99
106
|
mini_portile2 (~> 2.5.0)
|
|
100
107
|
racc (~> 1.4)
|
|
101
108
|
parallel (1.20.1)
|
|
102
|
-
parser (3.0.1.
|
|
109
|
+
parser (3.0.1.1)
|
|
103
110
|
ast (~> 2.4.1)
|
|
104
111
|
protobuf-cucumber (3.10.8)
|
|
105
112
|
activesupport (>= 3.2)
|
|
106
113
|
middleware
|
|
107
114
|
thor
|
|
108
115
|
thread_safe
|
|
109
|
-
puma (5.
|
|
116
|
+
puma (5.3.0)
|
|
110
117
|
nio4r (~> 2.0)
|
|
111
118
|
racc (1.5.2)
|
|
112
119
|
rack (2.2.3)
|
|
@@ -140,25 +147,24 @@ GEM
|
|
|
140
147
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
141
148
|
rspec-support (~> 3.10.0)
|
|
142
149
|
rspec-support (3.10.2)
|
|
143
|
-
rubocop (1.
|
|
150
|
+
rubocop (1.14.0)
|
|
144
151
|
parallel (~> 1.10)
|
|
145
152
|
parser (>= 3.0.0.0)
|
|
146
153
|
rainbow (>= 2.2.2, < 4.0)
|
|
147
154
|
regexp_parser (>= 1.8, < 3.0)
|
|
148
155
|
rexml
|
|
149
|
-
rubocop-ast (>= 1.
|
|
156
|
+
rubocop-ast (>= 1.5.0, < 2.0)
|
|
150
157
|
ruby-progressbar (~> 1.7)
|
|
151
158
|
unicode-display_width (>= 1.4.0, < 3.0)
|
|
152
|
-
rubocop-ast (1.
|
|
153
|
-
parser (>=
|
|
159
|
+
rubocop-ast (1.5.0)
|
|
160
|
+
parser (>= 3.0.1.1)
|
|
154
161
|
ruby-progressbar (1.11.0)
|
|
155
162
|
ruby2_keywords (0.0.4)
|
|
156
|
-
simplecov (0.
|
|
163
|
+
simplecov (0.16.1)
|
|
157
164
|
docile (~> 1.1)
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
simplecov-html (0.
|
|
161
|
-
simplecov_json_formatter (0.1.2)
|
|
165
|
+
json (>= 1.8, < 3)
|
|
166
|
+
simplecov-html (~> 0.10.0)
|
|
167
|
+
simplecov-html (0.10.2)
|
|
162
168
|
sinatra (2.1.0)
|
|
163
169
|
mustermann (~> 1.0)
|
|
164
170
|
rack (~> 2.2)
|
|
@@ -178,11 +184,16 @@ GEM
|
|
|
178
184
|
thor (~> 1.0)
|
|
179
185
|
tilt (~> 2.0)
|
|
180
186
|
yard (~> 0.9, >= 0.9.24)
|
|
187
|
+
sync (0.5.0)
|
|
181
188
|
sys-uname (1.2.2)
|
|
182
189
|
ffi (~> 1.1)
|
|
190
|
+
term-ansicolor (1.7.1)
|
|
191
|
+
tins (~> 1.0)
|
|
183
192
|
thor (1.0.1)
|
|
184
193
|
thread_safe (0.3.6)
|
|
185
194
|
tilt (2.0.10)
|
|
195
|
+
tins (1.28.0)
|
|
196
|
+
sync
|
|
186
197
|
tzinfo (2.0.4)
|
|
187
198
|
concurrent-ruby (~> 1.0)
|
|
188
199
|
unf (0.1.4)
|
|
@@ -197,9 +208,9 @@ PLATFORMS
|
|
|
197
208
|
|
|
198
209
|
DEPENDENCIES
|
|
199
210
|
bundler (~> 2.1, >= 2.1.4)
|
|
211
|
+
coveralls (~> 0.8.23)
|
|
200
212
|
nonnative!
|
|
201
|
-
rubocop (~> 1.
|
|
202
|
-
simplecov (~> 0.21.2)
|
|
213
|
+
rubocop (~> 1.14)
|
|
203
214
|
solargraph (~> 0.40.4)
|
|
204
215
|
|
|
205
216
|
BUNDLED WITH
|
data/README.md
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
[](https://circleci.com/gh/alexfalkowski/nonnative)
|
|
2
|
+
[](https://coveralls.io/github/alexfalkowski/nonnative?branch=master)
|
|
2
3
|
|
|
3
4
|
# Nonnative
|
|
4
5
|
|
|
@@ -32,12 +33,12 @@ Or install it yourself as:
|
|
|
32
33
|
|
|
33
34
|
Configure nonnative with the following:
|
|
34
35
|
|
|
35
|
-
- Process
|
|
36
|
+
- Process, Server or Service that you want to start.
|
|
36
37
|
- A timeout value.
|
|
37
38
|
- Port to verify.
|
|
38
39
|
- The class for servers.
|
|
39
40
|
- The log for servers/processes
|
|
40
|
-
- The strategy for processes
|
|
41
|
+
- The strategy for processes, servers and services.
|
|
41
42
|
|
|
42
43
|
### Strategy
|
|
43
44
|
|
|
@@ -52,6 +53,8 @@ This can be overridden by the following environment variables:
|
|
|
52
53
|
|
|
53
54
|
### Processes
|
|
54
55
|
|
|
56
|
+
A process is some sort of command that you would run locally.
|
|
57
|
+
|
|
55
58
|
Setup it up programmatically:
|
|
56
59
|
|
|
57
60
|
```ruby
|
|
@@ -60,21 +63,21 @@ require 'nonnative'
|
|
|
60
63
|
Nonnative.configure do |config|
|
|
61
64
|
config.strategy = :startup
|
|
62
65
|
|
|
63
|
-
config.process do |
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
config.process do |p|
|
|
67
|
+
p.name = 'start_1'
|
|
68
|
+
p.command = 'features/support/bin/start 12_321'
|
|
69
|
+
p.timeout = config.strategy.timeout
|
|
70
|
+
p.port = 12_321
|
|
71
|
+
p.log = 'features/logs/12_321.log'
|
|
72
|
+
p.signal = 'INT' # Possible values are described in Signal.list.keys
|
|
70
73
|
end
|
|
71
74
|
|
|
72
|
-
config.process do |
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
config.process do |p|
|
|
76
|
+
p.name = 'start_2'
|
|
77
|
+
p.command = 'features/support/bin/start 12_322'
|
|
78
|
+
p.timeout = 0.5
|
|
79
|
+
p.port = 12_322
|
|
80
|
+
p.log = 'features/logs/12_322.log'
|
|
78
81
|
end
|
|
79
82
|
end
|
|
80
83
|
```
|
|
@@ -83,7 +86,7 @@ Setup it up through configuration:
|
|
|
83
86
|
|
|
84
87
|
```yaml
|
|
85
88
|
version: 1.0
|
|
86
|
-
strategy:
|
|
89
|
+
strategy: startup
|
|
87
90
|
processes:
|
|
88
91
|
-
|
|
89
92
|
name: start_1
|
|
@@ -110,6 +113,8 @@ Nonnative.load_configuration('configuration.yml')
|
|
|
110
113
|
|
|
111
114
|
### Servers
|
|
112
115
|
|
|
116
|
+
A server is a dependency to some external API.
|
|
117
|
+
|
|
113
118
|
Define your server:
|
|
114
119
|
|
|
115
120
|
```ruby
|
|
@@ -139,7 +144,7 @@ Setup it up programmatically:
|
|
|
139
144
|
require 'nonnative'
|
|
140
145
|
|
|
141
146
|
Nonnative.configure do |config|
|
|
142
|
-
config.strategy = :
|
|
147
|
+
config.strategy = :startup
|
|
143
148
|
|
|
144
149
|
config.server do |s|
|
|
145
150
|
s.name = 'server_1'
|
|
@@ -163,17 +168,17 @@ Setup it up through configuration:
|
|
|
163
168
|
|
|
164
169
|
```yaml
|
|
165
170
|
version: 1.0
|
|
166
|
-
strategy:
|
|
171
|
+
strategy: startup
|
|
167
172
|
servers:
|
|
168
173
|
-
|
|
169
174
|
name: server_1
|
|
170
|
-
|
|
175
|
+
class: Nonnative::EchoServer
|
|
171
176
|
timeout: 1
|
|
172
177
|
port: 12323
|
|
173
178
|
log: features/logs/server_1.log
|
|
174
179
|
-
|
|
175
180
|
name: server_2
|
|
176
|
-
|
|
181
|
+
class: Nonnative::EchoServer
|
|
177
182
|
timeout: 1
|
|
178
183
|
port: 12324
|
|
179
184
|
log: features/logs/server_2.log
|
|
@@ -219,7 +224,7 @@ Setup it up programmatically:
|
|
|
219
224
|
require 'nonnative'
|
|
220
225
|
|
|
221
226
|
Nonnative.configure do |config|
|
|
222
|
-
config.strategy = :
|
|
227
|
+
config.strategy = :startup
|
|
223
228
|
|
|
224
229
|
config.server do |s|
|
|
225
230
|
s.name = 'http_server_1'
|
|
@@ -235,11 +240,11 @@ Setup it up through configuration:
|
|
|
235
240
|
|
|
236
241
|
```yaml
|
|
237
242
|
version: 1.0
|
|
238
|
-
strategy:
|
|
243
|
+
strategy: startup
|
|
239
244
|
servers:
|
|
240
245
|
-
|
|
241
246
|
name: http_server_1
|
|
242
|
-
|
|
247
|
+
class: Nonnative::Features::HTTPServer
|
|
243
248
|
timeout: 1
|
|
244
249
|
port: 4567
|
|
245
250
|
log: features/logs/http_server_1.log
|
|
@@ -281,7 +286,7 @@ Setup it up programmatically:
|
|
|
281
286
|
require 'nonnative'
|
|
282
287
|
|
|
283
288
|
Nonnative.configure do |config|
|
|
284
|
-
config.strategy = :
|
|
289
|
+
config.strategy = :startup
|
|
285
290
|
|
|
286
291
|
config.server do |s|
|
|
287
292
|
s.name = 'grpc_server_1'
|
|
@@ -297,11 +302,11 @@ Setup it up through configuration:
|
|
|
297
302
|
|
|
298
303
|
```yaml
|
|
299
304
|
version: 1.0
|
|
300
|
-
strategy:
|
|
305
|
+
strategy: startup
|
|
301
306
|
servers:
|
|
302
307
|
-
|
|
303
308
|
name: grpc_server_1
|
|
304
|
-
|
|
309
|
+
class: Nonnative::Features::GRPCServer
|
|
305
310
|
timeout: 1
|
|
306
311
|
port: 9002
|
|
307
312
|
log: features/logs/grpc_server_1.log
|
|
@@ -314,22 +319,109 @@ require 'nonnative'
|
|
|
314
319
|
|
|
315
320
|
Nonnative.load_configuration('configuration.yml')
|
|
316
321
|
```
|
|
322
|
+
|
|
323
|
+
### Services
|
|
324
|
+
|
|
325
|
+
A service is an external dependency to your system. This is usually an expensive process to start like a DB and you would prefer to be managed externally. Services are not really exciting by themselves, it's when we add proxies that they allow us to do some extra work.
|
|
326
|
+
|
|
327
|
+
Setup it up programmatically:
|
|
328
|
+
|
|
329
|
+
```ruby
|
|
330
|
+
require 'nonnative'
|
|
331
|
+
|
|
332
|
+
Nonnative.configure do |config|
|
|
333
|
+
config.strategy = :startup
|
|
334
|
+
|
|
335
|
+
config.service do |s|
|
|
336
|
+
s.name = 'postgres'
|
|
337
|
+
p.port = 5432
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
config.service do |s|
|
|
341
|
+
s.name = 'redis'
|
|
342
|
+
s.port = 6379
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Setup it up through configuration:
|
|
348
|
+
|
|
349
|
+
```yaml
|
|
350
|
+
version: 1.0
|
|
351
|
+
strategy: startup
|
|
352
|
+
processes:
|
|
353
|
+
-
|
|
354
|
+
name: postgres
|
|
355
|
+
port: 5432
|
|
356
|
+
-
|
|
357
|
+
name: redis
|
|
358
|
+
port: 6379
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
Then load the file with
|
|
362
|
+
|
|
363
|
+
```ruby
|
|
364
|
+
require 'nonnative'
|
|
365
|
+
|
|
366
|
+
Nonnative.load_configuration('configuration.yml')
|
|
367
|
+
```
|
|
368
|
+
|
|
317
369
|
#### Proxies
|
|
318
370
|
|
|
319
371
|
We allow different proxies to be configured. These proxies can be used to simulate all kind of situations. The proxies that can be configured are:
|
|
320
372
|
- `none` (this is the default)
|
|
321
373
|
- `fault_injection`
|
|
322
374
|
|
|
375
|
+
##### Processes
|
|
376
|
+
|
|
377
|
+
Setup it up programmatically:
|
|
378
|
+
|
|
379
|
+
```ruby
|
|
380
|
+
require 'nonnative'
|
|
381
|
+
|
|
382
|
+
Nonnative.configure do |config|
|
|
383
|
+
config.strategy = :startup
|
|
384
|
+
|
|
385
|
+
config.process do |p|
|
|
386
|
+
p.proxy = {
|
|
387
|
+
type: 'fault_injection',
|
|
388
|
+
port: 20_000,
|
|
389
|
+
log: 'features/logs/proxy_server.log',
|
|
390
|
+
options: {
|
|
391
|
+
delay: 5
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
Setup it up through configuration:
|
|
399
|
+
|
|
400
|
+
```yaml
|
|
401
|
+
version: 1.0
|
|
402
|
+
strategy: startup
|
|
403
|
+
processes:
|
|
404
|
+
-
|
|
405
|
+
proxy:
|
|
406
|
+
type: fault_injection
|
|
407
|
+
port: 20000
|
|
408
|
+
log: features/logs/proxy_server.log
|
|
409
|
+
options:
|
|
410
|
+
delay: 5
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
##### Servers
|
|
414
|
+
|
|
323
415
|
Setup it up programmatically:
|
|
324
416
|
|
|
325
417
|
```ruby
|
|
326
418
|
require 'nonnative'
|
|
327
419
|
|
|
328
420
|
Nonnative.configure do |config|
|
|
329
|
-
config.strategy = :
|
|
421
|
+
config.strategy = :startup
|
|
330
422
|
|
|
331
|
-
config.server do |
|
|
332
|
-
|
|
423
|
+
config.server do |s|
|
|
424
|
+
s.proxy = {
|
|
333
425
|
type: 'fault_injection',
|
|
334
426
|
port: 20_000,
|
|
335
427
|
log: 'features/logs/proxy_server.log',
|
|
@@ -345,7 +437,7 @@ Setup it up through configuration:
|
|
|
345
437
|
|
|
346
438
|
```yaml
|
|
347
439
|
version: 1.0
|
|
348
|
-
strategy:
|
|
440
|
+
strategy: startup
|
|
349
441
|
servers:
|
|
350
442
|
-
|
|
351
443
|
proxy:
|
|
@@ -356,6 +448,44 @@ servers:
|
|
|
356
448
|
delay: 5
|
|
357
449
|
```
|
|
358
450
|
|
|
451
|
+
##### Services
|
|
452
|
+
|
|
453
|
+
Setup it up programmatically:
|
|
454
|
+
|
|
455
|
+
```ruby
|
|
456
|
+
require 'nonnative'
|
|
457
|
+
|
|
458
|
+
Nonnative.configure do |config|
|
|
459
|
+
config.strategy = :startup
|
|
460
|
+
|
|
461
|
+
config.service do |s|
|
|
462
|
+
s.proxy = {
|
|
463
|
+
type: 'fault_injection',
|
|
464
|
+
port: 20_000,
|
|
465
|
+
log: 'features/logs/proxy_server.log',
|
|
466
|
+
options: {
|
|
467
|
+
delay: 5
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
end
|
|
471
|
+
end
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
Setup it up through configuration:
|
|
475
|
+
|
|
476
|
+
```yaml
|
|
477
|
+
version: 1.0
|
|
478
|
+
strategy: startup
|
|
479
|
+
services:
|
|
480
|
+
-
|
|
481
|
+
proxy:
|
|
482
|
+
type: fault_injection
|
|
483
|
+
port: 20000
|
|
484
|
+
log: features/logs/proxy_server.log
|
|
485
|
+
options:
|
|
486
|
+
delay: 5
|
|
487
|
+
```
|
|
488
|
+
|
|
359
489
|
##### Fault Injection
|
|
360
490
|
|
|
361
491
|
The `fault_injection` proxy allows you to simulate failures by injecting them. We currently support the following:
|
|
@@ -363,6 +493,27 @@ The `fault_injection` proxy allows you to simulate failures by injecting them. W
|
|
|
363
493
|
- `delay` - This delays the communication between the connection. Default is 2 secs can be configured through options.
|
|
364
494
|
- `invalid_data` - This takes the input and rearranges it to produce invalid data.
|
|
365
495
|
|
|
496
|
+
###### Processes
|
|
497
|
+
|
|
498
|
+
Setup it up programmatically:
|
|
499
|
+
|
|
500
|
+
```ruby
|
|
501
|
+
name = 'name of process in configuration'
|
|
502
|
+
server = Nonnative.pool.process_by_name(name)
|
|
503
|
+
|
|
504
|
+
server.proxy.close_all # To use close_all.
|
|
505
|
+
server.proxy.reset # To reset it back to a good state.
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
With cucumber:
|
|
509
|
+
|
|
510
|
+
```cucumber
|
|
511
|
+
Given I set the proxy for process 'process_1' to 'close_all'
|
|
512
|
+
Then And I should reset the proxy for process 'process_1'
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
###### Servers
|
|
516
|
+
|
|
366
517
|
Setup it up programmatically:
|
|
367
518
|
|
|
368
519
|
```ruby
|
|
@@ -373,6 +524,32 @@ server.proxy.close_all # To use close_all.
|
|
|
373
524
|
server.proxy.reset # To reset it back to a good state.
|
|
374
525
|
```
|
|
375
526
|
|
|
527
|
+
With cucumber:
|
|
528
|
+
|
|
529
|
+
```cucumber
|
|
530
|
+
Given I set the proxy for server 'server_1' to 'close_all'
|
|
531
|
+
Then And I should reset the proxy for server 'server_1'
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
###### Services
|
|
535
|
+
|
|
536
|
+
Setup it up programmatically:
|
|
537
|
+
|
|
538
|
+
```ruby
|
|
539
|
+
name = 'name of service in configuration'
|
|
540
|
+
service = Nonnative.pool.service_by_name(name)
|
|
541
|
+
|
|
542
|
+
service.proxy.close_all # To use close_all.
|
|
543
|
+
service.proxy.reset # To reset it back to a good state.
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
With cucumber:
|
|
547
|
+
|
|
548
|
+
```cucumber
|
|
549
|
+
Given I set the proxy for service 'service_1' to 'close_all'
|
|
550
|
+
Then And I should reset the proxy for service 'service_1'
|
|
551
|
+
```
|
|
552
|
+
|
|
376
553
|
### Go
|
|
377
554
|
|
|
378
555
|
As we love using go as a language for services we have added support to start binaries with defined parameters. This expects that you build your services in the format of `command sub_command --params`
|
|
@@ -380,15 +557,12 @@ As we love using go as a language for services we have added support to start bi
|
|
|
380
557
|
To get this to work you will need to create a `main_test.go` file with these contents:
|
|
381
558
|
|
|
382
559
|
```go
|
|
560
|
+
// +build features
|
|
561
|
+
|
|
383
562
|
package main
|
|
384
563
|
|
|
385
|
-
import
|
|
386
|
-
"testing"
|
|
387
|
-
)
|
|
564
|
+
import "testing"
|
|
388
565
|
|
|
389
|
-
// TestFeatures is a hack that allows us to figure out what the coverage is during
|
|
390
|
-
// integration tests. I would not recommend that you use a binary built using
|
|
391
|
-
// this hack outside of a test suite.
|
|
392
566
|
func TestFeatures(t *testing.T) {
|
|
393
567
|
main()
|
|
394
568
|
}
|
|
@@ -397,11 +571,30 @@ func TestFeatures(t *testing.T) {
|
|
|
397
571
|
Then to compile this binary you will need to do the following:
|
|
398
572
|
|
|
399
573
|
```sh
|
|
400
|
-
go test -mod vendor -c -covermode=count -o your_binary -coverpkg=./... github.com/your_location
|
|
574
|
+
go test -mod vendor -c -tags features -covermode=count -o your_binary -coverpkg=./... github.com/your_location
|
|
401
575
|
```
|
|
402
576
|
|
|
403
|
-
|
|
577
|
+
Setup it up programmatically:
|
|
404
578
|
|
|
405
579
|
```ruby
|
|
406
580
|
Nonnative.go_executable('reports', 'your_binary', 'sub_command', '--config config.yaml')
|
|
407
581
|
```
|
|
582
|
+
|
|
583
|
+
Setup it up through configuration:
|
|
584
|
+
|
|
585
|
+
```yaml
|
|
586
|
+
version: 1.0
|
|
587
|
+
strategy: startup
|
|
588
|
+
processes:
|
|
589
|
+
-
|
|
590
|
+
name: go
|
|
591
|
+
go:
|
|
592
|
+
output: reports
|
|
593
|
+
executable: your_binary
|
|
594
|
+
command: sub_command
|
|
595
|
+
parameters:
|
|
596
|
+
- --config config.yaml
|
|
597
|
+
timeout: 5
|
|
598
|
+
port: 8000
|
|
599
|
+
log: features/logs/go.log
|
|
600
|
+
```
|
data/lib/nonnative.rb
CHANGED
|
@@ -11,21 +11,26 @@ require 'rest-client'
|
|
|
11
11
|
require 'puma'
|
|
12
12
|
require 'puma/server'
|
|
13
13
|
require 'concurrent'
|
|
14
|
+
require 'cucumber'
|
|
14
15
|
|
|
15
16
|
require 'nonnative/version'
|
|
16
17
|
require 'nonnative/error'
|
|
17
18
|
require 'nonnative/start_error'
|
|
18
19
|
require 'nonnative/stop_error'
|
|
20
|
+
require 'nonnative/not_found_error'
|
|
19
21
|
require 'nonnative/timeout'
|
|
20
22
|
require 'nonnative/port'
|
|
21
23
|
require 'nonnative/configuration'
|
|
24
|
+
require 'nonnative/configuration_runner'
|
|
22
25
|
require 'nonnative/configuration_process'
|
|
23
26
|
require 'nonnative/configuration_server'
|
|
27
|
+
require 'nonnative/configuration_service'
|
|
24
28
|
require 'nonnative/configuration_proxy'
|
|
29
|
+
require 'nonnative/runner'
|
|
30
|
+
require 'nonnative/process'
|
|
31
|
+
require 'nonnative/server'
|
|
25
32
|
require 'nonnative/service'
|
|
26
|
-
require 'nonnative/command'
|
|
27
33
|
require 'nonnative/pool'
|
|
28
|
-
require 'nonnative/server'
|
|
29
34
|
require 'nonnative/http_client'
|
|
30
35
|
require 'nonnative/http_server'
|
|
31
36
|
require 'nonnative/grpc_server'
|
|
@@ -41,11 +46,16 @@ require 'nonnative/invalid_data_socket_pair'
|
|
|
41
46
|
require 'nonnative/socket_pair_factory'
|
|
42
47
|
require 'nonnative/strategy'
|
|
43
48
|
require 'nonnative/go_command'
|
|
49
|
+
require 'nonnative/cucumber'
|
|
44
50
|
|
|
45
51
|
module Nonnative
|
|
46
52
|
class << self
|
|
47
53
|
attr_reader :pool
|
|
48
54
|
|
|
55
|
+
def log_lines(path, predicate)
|
|
56
|
+
File.readlines(path).select { |l| predicate.call(l) }
|
|
57
|
+
end
|
|
58
|
+
|
|
49
59
|
def go_executable(output, exec, cmd, *params)
|
|
50
60
|
Nonnative::GoCommand.new(exec, output).executable(cmd, params)
|
|
51
61
|
end
|
data/lib/nonnative/before.rb
CHANGED
|
@@ -11,6 +11,7 @@ module Nonnative
|
|
|
11
11
|
|
|
12
12
|
processes(file, c)
|
|
13
13
|
servers(file, c)
|
|
14
|
+
services(file, c)
|
|
14
15
|
end
|
|
15
16
|
end
|
|
16
17
|
|
|
@@ -21,21 +22,46 @@ module Nonnative
|
|
|
21
22
|
processes.each do |fd|
|
|
22
23
|
config.process do |d|
|
|
23
24
|
d.name = fd['name']
|
|
24
|
-
d.command = fd
|
|
25
|
+
d.command = command(fd)
|
|
25
26
|
d.timeout = fd['timeout']
|
|
26
27
|
d.port = fd['port']
|
|
27
28
|
d.log = fd['log']
|
|
28
29
|
d.signal = fd['signal']
|
|
30
|
+
|
|
31
|
+
proxy d, fd['proxy']
|
|
29
32
|
end
|
|
30
33
|
end
|
|
31
34
|
end
|
|
32
35
|
|
|
36
|
+
def command(process)
|
|
37
|
+
go = process['go']
|
|
38
|
+
if go
|
|
39
|
+
Nonnative.go_executable(go['output'], go['executable'], go['command'], *go['parameters'])
|
|
40
|
+
else
|
|
41
|
+
process['command']
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
33
45
|
def servers(file, config)
|
|
34
46
|
servers = file['servers'] || []
|
|
35
47
|
servers.each do |fd|
|
|
36
48
|
config.server do |s|
|
|
37
49
|
s.name = fd['name']
|
|
38
|
-
s.klass = Object.const_get(fd['
|
|
50
|
+
s.klass = Object.const_get(fd['class'])
|
|
51
|
+
s.timeout = fd['timeout']
|
|
52
|
+
s.port = fd['port']
|
|
53
|
+
s.log = fd['log']
|
|
54
|
+
|
|
55
|
+
proxy s, fd['proxy']
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def services(file, config)
|
|
61
|
+
services = file['services'] || []
|
|
62
|
+
services.each do |fd|
|
|
63
|
+
config.service do |s|
|
|
64
|
+
s.name = fd['name']
|
|
39
65
|
s.timeout = fd['timeout']
|
|
40
66
|
s.port = fd['port']
|
|
41
67
|
s.log = fd['log']
|
|
@@ -61,9 +87,10 @@ module Nonnative
|
|
|
61
87
|
@strategy = Strategy.new
|
|
62
88
|
@processes = []
|
|
63
89
|
@servers = []
|
|
90
|
+
@services = []
|
|
64
91
|
end
|
|
65
92
|
|
|
66
|
-
attr_accessor :processes, :servers
|
|
93
|
+
attr_accessor :processes, :servers, :services
|
|
67
94
|
attr_reader :strategy
|
|
68
95
|
|
|
69
96
|
def strategy=(value)
|
|
@@ -83,5 +110,12 @@ module Nonnative
|
|
|
83
110
|
|
|
84
111
|
servers << server
|
|
85
112
|
end
|
|
113
|
+
|
|
114
|
+
def service
|
|
115
|
+
service = Nonnative::ConfigurationService.new
|
|
116
|
+
yield service
|
|
117
|
+
|
|
118
|
+
services << service
|
|
119
|
+
end
|
|
86
120
|
end
|
|
87
121
|
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Nonnative
|
|
4
|
+
class ConfigurationRunner
|
|
5
|
+
attr_accessor :name, :timeout, :port, :log
|
|
6
|
+
attr_reader :proxy
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
@proxy = Nonnative::ConfigurationProxy.new
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def proxy=(value)
|
|
13
|
+
proxy.type = value[:type]
|
|
14
|
+
proxy.port = value[:port]
|
|
15
|
+
proxy.log = value[:log]
|
|
16
|
+
proxy.options = value[:options]
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -1,19 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Nonnative
|
|
4
|
-
class ConfigurationServer
|
|
5
|
-
attr_accessor :
|
|
6
|
-
attr_reader :proxy
|
|
7
|
-
|
|
8
|
-
def initialize
|
|
9
|
-
@proxy = Nonnative::ConfigurationProxy.new
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def proxy=(value)
|
|
13
|
-
proxy.type = value[:type]
|
|
14
|
-
proxy.port = value[:port]
|
|
15
|
-
proxy.log = value[:log]
|
|
16
|
-
proxy.options = value[:options]
|
|
17
|
-
end
|
|
4
|
+
class ConfigurationServer < ConfigurationRunner
|
|
5
|
+
attr_accessor :klass
|
|
18
6
|
end
|
|
19
7
|
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Given('I set the proxy for process {string} to {string}') do |name, operation|
|
|
4
|
+
server = Nonnative.pool.process_by_name(name)
|
|
5
|
+
server.proxy.send(operation)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
Given('I set the proxy for server {string} to {string}') do |name, operation|
|
|
9
|
+
server = Nonnative.pool.server_by_name(name)
|
|
10
|
+
server.proxy.send(operation)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Given('I set the proxy for service {string} to {string}') do |name, operation|
|
|
14
|
+
service = Nonnative.pool.service_by_name(name)
|
|
15
|
+
service.proxy.send(operation)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
Then('I should reset the proxy for process {string}') do |name|
|
|
19
|
+
server = Nonnative.pool.process_by_name(name)
|
|
20
|
+
server.proxy.reset
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
Then('I should reset the proxy for server {string}') do |name|
|
|
24
|
+
server = Nonnative.pool.server_by_name(name)
|
|
25
|
+
server.proxy.reset
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
Then('I should reset the proxy for service {string}') do |name|
|
|
29
|
+
service = Nonnative.pool.service_by_name(name)
|
|
30
|
+
service.proxy.reset
|
|
31
|
+
end
|
data/lib/nonnative/pool.rb
CHANGED
|
@@ -7,34 +7,54 @@ module Nonnative
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
def start(&block)
|
|
10
|
+
services.each(&:start)
|
|
10
11
|
[servers, processes].each { |t| process(t, :start, :open?, &block) }
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
def stop(&block)
|
|
14
15
|
[processes, servers].each { |t| process(t, :stop, :closed?, &block) }
|
|
16
|
+
services.each(&:stop)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def process_by_name(name)
|
|
20
|
+
processes[runner_index(configuration.processes, name)].first
|
|
15
21
|
end
|
|
16
22
|
|
|
17
23
|
def server_by_name(name)
|
|
18
|
-
|
|
19
|
-
|
|
24
|
+
servers[runner_index(configuration.servers, name)].first
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def service_by_name(name)
|
|
28
|
+
services[runner_index(configuration.services, name)]
|
|
20
29
|
end
|
|
21
30
|
|
|
22
31
|
private
|
|
23
32
|
|
|
24
33
|
attr_reader :configuration
|
|
25
34
|
|
|
35
|
+
def runner_index(runners, name)
|
|
36
|
+
index = runners.find_index { |s| s.name == name }
|
|
37
|
+
raise NotFoundError, "Could not find runner with name '#{name}'" if index.nil?
|
|
38
|
+
|
|
39
|
+
index
|
|
40
|
+
end
|
|
41
|
+
|
|
26
42
|
def processes
|
|
27
|
-
@processes ||= configuration.processes.map do |
|
|
28
|
-
[Nonnative::
|
|
43
|
+
@processes ||= configuration.processes.map do |p|
|
|
44
|
+
[Nonnative::Process.new(p), Nonnative::Port.new(p)]
|
|
29
45
|
end
|
|
30
46
|
end
|
|
31
47
|
|
|
32
48
|
def servers
|
|
33
|
-
@servers ||= configuration.servers.map do |
|
|
34
|
-
[
|
|
49
|
+
@servers ||= configuration.servers.map do |s|
|
|
50
|
+
[s.klass.new(s), Nonnative::Port.new(s)]
|
|
35
51
|
end
|
|
36
52
|
end
|
|
37
53
|
|
|
54
|
+
def services
|
|
55
|
+
@services ||= configuration.services.map { |s| Nonnative::Service.new(s) }
|
|
56
|
+
end
|
|
57
|
+
|
|
38
58
|
def process(all, type_method, port_method, &block)
|
|
39
59
|
types = []
|
|
40
60
|
pids = []
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Nonnative
|
|
4
|
-
class
|
|
4
|
+
class Process < Runner
|
|
5
5
|
def start
|
|
6
|
-
unless
|
|
7
|
-
|
|
6
|
+
unless process_exists?
|
|
7
|
+
proxy.start
|
|
8
|
+
@pid = process_spawn
|
|
8
9
|
wait_start
|
|
9
10
|
end
|
|
10
11
|
|
|
@@ -12,8 +13,9 @@ module Nonnative
|
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def stop
|
|
15
|
-
if
|
|
16
|
-
|
|
16
|
+
if process_exists?
|
|
17
|
+
process_kill
|
|
18
|
+
proxy.stop
|
|
17
19
|
wait_stop
|
|
18
20
|
end
|
|
19
21
|
|
|
@@ -24,7 +26,7 @@ module Nonnative
|
|
|
24
26
|
|
|
25
27
|
def wait_stop
|
|
26
28
|
timeout.perform do
|
|
27
|
-
Process.waitpid2(pid)
|
|
29
|
+
::Process.waitpid2(pid)
|
|
28
30
|
end
|
|
29
31
|
end
|
|
30
32
|
|
|
@@ -32,20 +34,20 @@ module Nonnative
|
|
|
32
34
|
|
|
33
35
|
attr_reader :pid
|
|
34
36
|
|
|
35
|
-
def
|
|
37
|
+
def process_kill
|
|
36
38
|
signal = Signal.list[service.signal || 'INT'] || Signal.list['INT']
|
|
37
|
-
Process.kill(signal, pid)
|
|
39
|
+
::Process.kill(signal, pid)
|
|
38
40
|
end
|
|
39
41
|
|
|
40
|
-
def
|
|
42
|
+
def process_spawn
|
|
41
43
|
spawn(service.command, %i[out err] => [service.log, 'a'])
|
|
42
44
|
end
|
|
43
45
|
|
|
44
|
-
def
|
|
46
|
+
def process_exists?
|
|
45
47
|
return false if pid.nil?
|
|
46
48
|
|
|
47
49
|
signal = Signal.list['EXIT']
|
|
48
|
-
Process.kill(signal, pid)
|
|
50
|
+
::Process.kill(signal, pid)
|
|
49
51
|
true
|
|
50
52
|
rescue Errno::ESRCH
|
|
51
53
|
false
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Nonnative
|
|
4
|
+
class Runner
|
|
5
|
+
attr_reader :proxy
|
|
6
|
+
|
|
7
|
+
def initialize(service)
|
|
8
|
+
@service = service
|
|
9
|
+
@timeout = Nonnative::Timeout.new(service.timeout)
|
|
10
|
+
@proxy = Nonnative::ProxyFactory.create(service)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def name
|
|
14
|
+
service.name
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
attr_reader :service, :timeout
|
|
20
|
+
|
|
21
|
+
def wait_start
|
|
22
|
+
sleep 0.1
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def wait_stop
|
|
26
|
+
sleep 0.1
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/nonnative/server.rb
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Nonnative
|
|
4
|
-
class Server <
|
|
5
|
-
attr_reader :proxy
|
|
6
|
-
|
|
7
|
-
def initialize(service)
|
|
8
|
-
@proxy = Nonnative::ProxyFactory.create(service)
|
|
9
|
-
|
|
10
|
-
super service
|
|
11
|
-
end
|
|
12
|
-
|
|
4
|
+
class Server < Runner
|
|
13
5
|
def start
|
|
14
6
|
unless thread
|
|
15
7
|
proxy.start
|
data/lib/nonnative/service.rb
CHANGED
|
@@ -1,26 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Nonnative
|
|
4
|
-
class Service
|
|
5
|
-
def
|
|
6
|
-
|
|
7
|
-
@timeout = Nonnative::Timeout.new(service.timeout)
|
|
4
|
+
class Service < Runner
|
|
5
|
+
def start
|
|
6
|
+
proxy.start
|
|
8
7
|
end
|
|
9
8
|
|
|
10
|
-
def
|
|
11
|
-
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
protected
|
|
15
|
-
|
|
16
|
-
attr_reader :service, :timeout
|
|
17
|
-
|
|
18
|
-
def wait_start
|
|
19
|
-
sleep 0.1
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def wait_stop
|
|
23
|
-
sleep 0.1
|
|
9
|
+
def stop
|
|
10
|
+
proxy.stop
|
|
24
11
|
end
|
|
25
12
|
end
|
|
26
13
|
end
|
data/lib/nonnative/version.rb
CHANGED
data/nonnative.gemspec
CHANGED
|
@@ -8,7 +8,7 @@ require 'nonnative/version'
|
|
|
8
8
|
Gem::Specification.new do |spec|
|
|
9
9
|
spec.name = 'nonnative'
|
|
10
10
|
spec.version = Nonnative::VERSION
|
|
11
|
-
spec.authors = ['
|
|
11
|
+
spec.authors = ['Alejandro Falkowski']
|
|
12
12
|
spec.email = ['alexrfalkowski@gmail.com']
|
|
13
13
|
|
|
14
14
|
spec.summary = 'Allows you to keep using the power of ruby to test other systems'
|
|
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
|
|
|
34
34
|
spec.add_dependency 'sinatra', '~> 2.0', '>= 2.0.8.1'
|
|
35
35
|
|
|
36
36
|
spec.add_development_dependency 'bundler', '~> 2.1', '>= 2.1.4'
|
|
37
|
-
spec.add_development_dependency '
|
|
38
|
-
spec.add_development_dependency '
|
|
37
|
+
spec.add_development_dependency 'coveralls', '~> 0.8.23'
|
|
38
|
+
spec.add_development_dependency 'rubocop', '~> 1.14'
|
|
39
39
|
spec.add_development_dependency 'solargraph', '~> 0.40.4'
|
|
40
40
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nonnative
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.45.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
7
|
+
- Alejandro Falkowski
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-05-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: concurrent-ruby
|
|
@@ -193,33 +193,33 @@ dependencies:
|
|
|
193
193
|
- !ruby/object:Gem::Version
|
|
194
194
|
version: 2.1.4
|
|
195
195
|
- !ruby/object:Gem::Dependency
|
|
196
|
-
name:
|
|
196
|
+
name: coveralls
|
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
|
198
198
|
requirements:
|
|
199
199
|
- - "~>"
|
|
200
200
|
- !ruby/object:Gem::Version
|
|
201
|
-
version:
|
|
201
|
+
version: 0.8.23
|
|
202
202
|
type: :development
|
|
203
203
|
prerelease: false
|
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
|
205
205
|
requirements:
|
|
206
206
|
- - "~>"
|
|
207
207
|
- !ruby/object:Gem::Version
|
|
208
|
-
version:
|
|
208
|
+
version: 0.8.23
|
|
209
209
|
- !ruby/object:Gem::Dependency
|
|
210
|
-
name:
|
|
210
|
+
name: rubocop
|
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
|
212
212
|
requirements:
|
|
213
213
|
- - "~>"
|
|
214
214
|
- !ruby/object:Gem::Version
|
|
215
|
-
version:
|
|
215
|
+
version: '1.14'
|
|
216
216
|
type: :development
|
|
217
217
|
prerelease: false
|
|
218
218
|
version_requirements: !ruby/object:Gem::Requirement
|
|
219
219
|
requirements:
|
|
220
220
|
- - "~>"
|
|
221
221
|
- !ruby/object:Gem::Version
|
|
222
|
-
version:
|
|
222
|
+
version: '1.14'
|
|
223
223
|
- !ruby/object:Gem::Dependency
|
|
224
224
|
name: solargraph
|
|
225
225
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -243,6 +243,7 @@ extra_rdoc_files: []
|
|
|
243
243
|
files:
|
|
244
244
|
- ".circleci/config.yml"
|
|
245
245
|
- ".config/cucumber.yml"
|
|
246
|
+
- ".coveralls.yml"
|
|
246
247
|
- ".editorconfig"
|
|
247
248
|
- ".gitignore"
|
|
248
249
|
- ".rubocop.yml"
|
|
@@ -258,11 +259,13 @@ files:
|
|
|
258
259
|
- lib/nonnative.rb
|
|
259
260
|
- lib/nonnative/before.rb
|
|
260
261
|
- lib/nonnative/close_all_socket_pair.rb
|
|
261
|
-
- lib/nonnative/command.rb
|
|
262
262
|
- lib/nonnative/configuration.rb
|
|
263
263
|
- lib/nonnative/configuration_process.rb
|
|
264
264
|
- lib/nonnative/configuration_proxy.rb
|
|
265
|
+
- lib/nonnative/configuration_runner.rb
|
|
265
266
|
- lib/nonnative/configuration_server.rb
|
|
267
|
+
- lib/nonnative/configuration_service.rb
|
|
268
|
+
- lib/nonnative/cucumber.rb
|
|
266
269
|
- lib/nonnative/delay_socket_pair.rb
|
|
267
270
|
- lib/nonnative/error.rb
|
|
268
271
|
- lib/nonnative/fault_injection_proxy.rb
|
|
@@ -273,11 +276,14 @@ files:
|
|
|
273
276
|
- lib/nonnative/invalid_data_socket_pair.rb
|
|
274
277
|
- lib/nonnative/manual.rb
|
|
275
278
|
- lib/nonnative/no_proxy.rb
|
|
279
|
+
- lib/nonnative/not_found_error.rb
|
|
276
280
|
- lib/nonnative/observability.rb
|
|
277
281
|
- lib/nonnative/pool.rb
|
|
278
282
|
- lib/nonnative/port.rb
|
|
283
|
+
- lib/nonnative/process.rb
|
|
279
284
|
- lib/nonnative/proxy.rb
|
|
280
285
|
- lib/nonnative/proxy_factory.rb
|
|
286
|
+
- lib/nonnative/runner.rb
|
|
281
287
|
- lib/nonnative/server.rb
|
|
282
288
|
- lib/nonnative/service.rb
|
|
283
289
|
- lib/nonnative/socket_pair.rb
|