beaker 4.41.2 → 5.0.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/.github/dependabot.yml +9 -0
- data/.github/workflows/release.yml +2 -2
- data/.github/workflows/test.yml +26 -13
- data/.rubocop.yml +23 -10
- data/.rubocop_todo.yml +34 -10
- data/CHANGELOG.md +16 -52
- data/Gemfile +12 -7
- data/HISTORY.md +605 -0
- data/Rakefile +99 -111
- data/acceptance/config/acceptance-options.rb +1 -1
- data/acceptance/config/base/acceptance-options.rb +2 -2
- data/acceptance/config/hypervisor/acceptance-options.rb +2 -2
- data/acceptance/config/subcommands/acceptance-options.rb +2 -2
- data/acceptance/fixtures/module/Rakefile +1 -1
- data/acceptance/fixtures/module/spec/acceptance/demo_spec.rb +8 -12
- data/acceptance/fixtures/module/spec/classes/init_spec.rb +0 -1
- data/acceptance/fixtures/module/spec/spec_helper_acceptance.rb +3 -5
- data/acceptance/lib/helpers/test_helper.rb +6 -5
- data/acceptance/pre_suite/subcommands/05_install_ruby.rb +2 -3
- data/acceptance/pre_suite/subcommands/08_install_beaker.rb +1 -2
- data/acceptance/tests/base/dsl/helpers/configuration_test.rb +4 -4
- data/acceptance/tests/base/dsl/helpers/hocon_helpers_test.rb +1 -2
- data/acceptance/tests/base/dsl/helpers/host_helpers/add_system32_hosts_entry_test.rb +0 -3
- data/acceptance/tests/base/dsl/helpers/host_helpers/archive_file_from_test.rb +3 -1
- data/acceptance/tests/base/dsl/helpers/host_helpers/backup_the_file_test.rb +9 -9
- data/acceptance/tests/base/dsl/helpers/host_helpers/check_for_package_test.rb +0 -4
- data/acceptance/tests/base/dsl/helpers/host_helpers/create_remote_file_test.rb +19 -26
- data/acceptance/tests/base/dsl/helpers/host_helpers/curl_on_test.rb +2 -2
- data/acceptance/tests/base/dsl/helpers/host_helpers/curl_with_retries_test.rb +0 -1
- data/acceptance/tests/base/dsl/helpers/host_helpers/on_test.rb +18 -13
- data/acceptance/tests/base/dsl/helpers/host_helpers/retry_on_test.rb +3 -3
- data/acceptance/tests/base/dsl/helpers/host_helpers/rsync_to_test.rb +22 -27
- data/acceptance/tests/base/dsl/helpers/host_helpers/run_cron_on_test.rb +12 -16
- data/acceptance/tests/base/dsl/helpers/host_helpers/run_script_on_test.rb +3 -4
- data/acceptance/tests/base/dsl/helpers/host_helpers/run_script_test.rb +3 -3
- data/acceptance/tests/base/dsl/helpers/host_helpers/scp_from_test.rb +4 -4
- data/acceptance/tests/base/dsl/helpers/host_helpers/scp_to_test.rb +3 -4
- data/acceptance/tests/base/dsl/helpers/host_helpers/shell_test.rb +5 -5
- data/acceptance/tests/base/dsl/helpers/host_helpers/upgrade_package_test.rb +3 -5
- data/acceptance/tests/base/dsl/platform_tag_confiner_test.rb +14 -17
- data/acceptance/tests/base/dsl/structure_test.rb +5 -11
- data/acceptance/tests/base/host/file_test.rb +2 -2
- data/acceptance/tests/base/host/group_test.rb +0 -1
- data/acceptance/tests/base/host/host_test.rb +66 -63
- data/acceptance/tests/base/host/packages.rb +1 -2
- data/acceptance/tests/base/host/packages_unix.rb +0 -55
- data/acceptance/tests/base/host/user_test.rb +0 -1
- data/acceptance/tests/base/host_prebuilt_steps/ssh_environment_test.rb +1 -2
- data/acceptance/tests/base/test_suite/export.rb +6 -9
- data/acceptance/tests/install/from_file.rb +2 -4
- data/acceptance/tests/load_path_bootstrap.rb +1 -1
- data/acceptance/tests/subcommands/destroy.rb +19 -21
- data/acceptance/tests/subcommands/exec.rb +0 -1
- data/acceptance/tests/subcommands/init.rb +2 -3
- data/acceptance/tests/subcommands/provision.rb +0 -1
- data/beaker.gemspec +4 -7
- data/docs/concepts/argument_processing_and_precedence.md +1 -10
- data/docs/how_to/debug_beaker_tests.md +12 -12
- data/docs/how_to/hosts/eos.md +2 -12
- data/docs/how_to/install_puppet.md +0 -18
- data/docs/how_to/the_beaker_dsl.md +0 -2
- data/lib/beaker/cli.rb +59 -68
- data/lib/beaker/command.rb +20 -28
- data/lib/beaker/command_factory.rb +3 -2
- data/lib/beaker/dsl/assertions.rb +6 -18
- data/lib/beaker/dsl/helpers/hocon_helpers.rb +3 -7
- data/lib/beaker/dsl/helpers/host_helpers.rb +62 -123
- data/lib/beaker/dsl/helpers/test_helpers.rb +3 -5
- data/lib/beaker/dsl/helpers/web_helpers.rb +19 -39
- data/lib/beaker/dsl/helpers.rb +2 -4
- data/lib/beaker/dsl/outcomes.rb +13 -15
- data/lib/beaker/dsl/patterns.rb +1 -3
- data/lib/beaker/dsl/roles.rb +17 -20
- data/lib/beaker/dsl/structure.rb +53 -65
- data/lib/beaker/dsl/test_tagging.rb +7 -10
- data/lib/beaker/dsl/wrappers.rb +15 -16
- data/lib/beaker/dsl.rb +2 -3
- data/lib/beaker/host/aix/exec.rb +1 -1
- data/lib/beaker/host/aix/file.rb +0 -1
- data/lib/beaker/host/aix/group.rb +1 -1
- data/lib/beaker/host/aix/user.rb +1 -1
- data/lib/beaker/host/aix.rb +3 -4
- data/lib/beaker/host/cisco.rb +27 -39
- data/lib/beaker/host/eos.rb +4 -30
- data/lib/beaker/host/freebsd/exec.rb +1 -1
- data/lib/beaker/host/freebsd/pkg.rb +3 -3
- data/lib/beaker/host/freebsd.rb +9 -12
- data/lib/beaker/host/mac/exec.rb +4 -4
- data/lib/beaker/host/mac/group.rb +7 -7
- data/lib/beaker/host/mac/pkg.rb +3 -106
- data/lib/beaker/host/mac/user.rb +2 -2
- data/lib/beaker/host/mac.rb +8 -9
- data/lib/beaker/host/pswindows/exec.rb +66 -70
- data/lib/beaker/host/pswindows/file.rb +3 -5
- data/lib/beaker/host/pswindows/group.rb +3 -3
- data/lib/beaker/host/pswindows/pkg.rb +12 -12
- data/lib/beaker/host/pswindows/user.rb +3 -3
- data/lib/beaker/host/pswindows.rb +4 -3
- data/lib/beaker/host/unix/exec.rb +81 -83
- data/lib/beaker/host/unix/file.rb +40 -45
- data/lib/beaker/host/unix/group.rb +1 -1
- data/lib/beaker/host/unix/pkg.rb +138 -401
- data/lib/beaker/host/unix/user.rb +2 -2
- data/lib/beaker/host/unix.rb +8 -11
- data/lib/beaker/host/windows/exec.rb +17 -17
- data/lib/beaker/host/windows/file.rb +3 -3
- data/lib/beaker/host/windows/group.rb +3 -3
- data/lib/beaker/host/windows/pkg.rb +3 -54
- data/lib/beaker/host/windows/user.rb +3 -3
- data/lib/beaker/host/windows.rb +12 -12
- data/lib/beaker/host.rb +76 -133
- data/lib/beaker/host_prebuilt_steps.rb +88 -196
- data/lib/beaker/hypervisor/noop.rb +2 -4
- data/lib/beaker/hypervisor.rb +44 -61
- data/lib/beaker/local_connection.rb +2 -4
- data/lib/beaker/logger.rb +68 -76
- data/lib/beaker/logger_junit.rb +21 -25
- data/lib/beaker/network_manager.rb +39 -42
- data/lib/beaker/options/command_line_parser.rb +12 -23
- data/lib/beaker/options/hosts_file_parser.rb +16 -25
- data/lib/beaker/options/options_file_parser.rb +3 -6
- data/lib/beaker/options/options_hash.rb +2 -7
- data/lib/beaker/options/parser.rb +86 -102
- data/lib/beaker/options/presets.rb +114 -123
- data/lib/beaker/options/subcommand_options_file_parser.rb +3 -6
- data/lib/beaker/options/validator.rb +26 -31
- data/lib/beaker/perf.rb +25 -30
- data/lib/beaker/platform.rb +26 -37
- data/lib/beaker/result.rb +7 -6
- data/lib/beaker/shared/error_handler.rb +8 -10
- data/lib/beaker/shared/fog_credentials.rb +5 -9
- data/lib/beaker/shared/host_manager.rb +36 -41
- data/lib/beaker/shared/options_resolver.rb +3 -7
- data/lib/beaker/shared/repetition.rb +2 -4
- data/lib/beaker/shared/semvar.rb +37 -41
- data/lib/beaker/shared/timed.rb +0 -3
- data/lib/beaker/shared.rb +1 -1
- data/lib/beaker/ssh_connection.rb +38 -47
- data/lib/beaker/subcommand.rb +17 -24
- data/lib/beaker/subcommands/subcommand_util.rb +4 -4
- data/lib/beaker/tasks/quick_start.rb +4 -9
- data/lib/beaker/tasks/rake_task.rb +25 -27
- data/lib/beaker/tasks/test.rb +4 -4
- data/lib/beaker/test_case.rb +16 -28
- data/lib/beaker/test_suite.rb +35 -39
- data/lib/beaker/test_suite_result.rb +45 -47
- data/lib/beaker/version.rb +1 -1
- data/lib/beaker.rb +6 -7
- data/spec/beaker/cli_spec.rb +121 -142
- data/spec/beaker/command_spec.rb +55 -59
- data/spec/beaker/dsl/assertions_spec.rb +36 -36
- data/spec/beaker/dsl/helpers/host_helpers_spec.rb +110 -131
- data/spec/beaker/dsl/helpers/test_helpers_spec.rb +9 -10
- data/spec/beaker/dsl/helpers/web_helpers_spec.rb +22 -31
- data/spec/beaker/dsl/outcomes_spec.rb +14 -14
- data/spec/beaker/dsl/roles_spec.rb +125 -130
- data/spec/beaker/dsl/structure_spec.rb +172 -161
- data/spec/beaker/dsl/test_tagging_spec.rb +89 -90
- data/spec/beaker/dsl/wrappers_spec.rb +32 -33
- data/spec/beaker/host/aix_spec.rb +14 -14
- data/spec/beaker/host/cisco_spec.rb +84 -94
- data/spec/beaker/host/eos_spec.rb +15 -36
- data/spec/beaker/host/freebsd/exec_spec.rb +3 -6
- data/spec/beaker/host/freebsd/pkg_spec.rb +24 -27
- data/spec/beaker/host/mac/exec_spec.rb +2 -3
- data/spec/beaker/host/mac/group_spec.rb +48 -57
- data/spec/beaker/host/mac/user_spec.rb +54 -63
- data/spec/beaker/host/pswindows/exec_spec.rb +30 -32
- data/spec/beaker/host/pswindows/file_spec.rb +16 -16
- data/spec/beaker/host/pswindows/user_spec.rb +17 -23
- data/spec/beaker/host/pswindows_spec.rb +13 -13
- data/spec/beaker/host/unix/exec_spec.rb +75 -80
- data/spec/beaker/host/unix/file_spec.rb +66 -71
- data/spec/beaker/host/unix/pkg_spec.rb +150 -411
- data/spec/beaker/host/unix_spec.rb +11 -207
- data/spec/beaker/host/windows/exec_spec.rb +30 -32
- data/spec/beaker/host/windows/file_spec.rb +18 -19
- data/spec/beaker/host/windows/group_spec.rb +10 -12
- data/spec/beaker/host/windows/pkg_spec.rb +6 -9
- data/spec/beaker/host/windows/user_spec.rb +17 -23
- data/spec/beaker/host/windows_spec.rb +39 -39
- data/spec/beaker/host_prebuilt_steps_spec.rb +168 -349
- data/spec/beaker/host_spec.rb +204 -284
- data/spec/beaker/hypervisor/hypervisor_spec.rb +36 -61
- data/spec/beaker/localhost_connection_spec.rb +10 -11
- data/spec/beaker/logger_junit_spec.rb +19 -30
- data/spec/beaker/logger_spec.rb +153 -136
- data/spec/beaker/network_manager_spec.rb +23 -23
- data/spec/beaker/options/command_line_parser_spec.rb +20 -23
- data/spec/beaker/options/hosts_file_parser_spec.rb +30 -32
- data/spec/beaker/options/options_file_parser_spec.rb +4 -7
- data/spec/beaker/options/options_hash_spec.rb +4 -6
- data/spec/beaker/options/parser_spec.rb +167 -167
- data/spec/beaker/options/presets_spec.rb +7 -9
- data/spec/beaker/options/subcommand_options_parser_spec.rb +13 -14
- data/spec/beaker/options/validator_spec.rb +10 -11
- data/spec/beaker/perf_spec.rb +18 -21
- data/spec/beaker/platform_spec.rb +25 -50
- data/spec/beaker/shared/error_handler_spec.rb +7 -16
- data/spec/beaker/shared/fog_credentials_spec.rb +29 -29
- data/spec/beaker/shared/host_manager_spec.rb +50 -84
- data/spec/beaker/shared/options_resolver_spec.rb +9 -12
- data/spec/beaker/shared/repetition_spec.rb +17 -24
- data/spec/beaker/shared/semvar_spec.rb +21 -26
- data/spec/beaker/ssh_connection_spec.rb +76 -83
- data/spec/beaker/subcommand/subcommand_util_spec.rb +31 -33
- data/spec/beaker/subcommand_spec.rb +75 -77
- data/spec/beaker/test_case_spec.rb +25 -50
- data/spec/beaker/test_suite_spec.rb +147 -154
- data/spec/helpers.rb +39 -45
- data/spec/matchers.rb +8 -7
- data/spec/mocks.rb +1 -6
- data/spec/spec_helper.rb +0 -1
- metadata +8 -24
- data/acceptance/tests/base/dsl/helpers/host_helpers/deploy_package_repo_test.rb +0 -142
- data/acceptance/tests/base/external_resources_test.rb +0 -31
- data/spec/beaker/host/mac_spec.rb +0 -113
|
@@ -1,134 +1,132 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
|
|
4
3
|
class ClassMixedWithDSLRoles
|
|
5
4
|
include Beaker::DSL::Roles
|
|
6
5
|
include Beaker::DSL::Outcomes
|
|
7
6
|
end
|
|
8
7
|
|
|
9
8
|
describe ClassMixedWithDSLRoles do
|
|
10
|
-
|
|
11
|
-
let(
|
|
12
|
-
let(
|
|
13
|
-
let(
|
|
14
|
-
let(
|
|
15
|
-
let(
|
|
16
|
-
let(
|
|
17
|
-
let(
|
|
18
|
-
let(
|
|
19
|
-
let(
|
|
20
|
-
let( :monolith ) { make_host( 'monolith', { :roles => [ 'agent', 'dashboard', 'database', 'master', 'custom_role'] } ) }
|
|
9
|
+
let(:hosts) { @hosts || {} }
|
|
10
|
+
let(:options) { @options || {} }
|
|
11
|
+
let(:agent1) { make_host('agent1', { :roles => ['agent'] }) }
|
|
12
|
+
let(:agent2) { make_host('agent2', { :roles => ['agent'] }) }
|
|
13
|
+
let(:a_and_dash) { make_host('a_and_dash', { :roles => %w[agent dashboard] }) }
|
|
14
|
+
let(:custom) { make_host('custom', { :roles => ['custom_role'] }) }
|
|
15
|
+
let(:db) { make_host('db', { :roles => ['database'] }) }
|
|
16
|
+
let(:master) { make_host('master', { :roles => %w[master agent] }) }
|
|
17
|
+
let(:default) { make_host('default', { :roles => ['default'] }) }
|
|
18
|
+
let(:monolith) { make_host('monolith', { :roles => %w[agent dashboard database master custom_role] }) }
|
|
21
19
|
|
|
22
20
|
describe '#agents' do
|
|
23
21
|
it 'returns an array of hosts that are agents' do
|
|
24
|
-
@hosts = [
|
|
25
|
-
expect(
|
|
26
|
-
expect(
|
|
22
|
+
@hosts = [agent1, agent2, master]
|
|
23
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
24
|
+
expect(subject.agents).to be == [agent1, agent2, master]
|
|
27
25
|
end
|
|
28
26
|
|
|
29
27
|
it 'and an empty array when none match' do
|
|
30
|
-
@hosts = [
|
|
31
|
-
expect(
|
|
32
|
-
expect(
|
|
28
|
+
@hosts = [db, custom]
|
|
29
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
30
|
+
expect(subject.agents).to be == []
|
|
33
31
|
end
|
|
34
32
|
end
|
|
35
33
|
|
|
36
34
|
describe '#master' do
|
|
37
35
|
it 'returns the master if there is one' do
|
|
38
|
-
@hosts = [
|
|
39
|
-
expect(
|
|
40
|
-
expect(
|
|
36
|
+
@hosts = [master, agent1]
|
|
37
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
38
|
+
expect(subject.master).to be == master
|
|
41
39
|
end
|
|
42
40
|
|
|
43
41
|
it 'raises an error if there is more than one master' do
|
|
44
|
-
@hosts = [
|
|
45
|
-
expect(
|
|
42
|
+
@hosts = [master, monolith]
|
|
43
|
+
expect(subject).to receive(:hosts).once.and_return(hosts)
|
|
46
44
|
expect { subject.master }.to raise_error Beaker::DSL::FailTest
|
|
47
45
|
end
|
|
48
46
|
|
|
49
47
|
it 'returns nil if no master and masterless is set' do
|
|
50
48
|
@options = { :masterless => true }
|
|
51
|
-
expect(
|
|
52
|
-
expect(
|
|
53
|
-
expect(
|
|
49
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
50
|
+
expect(subject).to receive(:options).and_return(options)
|
|
51
|
+
expect(subject.master).to be_nil
|
|
54
52
|
end
|
|
55
53
|
end
|
|
56
54
|
|
|
57
55
|
describe '#dashboard' do
|
|
58
56
|
it 'returns the dashboard if there is one' do
|
|
59
|
-
@hosts = [
|
|
60
|
-
expect(
|
|
61
|
-
expect(
|
|
57
|
+
@hosts = [a_and_dash, agent1]
|
|
58
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
59
|
+
expect(subject.dashboard).to be == a_and_dash
|
|
62
60
|
end
|
|
63
61
|
|
|
64
62
|
it 'raises an error if there is more than one dashboard' do
|
|
65
|
-
@hosts = [
|
|
66
|
-
expect(
|
|
63
|
+
@hosts = [a_and_dash, monolith]
|
|
64
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
67
65
|
expect { subject.dashboard }.to raise_error Beaker::DSL::FailTest
|
|
68
66
|
end
|
|
69
67
|
|
|
70
68
|
it 'and raises an error if there is no dashboard' do
|
|
71
|
-
@hosts = [
|
|
72
|
-
expect(
|
|
69
|
+
@hosts = [agent1, agent2, custom]
|
|
70
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
73
71
|
expect { subject.dashboard }.to raise_error Beaker::DSL::FailTest
|
|
74
72
|
end
|
|
75
73
|
|
|
76
74
|
it 'returns nil if no dashboard and masterless is set' do
|
|
77
75
|
@options = { :masterless => true }
|
|
78
|
-
expect(
|
|
79
|
-
expect(
|
|
80
|
-
expect(
|
|
76
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
77
|
+
expect(subject).to receive(:options).and_return(options)
|
|
78
|
+
expect(subject.dashboard).to be_nil
|
|
81
79
|
end
|
|
82
80
|
end
|
|
83
81
|
|
|
84
82
|
describe '#database' do
|
|
85
83
|
it 'returns the database if there is one' do
|
|
86
|
-
@hosts = [
|
|
87
|
-
expect(
|
|
88
|
-
expect(
|
|
84
|
+
@hosts = [db, agent1]
|
|
85
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
86
|
+
expect(subject.database).to be == db
|
|
89
87
|
end
|
|
90
88
|
|
|
91
89
|
it 'raises an error if there is more than one database' do
|
|
92
|
-
@hosts = [
|
|
93
|
-
expect(
|
|
90
|
+
@hosts = [db, monolith]
|
|
91
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
94
92
|
expect { subject.database }.to raise_error Beaker::DSL::FailTest
|
|
95
93
|
end
|
|
96
94
|
|
|
97
95
|
it 'and raises an error if there is no database' do
|
|
98
|
-
@hosts = [
|
|
99
|
-
expect(
|
|
96
|
+
@hosts = [agent1, agent2, custom]
|
|
97
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
100
98
|
expect { subject.database }.to raise_error Beaker::DSL::FailTest
|
|
101
99
|
end
|
|
102
100
|
|
|
103
101
|
it 'returns nil if no database and masterless is set' do
|
|
104
102
|
@options = { :masterless => true }
|
|
105
|
-
expect(
|
|
106
|
-
expect(
|
|
107
|
-
expect(
|
|
103
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
104
|
+
expect(subject).to receive(:options).and_return(options)
|
|
105
|
+
expect(subject.database).to be_nil
|
|
108
106
|
end
|
|
109
107
|
end
|
|
110
108
|
|
|
111
109
|
describe '#not_controller' do
|
|
112
110
|
it 'returns true when a host does not have the roles master/database/dashboard' do
|
|
113
|
-
expect(
|
|
111
|
+
expect(subject.not_controller(agent1)).to be == true
|
|
114
112
|
end
|
|
115
113
|
|
|
116
114
|
it 'returns false when a host has one of the roles master/database/dashboard' do
|
|
117
|
-
expect(
|
|
115
|
+
expect(subject.not_controller(a_and_dash)).to be == false
|
|
118
116
|
end
|
|
119
117
|
end
|
|
120
118
|
|
|
121
119
|
describe '#agent_only' do
|
|
122
120
|
it 'returns true when a host has the single role agent' do
|
|
123
|
-
expect(
|
|
121
|
+
expect(subject.agent_only(agent1)).to be == true
|
|
124
122
|
end
|
|
125
123
|
|
|
126
124
|
it 'returns false when a host has more than a single role' do
|
|
127
|
-
expect(
|
|
125
|
+
expect(subject.agent_only(a_and_dash)).to be == false
|
|
128
126
|
end
|
|
129
127
|
|
|
130
128
|
it 'returns false when a host has the role master' do
|
|
131
|
-
expect(
|
|
129
|
+
expect(subject.agent_only(master)).to be == false
|
|
132
130
|
end
|
|
133
131
|
end
|
|
134
132
|
|
|
@@ -136,73 +134,72 @@ describe ClassMixedWithDSLRoles do
|
|
|
136
134
|
it 'returns false if the host doesn\'t have a :pe_ver or :version' do
|
|
137
135
|
agent1[:pe_ver] = nil
|
|
138
136
|
agent1[:version] = nil
|
|
139
|
-
expect(
|
|
137
|
+
expect(subject.aio_version?(agent1)).to be === false
|
|
140
138
|
end
|
|
141
139
|
|
|
142
140
|
it 'returns false if :version < 4.0 and pe_ver is nil, type foss' do
|
|
143
141
|
agent1[:pe_ver] = nil
|
|
144
142
|
agent1[:version] = '3.8'
|
|
145
143
|
agent1[:type] = 'foss'
|
|
146
|
-
expect(
|
|
144
|
+
expect(subject.aio_version?(agent1)).to be === false
|
|
147
145
|
end
|
|
148
146
|
|
|
149
147
|
it 'returns false if the host :pe_ver is set < 4.0' do
|
|
150
148
|
agent1[:pe_ver] = '3.8'
|
|
151
|
-
expect(
|
|
149
|
+
expect(subject.aio_version?(agent1)).to be === false
|
|
152
150
|
end
|
|
153
151
|
|
|
154
152
|
it 'returns false if the host :version is set < 4.0' do
|
|
155
153
|
agent1[:version] = '3.8'
|
|
156
|
-
expect(
|
|
154
|
+
expect(subject.aio_version?(agent1)).to be === false
|
|
157
155
|
end
|
|
158
156
|
|
|
159
157
|
it 'returns true if the host :pe_ver is 4.0' do
|
|
160
158
|
agent1[:pe_ver] = '4.0'
|
|
161
|
-
expect(
|
|
159
|
+
expect(subject.aio_version?(agent1)).to be === true
|
|
162
160
|
end
|
|
163
161
|
|
|
164
162
|
it 'returns true if the host :version is 4.0' do
|
|
165
163
|
agent1[:version] = '4.0'
|
|
166
|
-
expect(
|
|
164
|
+
expect(subject.aio_version?(agent1)).to be === true
|
|
167
165
|
end
|
|
168
166
|
|
|
169
167
|
it 'returns true if the host :pe_ver is 2015.5' do
|
|
170
168
|
agent1[:pe_ver] = '2015.5'
|
|
171
|
-
expect(
|
|
169
|
+
expect(subject.aio_version?(agent1)).to be === true
|
|
172
170
|
end
|
|
173
171
|
|
|
174
172
|
it 'returns true if the host has role aio' do
|
|
175
173
|
agent1[:roles] = agent1[:roles] | ['aio']
|
|
176
|
-
expect(
|
|
174
|
+
expect(subject.aio_version?(agent1)).to be === true
|
|
177
175
|
end
|
|
178
176
|
|
|
179
177
|
it 'returns true if the host is type aio' do
|
|
180
178
|
agent1[:type] = 'aio'
|
|
181
|
-
expect(
|
|
179
|
+
expect(subject.aio_version?(agent1)).to be === true
|
|
182
180
|
end
|
|
183
181
|
|
|
184
182
|
it 'returns true if the host is type aio-foss' do
|
|
185
183
|
agent1[:type] = 'aio-foss'
|
|
186
|
-
expect(
|
|
184
|
+
expect(subject.aio_version?(agent1)).to be === true
|
|
187
185
|
end
|
|
188
186
|
|
|
189
187
|
it 'returns true if the host is type foss-aio' do
|
|
190
188
|
agent1[:type] = 'aio-foss'
|
|
191
|
-
expect(
|
|
189
|
+
expect(subject.aio_version?(agent1)).to be === true
|
|
192
190
|
end
|
|
193
191
|
|
|
194
192
|
it 'can take an empty string for pe_ver' do
|
|
195
193
|
agent1[:pe_ver] = ''
|
|
196
|
-
expect{ subject.aio_version?(agent1) }.not_to raise_error
|
|
194
|
+
expect { subject.aio_version?(agent1) }.not_to raise_error
|
|
197
195
|
end
|
|
198
196
|
|
|
199
197
|
it 'can take an empty string for FOSS version' do
|
|
200
198
|
agent1[:version] = ''
|
|
201
|
-
expect{ subject.aio_version?(agent1) }.not_to raise_error
|
|
199
|
+
expect { subject.aio_version?(agent1) }.not_to raise_error
|
|
202
200
|
end
|
|
203
201
|
|
|
204
202
|
context 'truth table-type testing' do
|
|
205
|
-
|
|
206
203
|
before do
|
|
207
204
|
@old_pe_ver = agent1[:pe_ver]
|
|
208
205
|
@old_version = agent1[:version]
|
|
@@ -220,32 +217,32 @@ describe ClassMixedWithDSLRoles do
|
|
|
220
217
|
context 'version values table' do
|
|
221
218
|
# pe_ver, version, answer
|
|
222
219
|
versions_table = [
|
|
223
|
-
[nil,
|
|
224
|
-
[nil,
|
|
220
|
+
[nil, nil, false],
|
|
221
|
+
[nil, '', false],
|
|
225
222
|
[nil, '3.9', false],
|
|
226
|
-
[nil, '4.0', true
|
|
227
|
-
[nil, '2015.1', true
|
|
228
|
-
|
|
229
|
-
['',
|
|
230
|
-
['',
|
|
223
|
+
[nil, '4.0', true],
|
|
224
|
+
[nil, '2015.1', true],
|
|
225
|
+
\
|
|
226
|
+
['', nil, false],
|
|
227
|
+
['', '', false],
|
|
231
228
|
['', '3.9', false],
|
|
232
|
-
['', '4.0', true
|
|
233
|
-
['', '2015.1', true
|
|
234
|
-
|
|
235
|
-
['3.9',
|
|
236
|
-
['3.9',
|
|
229
|
+
['', '4.0', true],
|
|
230
|
+
['', '2015.1', true],
|
|
231
|
+
\
|
|
232
|
+
['3.9', nil, false],
|
|
233
|
+
['3.9', '', false],
|
|
237
234
|
['3.9', '3.9', false],
|
|
238
235
|
['3.9', '4.0', false],
|
|
239
236
|
['3.9', '2015.1', false],
|
|
240
|
-
|
|
241
|
-
['4.0',
|
|
242
|
-
['4.0',
|
|
237
|
+
\
|
|
238
|
+
['4.0', nil, true],
|
|
239
|
+
['4.0', '', true],
|
|
243
240
|
['4.0', '3.9', true],
|
|
244
241
|
['4.0', '4.0', true],
|
|
245
242
|
['4.0', '2015.1', true],
|
|
246
|
-
|
|
247
|
-
['2015.1',
|
|
248
|
-
['2015.1',
|
|
243
|
+
\
|
|
244
|
+
['2015.1', nil, true],
|
|
245
|
+
['2015.1', '', true],
|
|
249
246
|
['2015.1', '3.9', true],
|
|
250
247
|
['2015.1', '4.0', true],
|
|
251
248
|
['2015.1', '2015.1', true],
|
|
@@ -257,7 +254,7 @@ describe ClassMixedWithDSLRoles do
|
|
|
257
254
|
agent1[:version] = answers_row[1]
|
|
258
255
|
agent1[:roles] = nil
|
|
259
256
|
agent1[:type] = nil
|
|
260
|
-
expect(
|
|
257
|
+
expect(subject.aio_version?(agent1)).to be === answers_row[2]
|
|
261
258
|
end
|
|
262
259
|
end
|
|
263
260
|
end
|
|
@@ -266,10 +263,10 @@ describe ClassMixedWithDSLRoles do
|
|
|
266
263
|
roles_table = [
|
|
267
264
|
[nil, false],
|
|
268
265
|
[[], false],
|
|
269
|
-
[['aio'], true
|
|
266
|
+
[['aio'], true],
|
|
270
267
|
[['gun'], false],
|
|
271
|
-
[[
|
|
272
|
-
[[
|
|
268
|
+
[%w[a b], false],
|
|
269
|
+
[%w[c aio], true],
|
|
273
270
|
]
|
|
274
271
|
|
|
275
272
|
roles_table.each do |answers_row|
|
|
@@ -278,7 +275,7 @@ describe ClassMixedWithDSLRoles do
|
|
|
278
275
|
agent1[:version] = nil
|
|
279
276
|
agent1[:roles] = answers_row[0]
|
|
280
277
|
agent1[:type] = nil
|
|
281
|
-
expect(
|
|
278
|
+
expect(subject.aio_version?(agent1)).to be === answers_row[1]
|
|
282
279
|
end
|
|
283
280
|
end
|
|
284
281
|
end
|
|
@@ -291,9 +288,9 @@ describe ClassMixedWithDSLRoles do
|
|
|
291
288
|
['paionts', false],
|
|
292
289
|
['aioch', false],
|
|
293
290
|
['chaio', false],
|
|
294
|
-
['aio', true
|
|
295
|
-
['aio-', true
|
|
296
|
-
['ew-aio-ji', true
|
|
291
|
+
['aio', true],
|
|
292
|
+
['aio-', true],
|
|
293
|
+
['ew-aio-ji', true],
|
|
297
294
|
['id-aiot', false],
|
|
298
295
|
]
|
|
299
296
|
|
|
@@ -303,107 +300,105 @@ describe ClassMixedWithDSLRoles do
|
|
|
303
300
|
agent1[:version] = nil
|
|
304
301
|
agent1[:roles] = nil
|
|
305
302
|
agent1[:type] = answers_row[0]
|
|
306
|
-
expect(
|
|
303
|
+
expect(subject.aio_version?(agent1)).to be === answers_row[1]
|
|
307
304
|
end
|
|
308
305
|
end
|
|
309
306
|
end
|
|
310
|
-
|
|
311
307
|
end
|
|
312
|
-
|
|
313
308
|
end
|
|
314
309
|
|
|
315
310
|
describe '#aio_agent?' do
|
|
316
311
|
it 'returns false if agent_only check doesn\'t pass' do
|
|
317
|
-
agent1[:roles] = [
|
|
318
|
-
expect(
|
|
312
|
+
agent1[:roles] = %w[agent headless]
|
|
313
|
+
expect(subject.aio_agent?(agent1)).to be === false
|
|
319
314
|
end
|
|
320
315
|
|
|
321
316
|
it 'returns false if aio_capable? check doesn\'t pass' do
|
|
322
317
|
agent1[:pe_ver] = '3.8'
|
|
323
|
-
expect(
|
|
318
|
+
expect(subject.aio_agent?(agent1)).to be === false
|
|
324
319
|
end
|
|
325
320
|
|
|
326
321
|
it 'returns true if both checks pass' do
|
|
327
322
|
agent1[:pe_ver] = '4.0'
|
|
328
|
-
expect(
|
|
323
|
+
expect(subject.aio_agent?(agent1)).to be === true
|
|
329
324
|
end
|
|
330
325
|
end
|
|
331
326
|
|
|
332
327
|
describe '#default' do
|
|
333
328
|
it 'returns the default host when one is specified' do
|
|
334
|
-
@hosts = [
|
|
335
|
-
expect(
|
|
336
|
-
expect(
|
|
329
|
+
@hosts = [db, agent1, agent2, default, master]
|
|
330
|
+
expect(subject).to receive(:hosts).once.and_return(hosts)
|
|
331
|
+
expect(subject.default).to be == default
|
|
337
332
|
end
|
|
338
333
|
|
|
339
334
|
it 'raises an error if there is more than one default' do
|
|
340
|
-
@hosts = [
|
|
341
|
-
expect(
|
|
335
|
+
@hosts = [db, monolith, default, default]
|
|
336
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
342
337
|
expect { subject.default }.to raise_error Beaker::DSL::FailTest
|
|
343
338
|
end
|
|
344
339
|
|
|
345
340
|
it 'and raises an error if there is no default' do
|
|
346
|
-
@hosts = [
|
|
347
|
-
expect(
|
|
341
|
+
@hosts = [agent1, agent2, custom]
|
|
342
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
348
343
|
expect { subject.default }.to raise_error Beaker::DSL::FailTest
|
|
349
344
|
end
|
|
350
345
|
|
|
351
346
|
it 'returns nil if no default and masterless is set' do
|
|
352
347
|
@options = { :masterless => true }
|
|
353
|
-
expect(
|
|
354
|
-
expect(
|
|
355
|
-
expect(
|
|
348
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
349
|
+
expect(subject).to receive(:options).and_return(options)
|
|
350
|
+
expect(subject.default).to be_nil
|
|
356
351
|
end
|
|
357
352
|
end
|
|
358
353
|
|
|
359
354
|
describe '#add_role_def' do
|
|
360
355
|
it 'raises an error on unsupported role format "1role"' do
|
|
361
|
-
expect { subject.add_role_def(
|
|
356
|
+
expect { subject.add_role_def("1role") }.to raise_error ArgumentError
|
|
362
357
|
end
|
|
363
358
|
|
|
364
359
|
it 'raises an error on unsupported role format "role_!a"' do
|
|
365
|
-
expect { subject.add_role_def(
|
|
360
|
+
expect { subject.add_role_def("role_!a") }.to raise_error ArgumentError
|
|
366
361
|
end
|
|
367
362
|
|
|
368
363
|
it 'raises an error on unsupported role format "role=="' do
|
|
369
|
-
expect { subject.add_role_def(
|
|
364
|
+
expect { subject.add_role_def("role==") }.to raise_error ArgumentError
|
|
370
365
|
end
|
|
371
366
|
|
|
372
367
|
it 'creates new method for role "role_correct!"' do
|
|
373
368
|
test_role = "role_correct!"
|
|
374
|
-
subject.add_role_def(
|
|
375
|
-
expect(
|
|
376
|
-
subject.class.send(
|
|
369
|
+
subject.add_role_def(test_role)
|
|
370
|
+
expect(subject).to respond_to test_role
|
|
371
|
+
subject.class.send(:undef_method, test_role)
|
|
377
372
|
end
|
|
378
373
|
|
|
379
374
|
it 'returns a single node for a new method for a role defined in a single node' do
|
|
380
|
-
@hosts = [
|
|
381
|
-
expect(
|
|
375
|
+
@hosts = [agent1, agent2, monolith]
|
|
376
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
382
377
|
test_role = "custom_role"
|
|
383
|
-
subject.add_role_def(
|
|
384
|
-
expect(
|
|
385
|
-
expect(
|
|
386
|
-
subject.class.send(
|
|
378
|
+
subject.add_role_def(test_role)
|
|
379
|
+
expect(subject).to respond_to test_role
|
|
380
|
+
expect(subject.send(test_role)).to be == @hosts[2]
|
|
381
|
+
subject.class.send(:undef_method, test_role)
|
|
387
382
|
end
|
|
388
383
|
|
|
389
384
|
it 'returns an array of nodes for a new method for a role defined in multiple nodes' do
|
|
390
|
-
@hosts = [
|
|
391
|
-
expect(
|
|
385
|
+
@hosts = [agent1, agent2, monolith, custom]
|
|
386
|
+
expect(subject).to receive(:hosts).and_return(hosts)
|
|
392
387
|
test_role = "custom_role"
|
|
393
|
-
subject.add_role_def(
|
|
394
|
-
expect(
|
|
395
|
-
expect(
|
|
396
|
-
subject.class.send(
|
|
388
|
+
subject.add_role_def(test_role)
|
|
389
|
+
expect(subject).to respond_to test_role
|
|
390
|
+
expect(subject.send(test_role)).to be == [@hosts[2], @hosts[3]]
|
|
391
|
+
subject.class.send(:undef_method, test_role)
|
|
397
392
|
end
|
|
398
393
|
end
|
|
399
394
|
|
|
400
395
|
describe '#any_hosts_as?' do
|
|
401
396
|
it 'returns true if a host exists, false otherwise' do
|
|
402
|
-
@hosts = [
|
|
397
|
+
@hosts = [agent1, agent2]
|
|
403
398
|
# expect( subject ).to receive( :hosts ).and_return( hosts )
|
|
404
|
-
expect(
|
|
405
|
-
expect(
|
|
406
|
-
expect(
|
|
399
|
+
expect(subject).to receive(:hosts).twice.and_return(hosts)
|
|
400
|
+
expect(subject.any_hosts_as?("agent")).to be == true
|
|
401
|
+
expect(subject.any_hosts_as?("custom_role")).to be == false
|
|
407
402
|
end
|
|
408
403
|
end
|
|
409
404
|
end
|