bugsnag-maze-runner 8.13.1 → 8.14.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8edd9312852fa9f431bf8b2ed42473a111eec241ca23a4b5993121a64b4bfddc
4
- data.tar.gz: 836546b1088e2d66727d062009748cc88ead618e9ec90e851ca87541cbad5b1e
3
+ metadata.gz: dd153df2adf96e3f771d981af1bc7daa36e48c08caed9493d52f5ed8a49e2f7b
4
+ data.tar.gz: ba2b8ffa6ab47ee37eaba88cdce0e86a8e0e28c6f79941651062c9260812bd5c
5
5
  SHA512:
6
- metadata.gz: d8574f48c04eb96a0821fef71e041b39399f9aa65e07add2745aa64aa1b66de3819369a41c88b2b9a2583df3ceb31bca4bd90ef6e086368adb1333a7b5c12ec7
7
- data.tar.gz: 8f4ed901c5e5b08cbba9c4bc7183aae1c20c0a8f769161956844f177e90c2014f8e1d829369ba2a62130c2f48c55ba86eb2265cfc8e42a5a64a9fe31c4f513a0
6
+ metadata.gz: fddd6897ee26a623f296e4c5504869926cddb9d6e557ae054286d6551f7840755b81599816a4c2c5f670cb124815361514f41f27f0f029fb1c4d1892cd7f44b8
7
+ data.tar.gz: 9323a020df074f37c128b03f932200dcbf1c81fc54eb32df7e3ea675c7b61c3e1a94203a89a26c7c425f62debd1936510fea19d94d51cd7d0af24acdba23585b
data/bin/maze-runner CHANGED
@@ -54,6 +54,7 @@ require_relative '../lib/maze/runner'
54
54
  require_relative '../lib/maze/terminating_server'
55
55
 
56
56
  require_relative '../lib/maze/servlets/base_servlet'
57
+ require_relative '../lib/maze/servlets/all_commands_servlet'
57
58
  require_relative '../lib/maze/servlets/command_servlet'
58
59
  require_relative '../lib/maze/servlets/servlet'
59
60
  require_relative '../lib/maze/servlets/log_servlet'
@@ -117,7 +117,8 @@ module Maze
117
117
  # See PLAT-11087
118
118
  appium_options = {
119
119
  'automationName' => 'XCUITest',
120
- 'shouldTerminateApp' => 'true'
120
+ 'shouldTerminateApp' => 'true',
121
+ 'autoAcceptAlerts' => 'true'
121
122
  }
122
123
  hash = {
123
124
  'platformName' => 'iOS',
@@ -50,6 +50,7 @@ module Maze
50
50
 
51
51
  def make_ios_hash(device, version)
52
52
  {
53
+ 'appium:autoAcceptAlerts' => 'true',
53
54
  'platformName' => 'ios',
54
55
  'platformVersion' => version,
55
56
  'deviceName' => device
data/lib/maze/helper.rb CHANGED
@@ -109,6 +109,7 @@ module Maze
109
109
  # Logs the given message and exits the program with a failure status
110
110
  def error_exit(message)
111
111
  $logger.error message
112
+ Bugsnag.notify(message)
112
113
  exit false
113
114
  end
114
115
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ require 'securerandom'
2
3
 
3
4
  module Maze
4
5
  # An abstraction for storing a list of requests (e.g. Errors, Sessions),
@@ -24,7 +25,11 @@ module Maze
24
25
  #
25
26
  # @param request The new request, from which a clone is made
26
27
  def add(request)
27
- @requests.append request.clone
28
+ clone = request.clone
29
+ # UUID primarily used for commands, but no harm to set on everything
30
+ clone[:uuid] = SecureRandom.uuid
31
+ clone[:run_uuid] = Maze.run_uuid
32
+ @requests.append clone
28
33
  @count += 1
29
34
  end
30
35
 
@@ -33,6 +38,11 @@ module Maze
33
38
  @requests[@current] if @requests.size > @current
34
39
  end
35
40
 
41
+ # The request at the given index
42
+ def get(index)
43
+ @requests[index] if @requests.size > index
44
+ end
45
+
36
46
  # Peek at requests yet to be processed - i.e. from current onwards. All requests are left visible in the list.
37
47
  # Returns an empty array if there are no requests outstanding.
38
48
  def remaining
data/lib/maze/server.rb CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'bugsnag'
4
4
  require 'json'
5
- require 'securerandom'
6
5
  require 'webrick'
7
6
  require_relative './logger'
8
7
  require_relative './request_list'
@@ -223,6 +222,7 @@ module Maze
223
222
  server.mount '/ndk-symbol', Servlets::Servlet, :sourcemaps
224
223
  server.mount '/proguard', Servlets::Servlet, :sourcemaps
225
224
  server.mount '/command', Servlets::CommandServlet
225
+ server.mount '/commands', Servlets::AllCommandsServlet
226
226
  server.mount '/logs', Servlets::LogServlet
227
227
  server.mount '/metrics', Servlets::Servlet, :metrics
228
228
  server.mount '/reflect', Servlets::ReflectiveServlet
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Maze
6
+ module Servlets
7
+
8
+ # Allows clients to queue up "commands", in the form of Ruby hashes, using Maze::Server.commands.add. GET
9
+ # requests made to the /command endpoint will then respond with each queued command in turn.
10
+ class AllCommandsServlet < BaseServlet
11
+ # Serves all commands held.
12
+ #
13
+ # @param request [HTTPRequest] The incoming GET request
14
+ # @param response [HTTPResponse] The response to return
15
+ def do_GET(request, response)
16
+ commands = Maze::Server.commands.all
17
+
18
+ command_json = JSON.pretty_generate(commands)
19
+ response.body = command_json
20
+ response.status = 200
21
+
22
+ response.header['Access-Control-Allow-Origin'] = '*'
23
+ end
24
+
25
+ # Logs and returns a set of valid headers for this servlet.
26
+ #
27
+ # @param request [HTTPRequest] The incoming GET request
28
+ # @param response [HTTPResponse] The response to return
29
+ def do_OPTIONS(request, response)
30
+ super
31
+
32
+ response.header['Access-Control-Allow-Methods'] = 'POST, OPTIONS'
33
+ response.status = Server.status_code('OPTIONS')
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+
@@ -8,25 +8,69 @@ module Maze
8
8
  # Allows clients to queue up "commands", in the form of Ruby hashes, using Maze::Server.commands.add. GET
9
9
  # requests made to the /command endpoint will then respond with each queued command in turn.
10
10
  class CommandServlet < BaseServlet
11
+
12
+ NOOP_COMMAND = '{"action": "noop", "message": "No commands queued"}'
13
+
11
14
  # Serves the next command, if these is one.
12
15
  #
13
- # @param _request [HTTPRequest] The incoming GET request
16
+ # @param request [HTTPRequest] The incoming GET request
14
17
  # @param response [HTTPResponse] The response to return
15
- def do_GET(_request, response)
18
+ def do_GET(request, response)
19
+
20
+ if request.query.empty?
21
+ # Non-idempotent mode - return the "current" command
22
+ commands = Maze::Server.commands
23
+
24
+ if commands.size_remaining == 0
25
+ response.body = NOOP_COMMAND
26
+ response.status = 200
27
+ else
28
+ command = commands.current
29
+ response.body = JSON.pretty_generate(command)
30
+ response.status = 200
31
+ commands.next
32
+ end
33
+ else
34
+ $logger.info "request.query = #{request.query}"
35
+
36
+
37
+ # Idempotent mode
38
+ after_uuid = request.query['after']
39
+ if after_uuid.nil?
40
+ response.body = "'after' is the only recognised query parameter"
41
+ response.status = 400
42
+ else
43
+ command_after(after_uuid, response)
44
+ end
45
+ end
46
+
16
47
  response.header['Access-Control-Allow-Origin'] = '*'
48
+ end
17
49
 
50
+ def command_after(uuid, response)
18
51
  commands = Maze::Server.commands
19
-
20
- if commands.size_remaining == 0
21
- response.body = '{"action": "noop", "message": "No commands queued"}'
22
- response.status = 200
52
+ if uuid.empty?
53
+ index = -1
54
+ else
55
+ index = commands.all.find_index {|command| command[:uuid] == uuid }
56
+ end
57
+ if index.nil?
58
+ msg = "Request invalid - there is no command with a UUID of #{uuid} to follow on from"
59
+ $logger.error msg
60
+ response.body = msg
61
+ response.status = 400
23
62
  else
24
- command = commands.current
25
- command_json = JSON.pretty_generate(command)
26
- command[:uuid] = Maze.run_uuid
27
- response.body = command_json
28
- response.status = 200
29
- commands.next
63
+ if index + 1 < commands.size_all
64
+ # Respond with the next command in the queue
65
+ command = commands.get(index + 1)
66
+ command_json = JSON.pretty_generate(command)
67
+ response.body = command_json
68
+ response.status = 200
69
+ else
70
+ # The UUID given was for the last command in the list
71
+ response.body = NOOP_COMMAND
72
+ response.status = 200
73
+ end
30
74
  end
31
75
  end
32
76
 
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 = '8.13.1'
10
+ VERSION = '8.14.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: 8.13.1
4
+ version: 8.14.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-11-20 00:00:00.000000000 Z
11
+ date: 2023-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -436,6 +436,7 @@ files:
436
436
  - lib/maze/schemas/trace_validator.rb
437
437
  - lib/maze/schemas/validator.rb
438
438
  - lib/maze/server.rb
439
+ - lib/maze/servlets/all_commands_servlet.rb
439
440
  - lib/maze/servlets/base_servlet.rb
440
441
  - lib/maze/servlets/command_servlet.rb
441
442
  - lib/maze/servlets/log_servlet.rb