diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2019-07-02 19:40:21 +0200 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2019-07-03 22:27:14 +0200 |
commit | a08209ffa35a29cd84271895389b4537dee92e86 (patch) | |
tree | d30c7597f98ead2132863d955563e12fb3a431b2 /app/serializers | |
parent | 833c4b81a582c5ea067e1302ac80b4417c647d8c (diff) | |
download | gitlab-ce-a08209ffa35a29cd84271895389b4537dee92e86.tar.gz |
Limit amount of JUnit tests returned
Currently, we do not cap amount of tests returned to frontend,
thus in some extreme cases we can see a MBs of data stored in Redis.
This adds an upper limit of 100 tests per-suite.
We will continue showing the total counters correctly,
but we will limit amount of tests that will be presented.
Diffstat (limited to 'app/serializers')
-rw-r--r-- | app/serializers/test_suite_comparer_entity.rb | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/app/serializers/test_suite_comparer_entity.rb b/app/serializers/test_suite_comparer_entity.rb index 9fa3a897ebe..d402a4d5718 100644 --- a/app/serializers/test_suite_comparer_entity.rb +++ b/app/serializers/test_suite_comparer_entity.rb @@ -1,6 +1,9 @@ # frozen_string_literal: true class TestSuiteComparerEntity < Grape::Entity + DEFAULT_MAX_TESTS = 100 + DEFAULT_MIN_TESTS = 10 + expose :name expose :total_status, as: :status @@ -10,7 +13,27 @@ class TestSuiteComparerEntity < Grape::Entity expose :failed_count, as: :failed end - expose :new_failures, using: TestCaseEntity - expose :resolved_failures, using: TestCaseEntity - expose :existing_failures, using: TestCaseEntity + # rubocop: disable CodeReuse/ActiveRecord + expose :new_failures, using: TestCaseEntity do |suite| + suite.new_failures.take(max_tests) + end + + expose :existing_failures, using: TestCaseEntity do |suite| + suite.existing_failures.take( + max_tests(suite.new_failures)) + end + + expose :resolved_failures, using: TestCaseEntity do |suite| + suite.resolved_failures.take( + max_tests(suite.new_failures, suite.existing_failures)) + end + + private + + def max_tests(*used) + return Integer::MAX unless Feature.enabled?(:ci_limit_test_reports_size, default_enabled: true) + + [DEFAULT_MAX_TESTS - used.map(&:count).sum, DEFAULT_MIN_TESTS].max + end + # rubocop: enable CodeReuse/ActiveRecord end |