inferno_core 0.0.2 → 0.0.6
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/lib/inferno/apps/web/controllers/test_runs/create.rb +30 -10
- data/lib/inferno/apps/web/controllers/test_runs/show.rb +10 -0
- data/lib/inferno/apps/web/controllers/test_sessions/create.rb +1 -0
- data/lib/inferno/apps/web/controllers/test_sessions/last_test_run.rb +22 -0
- data/lib/inferno/apps/web/controllers/test_sessions/results/index.rb +6 -1
- data/lib/inferno/apps/web/controllers/test_sessions/session_data/index.rb +21 -0
- data/lib/inferno/apps/web/router.rb +15 -0
- data/lib/inferno/apps/web/serializers/hash_value_extractor.rb +11 -0
- data/lib/inferno/apps/web/serializers/request.rb +1 -0
- data/lib/inferno/apps/web/serializers/result.rb +8 -0
- data/lib/inferno/apps/web/serializers/session_data.rb +10 -0
- data/lib/inferno/apps/web/serializers/test.rb +3 -6
- data/lib/inferno/apps/web/serializers/test_group.rb +5 -8
- data/lib/inferno/apps/web/serializers/test_run.rb +1 -0
- data/lib/inferno/apps/web/serializers/test_session.rb +1 -1
- data/lib/inferno/apps/web/serializers/test_suite.rb +1 -0
- data/lib/inferno/config/application.rb +5 -2
- data/lib/inferno/config/boot/db.rb +10 -1
- data/lib/inferno/config/boot/sidekiq.rb +11 -0
- data/lib/inferno/config/boot/suites.rb +4 -6
- data/lib/inferno/config/boot.rb +2 -0
- data/lib/inferno/db/migrations/001_create_initial_structure.rb +0 -21
- data/lib/inferno/db/migrations/002_add_wait_support.rb +7 -0
- data/lib/inferno/db/migrations/003_update_session_data.rb +18 -0
- data/lib/inferno/db/migrations/004_add_request_results_table.rb +9 -0
- data/lib/inferno/db/migrations/005_add_updated_at_index_to_results.rb +5 -0
- data/lib/inferno/db/schema.rb +154 -0
- data/lib/inferno/dsl/assertions.rb +20 -0
- data/lib/inferno/dsl/configurable.rb +126 -0
- data/lib/inferno/dsl/fhir_client.rb +4 -2
- data/lib/inferno/dsl/fhir_client_builder.rb +16 -0
- data/lib/inferno/dsl/http_client.rb +10 -8
- data/lib/inferno/dsl/request_storage.rb +30 -9
- data/lib/inferno/dsl/results.rb +49 -0
- data/lib/inferno/dsl/resume_test_route.rb +89 -0
- data/lib/inferno/dsl/runnable.rb +153 -16
- data/lib/inferno/dsl.rb +1 -3
- data/lib/inferno/entities/header.rb +7 -7
- data/lib/inferno/entities/message.rb +8 -6
- data/lib/inferno/entities/request.rb +42 -16
- data/lib/inferno/entities/result.rb +34 -18
- data/lib/inferno/entities/session_data.rb +33 -0
- data/lib/inferno/entities/test.rb +35 -8
- data/lib/inferno/entities/test_group.rb +8 -0
- data/lib/inferno/entities/test_run.rb +13 -6
- data/lib/inferno/entities/test_session.rb +8 -8
- data/lib/inferno/entities.rb +1 -1
- data/lib/inferno/exceptions.rb +24 -0
- data/lib/inferno/jobs/execute_test_run.rb +14 -0
- data/lib/inferno/jobs/resume_test_run.rb +14 -0
- data/lib/inferno/jobs.rb +16 -0
- data/lib/inferno/public/bundle.js +1 -1
- data/lib/inferno/repositories/repository.rb +13 -0
- data/lib/inferno/repositories/requests.rb +5 -4
- data/lib/inferno/repositories/results.rb +151 -3
- data/lib/inferno/repositories/session_data.rb +47 -0
- data/lib/inferno/repositories/test_runs.rb +81 -0
- data/lib/inferno/test_runner.rb +125 -31
- data/lib/inferno/utils/markdown_formatter.rb +15 -0
- data/lib/inferno/utils/middleware/request_logger.rb +16 -3
- data/lib/inferno/version.rb +1 -1
- data/lib/inferno.rb +4 -0
- data/spec/factories/header.rb +19 -0
- data/spec/factories/message.rb +17 -0
- data/spec/factories/request.rb +42 -0
- data/spec/factories/result.rb +45 -0
- data/spec/factories/test_run.rb +24 -0
- data/spec/factories/test_session.rb +11 -0
- data/spec/fixtures/basic_test_group.rb +9 -0
- data/spec/fixtures/basic_test_suite.rb +8 -0
- metadata +57 -5
- data/lib/inferno/dsl/fhir_manipulation.rb +0 -25
- data/lib/inferno/entities/test_input.rb +0 -20
data/lib/inferno/dsl.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require_relative 'dsl/assertions'
|
2
2
|
require_relative 'dsl/fhir_client'
|
3
|
-
require_relative 'dsl/fhir_manipulation'
|
4
3
|
require_relative 'dsl/fhir_validation'
|
5
4
|
require_relative 'dsl/http_client'
|
6
5
|
require_relative 'dsl/results'
|
@@ -14,8 +13,7 @@ module Inferno
|
|
14
13
|
FHIRClient,
|
15
14
|
HTTPClient,
|
16
15
|
Results,
|
17
|
-
FHIRValidation
|
18
|
-
FHIRManipulation
|
16
|
+
FHIRValidation
|
19
17
|
].freeze
|
20
18
|
|
21
19
|
EXTENDABLE_DSL_MODULES = [
|
@@ -2,13 +2,13 @@ module Inferno
|
|
2
2
|
module Entities
|
3
3
|
# A `Header` represents an HTTP request/response header
|
4
4
|
#
|
5
|
-
# @
|
6
|
-
# @
|
7
|
-
# @
|
8
|
-
# @
|
9
|
-
# @
|
10
|
-
# @
|
11
|
-
# @
|
5
|
+
# @attr_accessor [String] id of the header
|
6
|
+
# @attr_accessor [String] request_id index of the HTTP request
|
7
|
+
# @attr_accessor [String] name header name
|
8
|
+
# @attr_accessor [String] value header value
|
9
|
+
# @attr_accessor [String] type request/response
|
10
|
+
# @attr_accessor [Time] created_at
|
11
|
+
# @attr_accessor [Time] updated_at
|
12
12
|
class Header < Entity
|
13
13
|
ATTRIBUTES = [:id, :request_id, :name, :type, :value, :created_at, :updated_at].freeze
|
14
14
|
|
@@ -2,12 +2,14 @@ module Inferno
|
|
2
2
|
module Entities
|
3
3
|
# A `Message` represents a message generated during a test.
|
4
4
|
#
|
5
|
-
# @
|
6
|
-
# @
|
7
|
-
# @
|
8
|
-
# @
|
9
|
-
# @
|
10
|
-
# @
|
5
|
+
# @attr_accessor [String] id of the message
|
6
|
+
# @attr_accessor [String] index of the message. Used for ordering.
|
7
|
+
# @attr_accessor [String] result_id
|
8
|
+
# @attr_accessor [Inferno::Entities::Result] result
|
9
|
+
# @attr_accessor [String] type
|
10
|
+
# @attr_accessor [String] message
|
11
|
+
# @attr_accessor [Time] created_at
|
12
|
+
# @attr_accessor [Time] updated_at
|
11
13
|
class Message < Entity
|
12
14
|
ATTRIBUTES = [:id, :index, :message, :result_id, :result, :type, :created_at, :updated_at].freeze
|
13
15
|
TYPES = ['error', 'warning', 'info'].freeze
|
@@ -2,21 +2,21 @@ module Inferno
|
|
2
2
|
module Entities
|
3
3
|
# A `Request` represents a request and response issued during a test.
|
4
4
|
#
|
5
|
-
# @
|
6
|
-
# @
|
7
|
-
# @
|
8
|
-
# @
|
9
|
-
# @
|
10
|
-
# @
|
11
|
-
# @
|
12
|
-
# @
|
13
|
-
# @
|
14
|
-
# @
|
5
|
+
# @attr_accessor [String] id of the request
|
6
|
+
# @attr_accessor [String] index of the request. Used for ordering.
|
7
|
+
# @attr_accessor [String] verb http verb
|
8
|
+
# @attr_accessor [String] url request url
|
9
|
+
# @attr_accessor [String] direction incoming/outgoing
|
10
|
+
# @attr_accessor [String] name name for the request
|
11
|
+
# @attr_accessor [String] status http response status code
|
12
|
+
# @attr_accessor [String] request_body body of the http request
|
13
|
+
# @attr_accessor [String] response_body body of the http response
|
14
|
+
# @attr_accessor [Array<Inferno::Entities::Header>] headers http
|
15
15
|
# request/response headers
|
16
|
-
# @
|
17
|
-
# @
|
18
|
-
# @
|
19
|
-
# @
|
16
|
+
# @attr_accessor [String] result_id id of the result for this request
|
17
|
+
# @attr_accessor [String] test_session_id id of the test session for this request
|
18
|
+
# @attr_accessor [Time] created_at creation timestamp
|
19
|
+
# @attr_accessor [Time] updated_at update timestamp
|
20
20
|
class Request < Entity
|
21
21
|
ATTRIBUTES = [
|
22
22
|
:id, :index, :verb, :url, :direction, :name, :status,
|
@@ -36,12 +36,17 @@ module Inferno
|
|
36
36
|
@headers = params[:headers]&.map { |header| header.is_a?(Hash) ? Header.new(header) : header } || []
|
37
37
|
end
|
38
38
|
|
39
|
+
# @return [Hash<String, String>]
|
40
|
+
def query_parameters
|
41
|
+
Addressable::URI.parse(url).query_values || {}
|
42
|
+
end
|
43
|
+
|
39
44
|
# Find a response header
|
40
45
|
#
|
41
46
|
# @param name [String] the header name
|
42
47
|
# @return [Inferno::Entities::RequestHeader, nil]
|
43
48
|
def response_header(name)
|
44
|
-
response_headers.find { |header| header.name
|
49
|
+
response_headers.find { |header| header.name.casecmp(name).zero? }
|
45
50
|
end
|
46
51
|
|
47
52
|
# Find a request header
|
@@ -49,7 +54,7 @@ module Inferno
|
|
49
54
|
# @param name [String] the header name
|
50
55
|
# @return [Inferno::Entities::RequestHeader, nil]
|
51
56
|
def request_header(name)
|
52
|
-
request_headers.find { |header| header.name
|
57
|
+
request_headers.find { |header| header.name.casecmp(name).zero? }
|
53
58
|
end
|
54
59
|
|
55
60
|
# All of the request headers
|
@@ -117,6 +122,27 @@ module Inferno
|
|
117
122
|
end
|
118
123
|
|
119
124
|
class << self
|
125
|
+
# @api private
|
126
|
+
def from_rack_env(env, name: nil)
|
127
|
+
rack_request = env['router.request'].rack_request
|
128
|
+
url = "#{rack_request.base_url}#{rack_request.path}"
|
129
|
+
url += "?#{rack_request.query_string}" if rack_request.query_string.present?
|
130
|
+
request_headers =
|
131
|
+
env
|
132
|
+
.select { |key, _| key.start_with? 'HTTP_' }
|
133
|
+
.transform_keys { |key| key.delete_prefix('HTTP_').tr('_', '-').downcase }
|
134
|
+
.map { |header_name, value| Header.new(name: header_name, value: value, type: 'request') }
|
135
|
+
|
136
|
+
new(
|
137
|
+
verb: rack_request.request_method.downcase,
|
138
|
+
url: url,
|
139
|
+
direction: 'incoming',
|
140
|
+
name: name,
|
141
|
+
request_body: rack_request.body.string,
|
142
|
+
headers: request_headers
|
143
|
+
)
|
144
|
+
end
|
145
|
+
|
120
146
|
# @api private
|
121
147
|
def from_http_response(response, test_session_id:, direction: 'outgoing', name: nil)
|
122
148
|
request_headers =
|
@@ -3,32 +3,42 @@ module Inferno
|
|
3
3
|
# A `Result` represents the result of running a `Test`, `TestGroup`,
|
4
4
|
# or `TestSuite`
|
5
5
|
#
|
6
|
-
# @
|
7
|
-
# @
|
8
|
-
# @
|
9
|
-
# @
|
10
|
-
# (`Test`, `TestGroup`, or `TestSuite`)
|
11
|
-
# @
|
12
|
-
#
|
13
|
-
# @
|
14
|
-
# @
|
15
|
-
#
|
16
|
-
# @
|
17
|
-
#
|
6
|
+
# @attr_accessor [String] id id of the session
|
7
|
+
# @attr_accessor [Time] created_at creation timestamp
|
8
|
+
# @attr_accessor [Time] updated_at update timestamp
|
9
|
+
# @attr_accessor [String] reference_type type of entity this result belongs
|
10
|
+
# to (`Test`, `TestGroup`, or `TestSuite`)
|
11
|
+
# @attr_accessor [String, nil] test_id id of the `Test` this result belongs
|
12
|
+
# to
|
13
|
+
# @attr_accessor [Test, nil] test the `Test` this result belongs to
|
14
|
+
# @attr_accessor [String, nil] test_group_id id of the `TestGroup` this
|
15
|
+
# result belongs to
|
16
|
+
# @attr_accessor [TestGroup, nil] test_group the `TestGroup` this result
|
17
|
+
# belongs to
|
18
|
+
# @attr_accessor [String, nil] test_suite_id id of the `TestSuite` this
|
19
|
+
# result belongs to
|
20
|
+
# @attr_accessor [TestSuite, nil] test_suite the `TestSuite` this result
|
21
|
+
# belongs to
|
22
|
+
# @attr_accessor [String] result the result (`pass`, `fail`, `skip`, `omit`,
|
18
23
|
# `error`, `running`, `wait`, `cancel`)
|
19
|
-
# @
|
20
|
-
# @
|
21
|
-
# @
|
24
|
+
# @attr_accessor [String] result_message summary message for this result
|
25
|
+
# @attr_accessor [String] test_run_id the `TestRun` this result belongs to
|
26
|
+
# @attr_accessor [String] test_session_id the `TestSession` this result
|
22
27
|
# belongs to
|
23
|
-
# @
|
28
|
+
# @attr_accessor [Array<Inferno::Entities::Message>] messages additional
|
24
29
|
# messages for this result
|
25
|
-
# @
|
30
|
+
# @attr_accessor [Array<Inferno::Entities::Request>] request_summaries
|
26
31
|
# summaries of the requests associated with this result
|
32
|
+
# @attr_accessor [String] input_json JSON string of the inputs used for this
|
33
|
+
# result
|
34
|
+
# @attr_accessor [String] output_json JSON string of the outputs created by
|
35
|
+
# this result
|
27
36
|
class Result < Entity
|
28
37
|
ATTRIBUTES = [
|
29
38
|
:id, :created_at, :updated_at, :test_id, :test, :test_group_id,
|
30
39
|
:test_group, :test_suite_id, :test_suite, :test_run_id,
|
31
|
-
:test_session_id, :result, :result_message, :messages, :requests
|
40
|
+
:test_session_id, :result, :result_message, :messages, :requests,
|
41
|
+
:input_json, :output_json
|
32
42
|
].freeze
|
33
43
|
RESULT_OPTIONS = ['cancel', 'wait', 'running', 'error', 'fail', 'skip', 'omit', 'pass'].freeze
|
34
44
|
|
@@ -41,9 +51,15 @@ module Inferno
|
|
41
51
|
@requests = (params[:requests] || []).map { |request| Request.new(request) }
|
42
52
|
end
|
43
53
|
|
54
|
+
# @return [Inferno::Entities::Test, Inferno::Entities::TestGroup, Inferno::Entities::TestSuite]
|
44
55
|
def runnable
|
45
56
|
test || test_group || test_suite
|
46
57
|
end
|
58
|
+
|
59
|
+
# @return [Boolean]
|
60
|
+
def waiting?
|
61
|
+
result == 'wait'
|
62
|
+
end
|
47
63
|
end
|
48
64
|
end
|
49
65
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Inferno
|
2
|
+
module Entities
|
3
|
+
# `SessionData` represents a piece of saved state for a `TestSession`.
|
4
|
+
# These are used to store test inputs and outputs.
|
5
|
+
#
|
6
|
+
# @attr_accessor [String] id of the test input
|
7
|
+
# @attr_accessor [String] name
|
8
|
+
# @attr_accessor [String] value
|
9
|
+
# @attr_accessor [String] test_session_id
|
10
|
+
# @attr_accessor [Time] created_at
|
11
|
+
# @attr_accessor [Time] updated_at
|
12
|
+
class SessionData < Entity
|
13
|
+
ATTRIBUTES = [:id, :name, :value, :test_session_id, :created_at, :updated_at].freeze
|
14
|
+
|
15
|
+
include Inferno::Entities::Attributes
|
16
|
+
|
17
|
+
def initialize(params)
|
18
|
+
super(params, ATTRIBUTES)
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_hash
|
22
|
+
{
|
23
|
+
id: id,
|
24
|
+
name: name,
|
25
|
+
value: value,
|
26
|
+
test_session_id: test_session_id,
|
27
|
+
created_at: created_at,
|
28
|
+
updated_at: updated_at
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,19 +1,23 @@
|
|
1
1
|
require_relative '../dsl'
|
2
2
|
require_relative '../repositories/tests'
|
3
|
+
require_relative '../utils/markdown_formatter'
|
4
|
+
require 'pry'
|
3
5
|
|
4
6
|
module Inferno
|
5
7
|
module Entities
|
6
8
|
class Test
|
7
9
|
extend Forwardable
|
8
10
|
include DSL
|
11
|
+
include Inferno::Utils::MarkdownFormatter
|
9
12
|
|
10
13
|
def_delegators 'self.class', :title, :id, :block, :inputs, :outputs
|
11
14
|
|
12
15
|
attr_accessor :result_message
|
13
|
-
attr_reader :
|
16
|
+
attr_reader :test_session_id, :scratch
|
14
17
|
|
15
18
|
def initialize(**params)
|
16
|
-
|
19
|
+
params[:inputs]&.each { |key, value| instance_variable_set("@#{key}", value) }
|
20
|
+
@scratch = params[:scratch]
|
17
21
|
@test_session_id = params[:test_session_id]
|
18
22
|
end
|
19
23
|
|
@@ -22,7 +26,7 @@ module Inferno
|
|
22
26
|
end
|
23
27
|
|
24
28
|
def add_message(type, message)
|
25
|
-
messages << { type: type.to_s, message: message }
|
29
|
+
messages << { type: type.to_s, message: format_markdown(message) }
|
26
30
|
end
|
27
31
|
|
28
32
|
# Set output values. Once set, these values will be available to any
|
@@ -33,11 +37,21 @@ module Inferno
|
|
33
37
|
# @example
|
34
38
|
# output(patient_id: '5', bearer_token: 'ABC')
|
35
39
|
def output(outputs)
|
40
|
+
# TODO: update to track outputs that need to be updated
|
36
41
|
outputs.each do |key, value|
|
37
42
|
send("#{key}=", value)
|
43
|
+
outputs_to_persist[key] = value
|
38
44
|
end
|
39
45
|
end
|
40
46
|
|
47
|
+
# @api private
|
48
|
+
# A hash containing outputs that have been set during execution and need
|
49
|
+
# to be persisted. A test may not always update all outputs, so this is
|
50
|
+
# used to prevent overwriting an output with nil when it wasn't updated.
|
51
|
+
def outputs_to_persist
|
52
|
+
@outputs_to_persist ||= {}
|
53
|
+
end
|
54
|
+
|
41
55
|
# Add an informational message to the results of a test. If passed a
|
42
56
|
# block, a failed assertion will become an info message and test execution
|
43
57
|
# will continue.
|
@@ -102,15 +116,24 @@ module Inferno
|
|
102
116
|
class << self
|
103
117
|
# Define inputs for this Test
|
104
118
|
#
|
105
|
-
# @param
|
119
|
+
# @param name [Symbol] name of the input
|
120
|
+
# @param other_names [Symbol] array of symbols if specifying multiple inputs
|
121
|
+
# @param input_definition [Hash] options for input such as type, description, or title
|
122
|
+
# @option input_definition [String] :title Human readable title for input
|
123
|
+
# @option input_definition [String] :description Description for the input
|
124
|
+
# @option input_definition [String] :type 'text' | 'textarea'
|
106
125
|
# @return [void]
|
107
126
|
# @example
|
108
|
-
# input :
|
109
|
-
|
127
|
+
# input :patientid, title: 'Patient ID', description: 'The ID of the patient being searched for'
|
128
|
+
# @example
|
129
|
+
# input :textarea, title: 'Textarea Input Example', type: 'textarea'
|
130
|
+
def input(name, *other_names, **input_definition)
|
110
131
|
super
|
111
132
|
|
112
|
-
|
113
|
-
attr_reader input
|
133
|
+
if other_names.present?
|
134
|
+
[name, *other_names].each { |input| attr_reader input }
|
135
|
+
else
|
136
|
+
attr_reader name
|
114
137
|
end
|
115
138
|
end
|
116
139
|
|
@@ -153,6 +176,10 @@ module Inferno
|
|
153
176
|
}
|
154
177
|
end
|
155
178
|
|
179
|
+
def test_count
|
180
|
+
1
|
181
|
+
end
|
182
|
+
|
156
183
|
def method_missing(name, *args, &block)
|
157
184
|
parent_instance = parent&.new
|
158
185
|
if parent_instance.respond_to?(name)
|
@@ -2,13 +2,14 @@ module Inferno
|
|
2
2
|
module Entities
|
3
3
|
# A `TestRun` represents a request to execute an executable set of tests.
|
4
4
|
#
|
5
|
-
# @
|
6
|
-
# @
|
7
|
-
# @
|
8
|
-
# @
|
9
|
-
# @
|
10
|
-
# @
|
5
|
+
# @attr_accessor [String] id of the test input
|
6
|
+
# @attr_accessor [String] test_session_id
|
7
|
+
# @attr_accessor [String] status
|
8
|
+
# @attr_accessor [String] test_suite_id
|
9
|
+
# @attr_accessor [String] test_group_id
|
10
|
+
# @attr_accessor [String] test_id
|
11
11
|
class TestRun < Entity
|
12
|
+
STATUS_OPTIONS = ['queued', 'running', 'waiting', 'done'].freeze
|
12
13
|
ATTRIBUTES = [
|
13
14
|
:id,
|
14
15
|
:test_session_id,
|
@@ -21,6 +22,8 @@ module Inferno
|
|
21
22
|
:test_suite,
|
22
23
|
:inputs,
|
23
24
|
:results,
|
25
|
+
:identifier,
|
26
|
+
:wait_timeout,
|
24
27
|
:created_at,
|
25
28
|
:updated_at
|
26
29
|
].freeze
|
@@ -47,6 +50,10 @@ module Inferno
|
|
47
50
|
super.merge(test_session: test_session).compact
|
48
51
|
end
|
49
52
|
|
53
|
+
def test_count
|
54
|
+
@test_count ||= runnable.test_count
|
55
|
+
end
|
56
|
+
|
50
57
|
private
|
51
58
|
|
52
59
|
def load_runnable
|
@@ -2,19 +2,19 @@ module Inferno
|
|
2
2
|
module Entities
|
3
3
|
# A `TestSession` represents an individual testing session.
|
4
4
|
#
|
5
|
-
# @
|
6
|
-
# @
|
7
|
-
# @
|
8
|
-
# @
|
5
|
+
# @attr_accessor [String] id id of the session
|
6
|
+
# @attr_accessor [Time] created_at creation timestamp
|
7
|
+
# @attr_accessor [Time] updated_at update timestamp
|
8
|
+
# @attr_accessor [String] test_suite_id id of the `TestSuite` being run in
|
9
9
|
# this session
|
10
|
-
# @
|
10
|
+
# @attr_accessor [Inferno::Entities::TestSuite] test_suite the `TestSuite` being run in
|
11
11
|
# this session
|
12
|
-
# @
|
12
|
+
# @attr_accessor [Array<Inferno::Entities::TestRun>] test_runs the `TestRuns`
|
13
13
|
# associated with this session
|
14
|
-
# @
|
14
|
+
# @attr_accessor [Array<Inferno::Entities::TestResult>] results the
|
15
15
|
# `TestResults` associated with this session
|
16
16
|
class TestSession < Entity
|
17
|
-
ATTRIBUTES = [:id, :created_at, :updated_at, :test_suite_id, :test_suite, :test_runs, :
|
17
|
+
ATTRIBUTES = [:id, :created_at, :updated_at, :test_suite_id, :test_suite, :test_runs, :results].freeze
|
18
18
|
|
19
19
|
include Inferno::Entities::Attributes
|
20
20
|
|
data/lib/inferno/entities.rb
CHANGED
@@ -4,9 +4,9 @@ require_relative 'entities/header'
|
|
4
4
|
require_relative 'entities/message'
|
5
5
|
require_relative 'entities/request'
|
6
6
|
require_relative 'entities/result'
|
7
|
+
require_relative 'entities/session_data'
|
7
8
|
require_relative 'entities/test'
|
8
9
|
require_relative 'entities/test_group'
|
9
|
-
require_relative 'entities/test_input'
|
10
10
|
require_relative 'entities/test_run'
|
11
11
|
require_relative 'entities/test_session'
|
12
12
|
require_relative 'entities/test_suite'
|
data/lib/inferno/exceptions.rb
CHANGED
@@ -27,6 +27,18 @@ module Inferno
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
class WaitException < TestResultException
|
31
|
+
def result
|
32
|
+
'wait'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class CancelException < TestResultException
|
37
|
+
def result
|
38
|
+
'cancel'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
30
42
|
class ParentNotLoadedException < RuntimeError
|
31
43
|
def initialize(klass, id)
|
32
44
|
super("No #{klass.name.demodulize} found with id '#{id}'")
|
@@ -38,5 +50,17 @@ module Inferno
|
|
38
50
|
super("No '#{validator_name}' validator found")
|
39
51
|
end
|
40
52
|
end
|
53
|
+
|
54
|
+
class RequiredInputsNotFound < RuntimeError
|
55
|
+
def initialize(missing_inputs)
|
56
|
+
super("Missing the following required inputs: #{missing_inputs.join(', ')}")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class NotUserRunnableException < RuntimeError
|
61
|
+
def initialize
|
62
|
+
super('The chosen runnable must be run as part of a group')
|
63
|
+
end
|
64
|
+
end
|
41
65
|
end
|
42
66
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Inferno
|
2
|
+
module Jobs
|
3
|
+
class ExecuteTestRun
|
4
|
+
include Sidekiq::Worker
|
5
|
+
|
6
|
+
def perform(test_run_id)
|
7
|
+
test_run = Inferno::Repositories::TestRuns.new.find(test_run_id)
|
8
|
+
test_session = Inferno::Repositories::TestSessions.new.find(test_run.test_session_id)
|
9
|
+
|
10
|
+
TestRunner.new(test_session: test_session, test_run: test_run).start
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Inferno
|
2
|
+
module Jobs
|
3
|
+
class ResumeTestRun
|
4
|
+
include Sidekiq::Worker
|
5
|
+
|
6
|
+
def perform(test_run_id)
|
7
|
+
test_run = Inferno::Repositories::TestRuns.new.find(test_run_id)
|
8
|
+
test_session = Inferno::Repositories::TestSessions.new.find(test_run.test_session_id)
|
9
|
+
|
10
|
+
TestRunner.new(test_session: test_session, test_run: test_run, resume: true).start
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/inferno/jobs.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'sidekiq'
|
2
|
+
|
3
|
+
require_relative 'jobs/execute_test_run'
|
4
|
+
require_relative 'jobs/resume_test_run'
|
5
|
+
|
6
|
+
module Inferno
|
7
|
+
module Jobs
|
8
|
+
def self.perform(job_klass, *params)
|
9
|
+
if Application['async_jobs']
|
10
|
+
job_klass.perform_async(*params)
|
11
|
+
else
|
12
|
+
job_klass.new.perform(*params)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|