oncall 0.1.4 → 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/lib/oncall/cli.rb +3 -0
- data/lib/oncall/commands/run_command.rb +3 -3
- data/lib/oncall/commands/shell_command.rb +8 -0
- data/lib/oncall/core/assertion.rb +15 -0
- data/lib/oncall/core/config.rb +23 -0
- data/lib/oncall/core/group.rb +18 -0
- data/lib/oncall/core/reporter.rb +49 -0
- data/lib/oncall/core/request.rb +13 -0
- data/lib/oncall/core/runner.rb +39 -0
- data/lib/oncall/core/scenario.rb +14 -0
- data/lib/oncall/core/world.rb +19 -0
- data/lib/oncall/core/wrapper.rb +13 -0
- data/lib/oncall/core.rb +31 -0
- data/lib/oncall/dsl/response.rb +17 -0
- data/lib/oncall/dsl.rb +29 -1
- data/lib/oncall/http.rb +4 -0
- data/lib/oncall/version.rb +1 -1
- data/lib/oncall.rb +0 -5
- metadata +15 -8
- data/lib/oncall/body_test.rb +0 -20
- data/lib/oncall/configuration.rb +0 -5
- data/lib/oncall/request.rb +0 -52
- data/lib/oncall/runner.rb +0 -49
- data/lib/oncall/test_case.rb +0 -24
- data/lib/oncall/test_wrapper.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21e2e79f1d7b3f98525a89c1cb973f23f5f8f4f3962d5be9a7ed5f9585db5296
|
4
|
+
data.tar.gz: 074252b3271d4a441257b5fa171208ce33ac3f827f898cef75a9e93b6d81dc37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37fbc99650d45997051797f65df88e3db15c32275f4db054bf46a689182a5b1580fde0e8a80eb67658f48fe84e7f848d26b145308bfa9afa0d2eeb42aa65a764
|
7
|
+
data.tar.gz: e9df5052851e20e227d61b4a51f8e9d6fbae36438233662f5b1fe1679a57940f803bf9af11f04c2f7baf08521067b33570d2fc0511538a20a4a0d6db7ef6377b
|
data/lib/oncall/cli.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require_relative 'commands/base_command'
|
4
4
|
require_relative 'commands/init_command'
|
5
5
|
require_relative 'commands/run_command'
|
6
|
+
require_relative 'commands/shell_command'
|
6
7
|
|
7
8
|
module Oncall
|
8
9
|
module CLI
|
@@ -14,6 +15,8 @@ module Oncall
|
|
14
15
|
Oncall::Commands::InitCommand.invoke(ARGV.shift)
|
15
16
|
when 'run'
|
16
17
|
Oncall::Commands::RunCommand.invoke(ARGV.shift)
|
18
|
+
when 'shell'
|
19
|
+
Oncall::Commands::ShellCommand.invoke(ARGV.shift)
|
17
20
|
else
|
18
21
|
Oncall::Commands::BaseCommand.invoke(ARGV)
|
19
22
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Oncall
|
2
|
+
module Core
|
3
|
+
class Assertion
|
4
|
+
def initialize(response)
|
5
|
+
@reporter = Oncall::Core.reporter
|
6
|
+
@response = response
|
7
|
+
end
|
8
|
+
|
9
|
+
def status(expected)
|
10
|
+
result = @response.code == expected.to_s
|
11
|
+
@reporter.report_status(result)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Oncall
|
2
|
+
module Core
|
3
|
+
class Config
|
4
|
+
DEFAULT_PATTERN = '**{,/*/**}/*_oncall.rb'.freeze
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@files = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def pattern
|
11
|
+
DEFAULT_PATTERN
|
12
|
+
end
|
13
|
+
|
14
|
+
def failure_exit_code
|
15
|
+
1
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_files
|
19
|
+
Dir.glob(pattern)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Oncall
|
2
|
+
module Core
|
3
|
+
class Group
|
4
|
+
def initialize
|
5
|
+
@reporter = Oncall::Core.reporter
|
6
|
+
end
|
7
|
+
|
8
|
+
def describe(&block)
|
9
|
+
if block_given?
|
10
|
+
scenario = Oncall::Core::Scenario.new
|
11
|
+
scenario.instance_exec &block
|
12
|
+
else
|
13
|
+
@reporter.report_empty_group
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Oncall
|
2
|
+
module Core
|
3
|
+
class Reporter
|
4
|
+
def initialize
|
5
|
+
@results = {
|
6
|
+
failure: 0,
|
7
|
+
success: 0,
|
8
|
+
empty: 0
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
def report(tests)
|
13
|
+
start
|
14
|
+
begin
|
15
|
+
yield self
|
16
|
+
ensure
|
17
|
+
finish
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def start
|
22
|
+
end
|
23
|
+
|
24
|
+
def finish
|
25
|
+
puts "\n"
|
26
|
+
puts "#{@results[:success]} passed, #{@results[:failure]} failed."
|
27
|
+
end
|
28
|
+
|
29
|
+
def success?
|
30
|
+
@results[:failure].zero? && @results[:empty].zero?
|
31
|
+
end
|
32
|
+
|
33
|
+
def report_empty_group
|
34
|
+
print 'E'
|
35
|
+
@results[:empty] = @results[:empty] + 1
|
36
|
+
end
|
37
|
+
|
38
|
+
def report_status(result)
|
39
|
+
if result
|
40
|
+
print '.'
|
41
|
+
@results[:success] = @results[:success] + 1
|
42
|
+
else
|
43
|
+
print 'F'
|
44
|
+
@results[:failure] = @results[:failure] + 1
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Oncall
|
2
|
+
module Core
|
3
|
+
class Runner
|
4
|
+
def initialize(reporter=Oncall::Core.reporter, config=Oncall::Core.config, world=Oncall::Core.world)
|
5
|
+
@config = config
|
6
|
+
@world = world
|
7
|
+
@reporter = reporter
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.invoke(args)
|
11
|
+
status = run(args, $stderr, $stdout).to_i
|
12
|
+
exit(status) if status != 0
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.run(args, err=$stderr, out=$stdout)
|
16
|
+
# TODO: init options class
|
17
|
+
new.run(err, out)
|
18
|
+
end
|
19
|
+
|
20
|
+
def run(err, out)
|
21
|
+
setup(err, out)
|
22
|
+
run_tests(@world.suite)
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup(err, out)
|
26
|
+
files = @config.test_files
|
27
|
+
@world.register_suite(files)
|
28
|
+
end
|
29
|
+
|
30
|
+
def run_tests(suite)
|
31
|
+
@reporter.report(suite) do |reporter|
|
32
|
+
suite.map { |g| g.run(reporter) }
|
33
|
+
end
|
34
|
+
|
35
|
+
@reporter.success? ? 0 : @config.failure_exit_code
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Oncall
|
2
|
+
module Core
|
3
|
+
class Scenario
|
4
|
+
def get(path, &block)
|
5
|
+
http = Net::HTTP.new('localhost', 4567)
|
6
|
+
request = Net::HTTP::Get.new(path)
|
7
|
+
response = http.request(request)
|
8
|
+
|
9
|
+
assertion = Oncall::Core::Assertion.new(response)
|
10
|
+
assertion.instance_exec(&block)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Oncall
|
2
|
+
module Core
|
3
|
+
class World
|
4
|
+
|
5
|
+
attr_reader :suite
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@suite = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def register_suite(files)
|
12
|
+
files.each do |file|
|
13
|
+
wrapper = Oncall::Core::Wrapper.new(file)
|
14
|
+
@suite << wrapper
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/oncall/core.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module Oncall
|
2
|
+
module Core
|
3
|
+
require_relative 'core/assertion'
|
4
|
+
require_relative 'core/config'
|
5
|
+
require_relative 'core/group'
|
6
|
+
require_relative 'core/reporter'
|
7
|
+
require_relative 'core/request'
|
8
|
+
require_relative 'core/runner'
|
9
|
+
require_relative 'core/scenario'
|
10
|
+
require_relative 'core/world'
|
11
|
+
require_relative 'core/wrapper'
|
12
|
+
|
13
|
+
STATUS_EMPTY = :empty
|
14
|
+
|
15
|
+
class << self
|
16
|
+
attr_writer :config, :world
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.config
|
20
|
+
@config ||= Oncall::Core::Config.new
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.world
|
24
|
+
@world ||= Oncall::Core::World.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.reporter
|
28
|
+
@reporter ||= Oncall::Core::Reporter.new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/oncall/dsl.rb
CHANGED
@@ -1,4 +1,32 @@
|
|
1
|
+
require_relative 'dsl/response'
|
2
|
+
|
1
3
|
module Oncall
|
2
|
-
|
4
|
+
class DSL
|
5
|
+
private
|
6
|
+
|
7
|
+
def describe(group, &block)
|
8
|
+
if block_given?
|
9
|
+
begin
|
10
|
+
yield
|
11
|
+
end
|
12
|
+
else
|
13
|
+
# Return status empty
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def get(path, &block)
|
18
|
+
if block_given?
|
19
|
+
http = Net::HTTP.new('localhost', 4567)
|
20
|
+
request = Net::HTTP::Get.new(path)
|
21
|
+
response = Oncall::Response.new(http.request(request))
|
22
|
+
|
23
|
+
begin
|
24
|
+
resuls = response.instance_eval &block
|
25
|
+
resuls
|
26
|
+
end
|
27
|
+
else
|
28
|
+
# Return status empty
|
29
|
+
end
|
30
|
+
end
|
3
31
|
end
|
4
32
|
end
|
data/lib/oncall/http.rb
ADDED
data/lib/oncall/version.rb
CHANGED
data/lib/oncall.rb
CHANGED
@@ -7,10 +7,5 @@ require 'json-schema'
|
|
7
7
|
|
8
8
|
# Oncall
|
9
9
|
module Oncall
|
10
|
-
require File.expand_path(File.join(File.dirname(__FILE__), 'oncall', 'body_test'))
|
11
10
|
require File.expand_path(File.join(File.dirname(__FILE__), 'oncall', 'cli'))
|
12
|
-
require File.expand_path(File.join(File.dirname(__FILE__), 'oncall', 'request'))
|
13
|
-
require File.expand_path(File.join(File.dirname(__FILE__), 'oncall', 'test_case'))
|
14
|
-
require File.expand_path(File.join(File.dirname(__FILE__), 'oncall', 'test_wrapper'))
|
15
|
-
require File.expand_path(File.join(File.dirname(__FILE__), 'oncall', 'runner'))
|
16
11
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oncall
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Koen Woortman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json-schema
|
@@ -76,18 +76,25 @@ files:
|
|
76
76
|
- README.md
|
77
77
|
- bin/oncall
|
78
78
|
- lib/oncall.rb
|
79
|
-
- lib/oncall/body_test.rb
|
80
79
|
- lib/oncall/cli.rb
|
81
80
|
- lib/oncall/commands/base_command.rb
|
82
81
|
- lib/oncall/commands/init_command.rb
|
83
82
|
- lib/oncall/commands/run_command.rb
|
84
|
-
- lib/oncall/
|
83
|
+
- lib/oncall/commands/shell_command.rb
|
84
|
+
- lib/oncall/core.rb
|
85
|
+
- lib/oncall/core/assertion.rb
|
86
|
+
- lib/oncall/core/config.rb
|
87
|
+
- lib/oncall/core/group.rb
|
88
|
+
- lib/oncall/core/reporter.rb
|
89
|
+
- lib/oncall/core/request.rb
|
90
|
+
- lib/oncall/core/runner.rb
|
91
|
+
- lib/oncall/core/scenario.rb
|
92
|
+
- lib/oncall/core/world.rb
|
93
|
+
- lib/oncall/core/wrapper.rb
|
85
94
|
- lib/oncall/dsl.rb
|
86
|
-
- lib/oncall/
|
87
|
-
- lib/oncall/
|
95
|
+
- lib/oncall/dsl/response.rb
|
96
|
+
- lib/oncall/http.rb
|
88
97
|
- lib/oncall/templates/oncall.yml.template
|
89
|
-
- lib/oncall/test_case.rb
|
90
|
-
- lib/oncall/test_wrapper.rb
|
91
98
|
- lib/oncall/version.rb
|
92
99
|
homepage:
|
93
100
|
licenses:
|
data/lib/oncall/body_test.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
module Oncall
|
2
|
-
class BodyTest
|
3
|
-
def initialize(body, description)
|
4
|
-
@body = body
|
5
|
-
@description = description
|
6
|
-
@result = false
|
7
|
-
end
|
8
|
-
|
9
|
-
def run(&block)
|
10
|
-
instance_eval(&block)
|
11
|
-
@result
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def matches(schema)
|
17
|
-
@result = JSON::Validator.validate(schema, @body)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/lib/oncall/configuration.rb
DELETED
data/lib/oncall/request.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
module Oncall
|
2
|
-
class Request
|
3
|
-
def initialize(config, endpoint)
|
4
|
-
@config = config
|
5
|
-
@endpoint = endpoint
|
6
|
-
@headers = {}
|
7
|
-
@expectations = []
|
8
|
-
@http = nil
|
9
|
-
@response = nil
|
10
|
-
@request = nil
|
11
|
-
end
|
12
|
-
|
13
|
-
def bootstrap
|
14
|
-
@http = Net::HTTP.new(@config['domain'], @config['port'])
|
15
|
-
|
16
|
-
@request = Net::HTTP::Get.new(@endpoint)
|
17
|
-
|
18
|
-
@request['User-Agent'] = 'Oncall'
|
19
|
-
|
20
|
-
@headers.each do |key, value|
|
21
|
-
request[key] = value
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
def run(&block)
|
27
|
-
@response = @http.request(@request)
|
28
|
-
|
29
|
-
instance_eval(&block)
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def header(header)
|
35
|
-
@headers.merge!(header)
|
36
|
-
end
|
37
|
-
|
38
|
-
def body(description, &block)
|
39
|
-
result = Oncall::BodyTest.new(@response.body, description).run(&block)
|
40
|
-
puts "Endpoint: #{@endpoint} -----"
|
41
|
-
puts " Body: #{description}: #{result}"
|
42
|
-
end
|
43
|
-
|
44
|
-
def status(description, &block)
|
45
|
-
@expectations.push(description)
|
46
|
-
end
|
47
|
-
|
48
|
-
def profiler(description, &block)
|
49
|
-
@expectations.push(description)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/lib/oncall/runner.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Oncall
|
4
|
-
class Runner
|
5
|
-
DEFAULT_PATTERN = '**{,/*/**}/*_oncall.rb'
|
6
|
-
|
7
|
-
def initialize(env)
|
8
|
-
@config = {}
|
9
|
-
@pattern = DEFAULT_PATTERN
|
10
|
-
@test_wrapper = Oncall::TestWrapper.new
|
11
|
-
@env = env
|
12
|
-
end
|
13
|
-
|
14
|
-
def run
|
15
|
-
begin
|
16
|
-
config = YAML.load_file('oncall.yml')
|
17
|
-
merge_config(config)
|
18
|
-
rescue StandardError
|
19
|
-
puts 'Cannot load oncall.yml'
|
20
|
-
exit 1
|
21
|
-
end
|
22
|
-
|
23
|
-
files = Dir.glob(@pattern)
|
24
|
-
|
25
|
-
process_files(files)
|
26
|
-
0
|
27
|
-
end
|
28
|
-
|
29
|
-
def process_files(files)
|
30
|
-
@test_wrapper.set_config(@config)
|
31
|
-
|
32
|
-
files.each do |file|
|
33
|
-
@test_wrapper.evaluate(file)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def merge_config(config)
|
40
|
-
if config.key?(@env)
|
41
|
-
@config = config[@env]
|
42
|
-
elsif config.key?('default')
|
43
|
-
@config = config[config['default']]
|
44
|
-
else
|
45
|
-
raise 'Config error'
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
data/lib/oncall/test_case.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
module Oncall
|
2
|
-
class TestCase
|
3
|
-
|
4
|
-
def initialize(config)
|
5
|
-
@config = config
|
6
|
-
end
|
7
|
-
|
8
|
-
def run(file)
|
9
|
-
instance_eval File.read(file)
|
10
|
-
end
|
11
|
-
|
12
|
-
def get(endpoint, &block)
|
13
|
-
test = Oncall::Request.new(@config, endpoint)
|
14
|
-
test.bootstrap
|
15
|
-
test.run(&block)
|
16
|
-
end
|
17
|
-
|
18
|
-
def post(endpoint, &block)
|
19
|
-
test = Oncall::Request.new(@config, endpoint)
|
20
|
-
test.bootstrap(&block)
|
21
|
-
test.run
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
data/lib/oncall/test_wrapper.rb
DELETED