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
data/Rakefile
CHANGED
|
@@ -4,7 +4,7 @@ require 'beaker-hostgenerator'
|
|
|
4
4
|
require 'beaker'
|
|
5
5
|
HOSTS_PRESERVED = 'log/latest/hosts_preserved.yml'
|
|
6
6
|
|
|
7
|
-
task :default => [
|
|
7
|
+
task :default => ['test:spec']
|
|
8
8
|
|
|
9
9
|
task :test do
|
|
10
10
|
Rake::Task['test:spec'].invoke
|
|
@@ -14,9 +14,7 @@ task :spec do
|
|
|
14
14
|
Rake::Task['test:spec'].invoke
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
task :acceptance => ['test:base', 'test:puppetgit', 'test:hypervisor']
|
|
19
|
-
|
|
17
|
+
task :acceptance => ['test:base', 'test:hypervisor']
|
|
20
18
|
|
|
21
19
|
task :yard do
|
|
22
20
|
Rake::Task['docs:gen'].invoke
|
|
@@ -28,9 +26,9 @@ end
|
|
|
28
26
|
|
|
29
27
|
module HarnessOptions
|
|
30
28
|
defaults = {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
:tests => ['tests'],
|
|
30
|
+
:log_level => 'debug',
|
|
31
|
+
:preserve_hosts => 'onfail',
|
|
34
32
|
}
|
|
35
33
|
|
|
36
34
|
DEFAULTS = defaults
|
|
@@ -60,31 +58,28 @@ module HarnessOptions
|
|
|
60
58
|
final_options.merge!(intermediary_options)
|
|
61
59
|
final_options.merge!(local_overrides)
|
|
62
60
|
end
|
|
63
|
-
|
|
64
61
|
end
|
|
65
62
|
|
|
66
63
|
def hosts_file_env
|
|
67
|
-
ENV
|
|
64
|
+
ENV.fetch('BEAKER_HOSTS', nil)
|
|
68
65
|
end
|
|
69
66
|
|
|
70
|
-
def hosts_opt(use_preserved_hosts=false)
|
|
67
|
+
def hosts_opt(use_preserved_hosts = false)
|
|
71
68
|
if use_preserved_hosts
|
|
72
69
|
"--hosts=#{HOSTS_PRESERVED}"
|
|
70
|
+
elsif hosts_file_env
|
|
71
|
+
"--hosts=#{hosts_file_env}"
|
|
73
72
|
else
|
|
74
|
-
|
|
75
|
-
"--hosts=#{hosts_file_env}"
|
|
76
|
-
else
|
|
77
|
-
"--hosts=tmp/#{HOSTS_FILE}"
|
|
78
|
-
end
|
|
73
|
+
"--hosts=tmp/#{HOSTS_FILE}"
|
|
79
74
|
end
|
|
80
75
|
end
|
|
81
76
|
|
|
82
77
|
def agent_target
|
|
83
|
-
ENV['TEST_TARGET'] || '
|
|
78
|
+
ENV['TEST_TARGET'] || 'centos7-64af'
|
|
84
79
|
end
|
|
85
80
|
|
|
86
81
|
def master_target
|
|
87
|
-
ENV['MASTER_TEST_TARGET'] || '
|
|
82
|
+
ENV['MASTER_TEST_TARGET'] || 'centos7-64default.mdcal'
|
|
88
83
|
end
|
|
89
84
|
|
|
90
85
|
def test_targets
|
|
@@ -94,11 +89,10 @@ end
|
|
|
94
89
|
HOSTS_FILE = "#{test_targets}-#{SecureRandom.uuid}.yaml"
|
|
95
90
|
|
|
96
91
|
def beaker_test(mode = :base, options = {})
|
|
97
|
-
|
|
98
92
|
preserved_hosts_mode = options[:hosts] == HOSTS_PRESERVED
|
|
99
93
|
final_options = HarnessOptions.final_options(mode, options)
|
|
100
94
|
|
|
101
|
-
options_opt
|
|
95
|
+
options_opt = ""
|
|
102
96
|
# preserved hosts can not be used with an options file (BKR-670)
|
|
103
97
|
# one can still use OPTIONS
|
|
104
98
|
|
|
@@ -106,94 +100,88 @@ def beaker_test(mode = :base, options = {})
|
|
|
106
100
|
options_file = 'merged_options.rb'
|
|
107
101
|
options_opt = "--options-file=#{options_file}"
|
|
108
102
|
File.open(options_file, 'w') do |merged|
|
|
109
|
-
merged.puts
|
|
110
|
-
# Copy this file to local_options.rb and adjust as needed if you wish to run
|
|
111
|
-
# with some local overrides.
|
|
103
|
+
merged.puts <<~EOS
|
|
104
|
+
# Copy this file to local_options.rb and adjust as needed if you wish to run
|
|
105
|
+
# with some local overrides.
|
|
112
106
|
EOS
|
|
113
107
|
merged.puts(final_options)
|
|
114
108
|
end
|
|
115
109
|
end
|
|
116
110
|
|
|
117
|
-
tests = ENV['TESTS'] || ENV
|
|
111
|
+
tests = ENV['TESTS'] || ENV.fetch('TEST', nil)
|
|
118
112
|
tests_opt = ""
|
|
119
113
|
tests_opt = "--tests=#{tests}" if tests
|
|
120
114
|
|
|
121
115
|
overriding_options = ENV['OPTIONS'].to_s
|
|
122
116
|
|
|
123
|
-
args = [options_opt, hosts_opt(preserved_hosts_mode), tests_opt,
|
|
124
|
-
*overriding_options.split(' ')].compact
|
|
117
|
+
args = [options_opt, hosts_opt(preserved_hosts_mode), tests_opt, *overriding_options.split(' ')].compact
|
|
125
118
|
|
|
126
119
|
sh("beaker", *args)
|
|
127
120
|
end
|
|
128
121
|
|
|
129
|
-
|
|
130
122
|
namespace :test do
|
|
131
|
-
USAGE =
|
|
132
|
-
You may set BEAKER_HOSTS=config/nodes/foo.yaml or include it in an acceptance-options.rb for Beaker,
|
|
133
|
-
or specify TEST_TARGET in a form beaker-hostgenerator accepts, e.g. ubuntu1504-64a.
|
|
134
|
-
You may override the default master test target by specifying MASTER_TEST_TARGET.
|
|
135
|
-
You may set TESTS=path/to/test,and/more/tests.
|
|
136
|
-
You may set additional Beaker OPTIONS='--more --options'
|
|
137
|
-
If there is a Beaker options hash in a ./acceptance/local_options.rb, it will be included.
|
|
138
|
-
Commandline options set through the above environment variables will override settings in this file.
|
|
123
|
+
USAGE = <<~EOS
|
|
124
|
+
You may set BEAKER_HOSTS=config/nodes/foo.yaml or include it in an acceptance-options.rb for Beaker,
|
|
125
|
+
or specify TEST_TARGET in a form beaker-hostgenerator accepts, e.g. ubuntu1504-64a.
|
|
126
|
+
You may override the default master test target by specifying MASTER_TEST_TARGET.
|
|
127
|
+
You may set TESTS=path/to/test,and/more/tests.
|
|
128
|
+
You may set additional Beaker OPTIONS='--more --options'
|
|
129
|
+
If there is a Beaker options hash in a ./acceptance/local_options.rb, it will be included.
|
|
130
|
+
Commandline options set through the above environment variables will override settings in this file.
|
|
139
131
|
EOS
|
|
140
132
|
|
|
141
133
|
desc 'Run specs and check for deprecation warnings'
|
|
142
134
|
task :spec do
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
135
|
+
Dir.chdir(__dir__) do
|
|
136
|
+
exit_status = 1
|
|
137
|
+
output = ''
|
|
138
|
+
Open3.popen3("bundle exec rspec") do |_stdin, stdout, _stderr, wait_thr|
|
|
139
|
+
while (line = stdout.gets)
|
|
140
|
+
puts line
|
|
141
|
+
end
|
|
142
|
+
output = stdout.to_s
|
|
143
|
+
fail "Failed to 'bundle exec rspec' (exit status: #{wait_thr.value})" if not wait_thr.value.success?
|
|
144
|
+
|
|
145
|
+
exit_status = wait_thr.value
|
|
154
146
|
end
|
|
155
|
-
exit_status
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
#check for deprecation warnings
|
|
159
|
-
if output.include?('Deprecation Warnings')
|
|
160
|
-
fail "DEPRECATION WARNINGS in spec generation, please fix!"
|
|
147
|
+
if exit_status != /0/
|
|
148
|
+
# check for deprecation warnings
|
|
149
|
+
fail "DEPRECATION WARNINGS in spec generation, please fix!" if output.include?('Deprecation Warnings')
|
|
161
150
|
end
|
|
162
151
|
end
|
|
163
|
-
Dir.chdir( original_dir )
|
|
164
152
|
end
|
|
165
153
|
|
|
166
|
-
desc
|
|
167
|
-
Run the base beaker acceptance tests
|
|
168
|
-
#{USAGE}
|
|
154
|
+
desc <<~EOS
|
|
155
|
+
Run the base beaker acceptance tests
|
|
156
|
+
#{USAGE}
|
|
169
157
|
EOS
|
|
170
|
-
task :base
|
|
158
|
+
task :base => 'gen_hosts' do
|
|
171
159
|
beaker_test(:base)
|
|
172
160
|
end
|
|
173
161
|
|
|
174
|
-
desc
|
|
175
|
-
Run the subcommand beaker acceptance tests
|
|
176
|
-
#{USAGE}
|
|
162
|
+
desc <<~EOS
|
|
163
|
+
Run the subcommand beaker acceptance tests
|
|
164
|
+
#{USAGE}
|
|
177
165
|
EOS
|
|
178
166
|
task :subcommands => 'gen_hosts' do
|
|
179
167
|
beaker_test(:subcommands)
|
|
180
168
|
end
|
|
181
169
|
|
|
182
|
-
desc
|
|
183
|
-
Run the hypervisor beaker acceptance tests
|
|
184
|
-
#{USAGE}
|
|
170
|
+
desc <<~EOS
|
|
171
|
+
Run the hypervisor beaker acceptance tests
|
|
172
|
+
#{USAGE}
|
|
185
173
|
EOS
|
|
186
|
-
task :hypervisor
|
|
174
|
+
task :hypervisor => 'gen_hosts' do
|
|
187
175
|
beaker_test(:hypervisor)
|
|
188
176
|
end
|
|
189
177
|
|
|
190
|
-
|
|
191
178
|
desc 'Generate Beaker Host Config File'
|
|
192
179
|
task :gen_hosts do
|
|
193
|
-
if hosts_file_env
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
180
|
+
next if hosts_file_env
|
|
181
|
+
|
|
182
|
+
arguments = [test_targets]
|
|
183
|
+
arguments += ['--hypervisor', ENV['BEAKER_HYPERVISOR']] if ENV['BEAKER_HYPERVISOR']
|
|
184
|
+
cli = BeakerHostGenerator::CLI.new(arguments)
|
|
197
185
|
FileUtils.mkdir_p('tmp') # -p ignores when dir already exists
|
|
198
186
|
File.open("tmp/#{HOSTS_FILE}", 'w') do |fh|
|
|
199
187
|
fh.print(cli.execute)
|
|
@@ -201,7 +189,6 @@ Run the hypervisor beaker acceptance tests
|
|
|
201
189
|
end
|
|
202
190
|
end
|
|
203
191
|
|
|
204
|
-
|
|
205
192
|
###########################################################
|
|
206
193
|
#
|
|
207
194
|
# History Tasks
|
|
@@ -210,16 +197,12 @@ end
|
|
|
210
197
|
namespace :history do
|
|
211
198
|
desc 'Generate HISTORY.md'
|
|
212
199
|
task :gen do
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
if !output.include?('success')
|
|
218
|
-
raise "History generation failed"
|
|
200
|
+
Dir.chdir(__dir__) do
|
|
201
|
+
output = `bundle exec ruby history.rb .`
|
|
202
|
+
puts output
|
|
203
|
+
raise "History generation failed" if !output.include?('success')
|
|
219
204
|
end
|
|
220
|
-
Dir.chdir( original_dir )
|
|
221
205
|
end
|
|
222
|
-
|
|
223
206
|
end
|
|
224
207
|
|
|
225
208
|
###########################################################
|
|
@@ -231,62 +214,53 @@ DOCS_DIR = 'yard_docs'
|
|
|
231
214
|
DOCS_DAEMON = "yard server --reload --daemon --docroot #{DOCS_DIR}"
|
|
232
215
|
FOREGROUND_SERVER = "bundle exec yard server --reload --verbose lib/beaker --docroot #{DOCS_DIR}"
|
|
233
216
|
|
|
234
|
-
def running?(
|
|
217
|
+
def running?(cmdline)
|
|
235
218
|
ps = `ps -ef`
|
|
236
|
-
found = ps.lines.grep(
|
|
237
|
-
if found.length > 1
|
|
238
|
-
raise StandardError, "Found multiple YARD Servers. Don't know what to do."
|
|
239
|
-
end
|
|
219
|
+
found = ps.lines.grep(/#{Regexp.quote(cmdline)}/)
|
|
220
|
+
raise StandardError, "Found multiple YARD Servers. Don't know what to do." if found.length > 1
|
|
240
221
|
|
|
241
222
|
yes = found.empty? ? false : true
|
|
242
223
|
return yes, found.first
|
|
243
224
|
end
|
|
244
225
|
|
|
245
|
-
def pid_from(
|
|
226
|
+
def pid_from(output)
|
|
246
227
|
output.squeeze(' ').strip.split(' ')[1]
|
|
247
228
|
end
|
|
248
229
|
|
|
249
230
|
desc 'Start the documentation server in the foreground'
|
|
250
231
|
task :docs => 'docs:clear' do
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
Dir.chdir( original_dir )
|
|
232
|
+
Dir.chdir(__dir__) do
|
|
233
|
+
sh FOREGROUND_SERVER
|
|
234
|
+
end
|
|
255
235
|
end
|
|
256
236
|
|
|
257
237
|
namespace :docs do
|
|
258
|
-
|
|
259
238
|
desc 'Clear the generated documentation cache'
|
|
260
239
|
task :clear do
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
Dir.chdir( original_dir )
|
|
240
|
+
Dir.chdir(__dir__) do
|
|
241
|
+
sh "rm -rf #{DOCS_DIR}"
|
|
242
|
+
end
|
|
265
243
|
end
|
|
266
244
|
|
|
267
245
|
desc 'Generate static documentation'
|
|
268
246
|
task :gen => 'docs:clear' do
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
if /\[warn\]|\[error\]/.match?(output)
|
|
274
|
-
fail "Errors/Warnings during yard documentation generation"
|
|
247
|
+
Dir.chdir(__dir__) do
|
|
248
|
+
output = `bundle exec yard doc -o #{DOCS_DIR}`
|
|
249
|
+
puts output
|
|
250
|
+
fail "Errors/Warnings during yard documentation generation" if /\[warn\]|\[error\]/.match?(output)
|
|
275
251
|
end
|
|
276
|
-
Dir.chdir( original_dir )
|
|
277
252
|
end
|
|
278
253
|
|
|
279
254
|
desc 'Run the documentation server in the background, alias `bg`'
|
|
280
255
|
task :background => 'docs:clear' do
|
|
281
|
-
yes, output = running?(
|
|
256
|
+
yes, output = running?(DOCS_DAEMON)
|
|
282
257
|
if yes
|
|
283
258
|
puts "Not starting a new YARD Server..."
|
|
284
|
-
puts "Found one running with pid #{pid_from(
|
|
259
|
+
puts "Found one running with pid #{pid_from(output)}."
|
|
285
260
|
else
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
Dir.chdir( original_dir )
|
|
261
|
+
Dir.chdir(__dir__) do
|
|
262
|
+
sh "bundle exec #{DOCS_DAEMON}"
|
|
263
|
+
end
|
|
290
264
|
end
|
|
291
265
|
end
|
|
292
266
|
|
|
@@ -294,9 +268,9 @@ namespace :docs do
|
|
|
294
268
|
|
|
295
269
|
desc 'Check the status of the documentation server'
|
|
296
270
|
task :status do
|
|
297
|
-
yes, output = running?(
|
|
271
|
+
yes, output = running?(DOCS_DAEMON)
|
|
298
272
|
if yes
|
|
299
|
-
pid = pid_from(
|
|
273
|
+
pid = pid_from(output)
|
|
300
274
|
puts "Found a YARD Server running with pid #{pid}"
|
|
301
275
|
else
|
|
302
276
|
puts "Could not find a running YARD Server."
|
|
@@ -305,16 +279,16 @@ namespace :docs do
|
|
|
305
279
|
|
|
306
280
|
desc "Stop a running YARD Server"
|
|
307
281
|
task :stop do
|
|
308
|
-
yes, output = running?(
|
|
282
|
+
yes, output = running?(DOCS_DAEMON)
|
|
309
283
|
if yes
|
|
310
|
-
pid = pid_from(
|
|
284
|
+
pid = pid_from(output)
|
|
311
285
|
puts "Found a YARD Server running with pid #{pid}"
|
|
312
286
|
`kill #{pid}`
|
|
313
287
|
puts "Stopping..."
|
|
314
|
-
yes, _output = running?(
|
|
288
|
+
yes, _output = running?(DOCS_DAEMON)
|
|
315
289
|
if yes
|
|
316
290
|
`kill -9 #{pid}`
|
|
317
|
-
yes, _output = running?(
|
|
291
|
+
yes, _output = running?(DOCS_DAEMON)
|
|
318
292
|
if yes
|
|
319
293
|
puts "Could not Stop Server!"
|
|
320
294
|
else
|
|
@@ -343,3 +317,17 @@ begin
|
|
|
343
317
|
rescue LoadError
|
|
344
318
|
# Optional group in bundler
|
|
345
319
|
end
|
|
320
|
+
|
|
321
|
+
begin
|
|
322
|
+
require 'rubocop/rake_task'
|
|
323
|
+
rescue LoadError
|
|
324
|
+
# RuboCop is an optional group
|
|
325
|
+
else
|
|
326
|
+
RuboCop::RakeTask.new(:rubocop) do |task|
|
|
327
|
+
# These make the rubocop experience maybe slightly less terrible
|
|
328
|
+
task.options = ['--display-cop-names', '--display-style-guide', '--extra-details']
|
|
329
|
+
|
|
330
|
+
# Use Rubocop's Github Actions formatter if possible
|
|
331
|
+
task.formatters << 'github' if ENV['GITHUB_ACTIONS'] == 'true'
|
|
332
|
+
end
|
|
333
|
+
end
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
}.merge(eval File.read('acceptance/config/acceptance-options.rb'))
|
|
2
|
+
:tests => 'acceptance/tests/base',
|
|
3
|
+
}.merge(eval File.read('acceptance/config/acceptance-options.rb'))
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
}.merge(eval File.read('acceptance/config/acceptance-options.rb'))
|
|
2
|
+
:tests => 'acceptance/tests/hypervisor',
|
|
3
|
+
}.merge(eval File.read('acceptance/config/acceptance-options.rb'))
|
|
@@ -9,7 +9,7 @@ task :validate do
|
|
|
9
9
|
Dir['manifests/**/*.pp'].each do |manifest|
|
|
10
10
|
sh "puppet parser validate --noop #{manifest}"
|
|
11
11
|
end
|
|
12
|
-
Dir['spec/**/*.rb','lib/**/*.rb'].each do |ruby_file|
|
|
12
|
+
Dir['spec/**/*.rb', 'lib/**/*.rb'].each do |ruby_file|
|
|
13
13
|
sh "ruby -c #{ruby_file}" unless ruby_file.include?('spec/fixtures')
|
|
14
14
|
end
|
|
15
15
|
Dir['templates/**/*.erb'].each do |template|
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
require 'spec_helper_acceptance'
|
|
2
2
|
|
|
3
3
|
describe "my tests" do
|
|
4
|
-
|
|
5
4
|
# an example using the beaker DSL
|
|
6
5
|
# use http://www.rubydoc.info/github/puppetlabs/beaker/Beaker/DSL
|
|
7
6
|
it "says hello!" do
|
|
8
|
-
result = shell(
|
|
7
|
+
result = shell('echo hello')
|
|
9
8
|
expect(result.stdout).to match(/hello/)
|
|
10
9
|
end
|
|
11
10
|
|
|
@@ -16,10 +15,10 @@ describe "my tests" do
|
|
|
16
15
|
end
|
|
17
16
|
|
|
18
17
|
it "can create and confirm a file" do
|
|
19
|
-
shell(
|
|
18
|
+
shell('rm -f demo.txt')
|
|
20
19
|
create_remote_file(default, 'demo.txt', 'foo\nfoo\nfoo\n')
|
|
21
|
-
shell(
|
|
22
|
-
shell(
|
|
20
|
+
shell('grep foo demo.txt')
|
|
21
|
+
shell('grep bar demo.txt', :acceptable_exit_codes => [1])
|
|
23
22
|
end
|
|
24
23
|
|
|
25
24
|
it "is able to apply manifests" do
|
|
@@ -29,9 +28,9 @@ describe "my tests" do
|
|
|
29
28
|
ensure => absent,}"
|
|
30
29
|
manifest_3 = "user {'root':
|
|
31
30
|
ensure => present,}"
|
|
32
|
-
apply_manifest(
|
|
33
|
-
apply_manifest(
|
|
34
|
-
apply_manifest(
|
|
31
|
+
apply_manifest(manifest_1, :expect_changes => true)
|
|
32
|
+
apply_manifest(manifest_2, :expect_changes => true)
|
|
33
|
+
apply_manifest(manifest_3)
|
|
35
34
|
end
|
|
36
35
|
|
|
37
36
|
describe service('sshd') do
|
|
@@ -47,9 +46,8 @@ describe "my tests" do
|
|
|
47
46
|
end
|
|
48
47
|
|
|
49
48
|
context "can use both serverspec and Beaker DSL" do
|
|
50
|
-
|
|
51
49
|
it "can create a file" do
|
|
52
|
-
shell(
|
|
50
|
+
shell('rm -f /tmp/demo.txt')
|
|
53
51
|
manifest = "file {'demofile':
|
|
54
52
|
path => '/tmp/demo.txt',
|
|
55
53
|
ensure => present,
|
|
@@ -64,6 +62,4 @@ describe "my tests" do
|
|
|
64
62
|
it { is_expected.to contain 'this is my file.' }
|
|
65
63
|
end
|
|
66
64
|
end
|
|
67
|
-
|
|
68
|
-
|
|
69
65
|
end
|
|
@@ -3,7 +3,7 @@ require 'beaker-rspec'
|
|
|
3
3
|
unless ENV['RS_PROVISION'] == 'no' or ENV['BEAKER_provision'] == 'no'
|
|
4
4
|
# This will install the latest available package on el and deb based
|
|
5
5
|
# systems fail on windows and osx, and install via gem on other *nixes
|
|
6
|
-
foss_opts = {:default_action => 'gem_install'}
|
|
6
|
+
foss_opts = { :default_action => 'gem_install' }
|
|
7
7
|
|
|
8
8
|
if default.is_pe?; then
|
|
9
9
|
install_pe;
|
|
@@ -12,16 +12,14 @@ unless ENV['RS_PROVISION'] == 'no' or ENV['BEAKER_provision'] == 'no'
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
hosts.each do |host|
|
|
15
|
-
unless host.is_pe?
|
|
16
|
-
on host, "/bin/echo '' > #{host.puppet('hiera_config')}"
|
|
17
|
-
end
|
|
15
|
+
on host, "/bin/echo '' > #{host.puppet('hiera_config')}" unless host.is_pe?
|
|
18
16
|
on host, "mkdir -p #{host['distmoduledir']}"
|
|
19
17
|
end
|
|
20
18
|
end
|
|
21
19
|
|
|
22
20
|
RSpec.configure do |c|
|
|
23
21
|
# Project root
|
|
24
|
-
proj_root = File.expand_path(File.join(
|
|
22
|
+
proj_root = File.expand_path(File.join(__dir__, '..'))
|
|
25
23
|
|
|
26
24
|
# Readable test descriptions
|
|
27
25
|
c.formatter = :documentation
|
|
@@ -11,7 +11,7 @@ end
|
|
|
11
11
|
# Returns the absolute path where file fixtures are located.
|
|
12
12
|
def fixture_path
|
|
13
13
|
@fixture_path ||=
|
|
14
|
-
File.expand_path(File.join(
|
|
14
|
+
File.expand_path(File.join(__dir__, '..', '..', 'fixtures', 'files'))
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
# Returns the contents of a named fixture file, to be found in `fixture_path`.
|
|
@@ -27,7 +27,7 @@ def create_remote_file_from_fixture(fixture, host, remote_path, filename)
|
|
|
27
27
|
full_filename = File.join(remote_path, filename)
|
|
28
28
|
contents = fixture_contents fixture
|
|
29
29
|
create_remote_file host, full_filename, contents
|
|
30
|
-
[
|
|
30
|
+
[full_filename, contents]
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
# Create a file locally, in the `local_path`, with file name `filename`,
|
|
@@ -43,7 +43,7 @@ def create_local_file_from_fixture(fixture, local_path, filename, perms = nil)
|
|
|
43
43
|
end
|
|
44
44
|
FileUtils.chmod perms, full_filename if perms
|
|
45
45
|
|
|
46
|
-
[
|
|
46
|
+
[full_filename, contents]
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
# Provide debugging information for tests which are known to fail intermittently
|
|
@@ -59,7 +59,7 @@ end
|
|
|
59
59
|
# assert_equal expected, user
|
|
60
60
|
# end
|
|
61
61
|
#
|
|
62
|
-
# Absorbs any
|
|
62
|
+
# Absorbs any MiniTest::Assertion from a failing test assertion in the block.
|
|
63
63
|
# This implies that the intermittent failure is caught and the suite will not
|
|
64
64
|
# go red for this failure. Intended to be used with the Jenkins Build Failure
|
|
65
65
|
# Analyzer (or similar), to detect these failures without failing the build.
|
|
@@ -68,8 +68,9 @@ end
|
|
|
68
68
|
def fails_intermittently(issue_link, args = {})
|
|
69
69
|
raise ArgumentError, "provide a Jira ticket link" unless issue_link
|
|
70
70
|
raise ArgumentError, "a block is required" unless block_given?
|
|
71
|
+
|
|
71
72
|
yield
|
|
72
|
-
rescue
|
|
73
|
+
rescue MiniTest::Assertion, StandardError, SignalException # we have a test failure!
|
|
73
74
|
STDERR.puts "\n\nIntermittent test failure! See: #{issue_link}"
|
|
74
75
|
|
|
75
76
|
if args.empty?
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
ruby_version, ruby_source = ENV
|
|
1
|
+
ruby_version, ruby_source = ENV.fetch('RUBY_VER', nil), "job parameter"
|
|
2
2
|
unless ruby_version
|
|
3
3
|
ruby_version = "2.4.1"
|
|
4
4
|
ruby_source = "default"
|
|
5
5
|
end
|
|
6
6
|
test_name "Install and configure Ruby #{ruby_version} (from #{ruby_source}) on the SUT" do
|
|
7
|
-
|
|
8
7
|
step 'Ensure that the default system is an el-based system' do
|
|
9
8
|
# The pre-suite currently only supports el systems, and we should
|
|
10
|
-
#fail early if the default platform is not a supported platform
|
|
9
|
+
# fail early if the default platform is not a supported platform
|
|
11
10
|
assert(default.platform.variant == 'el',
|
|
12
11
|
"Expected the platform variant to be 'el', not #{default.platform.variant}")
|
|
13
12
|
end
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
test_name 'Install beaker and checkout branch if necessary' do
|
|
2
|
-
|
|
3
2
|
step 'Download the beaker git repo' do
|
|
4
|
-
|
|
3
|
+
on default, 'git clone https://github.com/puppetlabs/beaker.git /opt/beaker/'
|
|
5
4
|
end
|
|
6
5
|
|
|
7
6
|
step 'Detect if checking out branch for testing and checkout' do
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
$LOAD_PATH << File.expand_path(File.join(
|
|
1
|
+
$LOAD_PATH << File.expand_path(File.join(__dir__, '..', '..', '..', '..', 'lib'))
|
|
2
2
|
|
|
3
3
|
require 'helpers/test_helper'
|
|
4
4
|
|
|
5
5
|
test_name "dsl::helpers::host_helpers test configuration validation" do
|
|
6
6
|
step "Validate hosts configuration" do
|
|
7
7
|
assert (hosts.size > 1),
|
|
8
|
-
|
|
8
|
+
"dsl::helpers::host_helpers acceptance tests require at least two hosts"
|
|
9
9
|
|
|
10
10
|
agents = select_hosts(:roles => "agent")
|
|
11
11
|
assert (agents.size > 1),
|
|
12
|
-
|
|
12
|
+
"dsl::helpers::host_helpers acceptance tests require at least two hosts with the :agent role"
|
|
13
13
|
|
|
14
14
|
assert default,
|
|
15
|
-
|
|
15
|
+
"dsl::helpers::host_helpers acceptance tests require a default host"
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require 'hocon/config_value_factory'
|
|
2
2
|
|
|
3
3
|
test_name 'Hocon Helpers Test' do
|
|
4
|
-
|
|
5
4
|
hocon_filename = 'hocon.conf'
|
|
6
5
|
step 'setup : create hocon file to play with' do
|
|
7
6
|
hocon_content = <<-END
|
|
@@ -91,4 +90,4 @@ test_name 'Hocon Helpers Test' do
|
|
|
91
90
|
end
|
|
92
91
|
end
|
|
93
92
|
end
|
|
94
|
-
end
|
|
93
|
+
end
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
require "helpers/test_helper"
|
|
2
2
|
|
|
3
3
|
test_name "dsl::helpers::host_helpers #add_system32_hosts_entry" do
|
|
4
|
-
|
|
5
4
|
confine_block :to, :platform => /windows/ do
|
|
6
|
-
|
|
7
5
|
step "#add_system32_hosts_entry fails when run on a non-powershell platform" do
|
|
8
6
|
# NOTE: would expect this to be better documented.
|
|
9
7
|
if default.is_powershell?
|
|
@@ -36,7 +34,6 @@ test_name "dsl::helpers::host_helpers #add_system32_hosts_entry" do
|
|
|
36
34
|
end
|
|
37
35
|
|
|
38
36
|
confine_block :except, :platform => /windows/ do
|
|
39
|
-
|
|
40
37
|
step "#add_system32_hosts_entry CURRENTLY fails with RuntimeError when run on a non-windows platform" do
|
|
41
38
|
# NOTE: would expect this to behave the same way it does on a windows
|
|
42
39
|
# non-powershell platform (raises Beaker::Host::CommandFailure), or
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require "helpers/test_helper"
|
|
2
2
|
|
|
3
3
|
test_name "dsl::helpers::host_helpers #archive_file_from" do
|
|
4
|
-
|
|
5
4
|
step "archiveroot parameter defaults to `archive/sut-files`" do
|
|
6
5
|
# Create a remote file to archive
|
|
7
6
|
filepath = default.tmpfile('archive-file-test')
|
|
@@ -20,6 +19,9 @@ test_name "dsl::helpers::host_helpers #archive_file_from" do
|
|
|
20
19
|
end
|
|
21
20
|
|
|
22
21
|
step "fails archive_file_from when from_path is non-existant" do
|
|
22
|
+
# beaker-docker can't deal with closing the connection
|
|
23
|
+
confine :except, :hypervisor => 'docker'
|
|
24
|
+
|
|
23
25
|
filepath = "foo-filepath-should-not-exist"
|
|
24
26
|
assert_raises IOError do
|
|
25
27
|
archive_file_from(default, filepath)
|