bugsnag-maze-runner 7.33.1 → 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/bin/maze-runner +9 -1
  3. data/bin/purge-projects +66 -0
  4. data/lib/features/steps/app_automator_steps.rb +9 -3
  5. data/lib/features/steps/header_steps.rb +13 -9
  6. data/lib/features/steps/multipart_request_steps.rb +10 -10
  7. data/lib/features/steps/network_steps.rb +7 -24
  8. data/lib/features/steps/payload_steps.rb +21 -21
  9. data/lib/features/steps/query_parameter_steps.rb +3 -3
  10. data/lib/features/steps/request_assertion_steps.rb +11 -18
  11. data/lib/features/steps/trace_steps.rb +0 -8
  12. data/lib/features/steps/value_steps.rb +9 -9
  13. data/lib/features/support/cucumber_types.rb +20 -0
  14. data/lib/features/support/internal_hooks.rb +0 -2
  15. data/lib/maze/api/appium/file_manager.rb +1 -1
  16. data/lib/maze/appium_server.rb +2 -2
  17. data/lib/maze/client/appium/bb_client.rb +1 -1
  18. data/lib/maze/client/appium/bb_devices.rb +1 -1
  19. data/lib/maze/client/appium/bs_devices.rb +7 -9
  20. data/lib/maze/client/bb_api_client.rb +46 -9
  21. data/lib/maze/client/bb_client_utils.rb +1 -61
  22. data/lib/maze/client/selenium/bb_client.rb +1 -6
  23. data/lib/maze/client/selenium/bs_browsers.yml +11 -11
  24. data/lib/maze/configuration.rb +0 -6
  25. data/lib/maze/logger.rb +29 -1
  26. data/lib/maze/option/parser.rb +39 -14
  27. data/lib/maze/option/processor.rb +2 -5
  28. data/lib/maze/option/validator.rb +3 -7
  29. data/lib/maze/option.rb +2 -6
  30. data/lib/maze/repeaters/request_repeater.rb +1 -1
  31. data/lib/maze/schemas/trace_validator.rb +0 -2
  32. data/lib/maze/server.rb +13 -3
  33. data/lib/maze/servlets/servlet.rb +13 -10
  34. data/lib/maze/servlets/trace_servlet.rb +15 -0
  35. data/lib/maze/terminating_server.rb +1 -1
  36. data/lib/maze.rb +1 -1
  37. metadata +5 -3
  38. data/lib/maze/plugins/cucumber_report_plugin.rb +0 -101
@@ -22,6 +22,9 @@ module Maze
22
22
  'Print this help.'
23
23
  opt :version,
24
24
  'Display Maze Runner and Cucumber versions'
25
+ opt :expand,
26
+ 'Output for Scenario Outlines is expanded by default, suppress using --no-expand',
27
+ short: :none
25
28
 
26
29
  text ''
27
30
  text 'General options:'
@@ -29,24 +32,29 @@ module Maze
29
32
  opt Option::AWS_PUBLIC_IP,
30
33
  'Intended for use on Buildkite with the Elastic CI Stack for CI. Enables awareness of being run with a public IP address.',
31
34
  type: :boolean,
35
+ short: :none,
32
36
  default: false
33
37
 
34
- opt Option::ENABLE_RETRIES,
38
+ opt Option::RETRIES,
35
39
  'Enables retrying failed scenarios when tagged',
36
40
  type: :boolean,
41
+ short: :none,
37
42
  default: true
38
43
 
39
- opt Option::ENABLE_BUGSNAG,
44
+ opt Option::BUGSNAG,
40
45
  'Enables reporting to Bugsnag on scenario failure (requires MAZE_BUGSNAG_API_KEY)',
41
46
  type: :boolean,
47
+ short: :none,
42
48
  default: true
43
49
 
44
50
  opt Option::ASPECTO_REPEATER_API_KEY,
45
51
  'Enables forwarding of all received POST requests to Aspecto, using the API key provided. MAZE_ASPECTO_REPEATER_API_KEY may also be set.',
52
+ short: :none,
46
53
  type: :string
47
54
 
48
55
  opt Option::BUGSNAG_REPEATER_API_KEY,
49
56
  'Enables forwarding of all received POST requests to Bugsnag, using the API key provided. MAZE_REPEATER_API_KEY may also be set.',
57
+ short: :none,
50
58
  type: :string
51
59
 
52
60
  text ''
@@ -54,12 +62,15 @@ module Maze
54
62
 
55
63
  opt Option::BIND_ADDRESS,
56
64
  'Mock server bind address',
65
+ short: :none,
57
66
  type: :string
58
67
  opt Option::PORT,
59
68
  'Mock server port',
69
+ short: :none,
60
70
  default: 9339
61
71
  opt Option::NULL_PORT,
62
72
  'Terminating connection port',
73
+ short: :none,
63
74
  default: 9341
64
75
 
65
76
  text ''
@@ -67,12 +78,15 @@ module Maze
67
78
 
68
79
  opt Option::DS_ROOT,
69
80
  'Document server root',
81
+ short: :none,
70
82
  type: :string
71
83
  opt Option::DS_BIND_ADDRESS,
72
84
  'Document server bind address',
85
+ short: :none,
73
86
  type: :string
74
87
  opt Option::DS_PORT,
75
88
  'Document server port',
89
+ short: :none,
76
90
  default: 9340
77
91
 
78
92
  text ''
@@ -80,16 +94,20 @@ module Maze
80
94
 
81
95
  opt Option::FARM,
82
96
  'Device farm to use: "bs" (BrowserStack) or "local"',
97
+ short: :none,
83
98
  type: :string
84
99
  opt Option::APP,
85
100
  'The app to be installed and run against. Assumed to be contained in a file if prefixed with @.',
101
+ short: :none,
86
102
  type: :string
87
103
  opt Option::A11Y_LOCATOR,
88
104
  'Locate elements by accessibility id rather than id',
105
+ short: :none,
89
106
  type: :boolean,
90
107
  default: false
91
108
  opt Option::CAPABILITIES,
92
109
  'Additional desired Appium capabilities as a JSON string',
110
+ short: :none,
93
111
  default: '{}'
94
112
 
95
113
  text ''
@@ -106,49 +124,50 @@ module Maze
106
124
  type: :string
107
125
  opt Option::USERNAME,
108
126
  'Device farm username. Consumes env var from environment based on farm set',
127
+ short: :none,
109
128
  type: :string
110
129
  opt Option::ACCESS_KEY,
111
130
  'Device farm access key. Consumes env var from environment based on farm set',
131
+ short: :none,
112
132
  type: :string
113
133
  opt Option::APPIUM_VERSION,
114
134
  'The Appium version to use',
135
+ short: :none,
115
136
  type: :string
116
137
  opt Option::LIST_DEVICES,
117
138
  'Lists the devices available for the configured device farm, or all devices if none are specified',
139
+ short: :none,
118
140
  default: false
119
141
  opt Option::APP_BUNDLE_ID,
120
142
  'The bundle identifier of the test application',
143
+ short: :none,
121
144
  type: :string
122
145
  opt Option::TUNNEL,
123
146
  'Start the device farm secure tunnel',
147
+ short: :none,
124
148
  default: true
125
149
  opt Option::APPIUM_SERVER,
126
150
  "Appium server URL. Defaults are: \n" +
127
151
  " --farm=local - MAZE_APPIUM_SERVER or http://localhost:4723/wd/hub\n" +
128
152
  " --farm=bb - MAZE_APPIUM_SERVER or https://us-west-mobile-hub.bitbar.com/wd/hub\n" +
129
153
  'Not used for --farm=bs',
154
+ short: :none,
130
155
  type: :string
131
156
  opt Option::SELENIUM_SERVER,
132
157
  "Selenium server URL. Only used for --farm=bb, defaulting to MAZE_SELENIUM_SERVER or https://us-west-desktop-hub.bitbar.com/wd/hub",
158
+ short: :none,
133
159
  type: :string
134
160
 
135
161
  # SmartBear-only options
136
162
  opt Option::SB_LOCAL,
137
163
  '(SB only) Path to the SBSecureTunnel binary. MAZE_SB_LOCAL env var or "/SBSecureTunnel" by default',
164
+ short: :none,
138
165
  type: :string
139
166
 
140
167
  # BrowserStack-only options
141
168
  opt Option::BS_LOCAL,
142
169
  '(BS only) Path to the BrowserStackLocal binary. MAZE_BS_LOCAL env var or "/BrowserStackLocal" by default',
143
- type: :string
144
-
145
- # TMS options
146
- opt Option::TMS_URI,
147
- 'URI of the test management server root. MAZE_TMS_URI env var',
148
- type: :string
149
-
150
- opt Option::TMS_TOKEN,
151
- 'Token used to access the test management server. MAZE_TMS_TOKEN env var',
170
+ short: :none,
152
171
  type: :string
153
172
 
154
173
  text ''
@@ -156,21 +175,27 @@ module Maze
156
175
 
157
176
  opt Option::OS,
158
177
  'OS type to use ("ios", "android")',
178
+ short: :none,
159
179
  type: :string
160
180
  opt Option::OS_VERSION,
161
181
  'The intended OS version when running on a local device',
182
+ short: :none,
162
183
  type: :string
163
184
  opt Option::START_APPIUM,
164
185
  'Whether a local Appium server should be start. Only used for --farm=local.',
186
+ short: :none,
165
187
  default: true
166
188
  opt Option::APPIUM_LOGFILE,
167
189
  'The file local appium server output is logged to, defaulting to "appium_server.log"',
190
+ short: :none,
168
191
  default: 'appium_server.log'
169
192
  opt Option::APPLE_TEAM_ID,
170
193
  'Apple Team Id, required for local iOS testing. MAZE_APPLE_TEAM_ID env var by default',
194
+ short: :none,
171
195
  type: :string
172
196
  opt Option::UDID,
173
197
  'Apple UDID, required for local iOS testing. MAZE_UDID env var by default',
198
+ short: :none,
174
199
  type: :string
175
200
 
176
201
  text ''
@@ -178,16 +203,19 @@ module Maze
178
203
 
179
204
  opt Option::FILE_LOG,
180
205
  "Writes lists of received requests to the maze_output folder for all scenarios",
206
+ short: :none,
181
207
  type: :boolean,
182
208
  default: true
183
209
 
184
210
  opt Option::LOG_REQUESTS,
185
211
  "Log lists of received requests to the console in the event of scenario failure. Defaults to true if the BUILDKITE environment variable is set",
212
+ short: :none,
186
213
  type: :boolean,
187
214
  default: false
188
215
 
189
216
  opt Option::ALWAYS_LOG,
190
217
  "Always log all received requests at the end of a scenario, whether is passes or fails",
218
+ short: :none,
191
219
  type: :boolean,
192
220
  default: false
193
221
 
@@ -231,7 +259,6 @@ module Maze
231
259
  when 'bb'
232
260
  options[Option::USERNAME] ||= ENV['BITBAR_USERNAME']
233
261
  options[Option::ACCESS_KEY] ||= ENV['BITBAR_ACCESS_KEY']
234
- options[Option::TMS_URI] ||= ENV['MAZE_TMS_URI']
235
262
  options[Option::APPIUM_SERVER] ||= ENV['MAZE_APPIUM_SERVER'] || 'https://us-west-mobile-hub.bitbar.com/wd/hub'
236
263
  options[Option::SELENIUM_SERVER] ||= ENV['MAZE_SELENIUM_SERVER'] || 'https://us-west-desktop-hub.bitbar.com/wd/hub'
237
264
  end
@@ -239,8 +266,6 @@ module Maze
239
266
  options[Option::ASPECTO_REPEATER_API_KEY] ||= ENV['MAZE_ASPECTO_REPEATER_API_KEY']
240
267
  options[Option::BUGSNAG_REPEATER_API_KEY] ||= ENV['MAZE_REPEATER_API_KEY']
241
268
  options[Option::SB_LOCAL] ||= ENV['MAZE_SB_LOCAL'] || '/SBSecureTunnel'
242
- options[Option::TMS_URI] ||= ENV['MAZE_TMS_URI']
243
- options[Option::TMS_TOKEN] ||= ENV['MAZE_TMS_TOKEN']
244
269
  options[Option::BS_LOCAL] ||= ENV['MAZE_BS_LOCAL'] || '/BrowserStackLocal'
245
270
  options[Option::APPIUM_SERVER] ||= ENV['MAZE_APPIUM_SERVER'] || 'http://localhost:4723/wd/hub'
246
271
  options[Option::APPLE_TEAM_ID] ||= ENV['MAZE_APPLE_TEAM_ID']
@@ -19,10 +19,8 @@ module Maze
19
19
 
20
20
  # General options
21
21
  config.aws_public_ip = options[Maze::Option::AWS_PUBLIC_IP]
22
- config.enable_retries = options[Maze::Option::ENABLE_RETRIES]
23
- config.enable_bugsnag = options[Maze::Option::ENABLE_BUGSNAG]
24
- config.tms_uri = options[Maze::Option::TMS_URI]
25
- config.tms_token = options[Maze::Option::TMS_TOKEN]
22
+ config.enable_retries = options[Maze::Option::RETRIES]
23
+ config.enable_bugsnag = options[Maze::Option::BUGSNAG]
26
24
  config.aspecto_repeater_api_key = options[Maze::Option::ASPECTO_REPEATER_API_KEY]
27
25
  config.bugsnag_repeater_api_key = options[Maze::Option::BUGSNAG_REPEATER_API_KEY]
28
26
 
@@ -80,7 +78,6 @@ module Maze
80
78
  when :bb then
81
79
  config.username = options[Maze::Option::USERNAME]
82
80
  config.access_key = options[Maze::Option::ACCESS_KEY]
83
- config.tms_uri = options[Maze::Option::TMS_URI]
84
81
  config.appium_version = options[Maze::Option::APPIUM_VERSION]
85
82
  device_option = options[Maze::Option::DEVICE]
86
83
  if device_option.nil? || device_option.empty?
@@ -89,13 +89,9 @@ module Maze
89
89
  def validate_bitbar(options, errors)
90
90
  browser = options[Option::BROWSER]
91
91
  device = options[Option::DEVICE]
92
-
93
- if ENV['BUILDKITE'] && browser
94
- errors << "--#{Option::TMS_URI} must be specified when running on Buildkite" if options[Option::TMS_URI].nil?
95
- else
96
- errors << "--#{Option::USERNAME} must be specified" if options[Option::USERNAME].nil?
97
- errors << "--#{Option::ACCESS_KEY} must be specified" if options[Option::ACCESS_KEY].nil?
98
- end
92
+
93
+ errors << "--#{Option::USERNAME} must be specified" if options[Option::USERNAME].nil?
94
+ errors << "--#{Option::ACCESS_KEY} must be specified" if options[Option::ACCESS_KEY].nil?
99
95
 
100
96
  # Device
101
97
  if browser.nil? && device.empty?
data/lib/maze/option.rb CHANGED
@@ -39,10 +39,6 @@ module Maze
39
39
  # BrowserStack-only options
40
40
  BS_LOCAL = 'bs-local'
41
41
 
42
- # BitBar-only options
43
- TMS_URI = 'tms-uri'
44
- TMS_TOKEN = 'tms-token'
45
-
46
42
  # Local-only options
47
43
  APPIUM_LOGFILE = 'appium-logfile'
48
44
  APPLE_TEAM_ID = 'apple-team-id'
@@ -58,7 +54,7 @@ module Maze
58
54
  AWS_PUBLIC_IP = 'aws-public-ip'
59
55
  ASPECTO_REPEATER_API_KEY = 'aspecto-repeater-api-key'
60
56
  BUGSNAG_REPEATER_API_KEY = 'repeater-api-key'
61
- ENABLE_BUGSNAG = 'enable-bugsnag'
62
- ENABLE_RETRIES = 'enable-retries'
57
+ BUGSNAG = 'bugsnag'
58
+ RETRIES = 'retries'
63
59
  end
64
60
  end
@@ -80,7 +80,7 @@ module Maze
80
80
  end
81
81
 
82
82
  def log(message = '')
83
- $logger.debug message
83
+ $logger.trace message
84
84
  end
85
85
  end
86
86
  end
@@ -25,8 +25,6 @@ module Maze
25
25
  # Runs the validation against the trace given
26
26
  def validate
27
27
  @success = true
28
- # Shortcut the validation if the body is empty for initial P gathering reasons
29
- return if @body.keys.eql?(['resourceSpans']) && @body['resourceSpans'].empty?
30
28
 
31
29
  regex_comparison('resourceSpans.0.scopeSpans.0.spans.0.spanId', '^[A-Fa-f0-9]{16}$')
32
30
  regex_comparison('resourceSpans.0.scopeSpans.0.spans.0.traceId', '^[A-Fa-f0-9]{32}$')
data/lib/maze/server.rb CHANGED
@@ -85,6 +85,8 @@ module Maze
85
85
  logs
86
86
  when 'metric', 'metrics'
87
87
  metrics
88
+ when 'sampling request', 'sampling requests'
89
+ sampling_requests
88
90
  when 'trace', 'traces'
89
91
  traces
90
92
  when 'upload', 'uploads'
@@ -107,14 +109,21 @@ module Maze
107
109
 
108
110
  # A list of session requests received
109
111
  #
110
- # @return [RequestList] Received error requests
112
+ # @return [RequestList] Received session requests
111
113
  def sessions
112
114
  @sessions ||= RequestList.new
113
115
  end
114
116
 
117
+ # A list of sampling requests received
118
+ #
119
+ # @return [RequestList] Received sampling requests
120
+ def sampling_requests
121
+ @sampling_requests ||= RequestList.new
122
+ end
123
+
115
124
  # A list of trace requests received
116
125
  #
117
- # @return [RequestList] Received error requests
126
+ # @return [RequestList] Received trace requests
118
127
  def traces
119
128
  @traces ||= RequestList.new
120
129
  end
@@ -195,7 +204,7 @@ module Maze
195
204
 
196
205
  # Mount a block to respond to all requests with status:200
197
206
  server.mount_proc '/' do |_request, response|
198
- $logger.debug 'Received request on server root, responding with 200'
207
+ $logger.trace 'Received request on server root, responding with 200'
199
208
  response.header['Access-Control-Allow-Origin'] = '*'
200
209
  response.body = 'Maze runner received request'
201
210
  response.status = 200
@@ -252,6 +261,7 @@ module Maze
252
261
  builds.clear
253
262
  uploads.clear
254
263
  sourcemaps.clear
264
+ sampling_requests.clear
255
265
  traces.clear
256
266
  logs.clear
257
267
  invalid_requests.clear
@@ -37,7 +37,6 @@ module Maze
37
37
  def initialize(server, request_type, schema=nil)
38
38
  super server
39
39
  @request_type = request_type
40
- @requests = Server.list_for request_type
41
40
  @schema = JSONSchemer.schema(schema) unless schema.nil?
42
41
  @aspecto_repeater = Maze::Repeaters::AspectoRepeater.new(@request_type)
43
42
  @bugsnag_repeater = Maze::Repeaters::BugsnagRepeater.new(@request_type)
@@ -88,7 +87,7 @@ module Maze
88
87
  schema_errors = @schema.validate(hash[:body])
89
88
  hash[:schema_errors] = schema_errors.to_a
90
89
  end
91
- @requests.add(hash)
90
+ add_request(hash)
92
91
 
93
92
  # For the response, delaying if configured to do so
94
93
  response_delay_ms = Server.response_delay_ms
@@ -144,10 +143,14 @@ module Maze
144
143
 
145
144
  private
146
145
 
146
+ def add_request(request)
147
+ Server.list_for(@request_type).add(request)
148
+ end
149
+
147
150
  def log_request(request)
148
- $logger.debug "#{request.request_method} request received"
149
- $logger.debug "URI: #{request.unparsed_uri}"
150
- $logger.debug "HEADERS: #{request.raw_header}"
151
+ $logger.trace "#{request.request_method} request received"
152
+ $logger.trace "URI: #{request.unparsed_uri}"
153
+ $logger.trace "HEADERS: #{request.raw_header}"
151
154
  return if request.body.nil?
152
155
 
153
156
  case request['Content-Type']
@@ -156,12 +159,12 @@ module Maze
156
159
  when %r{^multipart/form-data; boundary=([^;]+)}
157
160
  boundary = WEBrick::HTTPUtils.dequote(Regexp.last_match(1))
158
161
  body = WEBrick::HTTPUtils.parse_form_data(request.body, boundary)
159
- $logger.debug 'BODY:'
160
- LogUtil.log_hash(Logger::Severity::DEBUG, body)
162
+ $logger.trace 'BODY:'
163
+ LogUtil.log_hash(Logger::Severity::TRACE, body)
161
164
  when %r{^application/json$}
162
- $logger.debug "BODY: #{JSON.pretty_generate(JSON.parse(request.body))}"
165
+ $logger.trace "BODY: #{JSON.pretty_generate(JSON.parse(request.body))}"
163
166
  else
164
- $logger.debug "BODY: #{request.body}"
167
+ $logger.trace "BODY: #{request.body}"
165
168
  end
166
169
  end
167
170
 
@@ -183,7 +186,7 @@ module Maze
183
186
  # Both digest types are stored whatever
184
187
  sha1 = Digest::SHA1.hexdigest(request.body)
185
188
  simple = request.body.bytesize
186
- $logger.debug "DIGESTS computed: sha1=#{sha1} simple=#{simple}"
189
+ $logger.trace "DIGESTS computed: sha1=#{sha1} simple=#{simple}"
187
190
 
188
191
  # Check digests match
189
192
  case parts[0]
@@ -11,6 +11,21 @@ module Maze
11
11
 
12
12
  header['Access-Control-Expose-Headers'] = 'Bugsnag-Sampling-Probability'
13
13
  end
14
+
15
+ private
16
+
17
+ def add_request(request)
18
+ if sampling_request? request
19
+ Server.sampling_requests.add request
20
+ else
21
+ Server.traces.add request
22
+ end
23
+ end
24
+
25
+ def sampling_request?(request)
26
+ body = request[:body]
27
+ body.keys.eql?(['resourceSpans']) && body['resourceSpans'].empty?
28
+ end
14
29
  end
15
30
  end
16
31
  end
@@ -107,7 +107,7 @@ module Maze
107
107
  while (request = socket.gets) && (request.chomp.length > 0)
108
108
  key, val = request.chomp.split(': ')
109
109
  headers[key] = val
110
- $logger.debug "Received #{headers.size} headers"
110
+ $logger.trace "Received #{headers.size} headers"
111
111
  end
112
112
  headers
113
113
  end
data/lib/maze.rb CHANGED
@@ -7,7 +7,7 @@ require_relative 'maze/timers'
7
7
  # Glues the various parts of MazeRunner together that need to be accessed globally,
8
8
  # providing an alternative to the proliferation of global variables or singletons.
9
9
  module Maze
10
- VERSION = '7.33.1'
10
+ VERSION = '8.0.0'
11
11
 
12
12
  class << self
13
13
  attr_accessor :check, :driver, :internal_hooks, :mode, :start_time, :dynamic_retry, :public_address,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bugsnag-maze-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.33.1
4
+ version: 8.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Kirkland
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-22 00:00:00.000000000 Z
11
+ date: 2023-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -325,6 +325,7 @@ executables:
325
325
  - bugsnag-print-load-paths
326
326
  - download-logs
327
327
  - maze-runner
328
+ - purge-projects
328
329
  - upload-app
329
330
  extensions: []
330
331
  extra_rdoc_files: []
@@ -332,6 +333,7 @@ files:
332
333
  - bin/bugsnag-print-load-paths
333
334
  - bin/download-logs
334
335
  - bin/maze-runner
336
+ - bin/purge-projects
335
337
  - bin/upload-app
336
338
  - lib/features/scripts/await-android-emulator.sh
337
339
  - lib/features/scripts/clear-android-app-data.sh
@@ -360,6 +362,7 @@ files:
360
362
  - lib/features/steps/session_tracking_steps.rb
361
363
  - lib/features/steps/trace_steps.rb
362
364
  - lib/features/steps/value_steps.rb
365
+ - lib/features/support/cucumber_types.rb
363
366
  - lib/features/support/env.rb
364
367
  - lib/features/support/internal_hooks.rb
365
368
  - lib/maze.rb
@@ -415,7 +418,6 @@ files:
415
418
  - lib/maze/option/processor.rb
416
419
  - lib/maze/option/validator.rb
417
420
  - lib/maze/plugins/bugsnag_reporting_plugin.rb
418
- - lib/maze/plugins/cucumber_report_plugin.rb
419
421
  - lib/maze/plugins/datadog_metrics_plugin.rb
420
422
  - lib/maze/plugins/error_code_plugin.rb
421
423
  - lib/maze/plugins/global_retry_plugin.rb
@@ -1,101 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bugsnag'
4
- require 'cucumber/core/filter'
5
- require 'json'
6
-
7
- # Required to access the options
8
- module Cucumber
9
- class Configuration
10
- attr_accessor :options
11
- end
12
- end
13
-
14
- module Maze
15
- module Plugins
16
- class CucumberReportPlugin
17
-
18
- def initialize
19
- configured_data = {
20
- driver_class: Maze.driver.class,
21
- device_farm: Maze.config.farm,
22
- device: Maze.config.device,
23
- os: Maze.config.os,
24
- os_version: Maze.config.os_version
25
- }
26
- buildkite_data = {
27
- pipeline: ENV['BUILDKITE_PIPELINE_NAME'],
28
- repo: ENV['BUILDKITE_REPO'],
29
- build_url: ENV['BUILDKITE_BUILD_URL'],
30
- branch: ENV['BUILDKITE_BRANCH'],
31
- message: ENV['BUILDKITE_MESSAGE'],
32
- step: ENV['BUILDKITE_LABEL'],
33
- commit: ENV['BUILDKITE_COMMIT']
34
- }
35
- report['configuration'] = configured_data
36
- report['build'] = buildkite_data
37
- end
38
-
39
- def install_plugin(cuc_config)
40
- unless Maze.config.tms_uri && Maze.config.tms_token && ENV['BUILDKITE']
41
- $logger.info 'No test report will be delivered for this run'
42
- return
43
- end
44
- # Add installation hook
45
- cuc_config.formats << ['json', {}, json_report_stream]
46
-
47
- # Add exit hook
48
- at_exit do
49
- finish_report
50
- end
51
- end
52
-
53
- def json_report_stream
54
- @json_report_stream ||= StringIO.new
55
- end
56
-
57
- def report
58
- @report ||= {}
59
- end
60
-
61
- private
62
-
63
- def finish_report
64
- session_hash = JSON.parse(json_report_stream.string)
65
- report[:session] = session_hash
66
- output_folder = File.join(Dir.pwd, 'maze_output')
67
- filename = 'maze_report.json'
68
- filepath = File.join(output_folder, filename)
69
-
70
- begin
71
- File.open(filepath, 'w') do |file|
72
- file.puts JSON.pretty_generate(report)
73
- end
74
- rescue => e
75
- $logger.warn 'Report could not be saved locally'
76
- $logger.warn e.message
77
- end
78
-
79
- send_report
80
- end
81
-
82
- def send_report
83
- uri = URI("#{Maze.config.tms_uri}/report")
84
- request = Net::HTTP::Post.new(uri)
85
- request['Content-Type'] = 'application/json'
86
- request['Authorization'] = Maze.config.tms_token
87
- request.body = JSON.generate(report)
88
-
89
- begin
90
- http = Net::HTTP.new(uri.hostname, uri.port)
91
- http.request(request)
92
- rescue => e
93
- $logger.warn 'Report delivery attempt failed'
94
- $logger.warn e.message
95
- else
96
- $logger.info 'Cucumber report delivered to test report server'
97
- end
98
- end
99
- end
100
- end
101
- end