bugsnag-maze-runner 10.2.0 → 10.3.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 +1 -0
- data/lib/features/steps/error_config_steps.rb +16 -0
- data/lib/features/support/cucumber_types.rb +1 -1
- data/lib/features/support/error_config_support.rb +39 -0
- data/lib/features/support/internal_hooks.rb +1 -0
- data/lib/maze/api/cucumber/scenario.rb +12 -0
- data/lib/maze/client/appium/bs_devices.rb +5 -4
- data/lib/maze/maze_output.rb +1 -0
- data/lib/maze/server.rb +19 -1
- data/lib/maze/servlets/command_servlet.rb +1 -1
- data/lib/maze/servlets/error_config_servlet.rb +66 -0
- data/lib/maze.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d53ed9d230a1261517d7e19774ba6215da2bb5edd4f2d492ab91b499455b6b0f
|
4
|
+
data.tar.gz: 4b73d252ec1a2b1e7e09e40c3e324d467c0b83f140ae208c01ceaf4a6090b7f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1022414b8c7b029c5ab9a6fe2158644e0dd2206eb9fbaf2f69717c5c5cc5d014523d7c2ad64a20b214042ee3c129061223c82841114cf41cb1d1c350a5265e57
|
7
|
+
data.tar.gz: 20839e06ccd862ee7ca6b9fc822a1eb7d50214f89fbc9255f940aa285239bb5e9515153ccb2ff1e06336be16a9c25e2d19de8c405e0ebbd80e98936649494b4e
|
data/bin/maze-runner
CHANGED
@@ -62,6 +62,7 @@ require_relative '../lib/maze/loggers/logger'
|
|
62
62
|
require_relative '../lib/maze/servlets/base_servlet'
|
63
63
|
require_relative '../lib/maze/servlets/all_commands_servlet'
|
64
64
|
require_relative '../lib/maze/servlets/command_servlet'
|
65
|
+
require_relative '../lib/maze/servlets/error_config_servlet'
|
65
66
|
require_relative '../lib/maze/servlets/servlet'
|
66
67
|
require_relative '../lib/maze/servlets/log_servlet'
|
67
68
|
require_relative '../lib/maze/servlets/trace_servlet'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @!group Error config steps
|
4
|
+
|
5
|
+
#
|
6
|
+
# Shortcut to waiting to receive requests for error configs
|
7
|
+
#
|
8
|
+
# @step_input count [Integer] Number of error config requests expected
|
9
|
+
Then('I wait for {int} error config(s) to be requested') do |count|
|
10
|
+
step "I wait to receive #{count} error config requests"
|
11
|
+
end
|
12
|
+
|
13
|
+
Then('I prepare an error config with:') do |table|
|
14
|
+
Maze.check.equal(%w[type name value], table.column_names, 'Error config table expects column headers "type", "name" and "value"')
|
15
|
+
ErrorConfigSupport.prepare_error_config(table.hashes)
|
16
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
ParameterType(
|
2
2
|
name: 'request_type',
|
3
|
-
regexp: /errors?|sessions?|builds?|logs?|metrics?|sampling requests?|traces?|uploads?|sourcemaps?|reflects?|reflections?|invalid requests?/,
|
3
|
+
regexp: /errors?|sessions?|error config requests?|error configs?|builds?|logs?|metrics?|sampling requests?|traces?|uploads?|sourcemaps?|reflects?|reflections?|invalid requests?/,
|
4
4
|
type: String,
|
5
5
|
transformer: ->(s) { s }
|
6
6
|
)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class ErrorConfigSupport
|
2
|
+
class << self
|
3
|
+
def prepare_error_config(table_hashes)
|
4
|
+
|
5
|
+
error_config = {
|
6
|
+
headers: {},
|
7
|
+
}
|
8
|
+
table_hashes.each do |hash|
|
9
|
+
type = hash['type']
|
10
|
+
name = hash['name']
|
11
|
+
value = hash['value']
|
12
|
+
|
13
|
+
case type
|
14
|
+
when 'header'
|
15
|
+
error_config[:headers][name] = value
|
16
|
+
when 'property'
|
17
|
+
case name
|
18
|
+
when 'status'
|
19
|
+
error_config[:status] = value.to_i
|
20
|
+
when 'body'
|
21
|
+
if value.start_with?('@')
|
22
|
+
body = File.read(value[1..])
|
23
|
+
else
|
24
|
+
body = value
|
25
|
+
end
|
26
|
+
error_config[:body] = body
|
27
|
+
error_config[:headers]['ETag'] = Digest::SHA1.hexdigest(body.to_s)
|
28
|
+
else
|
29
|
+
raise "Unknown property '#{name}'"
|
30
|
+
end
|
31
|
+
else
|
32
|
+
raise "Unknown type '#{type}'"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Maze::Server.error_configs.add(error_config)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -157,6 +157,7 @@ After do |scenario|
|
|
157
157
|
if (scenario.failed? && Maze.config.log_requests) || Maze.config.always_log
|
158
158
|
$stdout.puts '^^^ +++' if ENV['BUILDKITE']
|
159
159
|
output_received_requests('errors')
|
160
|
+
output_received_requests('error config requests')
|
160
161
|
output_received_requests('sessions')
|
161
162
|
output_received_requests('traces')
|
162
163
|
output_received_requests('builds')
|
@@ -11,6 +11,18 @@ module Maze
|
|
11
11
|
@fail_override_reason = nil
|
12
12
|
end
|
13
13
|
|
14
|
+
def name
|
15
|
+
@scenario.name
|
16
|
+
end
|
17
|
+
|
18
|
+
def location
|
19
|
+
@scenario.location
|
20
|
+
end
|
21
|
+
|
22
|
+
def tags
|
23
|
+
@scenario.tags
|
24
|
+
end
|
25
|
+
|
14
26
|
def mark_as_failed(reason)
|
15
27
|
@fail_override = true
|
16
28
|
@fail_override_reason = reason
|
@@ -77,18 +77,19 @@ module Maze
|
|
77
77
|
'ANDROID_13' => make_android_hash('Google Pixel 6 Pro', '13.0'),
|
78
78
|
'ANDROID_12' => make_android_hash('Google Pixel 6', '12.0'),
|
79
79
|
'ANDROID_11' => make_android_hash('Samsung Galaxy S21', '11.0'),
|
80
|
-
'ANDROID_10' => make_android_hash('
|
81
|
-
'ANDROID_9' => make_android_hash('
|
82
|
-
'ANDROID_8' => make_android_hash('Samsung Galaxy
|
80
|
+
'ANDROID_10' => make_android_hash('Samsung Galaxy S20', '10.0'),
|
81
|
+
'ANDROID_9' => make_android_hash('Samsung Galaxy S10', '9.0'),
|
82
|
+
'ANDROID_8' => make_android_hash('Samsung Galaxy Note 9', '8.1'),
|
83
83
|
|
84
84
|
# iOS devices
|
85
|
+
'IOS_26' => make_ios_hash('iPhone 15', '26'),
|
85
86
|
'IOS_18' => make_ios_hash('iPhone 14', '18'),
|
86
87
|
'IOS_17' => make_ios_hash('iPhone 15', '17'),
|
87
88
|
'IOS_16' => make_ios_hash('iPhone 14', '16'),
|
88
89
|
'IOS_15' => make_ios_hash('iPhone 13', '15'),
|
89
90
|
'IOS_14' => make_ios_hash('iPhone 12', '14'),
|
90
91
|
'IOS_13' => make_ios_hash('iPhone 11', '13'),
|
91
|
-
'IOS_12' => make_ios_hash('
|
92
|
+
'IOS_12' => make_ios_hash('iPad Pro 12.9 2018', '12'),
|
92
93
|
}
|
93
94
|
|
94
95
|
# Specific Android devices
|
data/lib/maze/maze_output.rb
CHANGED
@@ -15,6 +15,7 @@ module Maze
|
|
15
15
|
|
16
16
|
request_types = %w[errors sessions builds uploads logs sourcemaps traces ignored invalid reflections]
|
17
17
|
request_types << 'sampling requests'
|
18
|
+
request_types << 'error config requests'
|
18
19
|
|
19
20
|
request_types.each do |request_type|
|
20
21
|
list = Maze::Server.list_for(request_type).all
|
data/lib/maze/server.rb
CHANGED
@@ -85,6 +85,10 @@ module Maze
|
|
85
85
|
errors
|
86
86
|
when 'session', 'sessions'
|
87
87
|
sessions
|
88
|
+
when 'error config', 'error configs'
|
89
|
+
error_configs
|
90
|
+
when 'error config request', 'error config requests'
|
91
|
+
error_config_requests
|
88
92
|
when 'build', 'builds'
|
89
93
|
builds
|
90
94
|
when 'log', 'logs'
|
@@ -131,6 +135,20 @@ module Maze
|
|
131
135
|
@sampling_requests ||= RequestList.new
|
132
136
|
end
|
133
137
|
|
138
|
+
# A list of error config requests received
|
139
|
+
#
|
140
|
+
# @return [RequestList] Received error config requests
|
141
|
+
def error_config_requests
|
142
|
+
@error_config_requests ||= RequestList.new
|
143
|
+
end
|
144
|
+
|
145
|
+
# A list of error config responses to be returned to the client
|
146
|
+
#
|
147
|
+
# @return [RequestList] Error config responses to be returned
|
148
|
+
def error_configs
|
149
|
+
@error_configs ||= RequestList.new
|
150
|
+
end
|
151
|
+
|
134
152
|
# A list of trace requests received
|
135
153
|
#
|
136
154
|
# @return [RequestList] Received trace requests
|
@@ -240,7 +258,6 @@ module Maze
|
|
240
258
|
response.status = 200
|
241
259
|
end
|
242
260
|
|
243
|
-
# When adding more endpoints, be sure to update the 'I should receive no requests' step
|
244
261
|
server.mount '/notify', Servlets::Servlet, :errors
|
245
262
|
server.mount '/sessions', Servlets::Servlet, :sessions
|
246
263
|
server.mount '/builds', Servlets::Servlet, :builds
|
@@ -256,6 +273,7 @@ module Maze
|
|
256
273
|
server.mount '/unity-line-mappings', Servlets::Servlet, :sourcemaps
|
257
274
|
server.mount '/command', Servlets::CommandServlet
|
258
275
|
server.mount '/commands', Servlets::AllCommandsServlet
|
276
|
+
server.mount '/error-config', Servlets::ErrorConfigServlet
|
259
277
|
server.mount '/logs', Servlets::LogServlet
|
260
278
|
server.mount '/metrics', Servlets::Servlet, :metrics
|
261
279
|
server.mount '/reflect', Servlets::ReflectiveServlet
|
@@ -11,7 +11,7 @@ module Maze
|
|
11
11
|
|
12
12
|
NOOP_COMMAND = '{"action": "noop", "message": "No commands queued"}'
|
13
13
|
|
14
|
-
# Serves the next command, if
|
14
|
+
# Serves the next command, if there is one.
|
15
15
|
#
|
16
16
|
# @param request [HTTPRequest] The incoming GET request
|
17
17
|
# @param response [HTTPResponse] The response to return
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module Maze
|
6
|
+
module Servlets
|
7
|
+
|
8
|
+
# Allows clients to request error configs that have been added to the queue.
|
9
|
+
class ErrorConfigServlet < BaseServlet
|
10
|
+
|
11
|
+
BAD_REQUEST_BODY = '{
|
12
|
+
"type":"about:blank",
|
13
|
+
"title":"Bad Request",
|
14
|
+
"status":400,
|
15
|
+
"detail":"Maze Runner has not been given an error config to return"
|
16
|
+
}'
|
17
|
+
|
18
|
+
# Captures the details of the request for checking and serves the next error config, if there is one.
|
19
|
+
#
|
20
|
+
# @param request [HTTPRequest] The incoming GET request
|
21
|
+
# @param response [HTTPResponse] The response to return
|
22
|
+
def do_GET(request, response)
|
23
|
+
|
24
|
+
if Server.error_configs.size_remaining > 0
|
25
|
+
# Server the next error config in the queue
|
26
|
+
error_config = Server.error_configs.current
|
27
|
+
error_config[:headers].each do |key, value|
|
28
|
+
response.header[key] = value
|
29
|
+
end
|
30
|
+
response.body = error_config[:body]
|
31
|
+
response.status = 200
|
32
|
+
|
33
|
+
Server.error_configs.next
|
34
|
+
else
|
35
|
+
# Log and return an error
|
36
|
+
$logger.error 'Error config requested but none are queued - returning 400 Bad Request'
|
37
|
+
response.body = BAD_REQUEST_BODY
|
38
|
+
response.status = 400
|
39
|
+
end
|
40
|
+
response.header['Content-Type'] = 'application/json'
|
41
|
+
|
42
|
+
# Store the query parameters in the error config request list
|
43
|
+
details = {
|
44
|
+
body: {},
|
45
|
+
query: Rack::Utils.parse_nested_query(request.query_string),
|
46
|
+
request_uri: request.request_uri,
|
47
|
+
request: request,
|
48
|
+
response: response,
|
49
|
+
method: 'GET'
|
50
|
+
}
|
51
|
+
Server.error_config_requests.add(details)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Logs and returns a set of valid headers for this servlet.
|
55
|
+
#
|
56
|
+
# @param request [HTTPRequest] The incoming GET request
|
57
|
+
# @param response [HTTPResponse] The response to return
|
58
|
+
def do_OPTIONS(request, response)
|
59
|
+
super
|
60
|
+
|
61
|
+
response.header['Access-Control-Allow-Methods'] = 'GET, OPTIONS'
|
62
|
+
response.status = Server.status_code('OPTIONS')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/maze.rb
CHANGED
@@ -8,7 +8,7 @@ require_relative 'maze/timers'
|
|
8
8
|
# providing an alternative to the proliferation of global variables or singletons.
|
9
9
|
module Maze
|
10
10
|
|
11
|
-
VERSION = '10.
|
11
|
+
VERSION = '10.3.0'
|
12
12
|
|
13
13
|
class << self
|
14
14
|
attr_accessor :check, :driver, :internal_hooks, :mode, :start_time, :dynamic_retry, :public_address,
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bugsnag-maze-runner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 10.
|
4
|
+
version: 10.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Kirkland
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2025-09-
|
12
|
+
date: 2025-09-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|
@@ -408,6 +408,7 @@ files:
|
|
408
408
|
- lib/features/steps/breadcrumb_steps.rb
|
409
409
|
- lib/features/steps/browser_steps.rb
|
410
410
|
- lib/features/steps/build_api_steps.rb
|
411
|
+
- lib/features/steps/error_config_steps.rb
|
411
412
|
- lib/features/steps/error_reporting_steps.rb
|
412
413
|
- lib/features/steps/feature_flag_steps.rb
|
413
414
|
- lib/features/steps/header_steps.rb
|
@@ -425,6 +426,7 @@ files:
|
|
425
426
|
- lib/features/steps/value_steps.rb
|
426
427
|
- lib/features/support/cucumber_types.rb
|
427
428
|
- lib/features/support/env.rb
|
429
|
+
- lib/features/support/error_config_support.rb
|
428
430
|
- lib/features/support/internal_hooks.rb
|
429
431
|
- lib/maze.rb
|
430
432
|
- lib/maze/api/appium/app_manager.rb
|
@@ -511,6 +513,7 @@ files:
|
|
511
513
|
- lib/maze/servlets/all_commands_servlet.rb
|
512
514
|
- lib/maze/servlets/base_servlet.rb
|
513
515
|
- lib/maze/servlets/command_servlet.rb
|
516
|
+
- lib/maze/servlets/error_config_servlet.rb
|
514
517
|
- lib/maze/servlets/log_servlet.rb
|
515
518
|
- lib/maze/servlets/reflective_servlet.rb
|
516
519
|
- lib/maze/servlets/servlet.rb
|