bugsnag-maze-runner 7.33.1 → 8.0.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/bin/maze-runner +9 -1
- data/bin/purge-projects +66 -0
- data/lib/features/steps/app_automator_steps.rb +9 -3
- data/lib/features/steps/header_steps.rb +13 -9
- data/lib/features/steps/multipart_request_steps.rb +10 -10
- data/lib/features/steps/network_steps.rb +7 -24
- data/lib/features/steps/payload_steps.rb +21 -21
- data/lib/features/steps/query_parameter_steps.rb +3 -3
- data/lib/features/steps/request_assertion_steps.rb +11 -18
- data/lib/features/steps/trace_steps.rb +0 -8
- data/lib/features/steps/value_steps.rb +9 -9
- data/lib/features/support/cucumber_types.rb +20 -0
- data/lib/features/support/internal_hooks.rb +0 -2
- data/lib/maze/api/appium/file_manager.rb +1 -1
- data/lib/maze/appium_server.rb +2 -2
- data/lib/maze/client/appium/bb_client.rb +1 -1
- data/lib/maze/client/appium/bb_devices.rb +1 -1
- data/lib/maze/client/appium/bs_devices.rb +7 -9
- data/lib/maze/client/bb_api_client.rb +46 -9
- data/lib/maze/client/bb_client_utils.rb +1 -61
- data/lib/maze/client/selenium/bb_client.rb +1 -6
- data/lib/maze/client/selenium/bs_browsers.yml +11 -11
- data/lib/maze/configuration.rb +0 -6
- data/lib/maze/logger.rb +29 -1
- data/lib/maze/option/parser.rb +39 -14
- data/lib/maze/option/processor.rb +2 -5
- data/lib/maze/option/validator.rb +3 -7
- data/lib/maze/option.rb +2 -6
- data/lib/maze/repeaters/request_repeater.rb +1 -1
- data/lib/maze/schemas/trace_validator.rb +0 -2
- data/lib/maze/server.rb +13 -3
- data/lib/maze/servlets/servlet.rb +13 -10
- data/lib/maze/servlets/trace_servlet.rb +15 -0
- data/lib/maze/terminating_server.rb +1 -1
- data/lib/maze.rb +1 -1
- metadata +5 -3
- data/lib/maze/plugins/cucumber_report_plugin.rb +0 -101
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a8fe53083056182a02bfe2c64ef7e5f16a94dc9a2cf7908e07be82d630aa7ca
|
4
|
+
data.tar.gz: 232d9f91e5c489994e6b63a3f09f7b21edad67c01d88270b4365707cb5808c1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a4dd6596a3dd44a6090d7c84155e3e30f2cff5b530a5b765df9e4fedce1aa153c6120604b555e44b3933dd5567479dc0b509b84ba5be8624b6e735b7d3316c0
|
7
|
+
data.tar.gz: 501886299af0b042122474462a4fa92ac920d64122da62129bf35f8a624786dd158c88572ae4dafdbc66e023536193a6adb5979fdbd0a319fea9ca0e9ea680dd
|
data/bin/maze-runner
CHANGED
@@ -84,7 +84,6 @@ require_relative '../lib/maze/driver/appium'
|
|
84
84
|
require_relative '../lib/maze/driver/browser'
|
85
85
|
|
86
86
|
require_relative '../lib/maze/plugins/bugsnag_reporting_plugin'
|
87
|
-
require_relative '../lib/maze/plugins/cucumber_report_plugin'
|
88
87
|
require_relative '../lib/maze/plugins/error_code_plugin'
|
89
88
|
require_relative '../lib/maze/plugins/global_retry_plugin'
|
90
89
|
require_relative '../lib/maze/plugins/datadog_metrics_plugin'
|
@@ -117,6 +116,15 @@ class MazeRunnerEntry
|
|
117
116
|
@args << '--strict-undefined' << '--strict-pending' << '--no-strict-flaky'
|
118
117
|
end
|
119
118
|
|
119
|
+
# Expand by default
|
120
|
+
if @args.include?('--no-expand')
|
121
|
+
# Just remove it
|
122
|
+
@args = @args - ["--no-expand"]
|
123
|
+
else
|
124
|
+
# Expand
|
125
|
+
@args << "--expand"
|
126
|
+
end
|
127
|
+
|
120
128
|
# Load internal steps and helper functions
|
121
129
|
load_dir = File.expand_path(File.dirname(File.dirname(__FILE__))).freeze
|
122
130
|
paths = Dir.glob("#{load_dir}/lib/features/**/*.rb")
|
data/bin/purge-projects
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative '../lib/maze'
|
5
|
+
require_relative '../lib/maze/client/bb_api_client'
|
6
|
+
require_relative '../lib/maze/logger'
|
7
|
+
require_relative '../lib/maze/helper'
|
8
|
+
require 'optimist'
|
9
|
+
require 'uri'
|
10
|
+
require 'net/http'
|
11
|
+
|
12
|
+
class PurgeProjectEntry
|
13
|
+
def start(_args)
|
14
|
+
p = Optimist::Parser.new do
|
15
|
+
text 'Purge anonymous projects from BitBar'
|
16
|
+
text ''
|
17
|
+
text 'Requires BITBAR_API_KEY'
|
18
|
+
text ''
|
19
|
+
text 'Usage [OPTIONS]'
|
20
|
+
text ''
|
21
|
+
opt :help,
|
22
|
+
'Print this help.'
|
23
|
+
opt :api_key,
|
24
|
+
"BitBar API Key",
|
25
|
+
:type => :string
|
26
|
+
end
|
27
|
+
|
28
|
+
opts = Optimist::with_standard_exception_handling p do
|
29
|
+
p.parse ARGV
|
30
|
+
end
|
31
|
+
|
32
|
+
api_key = opts[:api_key] || ENV['BITBAR_API_KEY']
|
33
|
+
|
34
|
+
if api_key.nil?
|
35
|
+
$logger.warn "API KEY has not been provided or BITBAR_API_KEY has not been set"
|
36
|
+
Optimist::with_standard_exception_handling p do
|
37
|
+
raise Optimist::HelpNeeded
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
$logger.info "Getting list of anonymous project from BitBar"
|
42
|
+
|
43
|
+
api_client = Maze::Client::BitBarApiClient.new(api_key)
|
44
|
+
|
45
|
+
project_list = api_client.get_projects /Project \d+/
|
46
|
+
|
47
|
+
if project_list.nil?
|
48
|
+
$logger.info "No projects to process"
|
49
|
+
else
|
50
|
+
$logger.info "#{project_list.count} projects to process"
|
51
|
+
|
52
|
+
project_list.each do |name, id|
|
53
|
+
$logger.info "Processing #{name}"
|
54
|
+
res = api_client.delete_project id
|
55
|
+
if res.code == "204"
|
56
|
+
$logger.info "#{name} deleted"
|
57
|
+
else
|
58
|
+
$logger.warn "Failed to delete #{name}"
|
59
|
+
raise res.body
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
PurgeProjectEntry.new.start(ARGV)
|
@@ -58,6 +58,12 @@ When('I send the keys {string} to the element {string}') do |keys, element_id|
|
|
58
58
|
Maze.driver.send_keys_to_element(element_id, keys)
|
59
59
|
end
|
60
60
|
|
61
|
+
# Set the device orientation to either portrait or landscape
|
62
|
+
# Requires a running Appium driver
|
63
|
+
When('I set the device orientation to {orientation}') do |orientation|
|
64
|
+
Maze.driver.set_rotation orientation
|
65
|
+
end
|
66
|
+
|
61
67
|
# Tests that the given payload value is correct for the target BrowserStack platform.
|
62
68
|
# This step will assume the expected and payload values are strings.
|
63
69
|
# If the step is invoked when a remote BrowserStack device is not in use this step will fail.
|
@@ -73,7 +79,7 @@ end
|
|
73
79
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
74
80
|
# @step_input field_path [String] The field to test
|
75
81
|
# @step_input platform_values [DataTable] A table of acceptable values for each platform
|
76
|
-
Then('the {
|
82
|
+
Then('the {request_type} payload field {string} equals the platform-dependent string:') do |request_type, field_path, platform_values|
|
77
83
|
test_string_platform_values(request_type, field_path, platform_values)
|
78
84
|
end
|
79
85
|
|
@@ -100,7 +106,7 @@ end
|
|
100
106
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
101
107
|
# @step_input field_path [String] The field to test
|
102
108
|
# @step_input platform_values [DataTable] A table of acceptable values for each platform
|
103
|
-
Then('the {
|
109
|
+
Then('the {request_type} payload field {string} equals the platform-dependent numeric:') do |request_type, field_path, platform_values|
|
104
110
|
test_numeric_platform_values(request_type, field_path, platform_values)
|
105
111
|
end
|
106
112
|
|
@@ -127,7 +133,7 @@ end
|
|
127
133
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
128
134
|
# @step_input field_path [String] The field to test
|
129
135
|
# @step_input platform_values [DataTable] A table of acceptable values for each platform
|
130
|
-
Then('the {
|
136
|
+
Then('the {request_type} payload field {string} equals the platform-dependent boolean:') do |request_type, field_path, platform_values|
|
131
137
|
test_boolean_platform_values(request_type, field_path, platform_values)
|
132
138
|
end
|
133
139
|
|
@@ -6,20 +6,24 @@
|
|
6
6
|
#
|
7
7
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
8
8
|
# @step_input header_name [String] The header to test
|
9
|
-
Then('the {
|
9
|
+
Then('the {request_type} {string} header is present') do |request_type, header_name|
|
10
10
|
Maze.check.not_nil(Maze::Server.list_for(request_type).current[:request][header_name],
|
11
11
|
"The #{request_type} '#{header_name}' header should not be null")
|
12
|
+
|
13
|
+
request = Maze::Server.list_for(request_type).current[:request]
|
14
|
+
Maze.check.true(request.header.key?(header_name.downcase),
|
15
|
+
"The #{request_type} '#{header_name}' header should be present")
|
12
16
|
end
|
13
17
|
|
14
18
|
# Tests that a request header is null
|
15
19
|
#
|
16
20
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
17
21
|
# @step_input header_name [String] The header to test
|
18
|
-
Then('the {
|
22
|
+
Then('the {request_type} {string} header is not present') do |request_type, header_name|
|
19
23
|
request = Maze::Server.list_for(request_type).current[:request]
|
20
24
|
|
21
|
-
Maze.check.
|
22
|
-
|
25
|
+
Maze.check.false(request.header.key?(header_name.downcase),
|
26
|
+
"The #{request_type} '#{header_name}' header should not be present")
|
23
27
|
end
|
24
28
|
|
25
29
|
# Tests that request header equals a string
|
@@ -27,7 +31,7 @@ end
|
|
27
31
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
28
32
|
# @step_input header_name [String] The header to test
|
29
33
|
# @step_input header_value [String] The string it should match
|
30
|
-
Then('the {
|
34
|
+
Then('the {request_type} {string} header equals {string}') do |request_type, header_name, header_value|
|
31
35
|
Maze.check.not_nil(Maze::Server.list_for(request_type).current[:request][header_name],
|
32
36
|
"The #{request_type} '#{header_name}' header wasn't present in the request")
|
33
37
|
Maze.check.equal(header_value, Maze::Server.list_for(request_type).current[:request][header_name])
|
@@ -38,7 +42,7 @@ end
|
|
38
42
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
39
43
|
# @step_input header_name [String] The header to test
|
40
44
|
# @step_input regex_string [String] The regex to match with
|
41
|
-
Then('the {
|
45
|
+
Then('the {request_type} {string} header matches the regex {string}') do |request_type, header_name, regex_string|
|
42
46
|
regex = Regexp.new(regex_string)
|
43
47
|
value = Maze::Server.list_for(request_type).current[:request][header_name]
|
44
48
|
Maze.check.match(regex, value)
|
@@ -49,7 +53,7 @@ end
|
|
49
53
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
50
54
|
# @step_input header_name [String] The header to test
|
51
55
|
# @step_input header_values [DataTable] A parsed data table
|
52
|
-
Then('the {
|
56
|
+
Then('the {request_type} {string} header equals one of:') do |request_type, header_name, header_values|
|
53
57
|
Maze.check.include(header_values.raw.flatten, Maze::Server.list_for(request_type).current[:request][header_name])
|
54
58
|
end
|
55
59
|
|
@@ -57,7 +61,7 @@ end
|
|
57
61
|
#
|
58
62
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
59
63
|
# @step_input header_name [String] The header to test
|
60
|
-
Then('the {
|
64
|
+
Then('the {request_type} {string} header is a timestamp') do |request_type, header_name|
|
61
65
|
header = Maze::Server.list_for(request_type).current[:request][header_name]
|
62
66
|
Maze.check.match(TIMESTAMP_REGEX, header)
|
63
67
|
end
|
@@ -65,7 +69,7 @@ end
|
|
65
69
|
# Checks that the Bugsnag-Integrity header is a SHA1 or simple digest
|
66
70
|
#
|
67
71
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
68
|
-
When('the {
|
72
|
+
When('the {request_type} Bugsnag-Integrity header is valid') do |request_type|
|
69
73
|
Maze.check.true(Maze::Helper.valid_bugsnag_integrity_header(Maze::Server.list_for(request_type).current),
|
70
74
|
'Invalid Bugsnag-Integrity header detected')
|
71
75
|
end
|
@@ -22,7 +22,7 @@ end
|
|
22
22
|
# Verifies that any type of request contains multipart form-data
|
23
23
|
#
|
24
24
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
25
|
-
Then('the {
|
25
|
+
Then('the {request_type} request is valid multipart form-data') do |request_type|
|
26
26
|
list = Maze::Server.list_for request_type
|
27
27
|
valid_multipart_form_data?(list.current)
|
28
28
|
end
|
@@ -30,7 +30,7 @@ end
|
|
30
30
|
# Verifies all requests of a given type contain multipart form-data
|
31
31
|
#
|
32
32
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
33
|
-
Then('all {
|
33
|
+
Then('all {request_type} requests are valid multipart form-data') do |request_type|
|
34
34
|
list = Maze::Server.list_for request_type
|
35
35
|
list.all.all? { |request| valid_multipart_form_data?(request) }
|
36
36
|
end
|
@@ -39,7 +39,7 @@ end
|
|
39
39
|
#
|
40
40
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
41
41
|
# @step_input part_count [Integer] The number of expected fields
|
42
|
-
Then('the {
|
42
|
+
Then('the {request_type} multipart request has {int} fields') do |request_type, part_count|
|
43
43
|
list = Maze::Server.list_for request_type
|
44
44
|
parts = list.current[:body]
|
45
45
|
Maze.check.equal(part_count, parts.size)
|
@@ -48,7 +48,7 @@ end
|
|
48
48
|
# Tests a given type of multipart request has at least one field.
|
49
49
|
#
|
50
50
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
51
|
-
Then('the {
|
51
|
+
Then('the {request_type} multipart request has a non-empty body') do |request_type|
|
52
52
|
list = Maze::Server.list_for request_type
|
53
53
|
parts = list.current[:body]
|
54
54
|
Maze.check.true(parts.size.positive?, "Multipart request payload contained #{parts.size} fields")
|
@@ -73,7 +73,7 @@ end
|
|
73
73
|
#
|
74
74
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
75
75
|
# @step_input json_path [String] Path to a JSON file relative to maze-runner root
|
76
|
-
Then('the {
|
76
|
+
Then('the {request_type} multipart body does not match the JSON file in {string}') do |request_type, json_path|
|
77
77
|
Maze.check.true(File.exist?(json_path), "'#{json_path}' does not exist")
|
78
78
|
payload_list = Maze::Server.list_for request_type
|
79
79
|
raw_payload_value = payload_list.current[:body]
|
@@ -88,7 +88,7 @@ end
|
|
88
88
|
#
|
89
89
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
90
90
|
# @step_input json_path [String] Path to a JSON file relative to maze-runner root
|
91
|
-
Then('the {
|
91
|
+
Then('the {request_type} multipart body matches the JSON file in {string}') do |request_type, json_path|
|
92
92
|
Maze.check.true(File.exist?(json_path), "'#{json_path}' does not exist")
|
93
93
|
payload_list = Maze::Server.list_for request_type
|
94
94
|
raw_payload_value = payload_list.current[:body]
|
@@ -104,7 +104,7 @@ end
|
|
104
104
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
105
105
|
# @step_input field_path [String] Path to the tested element
|
106
106
|
# @step_input json_path [String] Path to a JSON file relative to maze-runner root
|
107
|
-
Then('the {
|
107
|
+
Then('the {request_type} multipart field {string} matches the JSON file in {string}') do |request_type, field_path, json_path|
|
108
108
|
Maze.check.true(File.exist?(json_path), "'#{json_path}' does not exist")
|
109
109
|
payload_list = Maze::Server.list_for request_type
|
110
110
|
payload_value = JSON.parse(payload_list.current[:body][field_path].to_s)
|
@@ -117,7 +117,7 @@ end
|
|
117
117
|
#
|
118
118
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
119
119
|
# @step_input part_key [String] The key to the multipart element
|
120
|
-
Then('the field {string} for multipart {
|
120
|
+
Then('the field {string} for multipart {request_type} is not null') do |part_key, request_type|
|
121
121
|
parts = Maze::Server.list_for(request_type).current[:body]
|
122
122
|
Maze.check.not_nil(parts[part_key], "The field '#{part_key}' should not be null")
|
123
123
|
end
|
@@ -126,7 +126,7 @@ end
|
|
126
126
|
#
|
127
127
|
# @step_input part_key [String] The key to the multipart element
|
128
128
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
129
|
-
Then('the field {string} for multipart {
|
129
|
+
Then('the field {string} for multipart {request_type} is null') do |part_key, request_type|
|
130
130
|
parts = Maze::Server.list_for(request_type).current[:body]
|
131
131
|
Maze.check.nil(parts[part_key], "The field '#{part_key}' should be null")
|
132
132
|
end
|
@@ -136,7 +136,7 @@ end
|
|
136
136
|
# @step_input part_key [String] The key to the multipart element
|
137
137
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
138
138
|
# @step_input expected_value [String] The string to match against
|
139
|
-
Then('the field {string} for multipart {
|
139
|
+
Then('the field {string} for multipart {request_type} equals {string}') do |part_key, request_type, expected_value|
|
140
140
|
parts = Maze::Server.list_for(request_type).current[:body]
|
141
141
|
Maze.check.equal(parts[part_key], expected_value)
|
142
142
|
end
|
@@ -8,16 +8,6 @@ When('I wait for the host {string} to open port {string}') do |host, port|
|
|
8
8
|
Maze::Network.wait_for_port(host, port)
|
9
9
|
end
|
10
10
|
|
11
|
-
# Sets the HTTP status code to be used for the next set of requests for a given connection type
|
12
|
-
#
|
13
|
-
# @step_input http_verb [String] The type of request this code will be used for
|
14
|
-
# @step_input status_codes [String] A comma separated list of status codes to return
|
15
|
-
When('I set the HTTP status code for the next {string} requests to {string}') do |http_verb, status_codes|
|
16
|
-
raise("Invalid HTTP verb: #{http_verb}") unless Maze::Server::ALLOWED_HTTP_VERBS.include?(http_verb)
|
17
|
-
codes = status_codes.split(',').map(&:strip)
|
18
|
-
Maze::Server.set_status_code_generator(create_defaulting_generator(codes, Maze::Server::DEFAULT_STATUS_CODE), http_verb)
|
19
|
-
end
|
20
|
-
|
21
11
|
# Sets the HTTP status code to be used for all subsequent requests for a given connection type
|
22
12
|
#
|
23
13
|
# @step_input http_verb [String] The type of request this code will be used for
|
@@ -27,13 +17,13 @@ When('I set the HTTP status code for {string} requests to {int}') do |http_verb,
|
|
27
17
|
Maze::Server.set_status_code_generator(Maze::Generator.new([status_code].cycle), http_verb)
|
28
18
|
end
|
29
19
|
|
30
|
-
# Sets the HTTP status code to be used for the next
|
20
|
+
# Sets the HTTP status code to be used for the next set of requests for a given connection type
|
31
21
|
#
|
32
22
|
# @step_input http_verb [String] The type of request this code will be used for
|
33
|
-
# @step_input
|
34
|
-
When('I set the HTTP status code for the next {string} request to {
|
23
|
+
# @step_input status_codes [String] One or more status codes to return, separated by commas
|
24
|
+
When('I set the HTTP status code for the next {string} request(s) to {int_array}') do |http_verb, status_codes|
|
35
25
|
raise("Invalid HTTP verb: #{http_verb}") unless Maze::Server::ALLOWED_HTTP_VERBS.include?(http_verb)
|
36
|
-
Maze::Server.set_status_code_generator(create_defaulting_generator(
|
26
|
+
Maze::Server.set_status_code_generator(create_defaulting_generator(status_codes, Maze::Server::DEFAULT_STATUS_CODE), http_verb)
|
37
27
|
end
|
38
28
|
|
39
29
|
# Sets the HTTP status code to be used for all subsequent POST requests
|
@@ -43,18 +33,11 @@ When('I set the HTTP status code to {int}') do |status_code|
|
|
43
33
|
step %{I set the HTTP status code for "POST" requests to #{status_code}}
|
44
34
|
end
|
45
35
|
|
46
|
-
# Sets the HTTP status code to be used for the next POST request
|
47
|
-
#
|
48
|
-
# @step_input status_code [Integer] The status code to return
|
49
|
-
When('I set the HTTP status code for the next request to {int}') do |status_code|
|
50
|
-
step %{I set the HTTP status code for the next "POST" request to #{status_code}}
|
51
|
-
end
|
52
|
-
|
53
36
|
# Sets the HTTP status code to be used for the next set of POST requests
|
54
37
|
#
|
55
|
-
# @step_input status_codes [String]
|
56
|
-
When('I set the HTTP status code for the next
|
57
|
-
step %{I set the HTTP status code for the next "POST" requests to
|
38
|
+
# @step_input status_codes [String] One or more status codes to return, separated by commas
|
39
|
+
When('I set the HTTP status code for the next request(s) to {int_array}') do |status_codes|
|
40
|
+
step %{I set the HTTP status code for the next "POST" requests to #{status_codes.join ','}}
|
58
41
|
end
|
59
42
|
|
60
43
|
# Sets the sampling probability to be used for all subsequent trace responses
|
@@ -6,7 +6,7 @@
|
|
6
6
|
#
|
7
7
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
8
8
|
# @step_input fixture_path [String] Path to a JSON fixture
|
9
|
-
Then('the {
|
9
|
+
Then('the {request_type} payload body does not match the JSON fixture in {string}') do |request_type, fixture_path|
|
10
10
|
payload_value = Maze::Server.list_for(request_type).current[:body]
|
11
11
|
expected_value = JSON.parse(open(fixture_path, &:read))
|
12
12
|
result = Maze::Compare.value(expected_value, payload_value)
|
@@ -17,7 +17,7 @@ end
|
|
17
17
|
#
|
18
18
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
19
19
|
# @step_input fixture_path [String] Path to a JSON fixture
|
20
|
-
Then('the {
|
20
|
+
Then('the {request_type} payload body matches the JSON fixture in {string}') do |request_type, fixture_path|
|
21
21
|
payload_value = Maze::Server.list_for(request_type).current[:body]
|
22
22
|
expected_value = JSON.parse(open(fixture_path, &:read))
|
23
23
|
result = Maze::Compare.value(expected_value, payload_value)
|
@@ -30,7 +30,7 @@ end
|
|
30
30
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
31
31
|
# @step_input field_path [String] Path to the tested element
|
32
32
|
# @step_input fixture_path [String] Path to a JSON fixture
|
33
|
-
Then('the {
|
33
|
+
Then('the {request_type}(|a b) payload field {string} matches the JSON fixture in {string}') \
|
34
34
|
do |request_type, field_path, fixture_path|
|
35
35
|
list = Maze::Server.list_for(request_type)
|
36
36
|
payload_value = Maze::Helper.read_key_path(list.current[:body], field_path)
|
@@ -44,7 +44,7 @@ end
|
|
44
44
|
#
|
45
45
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
46
46
|
# @step_input field_path [String] Path to the tested element
|
47
|
-
Then('the {
|
47
|
+
Then('the {request_type} payload field {string} is true') do |request_type, field_path|
|
48
48
|
list = Maze::Server.list_for(request_type)
|
49
49
|
Maze.check.true(Maze::Helper.read_key_path(list.current[:body], field_path))
|
50
50
|
end
|
@@ -53,7 +53,7 @@ end
|
|
53
53
|
#
|
54
54
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
55
55
|
# @step_input field_path [String] Path to the tested element
|
56
|
-
Then('the {
|
56
|
+
Then('the {request_type} payload field {string} is false') do |request_type, field_path|
|
57
57
|
list = Maze::Server.list_for(request_type)
|
58
58
|
Maze.check.false(Maze::Helper.read_key_path(list.current[:body], field_path))
|
59
59
|
end
|
@@ -62,7 +62,7 @@ end
|
|
62
62
|
#
|
63
63
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
64
64
|
# @step_input field_path [String] Path to the tested element
|
65
|
-
Then('the {
|
65
|
+
Then('the {request_type} payload field {string} is null') do |request_type, field_path|
|
66
66
|
list = Maze::Server.list_for(request_type)
|
67
67
|
Maze.check.nil(Maze::Helper.read_key_path(list.current[:body], field_path))
|
68
68
|
end
|
@@ -71,7 +71,7 @@ end
|
|
71
71
|
#
|
72
72
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
73
73
|
# @step_input field_path [String] Path to the tested element
|
74
|
-
Then('the {
|
74
|
+
Then('the {request_type} payload field {string} is not null') do |request_type, field_path|
|
75
75
|
list = Maze::Server.list_for(request_type)
|
76
76
|
Maze.check.not_nil(Maze::Helper.read_key_path(list.current[:body], field_path))
|
77
77
|
end
|
@@ -81,7 +81,7 @@ end
|
|
81
81
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
82
82
|
# @step_input field_path [String] Path to the tested element
|
83
83
|
# @step_input int_value [Integer] The value to test against
|
84
|
-
Then('the {
|
84
|
+
Then('the {request_type} payload field {string} equals {int}') do |request_type, field_path, int_value|
|
85
85
|
Maze.check.equal(int_value,
|
86
86
|
Maze::Helper.read_key_path(Maze::Server.list_for(request_type).current[:body], field_path))
|
87
87
|
end
|
@@ -91,7 +91,7 @@ end
|
|
91
91
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
92
92
|
# @step_input field_path [String] Path to the tested element
|
93
93
|
# @step_input float_value [Float] The value to test against
|
94
|
-
Then('the {
|
94
|
+
Then('the {request_type} payload field {string} equals {float}') do |request_type, field_path, float_value|
|
95
95
|
Maze.check.equal(float_value,
|
96
96
|
Maze::Helper.read_key_path(Maze::Server.list_for(request_type).current[:body], field_path))
|
97
97
|
end
|
@@ -102,7 +102,7 @@ end
|
|
102
102
|
# @step_input field_path [String] Path to the tested element
|
103
103
|
# @step_input float_value [Float] The value to test against
|
104
104
|
# @step_input places [Int] The number of decimal places to round the actual value to first
|
105
|
-
Then('the {
|
105
|
+
Then('the {request_type} payload field {string} equals {float} to {int} decimal place(s)') do |request_type, field_path, float_value, places|
|
106
106
|
body = Maze::Server.list_for(request_type).current[:body]
|
107
107
|
rounded_value = Maze::Helper.read_key_path(body, field_path).round places
|
108
108
|
Maze.check.equal(float_value,
|
@@ -114,7 +114,7 @@ end
|
|
114
114
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
115
115
|
# @step_input field_path [String] The payload element to test
|
116
116
|
# @step_input env_var [String] The environment variable to test against
|
117
|
-
Then('the {
|
117
|
+
Then('the {request_type} payload field {string} equals the environment variable {string}') \
|
118
118
|
do |request_type, field_path, env_var|
|
119
119
|
environment_value = ENV[env_var]
|
120
120
|
Maze.check.false(environment_value.nil?, "The environment variable #{env_var} must not be nil")
|
@@ -129,7 +129,7 @@ end
|
|
129
129
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
130
130
|
# @step_input field_path [String] The payload element to test
|
131
131
|
# @step_input int_value [Integer] The value to compare against
|
132
|
-
Then('the {
|
132
|
+
Then('the {request_type} payload field {string} is greater than {int}') do |request_type, field_path, int_value|
|
133
133
|
list = Maze::Server.list_for(request_type)
|
134
134
|
value = Maze::Helper.read_key_path(list.current[:body], field_path)
|
135
135
|
Maze.check.kind_of Integer, value
|
@@ -141,7 +141,7 @@ end
|
|
141
141
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
142
142
|
# @step_input field_path [String] The payload element to test
|
143
143
|
# @step_input int_value [Integer] The value to compare against
|
144
|
-
Then('the {
|
144
|
+
Then('the {request_type} payload field {string} is less than {int}') do |request_type, field_path, int_value|
|
145
145
|
list = Maze::Server.list_for(request_type)
|
146
146
|
value = Maze::Helper.read_key_path(list.current[:body], field_path)
|
147
147
|
Maze.check.kind_of Integer, value
|
@@ -154,7 +154,7 @@ end
|
|
154
154
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
155
155
|
# @step_input field_path [String] The payload element to test
|
156
156
|
# @step_input string_value [String] The string to test against
|
157
|
-
Then('the {
|
157
|
+
Then('the {request_type} payload field {string} equals {string}') do |request_type, field_path, string_value|
|
158
158
|
list = Maze::Server.list_for(request_type)
|
159
159
|
Maze.check.equal(string_value, Maze::Helper.read_key_path(list.current[:body], field_path))
|
160
160
|
end
|
@@ -164,7 +164,7 @@ end
|
|
164
164
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
165
165
|
# @step_input field_path [String] The payload element to test
|
166
166
|
# @step_input string_value [String] The string to test against
|
167
|
-
Then('the {
|
167
|
+
Then('the {request_type} payload field {string} starts with {string}') do |request_type, field_path, string_value|
|
168
168
|
list = Maze::Server.list_for(request_type)
|
169
169
|
value = Maze::Helper.read_key_path(list.current[:body], field_path)
|
170
170
|
Maze.check.kind_of String, value
|
@@ -179,7 +179,7 @@ end
|
|
179
179
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
180
180
|
# @step_input field_path [String] The payload element to test
|
181
181
|
# @step_input string_value [String] The string to test against
|
182
|
-
Then('the {
|
182
|
+
Then('the {request_type} payload field {string} ends with {string}') do |request_type, field_path, string_value|
|
183
183
|
list = Maze::Server.list_for(request_type)
|
184
184
|
value = Maze::Helper.read_key_path(list.current[:body], field_path)
|
185
185
|
Maze.check.kind_of String, value
|
@@ -194,7 +194,7 @@ end
|
|
194
194
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
195
195
|
# @step_input field [String] The payload element to test
|
196
196
|
# @step_input count [Integer] The value expected
|
197
|
-
Then('the {
|
197
|
+
Then('the {request_type} payload field {string} is an array with {int} elements') do |request_type, field, count|
|
198
198
|
list = Maze::Server.list_for(request_type)
|
199
199
|
value = Maze::Helper.read_key_path(list.current[:body], field)
|
200
200
|
Maze.check.kind_of Array, value
|
@@ -205,7 +205,7 @@ end
|
|
205
205
|
#
|
206
206
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
207
207
|
# @step_input field [String] The payload element to test
|
208
|
-
Then('the {
|
208
|
+
Then('the {request_type} payload field {string} is a non-empty array') do |request_type, field|
|
209
209
|
list = Maze::Server.list_for(request_type)
|
210
210
|
value = Maze::Helper.read_key_path(list.current[:body], field)
|
211
211
|
Maze.check.kind_of Array, value
|
@@ -217,7 +217,7 @@ end
|
|
217
217
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
218
218
|
# @step_input field [String] The payload element to test
|
219
219
|
# @step_input regex [String] The regex to test against
|
220
|
-
Then('the {
|
220
|
+
Then('the {request_type} payload field {string} matches the regex {string}') do |request_type, field, regex_string|
|
221
221
|
regex = Regexp.new(regex_string)
|
222
222
|
list = Maze::Server.list_for(request_type)
|
223
223
|
value = Maze::Helper.read_key_path(list.current[:body], field)
|
@@ -228,7 +228,7 @@ end
|
|
228
228
|
#
|
229
229
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
230
230
|
# @step_input field [String] The payload element to test
|
231
|
-
Then('the {
|
231
|
+
Then('the {request_type} payload field {string} is a parsable timestamp in seconds') do |request_type, field|
|
232
232
|
list = Maze::Server.list_for(request_type)
|
233
233
|
value = Maze::Helper.read_key_path(list.current[:body], field)
|
234
234
|
begin
|
@@ -245,7 +245,7 @@ end
|
|
245
245
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
246
246
|
# @step_input key_path [String] The path to the tested array
|
247
247
|
# @step_input element_key_path [String] The key for the expected element inside the array
|
248
|
-
Then('each element in {
|
248
|
+
Then('each element in {request_type} payload field {string} has {string}') do |request_type, key_path, element_key_path|
|
249
249
|
list = Maze::Server.list_for(request_type)
|
250
250
|
value = Maze::Helper.read_key_path(list.current[:body], key_path)
|
251
251
|
Maze.check.kind_of Array, value
|
@@ -7,7 +7,7 @@
|
|
7
7
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
8
8
|
# @step_input parameter_name [String] The parameter to test
|
9
9
|
# @step_input parameter_value [String] The expected value
|
10
|
-
Then('the {
|
10
|
+
Then('the {request_type} {string} query parameter equals {string}') do |request_type, parameter_name, parameter_value|
|
11
11
|
Maze.check.equal(parameter_value,
|
12
12
|
Maze::Helper.parse_querystring(Maze::Server.list_for(request_type).current)[parameter_name][0])
|
13
13
|
end
|
@@ -16,7 +16,7 @@ end
|
|
16
16
|
#
|
17
17
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
18
18
|
# @step_input parameter_name [String] The parameter to test
|
19
|
-
Then('the {
|
19
|
+
Then('the {request_type} {string} query parameter is not null') do |request_type, parameter_name|
|
20
20
|
Maze.check.not_nil(Maze::Helper.parse_querystring(Maze::Server.list_for(request_type).current)[parameter_name][0],
|
21
21
|
"The '#{parameter_name}' query parameter should not be null")
|
22
22
|
end
|
@@ -25,7 +25,7 @@ end
|
|
25
25
|
#
|
26
26
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
27
27
|
# @step_input parameter_name [String] The parameter to test
|
28
|
-
Then('the {
|
28
|
+
Then('the {request_type} {string} query parameter is a timestamp') do |request_type, parameter_name|
|
29
29
|
param = Maze::Helper.parse_querystring(Maze::Server.list_for(request_type).current)[parameter_name][0]
|
30
30
|
Maze.check.match(TIMESTAMP_REGEX, param)
|
31
31
|
end
|
@@ -49,12 +49,12 @@ def assert_received_requests(request_count, list, list_name, precise = true)
|
|
49
49
|
end
|
50
50
|
|
51
51
|
#
|
52
|
-
#
|
52
|
+
# Request assertions
|
53
53
|
#
|
54
54
|
# Shortcut to waiting to receive a single request of the given type
|
55
55
|
#
|
56
56
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
57
|
-
Then('I wait to receive a(n) {
|
57
|
+
Then('I wait to receive a(n) {request_type}') do |request_type|
|
58
58
|
step "I wait to receive 1 #{request_type}"
|
59
59
|
end
|
60
60
|
|
@@ -65,7 +65,7 @@ end
|
|
65
65
|
#
|
66
66
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
67
67
|
# @step_input request_count [Integer] The amount of requests expected
|
68
|
-
Then('I wait to receive {int} {
|
68
|
+
Then('I wait to receive {int} {request_type}') do |request_count, request_type|
|
69
69
|
list = Maze::Server.list_for(request_type)
|
70
70
|
assert_received_requests request_count, list, request_type
|
71
71
|
list.sort_by_sent_at! request_count
|
@@ -78,7 +78,7 @@ end
|
|
78
78
|
#
|
79
79
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
80
80
|
# @step_input request_count [Integer] The amount of requests expected
|
81
|
-
Then('I wait to receive at least {int} {
|
81
|
+
Then('I wait to receive at least {int} {request_type}') do |request_count, request_type|
|
82
82
|
list = Maze::Server.list_for(request_type)
|
83
83
|
assert_received_requests request_count, list, request_type, false
|
84
84
|
end
|
@@ -87,7 +87,7 @@ end
|
|
87
87
|
#
|
88
88
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
89
89
|
# @step_input field_path [String] The field to sort by
|
90
|
-
Then('I sort the {
|
90
|
+
Then('I sort the {request_type} by the payload field {string}') do |request_type, field_path|
|
91
91
|
list = Maze::Server.list_for(request_type)
|
92
92
|
list.sort_by! field_path
|
93
93
|
end
|
@@ -97,31 +97,24 @@ end
|
|
97
97
|
#
|
98
98
|
# @step_input min_received [Integer] The minimum amount of requests required to pass
|
99
99
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
100
|
-
Then('I have received at least {int} {
|
100
|
+
Then('I have received at least {int} {request_type}') do |min_received, request_type|
|
101
101
|
list = Maze::Server.list_for(request_type)
|
102
102
|
Maze.check.operator(list.size_remaining, :>=, min_received, "Actually received #{list.size_remaining} #{request_type} requests")
|
103
103
|
end
|
104
104
|
|
105
105
|
# Assert that the test Server hasn't received any requests - of a specific, or any, type.
|
106
106
|
#
|
107
|
-
# @step_input request_type [String] The type of request ('error', 'session',
|
108
|
-
|
109
|
-
Then('I should receive no {word}') do |request_type|
|
107
|
+
# @step_input request_type [String] The type of request ('error', 'session', 'trace', sampling request', etc)
|
108
|
+
Then('I should receive no {request_type}') do |request_type|
|
110
109
|
sleep Maze.config.receive_no_requests_wait
|
111
|
-
|
112
|
-
|
113
|
-
Maze.check.equal(0, Maze::Server.errors.size_remaining, "#{Maze::Server.errors.size_remaining} errors received")
|
114
|
-
Maze.check.equal(0, Maze::Server.sessions.size_remaining, "#{Maze::Server.sessions.size_remaining} sessions received")
|
115
|
-
else
|
116
|
-
list = Maze::Server.list_for(request_type)
|
117
|
-
Maze.check.equal(0, list.size_remaining, "#{list.size_remaining} #{request_type} received")
|
118
|
-
end
|
110
|
+
list = Maze::Server.list_for(request_type)
|
111
|
+
Maze.check.equal(0, list.size_remaining, "#{list.size_remaining} #{request_type} received")
|
119
112
|
end
|
120
113
|
|
121
114
|
# Moves to the next request
|
122
115
|
#
|
123
116
|
# @step_input request_type [String] The type of request (error, session, build, etc)
|
124
|
-
Then('I discard the oldest {
|
117
|
+
Then('I discard the oldest {request_type}') do |request_type|
|
125
118
|
raise "No #{request_type} to discard" if Maze::Server.list_for(request_type).current.nil?
|
126
119
|
|
127
120
|
Maze::Server.list_for(request_type).next
|