qa_server 7.5.1 → 7.9.0
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/.rubocop_fixme.yml +3 -2
- data/.travis.yml +1 -1
- data/CHANGELOG.md +28 -0
- data/app/assets/stylesheets/qa_server/_check-status.scss +4 -0
- data/app/assets/stylesheets/qa_server/_monitor-status.scss +45 -0
- data/app/cache_processors/concerns/qa_server/cache_keys.rb +1 -0
- data/app/cache_processors/qa_server/scenario_history_cache.rb +19 -1
- data/app/controllers/qa_server/monitor_status_controller.rb +39 -9
- data/app/models/qa_server/scenario_run_history.rb +12 -3
- data/app/models/qa_server/search_scenario.rb +6 -0
- data/app/presenters/qa_server/check_status_presenter.rb +1 -1
- data/app/presenters/qa_server/monitor_status/current_status_presenter.rb +9 -8
- data/app/presenters/qa_server/monitor_status/history_presenter.rb +55 -4
- data/app/presenters/qa_server/monitor_status/history_up_down_presenter.rb +58 -0
- data/app/presenters/qa_server/monitor_status_presenter.rb +7 -2
- data/app/services/qa_server/history_up_down_service.rb +103 -0
- data/app/services/qa_server/time_service.rb +6 -0
- data/app/views/qa_server/check_status/index.html.erb +7 -6
- data/app/views/qa_server/monitor_status/_test_summary.html.erb +1 -1
- data/app/views/qa_server/monitor_status/_test_up_down_connection_history.html.erb +30 -0
- data/app/views/qa_server/monitor_status/index.html.erb +2 -1
- data/config/locales/qa_server.en.yml +8 -7
- data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_tgn_ld4l_cache.json +24 -14
- data/lib/generators/qa_server/templates/config/authorities/linked_data/getty_ulan_ld4l_cache.json +104 -8
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo2_ld4l_cache.json +4 -4
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo3_ld4l_cache.json +4 -4
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locnames_rwo_ld4l_cache.json +4 -4
- data/lib/generators/qa_server/templates/config/authorities/linked_data/locvocabs_ld4l_cache.json +1 -1
- data/lib/generators/qa_server/templates/config/authorities/linked_data/mesh_nlm_ld4l_cache.json +1 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/oclcfast_direct.json +4 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/oclcfast_ld4l_cache.json +1 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/cerl_ld4l_cache_validation.yml +3 -3
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/geonames_ld4l_cache_validation.yml +2 -5
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_aat_ld4l_cache_validation.yml +0 -3
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_tgn_ld4l_cache_validation.yml +3 -7
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/getty_ulan_ld4l_cache_validation.yml +5 -5
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locdemographics_ld4l_cache_validation.yml +0 -4
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locgenres_ld4l_cache_validation.yml +0 -9
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_ld4l_cache_validation.yml +1 -7
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo2_ld4l_cache_validation.yml +78 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo3_ld4l_cache_validation.yml +73 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locnames_rwo_ld4l_cache_validation.yml +11 -11
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locsubjects_ld4l_cache_validation.yml +1 -3
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/locvocabs_ld4l_cache_validation.yml +246 -0
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/mesh_nlm_ld4l_cache_validation.yml +8 -5
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/oclcfast_direct_validation.yml +13 -7
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/oclcfast_ld4l_cache_validation.yml +19 -3
- data/lib/generators/qa_server/templates/config/authorities/linked_data/scenarios/rda_registry_ld4l_cache_validation.yml +0 -3
- data/lib/generators/qa_server/templates/config/initializers/qa_server.rb +8 -0
- data/lib/qa_server/configuration.rb +14 -0
- data/lib/qa_server/version.rb +1 -1
- data/qa_server.gemspec +5 -5
- data/spec/feature/accuracy_spec.rb +1 -1
- data/spec/i18n_spec.rb +0 -1
- data/spec/lib/configuration_spec.rb +22 -0
- data/spec/presenters/qa_server/monitor_status/history_presenter_spec.rb +81 -0
- data/spec/services/qa_server/history_up_down_service_spec.rb +86 -0
- metadata +39 -12
@@ -14,10 +14,6 @@ search:
|
|
14
14
|
-
|
15
15
|
query: Malignant Hyperthermia
|
16
16
|
subauth: subject
|
17
|
-
-
|
18
|
-
query: Spain
|
19
|
-
subauth: subject
|
20
|
-
result_size: 75
|
21
17
|
-
|
22
18
|
query: Address
|
23
19
|
subauth: publication_type
|
@@ -26,7 +22,6 @@ search:
|
|
26
22
|
# Accuracy tests
|
27
23
|
#------------------
|
28
24
|
-
|
29
|
-
pending: true
|
30
25
|
query: Malignant Hyperthermia
|
31
26
|
subject_uri: "http://id.nlm.nih.gov/mesh/D008305"
|
32
27
|
position: 3
|
@@ -47,6 +42,14 @@ search:
|
|
47
42
|
position: 3
|
48
43
|
replacements:
|
49
44
|
maxRecords: '8'
|
45
|
+
-
|
46
|
+
pending: true
|
47
|
+
query: Spain
|
48
|
+
subauth: geographic
|
49
|
+
subject_uri: "http://id.nlm.nih.gov/mesh/D013030"
|
50
|
+
position: 3
|
51
|
+
replacements:
|
52
|
+
maxRecords: '8'
|
50
53
|
-
|
51
54
|
pending: true
|
52
55
|
query: Email
|
@@ -26,12 +26,13 @@ search:
|
|
26
26
|
replacements:
|
27
27
|
maxRecords: '4'
|
28
28
|
# -
|
29
|
-
#
|
29
|
+
# # This is an event at OCLCFAST web-search, but a meeting through OCLCFAST API.
|
30
|
+
# query: Bronze Night
|
30
31
|
# subauth: event_name
|
31
32
|
# replacements:
|
32
33
|
# maxRecords: '4'
|
33
34
|
-
|
34
|
-
query:
|
35
|
+
query: convention
|
35
36
|
subauth: meeting
|
36
37
|
replacements:
|
37
38
|
maxRecords: '4'
|
@@ -71,7 +72,6 @@ search:
|
|
71
72
|
replacements:
|
72
73
|
maxRecords: '5'
|
73
74
|
-
|
74
|
-
pending: true
|
75
75
|
query: Sleep-overs
|
76
76
|
subauth: concept
|
77
77
|
subject_uri: "http://id.worldcat.org/fast/1120873"
|
@@ -79,6 +79,7 @@ search:
|
|
79
79
|
replacements:
|
80
80
|
maxRecords: '10'
|
81
81
|
-
|
82
|
+
# This is a meeting in OCLCFAST_DIRECT, but event in OCLCFAST_LD4L_CACHE.
|
82
83
|
pending: true
|
83
84
|
query: People's International Tribunal on the Rights of Indigenous Hawaiians
|
84
85
|
subauth: event
|
@@ -86,6 +87,13 @@ search:
|
|
86
87
|
position: 3
|
87
88
|
replacements:
|
88
89
|
maxRecords: '8'
|
90
|
+
-
|
91
|
+
query: Science Fiction
|
92
|
+
subauth: meeting
|
93
|
+
subject_uri: "http://id.worldcat.org/fast/1406163"
|
94
|
+
position: 5
|
95
|
+
replacements:
|
96
|
+
maxRecords: '10'
|
89
97
|
-
|
90
98
|
pending: true
|
91
99
|
query: University of Chicago Library
|
@@ -102,7 +110,6 @@ search:
|
|
102
110
|
replacements:
|
103
111
|
maxRecords: '20'
|
104
112
|
-
|
105
|
-
pending: true
|
106
113
|
query: Sjælland
|
107
114
|
subauth: place
|
108
115
|
result_size: 190
|
@@ -111,13 +118,12 @@ search:
|
|
111
118
|
replacements:
|
112
119
|
maxRecords: '10'
|
113
120
|
-
|
114
|
-
pending: true
|
115
121
|
query: Scream
|
116
122
|
subauth: work
|
117
123
|
subject_uri: "http://id.worldcat.org/fast/1358031"
|
118
|
-
position:
|
124
|
+
position: 10
|
119
125
|
replacements:
|
120
|
-
maxRecords: '
|
126
|
+
maxRecords: '20'
|
121
127
|
term:
|
122
128
|
-
|
123
129
|
identifier: '1914919'
|
@@ -13,6 +13,9 @@ search:
|
|
13
13
|
-
|
14
14
|
query: tribunal
|
15
15
|
subauth: event
|
16
|
+
-
|
17
|
+
query: convention
|
18
|
+
subauth: meeting
|
16
19
|
-
|
17
20
|
query: 'mark twain'
|
18
21
|
subauth: person
|
@@ -32,7 +35,6 @@ search:
|
|
32
35
|
# Accuracy tests
|
33
36
|
#------------------
|
34
37
|
-
|
35
|
-
pending: true
|
36
38
|
query: Tralee & Dingle Railway
|
37
39
|
subject_uri: "http://id.worldcat.org/fast/1733583"
|
38
40
|
position: 3
|
@@ -53,6 +55,14 @@ search:
|
|
53
55
|
replacements:
|
54
56
|
maxRecords: '8'
|
55
57
|
-
|
58
|
+
query: Science Fiction
|
59
|
+
subauth: meeting
|
60
|
+
subject_uri: "http://id.worldcat.org/fast/1406163"
|
61
|
+
position: 5
|
62
|
+
replacements:
|
63
|
+
maxRecords: '10'
|
64
|
+
-
|
65
|
+
pending: true
|
56
66
|
query: University of Chicago Library
|
57
67
|
subauth: organization
|
58
68
|
subject_uri: "http://id.worldcat.org/fast/539173"
|
@@ -78,10 +88,16 @@ search:
|
|
78
88
|
query: Scream
|
79
89
|
subauth: work
|
80
90
|
subject_uri: "http://id.worldcat.org/fast/1358031"
|
81
|
-
position:
|
91
|
+
position: 10
|
92
|
+
replacements:
|
93
|
+
maxRecords: '20'
|
94
|
+
-
|
95
|
+
query: 'mark twain'
|
96
|
+
subauth: intangible
|
97
|
+
subject_uri: "http://id.worldcat.org/fast/1200561"
|
98
|
+
position: 3
|
82
99
|
replacements:
|
83
100
|
maxRecords: '10'
|
84
|
-
|
85
101
|
term:
|
86
102
|
-
|
87
103
|
identifier: 'http://id.worldcat.org/fast/1914919'
|
@@ -316,7 +316,6 @@ search:
|
|
316
316
|
replacements:
|
317
317
|
maxRecords: '20'
|
318
318
|
-
|
319
|
-
pending: true
|
320
319
|
query: polychrome
|
321
320
|
subauth: colour_content
|
322
321
|
position: 3
|
@@ -457,7 +456,6 @@ search:
|
|
457
456
|
replacements:
|
458
457
|
maxRecords: '20'
|
459
458
|
-
|
460
|
-
pending: true
|
461
459
|
query: unknown
|
462
460
|
subauth: gender
|
463
461
|
position: 3
|
@@ -556,7 +554,6 @@ search:
|
|
556
554
|
replacements:
|
557
555
|
maxRecords: '10'
|
558
556
|
-
|
559
|
-
pending: true
|
560
557
|
query: Hi 8
|
561
558
|
subauth: video_format
|
562
559
|
position: 3
|
@@ -24,6 +24,14 @@ QaServer.config do |config|
|
|
24
24
|
# @param [Symbol] time period for calculating historical pass/fail (i.e., one of :month, :year, or :all)
|
25
25
|
# config.historical_datatable_default_time_period = :year
|
26
26
|
|
27
|
+
# Threshold for percentage of queries that timed out after which it gets marked in the Authority Connection up-down History
|
28
|
+
# @param [Float] percentage of queries that are ok to timeout
|
29
|
+
# config.up_down_data_timeouts_max_threshold = 0.3
|
30
|
+
|
31
|
+
# Threshold for percentage of queries that are passing, below which are marked in the Authority Connection up-down History as barely_up
|
32
|
+
# @param [Float] required percentage of queries passing to be considered mostly-up when there are some failures
|
33
|
+
# config.up_down_data_mostly_up_threshold = 0.95
|
34
|
+
|
27
35
|
# Displays a graph of performance test data when true
|
28
36
|
# @param [Boolean] display performance graph when true
|
29
37
|
# config.display_performance_graph = false
|
@@ -73,6 +73,20 @@ module QaServer
|
|
73
73
|
@historical_datatable_default_time_period ||= :year
|
74
74
|
end
|
75
75
|
|
76
|
+
# Threshold for percentage of queries that timed out after which it gets marked in the Authority Connection up-down History
|
77
|
+
# @param [Float] percentage of queries that are ok to timeout
|
78
|
+
attr_writer :up_down_data_timeouts_max_threshold
|
79
|
+
def up_down_data_timeouts_max_threshold
|
80
|
+
@up_down_data_timeouts_max_threshold ||= 0.3
|
81
|
+
end
|
82
|
+
|
83
|
+
# Threshold for percentage of queries that are passing, below which are marked in the Authority Connection up-down History as barely_up
|
84
|
+
# @param [Float] required percentage of queries passing to be considered mostly-up when there are some failures
|
85
|
+
attr_writer :up_down_data_mostly_up_threshold
|
86
|
+
def up_down_data_mostly_up_threshold
|
87
|
+
@up_down_data_mostly_up_threshold ||= 0.95
|
88
|
+
end
|
89
|
+
|
76
90
|
# Displays a graph of performance test data when true
|
77
91
|
# @param [Boolean] display performance graph when true
|
78
92
|
attr_writer :display_performance_graph
|
data/lib/qa_server/version.rb
CHANGED
data/qa_server.gemspec
CHANGED
@@ -22,11 +22,11 @@ Gem::Specification.new do |spec|
|
|
22
22
|
# Note: rails does not follow sem-ver conventions, it's
|
23
23
|
# minor version releases can include breaking changes; see
|
24
24
|
# http://guides.rubyonrails.org/maintenance_policy.html
|
25
|
-
spec.add_dependency 'rails', '~> 5.
|
25
|
+
spec.add_dependency 'rails', '~> 5.2', '>= 5.2.5' # v5.2.5 required to address mimemagic gem yank
|
26
26
|
spec.add_dependency 'useragent'
|
27
27
|
|
28
28
|
# Required gems for QA and linked data access
|
29
|
-
spec.add_development_dependency 'qa', '~> 5.
|
29
|
+
spec.add_development_dependency 'qa', '~> 5.5', '>= 5.5.1' # questioning_authority
|
30
30
|
spec.add_development_dependency 'linkeddata'
|
31
31
|
|
32
32
|
# Produces dashboard charts on monitor status page
|
@@ -34,12 +34,12 @@ Gem::Specification.new do |spec|
|
|
34
34
|
|
35
35
|
spec.add_development_dependency 'better_errors' # provide debugging command line in
|
36
36
|
spec.add_development_dependency 'binding_of_caller' # provides deep stack info used by better_errors
|
37
|
-
spec.add_development_dependency 'bixby', '~> 3.0.0
|
37
|
+
spec.add_development_dependency 'bixby', '~> 3.0', ">= 3.0.2" # rubocop styleguide
|
38
38
|
# spec.add_development_dependency "capybara", '~> 3.29'
|
39
39
|
# spec.add_development_dependency 'capybara-maleficent', '~> 0.3.0'
|
40
40
|
# spec.add_development_dependency 'chromedriver-helper', '~> 2.1'
|
41
41
|
spec.add_development_dependency 'deprecation'
|
42
|
-
spec.add_development_dependency 'engine_cart', '~> 2.
|
42
|
+
spec.add_development_dependency 'engine_cart', '~> 2.2'
|
43
43
|
spec.add_development_dependency "factory_bot", '~> 4.4'
|
44
44
|
spec.add_development_dependency 'i18n-tasks'
|
45
45
|
spec.add_development_dependency 'simplecov'
|
@@ -49,7 +49,7 @@ Gem::Specification.new do |spec|
|
|
49
49
|
spec.add_development_dependency 'rspec-its', '~> 1.1'
|
50
50
|
spec.add_development_dependency 'rspec-rails', '~> 3.1'
|
51
51
|
spec.add_development_dependency 'selenium-webdriver'
|
52
|
-
spec.add_development_dependency 'webdrivers', '~>
|
52
|
+
spec.add_development_dependency 'webdrivers', '~> 4.4'
|
53
53
|
spec.add_development_dependency 'webmock'
|
54
54
|
|
55
55
|
########################################################
|
@@ -21,7 +21,7 @@ RSpec.describe 'Accuracy test' do # rubocop:disable RSpec/DescribeClass
|
|
21
21
|
it "finds actual <= expected" do
|
22
22
|
pending 'test is known to fail' if test_result[:pending]
|
23
23
|
expect(test_result[:err_message]).to be_empty
|
24
|
-
expect(test_result[:request_data]).
|
24
|
+
expect(test_result[:request_data]).to be_present
|
25
25
|
expect(test_result[:actual]).not_to be_nil
|
26
26
|
expect(test_result[:actual]).to be <= test_result[:expected]
|
27
27
|
end
|
data/spec/i18n_spec.rb
CHANGED
@@ -86,6 +86,28 @@ RSpec.describe QaServer::Configuration do
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
|
+
describe '#up_down_data_timeouts_max_threshold' do
|
90
|
+
it 'return default as 0.3 (e.g. 30%)' do
|
91
|
+
expect(config.up_down_data_timeouts_max_threshold).to eq 0.3
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'returns set value' do
|
95
|
+
config.up_down_data_timeouts_max_threshold = 0.25
|
96
|
+
expect(config.up_down_data_timeouts_max_threshold).to eq 0.25
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '#up_down_data_mostly_up_threshold' do
|
101
|
+
it 'return default as 0.95 (e.g. 95%)' do
|
102
|
+
expect(config.up_down_data_mostly_up_threshold).to eq 0.95
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'returns set value' do
|
106
|
+
config.up_down_data_mostly_up_threshold = 0.98
|
107
|
+
expect(config.up_down_data_mostly_up_threshold).to eq 0.98
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
89
111
|
describe '#display_performance_graph?' do
|
90
112
|
it 'return default as false' do
|
91
113
|
expect(config.display_performance_graph?).to eq false
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe QaServer::MonitorStatus::HistoryPresenter do
|
5
|
+
let(:presenter) { described_class.new(parent: nil, historical_summary_data: historical_summary_data) }
|
6
|
+
# rubocop:disable Layout/ExtraSpacing
|
7
|
+
let(:historical_summary_data) do
|
8
|
+
# { 'auth_name' => { good: count_of_passing_tests, bad: count_of_failing_tests } }
|
9
|
+
{
|
10
|
+
'GOOD_AUTH' => { good: 0, bad: 1000 },
|
11
|
+
'BARELY_GOOD' => { good: 49, bad: 951 },
|
12
|
+
'OK_AUTH' => { good: 50, bad: 950 },
|
13
|
+
'STILL_OK' => { good: 51, bad: 949 },
|
14
|
+
'BARELY_OK' => { good: 99, bad: 901 },
|
15
|
+
'BAD_AUTH' => { good: 100, bad: 900 },
|
16
|
+
'STILL_BAD' => { good: 101, bad: 899 },
|
17
|
+
'REALLY_BAD' => { good: 500, bad: 500 },
|
18
|
+
'HORRIBLE' => { good: 1000, bad: 0 }
|
19
|
+
}
|
20
|
+
# rubocop:enable Layout/ExtraSpacing
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.failure_style_class' do
|
24
|
+
context 'returns NEUTRAL style' do
|
25
|
+
let(:expected_css_style) { "status-neutral" }
|
26
|
+
let(:zero_failure_entry) { ['GOOD_AUTH', { good: 1000, bad: 0 }] } # rubocop:disable Layout/ExtraSpacing
|
27
|
+
let(:just_below_caution) { ['BARELY_GOOD', { good: 951, bad: 49 }] } # rubocop:disable Layout/ExtraSpacing
|
28
|
+
|
29
|
+
it 'when no failures' do
|
30
|
+
expect(presenter.failure_style_class(zero_failure_entry)).to eq expected_css_style
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'when percent of failures is just below the CAUTION_THRESHOLD' do
|
34
|
+
expect(presenter.failure_style_class(just_below_caution)).to eq expected_css_style
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'returns CAUTION style' do
|
39
|
+
let(:expected_css_style) { "status-unknown" }
|
40
|
+
let(:equal_caution) { ['OK_AUTH', { good: 950, bad: 50 }] }
|
41
|
+
let(:just_above_caution) { ['STILL_OK', { good: 949, bad: 51 }] }
|
42
|
+
let(:just_below_warning) { ['BARELY_OK', { good: 901, bad: 99 }] }
|
43
|
+
|
44
|
+
it 'when percent of failures is equal to CAUTION_THRESHOLD' do
|
45
|
+
expect(presenter.failure_style_class(equal_caution)).to eq expected_css_style
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'when percent of failures is just above CAUTION_THRESHOLD' do
|
49
|
+
expect(presenter.failure_style_class(just_above_caution)).to eq expected_css_style
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'when percent of failures is just below WARNING_THRESHOLD' do
|
53
|
+
expect(presenter.failure_style_class(just_below_warning)).to eq expected_css_style
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'returns WARNING style' do
|
58
|
+
let(:expected_css_style) { "status-bad" }
|
59
|
+
let(:equal_warning) { ['BAD_AUTH', { good: 900, bad: 100 }] }
|
60
|
+
let(:just_above_warning) { ['STILL_BAD', { good: 899, bad: 101 }] }
|
61
|
+
let(:well_above_warning) { ['REALLY_BAD', { good: 500, bad: 500 }] }
|
62
|
+
let(:all_failures) { ['HORRIBLE', { good: 0, bad: 1000 }] }
|
63
|
+
|
64
|
+
it 'when percent of failures is equal to WARNING_THRESHOLD' do
|
65
|
+
expect(presenter.failure_style_class(equal_warning)).to eq expected_css_style
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'when percent of failures is just above WARNING_THRESHOLD' do
|
69
|
+
expect(presenter.failure_style_class(just_above_warning)).to eq expected_css_style
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'when percent of failures is well above WARNING_THRESHOLD' do
|
73
|
+
expect(presenter.failure_style_class(well_above_warning)).to eq expected_css_style
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'when percent of failures is 100%' do
|
77
|
+
expect(presenter.failure_style_class(all_failures)).to eq expected_css_style
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe QaServer::HistoryUpDownService do
|
5
|
+
let(:service) { described_class.new }
|
6
|
+
|
7
|
+
context 'when total_count is 0' do
|
8
|
+
let(:good_count) { 0 }
|
9
|
+
let(:unknown_count) { 0 }
|
10
|
+
let(:bad_count) { 0 }
|
11
|
+
let(:timeout_count) { 0 }
|
12
|
+
it 'returns :no_data' do
|
13
|
+
status = service.send(:status_determination, good_count, unknown_count, bad_count, timeout_count)
|
14
|
+
expect(status).to eq :no_data
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when all queries failed' do
|
19
|
+
let(:good_count) { 0 }
|
20
|
+
let(:unknown_count) { 0 }
|
21
|
+
let(:bad_count) { 5 }
|
22
|
+
let(:timeout_count) { 0 }
|
23
|
+
it 'returns :down' do
|
24
|
+
status = service.send(:status_determination, good_count, unknown_count, bad_count, timeout_count)
|
25
|
+
expect(status).to eq :down
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when all queries passed' do
|
30
|
+
let(:good_count) { 5 }
|
31
|
+
let(:unknown_count) { 0 }
|
32
|
+
let(:bad_count) { 0 }
|
33
|
+
let(:timeout_count) { 0 }
|
34
|
+
it 'returns :fully_up' do
|
35
|
+
status = service.send(:status_determination, good_count, unknown_count, bad_count, timeout_count)
|
36
|
+
expect(status).to eq :fully_up
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'when all queries are unknown' do
|
41
|
+
let(:good_count) { 0 }
|
42
|
+
let(:unknown_count) { 5 }
|
43
|
+
let(:bad_count) { 0 }
|
44
|
+
let(:timeout_count) { 0 }
|
45
|
+
it 'returns :barely_up' do
|
46
|
+
status = service.send(:status_determination, good_count, unknown_count, bad_count, timeout_count)
|
47
|
+
expect(status).to eq :barely_up
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'when too many queries timed out' do
|
52
|
+
let(:threshold) { 0.5 }
|
53
|
+
let(:good_count) { 100 - bad_count }
|
54
|
+
let(:unknown_count) { 0 }
|
55
|
+
let(:bad_count) { timeout_count + 2 }
|
56
|
+
let(:timeout_count) { threshold * 100 + 1 }
|
57
|
+
it 'returns :good' do
|
58
|
+
status = service.send(:status_determination, good_count, unknown_count, bad_count, timeout_count)
|
59
|
+
expect(status).to eq :timeouts
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when almost all queries pass' do
|
64
|
+
let(:threshold) { 0.95 }
|
65
|
+
let(:good_count) { threshold * 100 + 1 }
|
66
|
+
let(:unknown_count) { 0 }
|
67
|
+
let(:bad_count) { 100 - good_count }
|
68
|
+
let(:timeout_count) { 0 }
|
69
|
+
it 'returns :good' do
|
70
|
+
status = service.send(:status_determination, good_count, unknown_count, bad_count, timeout_count)
|
71
|
+
expect(status).to eq :mostly_up
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'when too many queries fail' do
|
76
|
+
let(:threshold) { 0.95 }
|
77
|
+
let(:good_count) { threshold * 100 - 1 }
|
78
|
+
let(:unknown_count) { 0 }
|
79
|
+
let(:bad_count) { 100 - good_count }
|
80
|
+
let(:timeout_count) { 0 }
|
81
|
+
it 'returns :good' do
|
82
|
+
status = service.send(:status_determination, good_count, unknown_count, bad_count, timeout_count)
|
83
|
+
expect(status).to eq :barely_up
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|