nonnative 0.1.0 → 0.2.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/Gemfile.lock +25 -1
- data/README.md +14 -12
- data/lib/nonnative/configuration.rb +2 -1
- data/lib/nonnative/cucumber.rb +2 -2
- data/lib/nonnative/process.rb +37 -0
- data/lib/nonnative/version.rb +1 -1
- data/lib/nonnative.rb +7 -3
- data/nonnative.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ed669db2bc4d723a469ae8ce5676a01b126d42853fa0cc699750e401bd48c90
|
4
|
+
data.tar.gz: ef2ddf88fc1f44f443694bac824f95c8ae145520908735f5a64647d7d0201cd2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7839b3142b57d89d1f3de87cbb44b255497a08bcb59a039ac056af8626686cc96a893b2f0a9a6a16dbad80492ff16a50655f8a5189c14c4d9395ab40793fbebf
|
7
|
+
data.tar.gz: 7036322afd6219153aa0964d13138ed7ff6966f9b45cee76670138f0d10e1686d0c5ac0ddaadfc7abc6d770941a4a466b543d7ab2655b00042e63a86968829ee
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nonnative (0.
|
4
|
+
nonnative (0.2.0)
|
5
5
|
cucumber
|
6
6
|
rspec-expectations
|
7
7
|
|
@@ -9,6 +9,7 @@ GEM
|
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
11
|
ast (2.4.0)
|
12
|
+
backport (1.1.1)
|
12
13
|
backports (3.15.0)
|
13
14
|
builder (3.2.3)
|
14
15
|
cucumber (3.1.2)
|
@@ -29,14 +30,21 @@ GEM
|
|
29
30
|
cucumber-wire (0.0.1)
|
30
31
|
diff-lcs (1.3)
|
31
32
|
gherkin (5.1.0)
|
33
|
+
htmlentities (4.3.4)
|
32
34
|
jaro_winkler (1.5.3)
|
35
|
+
kramdown (1.17.0)
|
36
|
+
mini_portile2 (2.4.0)
|
33
37
|
multi_json (1.13.1)
|
34
38
|
multi_test (0.1.2)
|
39
|
+
nokogiri (1.10.3)
|
40
|
+
mini_portile2 (~> 2.4.0)
|
35
41
|
parallel (1.17.0)
|
36
42
|
parser (2.6.3.0)
|
37
43
|
ast (~> 2.4.0)
|
38
44
|
rainbow (3.0.0)
|
39
45
|
rake (12.3.2)
|
46
|
+
reverse_markdown (1.1.0)
|
47
|
+
nokogiri
|
40
48
|
rspec-expectations (3.8.4)
|
41
49
|
diff-lcs (>= 1.2.0, < 2.0)
|
42
50
|
rspec-support (~> 3.8.0)
|
@@ -49,7 +57,22 @@ GEM
|
|
49
57
|
ruby-progressbar (~> 1.7)
|
50
58
|
unicode-display_width (>= 1.4.0, < 1.7)
|
51
59
|
ruby-progressbar (1.10.1)
|
60
|
+
solargraph (0.35.1)
|
61
|
+
backport (~> 1.1)
|
62
|
+
bundler (>= 1.17.2)
|
63
|
+
htmlentities (~> 4.3, >= 4.3.4)
|
64
|
+
jaro_winkler (~> 1.5)
|
65
|
+
kramdown (~> 1.16)
|
66
|
+
parser (~> 2.3)
|
67
|
+
reverse_markdown (~> 1.0, >= 1.0.5)
|
68
|
+
rubocop (~> 0.52)
|
69
|
+
thor (~> 0.19, >= 0.19.4)
|
70
|
+
tilt (~> 2.0)
|
71
|
+
yard (~> 0.9)
|
72
|
+
thor (0.20.3)
|
73
|
+
tilt (2.0.9)
|
52
74
|
unicode-display_width (1.6.0)
|
75
|
+
yard (0.9.20)
|
53
76
|
|
54
77
|
PLATFORMS
|
55
78
|
ruby
|
@@ -59,6 +82,7 @@ DEPENDENCIES
|
|
59
82
|
nonnative!
|
60
83
|
rake
|
61
84
|
rubocop
|
85
|
+
solargraph
|
62
86
|
|
63
87
|
BUNDLED WITH
|
64
88
|
1.17.2
|
data/README.md
CHANGED
@@ -1,6 +1,16 @@
|
|
1
|
+
[](https://circleci.com/gh/alexfalkowski/nonnative)
|
2
|
+
|
1
3
|
# Nonnative
|
2
4
|
|
3
|
-
|
5
|
+
Do you love building microservices using different languages?
|
6
|
+
|
7
|
+
Do you love testing applications using [cucumber](https://cucumber.io/) with [ruby](https://www.ruby-lang.org/en/)?
|
8
|
+
|
9
|
+
Well so do I. The issue is that most languages the cucumber implementation is not always complete or you have to write a lot of code to get it working.
|
10
|
+
|
11
|
+
So why not test the way you want and build the microservice how you want. These kind of tests will make sure your application is tested properly by going end-to-end.
|
12
|
+
|
13
|
+
The way it works is it spawns the process you configure and waits for it to start. Then you communicate with your microservice however you like (TCP, HTTP, gRPC, etc)
|
4
14
|
|
5
15
|
## Installation
|
6
16
|
|
@@ -20,30 +30,22 @@ Or install it yourself as:
|
|
20
30
|
|
21
31
|
## Usage
|
22
32
|
|
23
|
-
Configure
|
33
|
+
Configure nonnative with the process that you want to start, a timeout value and a port to verify it's working.
|
24
34
|
|
25
35
|
```ruby
|
26
36
|
require 'nonnative'
|
27
37
|
|
28
38
|
Nonnative.configure do |config|
|
29
39
|
config.process = 'features/support/bin/start'
|
30
|
-
config.
|
40
|
+
config.timeout = 0.5
|
41
|
+
config.port = 12_321
|
31
42
|
end
|
32
43
|
```
|
33
44
|
|
34
45
|
Tag your cucumber scenarios with @nonnative
|
35
46
|
|
36
47
|
```cucumber
|
37
|
-
@nonnative
|
38
48
|
Scenario: Successful Response
|
39
49
|
When we send "test" with the echo client
|
40
50
|
Then we should receive a "test" response
|
41
51
|
```
|
42
|
-
|
43
|
-
## Development
|
44
|
-
|
45
|
-
Look at the Makefile
|
46
|
-
|
47
|
-
## Contributing
|
48
|
-
|
49
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/nonnative.
|
data/lib/nonnative/cucumber.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nonnative
|
4
|
+
class Process
|
5
|
+
def initialize(configuration)
|
6
|
+
@configuration = configuration
|
7
|
+
end
|
8
|
+
|
9
|
+
def start
|
10
|
+
@child_pid = spawn(configuration.process)
|
11
|
+
return if port_open?
|
12
|
+
|
13
|
+
stop
|
14
|
+
raise Nonnative::Error, 'Could not start the process'
|
15
|
+
end
|
16
|
+
|
17
|
+
def stop
|
18
|
+
::Process.kill('SIGHUP', child_pid)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
attr_reader :configuration, :child_pid
|
24
|
+
|
25
|
+
def port_open?
|
26
|
+
Timeout.timeout(configuration.timeout) do
|
27
|
+
TCPSocket.new('127.0.0.1', configuration.port).close
|
28
|
+
true
|
29
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
30
|
+
sleep 0.01
|
31
|
+
retry
|
32
|
+
end
|
33
|
+
rescue Timeout::Error
|
34
|
+
false
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/nonnative/version.rb
CHANGED
data/lib/nonnative.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'socket'
|
4
|
+
require 'timeout'
|
5
|
+
|
3
6
|
require 'cucumber'
|
4
7
|
|
5
8
|
require 'nonnative/version'
|
6
9
|
require 'nonnative/error'
|
7
10
|
require 'nonnative/configuration'
|
8
11
|
require 'nonnative/cucumber'
|
12
|
+
require 'nonnative/process'
|
9
13
|
|
10
14
|
module Nonnative
|
11
15
|
class << self
|
@@ -18,12 +22,12 @@ module Nonnative
|
|
18
22
|
end
|
19
23
|
|
20
24
|
def start
|
21
|
-
@
|
22
|
-
|
25
|
+
@process ||= Nonnative::Process.new(configuration)
|
26
|
+
@process.start
|
23
27
|
end
|
24
28
|
|
25
29
|
def stop
|
26
|
-
|
30
|
+
@process.stop
|
27
31
|
end
|
28
32
|
end
|
29
33
|
end
|
data/nonnative.gemspec
CHANGED
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: 0.
|
4
|
+
version: 0.2.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: 2019-
|
11
|
+
date: 2019-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: solargraph
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: Allows you to keep using the power of ruby to test other systems
|
84
98
|
email:
|
85
99
|
- alexrfalkowski@gmail.com
|
@@ -104,6 +118,7 @@ files:
|
|
104
118
|
- lib/nonnative/configuration.rb
|
105
119
|
- lib/nonnative/cucumber.rb
|
106
120
|
- lib/nonnative/error.rb
|
121
|
+
- lib/nonnative/process.rb
|
107
122
|
- lib/nonnative/version.rb
|
108
123
|
- nonnative.gemspec
|
109
124
|
homepage: https://github.com/alexfalkowski/nonnative
|