This repository has been archived by the owner on Dec 21, 2023. It is now read-only.
forked from mastodon/mastodon
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Expand coverage for "system checks" (mastodon#24216)
- Loading branch information
1 parent
8628610
commit 9d39b11
Showing
9 changed files
with
353 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'rails_helper' | ||
|
||
describe Admin::SystemCheck::BaseCheck do | ||
subject(:check) { described_class.new(user) } | ||
|
||
let(:user) { Fabricate(:user) } | ||
|
||
describe 'skip?' do | ||
it 'returns false' do | ||
expect(check.skip?).to be false | ||
end | ||
end | ||
|
||
describe 'pass?' do | ||
it 'raises not implemented error' do | ||
expect { check.pass? }.to raise_error(NotImplementedError) | ||
end | ||
end | ||
|
||
describe 'message' do | ||
it 'raises not implemented error' do | ||
expect { check.message }.to raise_error(NotImplementedError) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'rails_helper' | ||
|
||
describe Admin::SystemCheck::DatabaseSchemaCheck do | ||
subject(:check) { described_class.new(user) } | ||
|
||
let(:user) { Fabricate(:user) } | ||
|
||
it_behaves_like 'a check available to devops users' | ||
|
||
describe 'pass?' do | ||
context 'when database needs migration' do | ||
before do | ||
context = instance_double(ActiveRecord::MigrationContext, needs_migration?: true) | ||
allow(ActiveRecord::Base.connection).to receive(:migration_context).and_return(context) | ||
end | ||
|
||
it 'returns false' do | ||
expect(check.pass?).to be false | ||
end | ||
end | ||
|
||
context 'when database does not need migration' do | ||
before do | ||
context = instance_double(ActiveRecord::MigrationContext, needs_migration?: false) | ||
allow(ActiveRecord::Base.connection).to receive(:migration_context).and_return(context) | ||
end | ||
|
||
it 'returns true' do | ||
expect(check.pass?).to be true | ||
end | ||
end | ||
end | ||
|
||
describe 'message' do | ||
it 'sends class name symbol to message instance' do | ||
allow(Admin::SystemCheck::Message).to receive(:new).with(:database_schema_check) | ||
|
||
check.message | ||
|
||
expect(Admin::SystemCheck::Message).to have_received(:new).with(:database_schema_check) | ||
end | ||
end | ||
end |
100 changes: 100 additions & 0 deletions
100
spec/lib/admin/system_check/elasticsearch_check_spec.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'rails_helper' | ||
|
||
describe Admin::SystemCheck::ElasticsearchCheck do | ||
subject(:check) { described_class.new(user) } | ||
|
||
let(:user) { Fabricate(:user) } | ||
|
||
it_behaves_like 'a check available to devops users' | ||
|
||
describe 'pass?' do | ||
context 'when chewy is enabled' do | ||
before { allow(Chewy).to receive(:enabled?).and_return(true) } | ||
|
||
context 'when running version is present and high enough' do | ||
before do | ||
allow(Chewy.client).to receive(:info) | ||
.and_return({ 'version' => { 'number' => '999.99.9' } }) | ||
end | ||
|
||
it 'returns true' do | ||
expect(check.pass?).to be true | ||
end | ||
end | ||
|
||
context 'when running version is present and too low' do | ||
context 'when compatible version is too low' do | ||
before do | ||
allow(Chewy.client).to receive(:info) | ||
.and_return({ 'version' => { 'number' => '1.2.3', 'minimum_wire_compatibility_version' => '1.0' } }) | ||
end | ||
|
||
it 'returns false' do | ||
expect(check.pass?).to be false | ||
end | ||
end | ||
|
||
context 'when compatible version is high enough' do | ||
before do | ||
allow(Chewy.client).to receive(:info) | ||
.and_return({ 'version' => { 'number' => '1.2.3', 'minimum_wire_compatibility_version' => '99.9' } }) | ||
end | ||
|
||
it 'returns true' do | ||
expect(check.pass?).to be true | ||
end | ||
end | ||
end | ||
|
||
context 'when running version is missing' do | ||
before do | ||
client = instance_double(Elasticsearch::Transport::Client) | ||
allow(client).to receive(:info).and_raise(Elasticsearch::Transport::Transport::Error) | ||
allow(Chewy).to receive(:client).and_return(client) | ||
end | ||
|
||
it 'returns false' do | ||
expect(check.pass?).to be false | ||
end | ||
end | ||
end | ||
|
||
context 'when chewy is not enabled' do | ||
before { allow(Chewy).to receive(:enabled?).and_return(false) } | ||
|
||
it 'returns true' do | ||
expect(check.pass?).to be true | ||
end | ||
end | ||
end | ||
|
||
describe 'message' do | ||
context 'when running version is present' do | ||
before { allow(Chewy.client).to receive(:info).and_return({ 'version' => { 'number' => '999.99.9' } }) } | ||
|
||
it 'sends class name symbol to message instance' do | ||
allow(Admin::SystemCheck::Message).to receive(:new) | ||
.with(:elasticsearch_version_check, anything) | ||
|
||
check.message | ||
|
||
expect(Admin::SystemCheck::Message).to have_received(:new) | ||
.with(:elasticsearch_version_check, 'Elasticsearch 999.99.9 is running while 7.x is required') | ||
end | ||
end | ||
|
||
context 'when running version is missing' do | ||
it 'sends class name symbol to message instance' do | ||
allow(Admin::SystemCheck::Message).to receive(:new) | ||
.with(:elasticsearch_running_check) | ||
|
||
check.message | ||
|
||
expect(Admin::SystemCheck::Message).to have_received(:new) | ||
.with(:elasticsearch_running_check) | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'rails_helper' | ||
|
||
describe Admin::SystemCheck::MediaPrivacyCheck do | ||
subject(:check) { described_class.new(user) } | ||
|
||
let(:user) { Fabricate(:user) } | ||
|
||
it_behaves_like 'a check available to devops users' | ||
|
||
describe 'pass?' do | ||
context 'when the media cannot be listed' do | ||
before do | ||
stub_request(:get, /ngrok.io/).to_return(status: 200, body: 'a list of no files') | ||
end | ||
|
||
it 'returns true' do | ||
expect(check.pass?).to be true | ||
end | ||
end | ||
end | ||
|
||
describe 'message' do | ||
it 'sends values to message instance' do | ||
allow(Admin::SystemCheck::Message).to receive(:new).with(nil, nil, nil, true) | ||
|
||
check.message | ||
|
||
expect(Admin::SystemCheck::Message).to have_received(:new).with(nil, nil, nil, true) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'rails_helper' | ||
|
||
describe Admin::SystemCheck::Message do | ||
subject(:check) { described_class.new(:key_value, :value_value, :action_value, :critical_value) } | ||
|
||
it 'providers readers when initialized' do | ||
expect(check.key).to eq :key_value | ||
expect(check.value).to eq :value_value | ||
expect(check.action).to eq :action_value | ||
expect(check.critical).to eq :critical_value | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'rails_helper' | ||
|
||
describe Admin::SystemCheck::RulesCheck do | ||
subject(:check) { described_class.new(user) } | ||
|
||
let(:user) { Fabricate(:user) } | ||
|
||
describe 'skip?' do | ||
context 'when user can manage rules' do | ||
before { allow(user).to receive(:can?).with(:manage_rules).and_return(true) } | ||
|
||
it 'returns false' do | ||
expect(check.skip?).to be false | ||
end | ||
end | ||
|
||
context 'when user cannot manage rules' do | ||
before { allow(user).to receive(:can?).with(:manage_rules).and_return(false) } | ||
|
||
it 'returns true' do | ||
expect(check.skip?).to be true | ||
end | ||
end | ||
end | ||
|
||
describe 'pass?' do | ||
context 'when there is not a kept rule' do | ||
it 'returns false' do | ||
expect(check.pass?).to be false | ||
end | ||
end | ||
|
||
context 'when there is a kept rule' do | ||
before { Fabricate(:rule) } | ||
|
||
it 'returns true' do | ||
expect(check.pass?).to be true | ||
end | ||
end | ||
end | ||
|
||
describe 'message' do | ||
it 'sends class name symbol to message instance' do | ||
allow(Admin::SystemCheck::Message).to receive(:new).with(:rules_check, nil, '/admin/rules') | ||
|
||
check.message | ||
|
||
expect(Admin::SystemCheck::Message).to have_received(:new).with(:rules_check, nil, '/admin/rules') | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'rails_helper' | ||
|
||
describe Admin::SystemCheck::SidekiqProcessCheck do | ||
subject(:check) { described_class.new(user) } | ||
|
||
let(:user) { Fabricate(:user) } | ||
|
||
it_behaves_like 'a check available to devops users' | ||
|
||
describe 'pass?' do | ||
context 'when missing queues is empty' do | ||
before do | ||
process_set = instance_double(Sidekiq::ProcessSet, reduce: []) | ||
allow(Sidekiq::ProcessSet).to receive(:new).and_return(process_set) | ||
end | ||
|
||
it 'returns true' do | ||
expect(check.pass?).to be true | ||
end | ||
end | ||
|
||
context 'when missing queues is not empty' do | ||
before do | ||
process_set = instance_double(Sidekiq::ProcessSet, reduce: [:something]) | ||
allow(Sidekiq::ProcessSet).to receive(:new).and_return(process_set) | ||
end | ||
|
||
it 'returns false' do | ||
expect(check.pass?).to be false | ||
end | ||
end | ||
end | ||
|
||
describe 'message' do | ||
it 'sends values to message instance' do | ||
allow(Admin::SystemCheck::Message).to receive(:new).with(:sidekiq_process_check, 'default, push, mailers, pull, scheduler, ingress') | ||
|
||
check.message | ||
|
||
expect(Admin::SystemCheck::Message).to have_received(:new).with(:sidekiq_process_check, 'default, push, mailers, pull, scheduler, ingress') | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'rails_helper' | ||
|
||
describe Admin::SystemCheck do | ||
let(:user) { Fabricate(:user) } | ||
|
||
describe 'perform' do | ||
let(:result) { described_class.perform(user) } | ||
|
||
it 'runs all the checks' do | ||
expect(result).to be_an(Array) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# frozen_string_literal: true | ||
|
||
shared_examples 'a check available to devops users' do | ||
describe 'skip?' do | ||
context 'when user can view devops' do | ||
before { allow(user).to receive(:can?).with(:view_devops).and_return(true) } | ||
|
||
it 'returns false' do | ||
expect(check.skip?).to be false | ||
end | ||
end | ||
|
||
context 'when user cannot view devops' do | ||
before { allow(user).to receive(:can?).with(:view_devops).and_return(false) } | ||
|
||
it 'returns true' do | ||
expect(check.skip?).to be true | ||
end | ||
end | ||
end | ||
end |