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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06ad8a12d51d5fabca139326d59aba0762467da96cf3ab641705ab049066674f
4
- data.tar.gz: 50df1898e6ce8d13addf93868725e921205c66f42da749f6935b876ddfe3dfa9
3
+ metadata.gz: d53ed9d230a1261517d7e19774ba6215da2bb5edd4f2d492ab91b499455b6b0f
4
+ data.tar.gz: 4b73d252ec1a2b1e7e09e40c3e324d467c0b83f140ae208c01ceaf4a6090b7f9
5
5
  SHA512:
6
- metadata.gz: 05c40f7adaf5a4152ad9bc44af88bc41daa3230de4a0c66ecd39b33f4e1189abe3067aee6f0d15dbc55eb96ce1d1e6ddff67af40f685e472a4b5a75a74d3c182
7
- data.tar.gz: b1c7a3fb3f1ffd9cd21da54e7b795add7fb4776dd3d2fe47f13adc52cf91efa5a2b506dabad118b305cdc7927e11a9f2b7a4549052ffc7c7c770c9052c212ae4
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('Google Pixel 4 XL', '10.0'),
81
- 'ANDROID_9' => make_android_hash('Google Pixel 3', '9.0'),
82
- 'ANDROID_8' => make_android_hash('Samsung Galaxy S9', '8.0'),
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('iPhone XS', '12'),
92
+ 'IOS_12' => make_ios_hash('iPad Pro 12.9 2018', '12'),
92
93
  }
93
94
 
94
95
  # Specific Android devices
@@ -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 these is one.
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.2.0'
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.2.0
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 00:00:00.000000000 Z
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