Commit b1d99fbb authored by mfluharty's avatar mfluharty

Mark xUnit test errors as errors, not failures

Give STATUS_ERROR instead of STATUS_FAILED
Add error_count and lists of errors to test report/suite comparers
parent 26f6f719
......@@ -7,6 +7,7 @@ class TestReportsComparerEntity < Grape::Entity
expose :total_count, as: :total
expose :resolved_count, as: :resolved
expose :failed_count, as: :failed
expose :error_count, as: :errored
end
expose :suite_comparers, as: :suites, using: TestSuiteComparerEntity
......
......@@ -11,6 +11,7 @@ class TestSuiteComparerEntity < Grape::Entity
expose :total_count, as: :total
expose :resolved_count, as: :resolved
expose :failed_count, as: :failed
expose :error_count, as: :errored
end
# rubocop: disable CodeReuse/ActiveRecord
......@@ -28,6 +29,20 @@ class TestSuiteComparerEntity < Grape::Entity
max_tests(suite.new_failures, suite.existing_failures))
end
expose :new_errors, using: TestCaseEntity do |suite|
suite.new_errors.take(max_tests)
end
expose :existing_errors, using: TestCaseEntity do |suite|
suite.existing_errors.take(
max_tests(suite.new_errors))
end
expose :resolved_errors, using: TestCaseEntity do |suite|
suite.resolved_errors.take(
max_tests(suite.new_errors, suite.existing_errors))
end
private
def max_tests(*used)
......
......@@ -50,10 +50,7 @@ module Gitlab
status = ::Gitlab::Ci::Reports::TestCase::STATUS_FAILED
system_output = data['failure']
elsif data['error']
# For now, as an MVC, we are grouping error test cases together
# with failed ones. But we will improve this further on
# https://gitlab.com/gitlab-org/gitlab/issues/32046.
status = ::Gitlab::Ci::Reports::TestCase::STATUS_FAILED
status = ::Gitlab::Ci::Reports::TestCase::STATUS_ERROR
system_output = data['error']
else
status = ::Gitlab::Ci::Reports::TestCase::STATUS_SUCCESS
......
......@@ -29,7 +29,7 @@ module Gitlab
end
end
%w(total_count resolved_count failed_count).each do |method|
%w(total_count resolved_count failed_count error_count).each do |method|
define_method(method) do
# rubocop: disable CodeReuse/ActiveRecord
suite_comparers.sum { |suite| suite.public_send(method) } # rubocop:disable GitlabSecurity/PublicSend
......
......@@ -38,6 +38,30 @@ module Gitlab
end
end
def new_errors
strong_memoize(:new_errors) do
head_suite.error.reject do |key, _|
base_suite.error.include?(key)
end.values
end
end
def existing_errors
strong_memoize(:existing_errors) do
head_suite.error.select do |key, _|
base_suite.error.include?(key)
end.values
end
end
def resolved_errors
strong_memoize(:resolved_errors) do
head_suite.success.select do |key, _|
base_suite.error.include?(key)
end.values
end
end
def total_count
head_suite.total_count
end
......@@ -47,12 +71,16 @@ module Gitlab
end
def resolved_count
resolved_failures.count
resolved_failures.count + resolved_errors.count
end
def failed_count
new_failures.count + existing_failures.count
end
def error_count
new_errors.count + existing_errors.count
end
end
end
end
......
......@@ -12,11 +12,13 @@
"properties": {
"total": { "type": "integer" },
"resolved": { "type": "integer" },
"errored": { "type": "integer" },
"failed": { "type": "integer" }
},
"required": [
"total",
"resolved",
"errored",
"failed"
]
},
......
......@@ -16,17 +16,17 @@
"properties": {
"total": { "type": "integer" },
"resolved": { "type": "integer" },
"errored": { "type": "integer" },
"failed": { "type": "integer" }
},
"required": [
"total",
"resolved",
"failed"
]
"required": ["total", "resolved", "errored", "failed"]
},
"new_failures": { "type": "array", "items": { "$ref": "test_case.json" } },
"resolved_failures": { "type": "array", "items": { "$ref": "test_case.json" } },
"existing_failures": { "type": "array", "items": { "$ref": "test_case.json" } }
"existing_failures": { "type": "array", "items": { "$ref": "test_case.json" } },
"new_errors": { "type": "array", "items": { "$ref": "test_case.json" } },
"resolved_errors": { "type": "array", "items": { "$ref": "test_case.json" } },
"existing_errors": { "type": "array", "items": { "$ref": "test_case.json" } }
},
"additionalProperties": false
}
......@@ -99,7 +99,7 @@ describe Gitlab::Ci::Parsers::Test::Junit do
let(:testcase_content) { '<error>Some error</error>' }
it_behaves_like '<testcase> XML parser',
::Gitlab::Ci::Reports::TestCase::STATUS_FAILED,
::Gitlab::Ci::Reports::TestCase::STATUS_ERROR,
'Some error'
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment