beaker 4.40.2 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 +17 -28
- data/Gemfile +12 -7
- 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 +80 -82
- data/lib/beaker/host/unix/file.rb +38 -43
- data/lib/beaker/host/unix/group.rb +1 -1
- data/lib/beaker/host/unix/pkg.rb +154 -417
- 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 +93 -198
- 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 -24
- 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 +22 -27
- data/lib/beaker/platform.rb +38 -46
- 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 -73
- data/spec/beaker/host/unix/pkg_spec.rb +155 -401
- 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 +172 -326
- 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 -36
- 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 +48 -53
- data/spec/matchers.rb +8 -7
- data/spec/mocks.rb +1 -6
- data/spec/spec_helper.rb +0 -1
- metadata +7 -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
@@ -8,7 +8,7 @@ test_name "dsl::helpers::host_helpers #shell" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
step "#shell makes command output available via `.stdout` on success" do
|
11
|
-
output = shell(%
|
11
|
+
output = shell(%{echo "echo via on"}).stdout
|
12
12
|
assert_equal "echo via on\n", output
|
13
13
|
end
|
14
14
|
|
@@ -18,7 +18,7 @@ test_name "dsl::helpers::host_helpers #shell" do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
step "#shell makes exit status available via `.exit_code`" do
|
21
|
-
status = shell(%
|
21
|
+
status = shell(%{echo "echo via on"}).exit_code
|
22
22
|
assert_equal 0, status
|
23
23
|
end
|
24
24
|
|
@@ -32,7 +32,7 @@ test_name "dsl::helpers::host_helpers #shell" do
|
|
32
32
|
|
33
33
|
step "#shell with :acceptable_exit_codes will fail for other exit codes" do
|
34
34
|
assert_raises(Beaker::Host::CommandFailure) do
|
35
|
-
shell %
|
35
|
+
shell %{echo "echo via on"}, :acceptable_exit_codes => [127]
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -44,8 +44,8 @@ test_name "dsl::helpers::host_helpers #shell" do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
step "#shell allows assertions to be used in the optional block" do
|
47
|
-
shell %
|
48
|
-
assert_match(/\d+:\d+/, stdout)
|
47
|
+
shell %{echo "${RANDOM}:${RANDOM}"} do |result|
|
48
|
+
assert_match(/\d+:\d+/, result.stdout)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -1,10 +1,8 @@
|
|
1
1
|
require "helpers/test_helper"
|
2
2
|
|
3
3
|
test_name "dsl::helpers::host_helpers #upgrade_package" do
|
4
|
-
|
5
4
|
# NOTE: there does not appear to be a way to confine just to cygwin hosts
|
6
5
|
confine_block :to, :platform => /windows/ do
|
7
|
-
|
8
6
|
# NOTE: check_for_package on windows currently fails as follows:
|
9
7
|
#
|
10
8
|
# ArgumentError: wrong number of arguments (3 for 1..2)
|
@@ -20,7 +18,6 @@ test_name "dsl::helpers::host_helpers #upgrade_package" do
|
|
20
18
|
end
|
21
19
|
|
22
20
|
confine_block :to, :platform => /osx/ do
|
23
|
-
|
24
21
|
step "#upgrade_package CURRENTLY fails with a RuntimeError on OS X" do
|
25
22
|
# NOTE: documentation could be better on this method
|
26
23
|
assert_raises RuntimeError do
|
@@ -30,8 +27,10 @@ test_name "dsl::helpers::host_helpers #upgrade_package" do
|
|
30
27
|
end
|
31
28
|
|
32
29
|
confine_block :except, :platform => /windows|osx/ do
|
33
|
-
|
30
|
+
# rsync is broken on beaker-docker
|
31
|
+
confine :except, :hypervisor => 'docker'
|
34
32
|
|
33
|
+
confine_block :to, :platform => /centos|el-\d/ do
|
35
34
|
step "#upgrade_package CURRENTLY does not fail on CentOS if unknown package is specified" do
|
36
35
|
# NOTE: I would expect this to fail with an Beaker::Host::CommandFailure,
|
37
36
|
# but maybe it's because yum doesn't really care:
|
@@ -48,7 +47,6 @@ test_name "dsl::helpers::host_helpers #upgrade_package" do
|
|
48
47
|
end
|
49
48
|
|
50
49
|
confine_block :except, :platform => /centos|el-\d/ do
|
51
|
-
|
52
50
|
step "#upgrade_package fails if package is not already installed" do
|
53
51
|
assert_raises Beaker::Host::CommandFailure do
|
54
52
|
upgrade_package default, "non-existent-package-name"
|
@@ -13,32 +13,29 @@ test_name "DSL::Structure::PlatformTagConfiner" do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
step "#{pstc_method_name} can remove hosts from a test, or be skipped if empty" do
|
16
|
-
assert hosts.length
|
16
|
+
assert hosts.length > 0, "#{pstc_method_name} did not have enough hosts to test"
|
17
17
|
previous_hosts = hosts.dup
|
18
18
|
|
19
19
|
options[:platform_tag_confines] = [
|
20
20
|
:platform => /#{default[:platform]}/,
|
21
21
|
:tag_reason_hash => {
|
22
|
-
'tag1' => 'reason1'
|
23
|
-
}
|
22
|
+
'tag1' => 'reason1',
|
23
|
+
},
|
24
24
|
]
|
25
25
|
|
26
26
|
begin
|
27
|
-
tag(
|
27
|
+
tag('tag1')
|
28
28
|
rescue Beaker::DSL::Outcomes::SkipTest => e
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
else
|
38
|
-
fail "#{pstc_method_name} raised unexpected SkipTest exception: #{e}"
|
39
|
-
end
|
29
|
+
fail "#{pstc_method_name} raised unexpected SkipTest exception: #{e}" unless /^No\ suitable\ hosts\ found/.match?(e.message)
|
30
|
+
# SkipTest is raised in the case when there are no hosts leftover for a test
|
31
|
+
# after confining. It's a very common acceptance test case where all of the
|
32
|
+
# hosts involved are of the same platform, and are thus all confined
|
33
|
+
# away by the code being run here. In this case, the hosts object will not
|
34
|
+
# be altered, but should be considered a pass, since the fact that SkipTest
|
35
|
+
# is being raised confirms that a lower number of hosts are coming out of
|
36
|
+
# the confine (0) than came in (>0, according to our pre-condition assertion)
|
40
37
|
else
|
41
|
-
assert hosts.length
|
38
|
+
assert hosts.length < previous_hosts.length, "#{pstc_method_name} did not change hosts array"
|
42
39
|
end
|
43
40
|
|
44
41
|
# cleanup
|
@@ -46,4 +43,4 @@ test_name "DSL::Structure::PlatformTagConfiner" do
|
|
46
43
|
options[:platform_tag_confines] = nil
|
47
44
|
@hosts = previous_hosts
|
48
45
|
end
|
49
|
-
end
|
46
|
+
end
|
@@ -3,11 +3,10 @@ test_name "dsl::structure" do
|
|
3
3
|
begin
|
4
4
|
@in_confine = 0
|
5
5
|
confine_block :to, :platform => default["platform"] do
|
6
|
-
@in_confine +=1
|
6
|
+
@in_confine += 1
|
7
7
|
end
|
8
8
|
|
9
9
|
assert_equal 1, @in_confine, "#confine_block did not run the supplied block"
|
10
|
-
|
11
10
|
rescue Beaker::DSL::Outcomes::SkipTest => e
|
12
11
|
fail "#confine_block raised unexpected SkipTest exception: #{e}"
|
13
12
|
end
|
@@ -17,12 +16,11 @@ test_name "dsl::structure" do
|
|
17
16
|
begin
|
18
17
|
@in_confine = 0
|
19
18
|
confine_block :to, :platform => default["platform"] do
|
20
|
-
@in_confine +=1
|
19
|
+
@in_confine += 1
|
21
20
|
end
|
22
21
|
|
23
22
|
assert_equal 1, @in_confine, "#confine_block did not run the supplied block"
|
24
23
|
assert_equal hosts.dup, hosts, "#confine_block did not preserve the hosts array"
|
25
|
-
|
26
24
|
rescue Beaker::DSL::Outcomes::SkipTest => e
|
27
25
|
fail "#confine_block raised unexpected SkipTest exception: #{e}"
|
28
26
|
end
|
@@ -32,11 +30,10 @@ test_name "dsl::structure" do
|
|
32
30
|
begin
|
33
31
|
@in_confine = 0
|
34
32
|
confine_block :except, :platform => default["platform"] do
|
35
|
-
@in_confine +=1
|
33
|
+
@in_confine += 1
|
36
34
|
end
|
37
35
|
|
38
36
|
assert_equal 0, @in_confine, "#confine_block did not skip the supplied block"
|
39
|
-
|
40
37
|
rescue Beaker::DSL::Outcomes::SkipTest => e
|
41
38
|
fail "#confine_block raised unexpected SkipTest exception: #{e}"
|
42
39
|
end
|
@@ -46,12 +43,11 @@ test_name "dsl::structure" do
|
|
46
43
|
begin
|
47
44
|
@in_confine = 0
|
48
45
|
confine_block :except, :platform => default["platform"] do
|
49
|
-
@in_confine +=1
|
46
|
+
@in_confine += 1
|
50
47
|
end
|
51
48
|
|
52
49
|
assert_equal 0, @in_confine, "#confine_block did not skip the supplied block"
|
53
50
|
assert_equal hosts.dup, hosts, "#confine_block did not preserve the hosts array"
|
54
|
-
|
55
51
|
rescue Beaker::DSL::Outcomes::SkipTest => e
|
56
52
|
fail "#confine_block raised unexpected SkipTest exception: #{e}"
|
57
53
|
end
|
@@ -61,7 +57,7 @@ test_name "dsl::structure" do
|
|
61
57
|
begin
|
62
58
|
@in_confine = 0
|
63
59
|
confine_block :to, :platform => default["platform"] do
|
64
|
-
@in_confine +=1
|
60
|
+
@in_confine += 1
|
65
61
|
skip_test "this block raises a skip"
|
66
62
|
end
|
67
63
|
rescue Beaker::DSL::Outcomes::SkipTest => e
|
@@ -76,7 +72,6 @@ test_name "dsl::structure" do
|
|
76
72
|
confine :to, { :platform => 'test' }
|
77
73
|
|
78
74
|
fail "#confine did not skip test but should have."
|
79
|
-
|
80
75
|
rescue Beaker::DSL::Outcomes::SkipTest => e
|
81
76
|
assert_match(/No suitable hosts found with {:platform=>"test"}/, e.message, "#confine raised an unexpected skip_test")
|
82
77
|
end
|
@@ -87,7 +82,6 @@ test_name "dsl::structure" do
|
|
87
82
|
confine :except, { :platform => default['platform'] }
|
88
83
|
|
89
84
|
fail "#confine did not skip test but should have."
|
90
|
-
|
91
85
|
rescue Beaker::DSL::Outcomes::SkipTest => e
|
92
86
|
assert_match(/No suitable hosts found without {:platform=>"#{default['platform']}"}/, e.message, "#confine raised an unexpected
|
93
87
|
# skip_test")
|
@@ -21,7 +21,7 @@ test_name 'File Test' do
|
|
21
21
|
tmpdir = host.tmpdir('beaker')
|
22
22
|
# ensure we have a user to chown to
|
23
23
|
host.chgrp('testgroup', tmpdir)
|
24
|
-
assert_match(/testgroup/, host.ls_ld(tmpdir), "Should have found testgroup in `ls -ld` output
|
24
|
+
assert_match(/testgroup/, host.ls_ld(tmpdir), "Should have found testgroup in `ls -ld` output")
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -78,4 +78,4 @@ test_name 'File Test' do
|
|
78
78
|
host.user_absent('testuser')
|
79
79
|
host.group_absent('testgroup')
|
80
80
|
end
|
81
|
-
end
|
81
|
+
end
|
@@ -34,7 +34,7 @@ hosts.each do |host|
|
|
34
34
|
env_value1 = "#{env_prefix}_v1"
|
35
35
|
|
36
36
|
host.clear_env_var(env_param1)
|
37
|
-
host.add_env_var(env_param1,env_value1)
|
37
|
+
host.add_env_var(env_param1, env_value1)
|
38
38
|
|
39
39
|
val = host.get_env_var(env_param1)
|
40
40
|
|
@@ -57,12 +57,12 @@ hosts.each do |host|
|
|
57
57
|
host.clear_env_var(env_param1)
|
58
58
|
host.clear_env_var(env_param2)
|
59
59
|
host.clear_env_var(env_param3)
|
60
|
-
host.add_env_var(env_param1,env_value1)
|
61
|
-
host.add_env_var(env_param1,env_value2)
|
62
|
-
host.add_env_var(env_param1,env_value3)
|
60
|
+
host.add_env_var(env_param1, env_value1)
|
61
|
+
host.add_env_var(env_param1, env_value2)
|
62
|
+
host.add_env_var(env_param1, env_value3)
|
63
63
|
|
64
64
|
val = host.get_env_var(env_id)
|
65
|
-
assert('' == val,'get_env_var should not match a partial env key name')
|
65
|
+
assert('' == val, 'get_env_var should not match a partial env key name')
|
66
66
|
end
|
67
67
|
|
68
68
|
step "#get_env_var : should not return a match from a key\'s value"
|
@@ -72,10 +72,10 @@ hosts.each do |host|
|
|
72
72
|
env_value1 = "#{env_prefix}_v1"
|
73
73
|
|
74
74
|
host.clear_env_var(env_param1)
|
75
|
-
host.add_env_var(env_param1,env_value1)
|
75
|
+
host.add_env_var(env_param1, env_value1)
|
76
76
|
|
77
77
|
val = host.get_env_var(env_value1)
|
78
|
-
assert('' == val,'get_env_var should not return a match from a key\'s value')
|
78
|
+
assert('' == val, 'get_env_var should not return a match from a key\'s value')
|
79
79
|
end
|
80
80
|
|
81
81
|
step "#clear_env_var : should only remove the specified key"
|
@@ -92,9 +92,9 @@ hosts.each do |host|
|
|
92
92
|
env_param3 = "#{env_id}"
|
93
93
|
env_value3 = "#{env_id}"
|
94
94
|
|
95
|
-
host.add_env_var(env_param1,env_value1)
|
96
|
-
host.add_env_var(env_param2,env_value2)
|
97
|
-
host.add_env_var(env_param3,env_value3)
|
95
|
+
host.add_env_var(env_param1, env_value1)
|
96
|
+
host.add_env_var(env_param2, env_value2)
|
97
|
+
host.add_env_var(env_param3, env_value3)
|
98
98
|
|
99
99
|
host.clear_env_var(env_param3)
|
100
100
|
|
@@ -103,7 +103,7 @@ hosts.each do |host|
|
|
103
103
|
val = host.get_env_var(env_param2)
|
104
104
|
assert_match(/^#{env_param2}=#{env_value2}$/, val, "#{env_param2} should exist after calling clear_env_var")
|
105
105
|
val = host.get_env_var(env_param3)
|
106
|
-
assert('' == val,"#{env_param3} should not exist after calling clear_env_var")
|
106
|
+
assert('' == val, "#{env_param3} should not exist after calling clear_env_var")
|
107
107
|
end
|
108
108
|
|
109
109
|
step "#add_env_var : can add a unique environment variable"
|
@@ -121,9 +121,9 @@ hosts.each do |host|
|
|
121
121
|
host.clear_env_var(env_param1)
|
122
122
|
host.clear_env_var(env_param2)
|
123
123
|
host.clear_env_var(env_param3)
|
124
|
-
host.add_env_var(env_param1,env_value1)
|
125
|
-
host.add_env_var(env_param2,env_value2)
|
126
|
-
host.add_env_var(env_param3,env_value3)
|
124
|
+
host.add_env_var(env_param1, env_value1)
|
125
|
+
host.add_env_var(env_param2, env_value2)
|
126
|
+
host.add_env_var(env_param3, env_value3)
|
127
127
|
|
128
128
|
val = host.get_env_var(env_param1)
|
129
129
|
assert_match(/^#{env_param1}=#{env_value1}$/, val, "#{env_param1} should exist")
|
@@ -150,23 +150,27 @@ hosts.each do |host|
|
|
150
150
|
assert_match(/TEST=3(;|:)2(;|:)1$/, val, "add_env_var can correctly add env vars")
|
151
151
|
end
|
152
152
|
|
153
|
-
step "#add_env_var : can preserve an environment between ssh connections"
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
153
|
+
step "#add_env_var : can preserve an environment between ssh connections" do
|
154
|
+
# beaker-docker can't deal with closing the connection
|
155
|
+
confine :except, :hypervisor => 'docker'
|
156
|
+
|
157
|
+
hosts.each do |host|
|
158
|
+
host.clear_env_var("TEST")
|
159
|
+
logger.debug("add TEST=1")
|
160
|
+
host.add_env_var("TEST", "1")
|
161
|
+
logger.debug("add TEST=1 again (shouldn't create duplicate entry)")
|
162
|
+
host.add_env_var("TEST", "1")
|
163
|
+
logger.debug("add TEST=2")
|
164
|
+
host.add_env_var("TEST", "2")
|
165
|
+
logger.debug("ensure that TEST env var has correct setting")
|
166
|
+
logger.debug("add TEST=3")
|
167
|
+
host.add_env_var("TEST", "3")
|
168
|
+
logger.debug("close the connection")
|
169
|
+
host.close
|
170
|
+
logger.debug("ensure that TEST env var has correct setting")
|
171
|
+
val = host.get_env_var("TEST")
|
172
|
+
assert_match(/TEST=3(;|:)2(;|:)1$/, val, "can preserve an environment between ssh connections")
|
173
|
+
end
|
170
174
|
end
|
171
175
|
|
172
176
|
step "#delete_env_var : can delete an environment"
|
@@ -187,9 +191,9 @@ end
|
|
187
191
|
|
188
192
|
step "#mkdir_p : can recursively create a directory structure on a host"
|
189
193
|
hosts.each do |host|
|
190
|
-
#clean up first!
|
194
|
+
# clean up first!
|
191
195
|
host.rm_rf("test1")
|
192
|
-
#test dir construction
|
196
|
+
# test dir construction
|
193
197
|
logger.debug("create test1/test2/test3/test4")
|
194
198
|
assert_equal(true, host.mkdir_p("test1/test2/test3/test4"), "can create directory structure")
|
195
199
|
logger.debug("should be able to create a file in the new dir")
|
@@ -197,23 +201,23 @@ hosts.each do |host|
|
|
197
201
|
end
|
198
202
|
|
199
203
|
step "#do_scp_to : can copy a directory to the host with no ignores"
|
200
|
-
current_dir =
|
204
|
+
current_dir = __dir__
|
201
205
|
module_fixture = File.join(current_dir, "../../../fixtures/module")
|
202
206
|
hosts.each do |host|
|
203
207
|
logger.debug("can recursively copy a module over")
|
204
|
-
#make sure that we are clean on the test host
|
208
|
+
# make sure that we are clean on the test host
|
205
209
|
host.rm_rf("module")
|
206
210
|
host.do_scp_to(module_fixture, ".", {})
|
207
211
|
Dir.mktmpdir do |tmp_dir|
|
208
|
-
#grab copy from host
|
212
|
+
# grab copy from host
|
209
213
|
host.do_scp_from("module", tmp_dir, {})
|
210
|
-
#compare to local copy
|
214
|
+
# compare to local copy
|
211
215
|
local_paths = Dir.glob(File.join(module_fixture, "**/*")).select { |f| File.file?(f) }
|
212
216
|
host_paths = Dir.glob(File.join(File.join(tmp_dir, "module"), "**/*")).select { |f| File.file?(f) }
|
213
|
-
#each local file should have a single match on the host
|
217
|
+
# each local file should have a single match on the host
|
214
218
|
local_paths.each do |path|
|
215
|
-
search_name = path.gsub(/^.*fixtures\//, '') #reduce down to the path that should match
|
216
|
-
matched = host_paths.select{ |check| /#{Regexp.escape(search_name)}$/.match?(check) }
|
219
|
+
search_name = path.gsub(/^.*fixtures\//, '') # reduce down to the path that should match
|
220
|
+
matched = host_paths.select { |check| /#{Regexp.escape(search_name)}$/.match?(check) }
|
217
221
|
assert_equal(1, matched.length, "should have found a single instance of path #{search_name}, found #{matched.length}: \n #{matched}")
|
218
222
|
host_paths = host_paths - matched
|
219
223
|
end
|
@@ -222,24 +226,24 @@ hosts.each do |host|
|
|
222
226
|
end
|
223
227
|
|
224
228
|
step "#do_scp_to with :ignore : can copy a dir to the host, excluding ignored patterns that DO NOT appear in the source absolute path"
|
225
|
-
current_dir =
|
229
|
+
current_dir = __dir__
|
226
230
|
module_fixture = File.expand_path(File.join(current_dir, "../../../fixtures/module"))
|
227
231
|
hosts.each do |host|
|
228
232
|
logger.debug("can recursively copy a module over, ignoring some files/dirs")
|
229
|
-
#make sure that we are clean on the test host
|
233
|
+
# make sure that we are clean on the test host
|
230
234
|
host.rm_rf("module")
|
231
|
-
host.do_scp_to(module_fixture, ".", {:ignore => [
|
235
|
+
host.do_scp_to(module_fixture, ".", { :ignore => %w[tests Gemfile] })
|
232
236
|
Dir.mktmpdir do |tmp_dir|
|
233
|
-
#grab copy from host
|
237
|
+
# grab copy from host
|
234
238
|
host.do_scp_from("module", tmp_dir, {})
|
235
|
-
#compare to local copy
|
239
|
+
# compare to local copy
|
236
240
|
local_paths = Dir.glob(File.join(module_fixture, "**/*")).select { |f| File.file?(f) }
|
237
241
|
host_paths = Dir.glob(File.join(File.join(tmp_dir, "module"), "**/*")).select { |f| File.file?(f) }
|
238
|
-
#each local file should have a single match on the host
|
242
|
+
# each local file should have a single match on the host
|
239
243
|
local_paths.each do |path|
|
240
|
-
search_name = path.gsub(/^.*fixtures\//, '') #reduce down to the path that should match
|
241
|
-
matched = host_paths.select{ |check| /#{Regexp.escape(search_name)}$/.match?(check) }
|
242
|
-
re =
|
244
|
+
search_name = path.gsub(/^.*fixtures\//, '') # reduce down to the path that should match
|
245
|
+
matched = host_paths.select { |check| /#{Regexp.escape(search_name)}$/.match?(check) }
|
246
|
+
re = /((\/|\A)tests(\/|\z))|((\/|\A)Gemfile(\/|\z))/
|
243
247
|
if !path&.match?(re)
|
244
248
|
assert_equal(1, matched.length, "should have found a single instance of path #{search_name}, found #{matched.length}: \n #{matched}")
|
245
249
|
else
|
@@ -252,24 +256,25 @@ hosts.each do |host|
|
|
252
256
|
end
|
253
257
|
|
254
258
|
step "#do_scp_to with :ignore : can copy a dir to the host, excluding ignored patterns that DO appear in the source absolute path"
|
255
|
-
current_dir =
|
259
|
+
current_dir = __dir__
|
256
260
|
module_fixture = File.expand_path(File.join(current_dir, "../../../fixtures/module"))
|
257
261
|
hosts.each do |host|
|
258
262
|
logger.debug("can recursively copy a module over, ignoring some sub-files/sub-dirs that also appear in the absolute path")
|
259
|
-
#make sure that we are clean on the test host
|
263
|
+
# make sure that we are clean on the test host
|
260
264
|
host.rm_rf("module")
|
261
|
-
host.do_scp_to(module_fixture, ".", {:ignore => [
|
265
|
+
host.do_scp_to(module_fixture, ".", { :ignore => %w[module Gemfile] })
|
262
266
|
Dir.mktmpdir do |tmp_dir|
|
263
|
-
#grab copy from host
|
267
|
+
# grab copy from host
|
264
268
|
host.do_scp_from("module", tmp_dir, {})
|
265
|
-
#compare to local copy
|
269
|
+
# compare to local copy
|
266
270
|
local_paths = Dir.glob(File.join(module_fixture, "**/*")).select { |f| File.file?(f) }
|
267
271
|
host_paths = Dir.glob(File.join(File.join(tmp_dir, "module"), "**/*")).select { |f| File.file?(f) }
|
268
|
-
#each local file should have a single match on the host
|
272
|
+
# each local file should have a single match on the host
|
269
273
|
local_paths.each do |path|
|
270
|
-
search_name = path.gsub(/^.*fixtures\/module\//, '') #reduce down to the path that should match
|
271
|
-
|
272
|
-
|
274
|
+
search_name = path.gsub(/^.*fixtures\/module\//, '') # reduce down to the path that should match
|
275
|
+
search_name_regex = /#{Regexp.escape(search_name)}$/
|
276
|
+
matched = host_paths.select { |check| search_name_regex.match?(check) }
|
277
|
+
re = /((\/|\A)module(\/|\z))|((\/|\A)Gemfile(\/|\z))/
|
273
278
|
if !path.gsub(/^.*module\//, '')&.match?(re)
|
274
279
|
assert_equal(1, matched.length, "should have found a single instance of path #{search_name}, found #{matched.length}: \n #{matched}")
|
275
280
|
else
|
@@ -282,9 +287,10 @@ hosts.each do |host|
|
|
282
287
|
end
|
283
288
|
|
284
289
|
step "Ensure scp errors close the ssh connection" do
|
290
|
+
# beaker-docker can't deal with closing the connection
|
291
|
+
confine :except, :hypervisor => 'docker'
|
285
292
|
|
286
293
|
step 'Attempt to generate a remote file that does not exist' do
|
287
|
-
|
288
294
|
# This assert relies on the behavior of the net-scp library to
|
289
295
|
# raise an error when #channel.on_close is called, which is called by
|
290
296
|
# indirectly called by beaker's own SshConnection #close mehod. View
|
@@ -301,7 +307,6 @@ step "Ensure scp errors close the ssh connection" do
|
|
301
307
|
end
|
302
308
|
|
303
309
|
step 'Attempt to scp from a resource on the SUT that does not exist' do
|
304
|
-
|
305
310
|
# This assert relies on the behavior of the net-scp library to
|
306
311
|
# use the Dir.mkdir method in the #download_start_state method.
|
307
312
|
# See the source for further info:
|
@@ -318,7 +323,7 @@ step "Ensure scp errors close the ssh connection" do
|
|
318
323
|
end
|
319
324
|
|
320
325
|
step 'Ensure that a long 128+ character string with UTF-8 characters does not break net-ssh' do
|
321
|
-
long_string = 'a' * 128 + "\u06FF"
|
326
|
+
long_string = ('a' * 128) + "\u06FF"
|
322
327
|
on(default, "mkdir /tmp/#{long_string}")
|
323
328
|
result = on(default, 'ls /tmp')
|
324
329
|
assert(result.stdout.include?(long_string), 'Error in folder creation with long string + UTF-8 characters')
|
@@ -327,6 +332,4 @@ step 'Ensure that a long 128+ character string with UTF-8 characters does not br
|
|
327
332
|
on(default, "rm -rf /tmp/#{long_string}")
|
328
333
|
result = on(default, 'ls /tmp')
|
329
334
|
assert(!result.stdout.include?(long_string), 'Error in folder deletion with long string + UTF-8 characters')
|
330
|
-
|
331
335
|
end
|
332
|
-
|
@@ -22,7 +22,6 @@ def get_host_pkg(host)
|
|
22
22
|
else
|
23
23
|
Beaker::HostPrebuiltSteps::UNIX_PACKAGES
|
24
24
|
end
|
25
|
-
|
26
25
|
end
|
27
26
|
|
28
27
|
step '#check_for_command : can determine where a command exists'
|
@@ -49,6 +48,7 @@ hosts.each do |host|
|
|
49
48
|
# a lot of dependencies.
|
50
49
|
# skipping this test for windows since it requires a restart
|
51
50
|
next if host['platform'].include?('windows')
|
51
|
+
|
52
52
|
package = 'zsh'
|
53
53
|
package = 'CSWzsh' if host['platform'].include?('solaris-10')
|
54
54
|
package = 'git' if /opensuse|sles/.match?(host['platform'])
|
@@ -78,5 +78,4 @@ hosts.each do |host|
|
|
78
78
|
assert_equal(false, host.check_for_package(package), "'#{package}' should not be installed")
|
79
79
|
end
|
80
80
|
end
|
81
|
-
|
82
81
|
end
|
@@ -1,62 +1,7 @@
|
|
1
1
|
test_name 'confirm unix-specific package methods work'
|
2
2
|
confine :except, :platform => %w(windows solaris osx)
|
3
3
|
|
4
|
-
current_dir = File.dirname(__FILE__)
|
5
|
-
pkg_fixtures = File.expand_path(File.join(current_dir, '../../../fixtures/package'))
|
6
|
-
pkg_name = 'puppetserver'
|
7
|
-
|
8
|
-
def clean_file(host, file)
|
9
|
-
unless file.nil?
|
10
|
-
filename = pkg_file(host, file)
|
11
|
-
|
12
|
-
if !filename.nil? && host.file_exist?(filename)
|
13
|
-
on(host, "rm -rf #{filename}")
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def pkg_file(host, pkg_name)
|
19
|
-
if /debian|ubuntu/.match?(host['platform'])
|
20
|
-
"/etc/apt/sources.list.d/#{pkg_name}.list"
|
21
|
-
elsif host['platform'].include?('el')
|
22
|
-
"/etc/yum.repos.d/#{pkg_name}.repo"
|
23
|
-
else
|
24
|
-
nil
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
4
|
step '#update_apt_if_needed : can execute without raising an error'
|
29
5
|
hosts.each do |host|
|
30
6
|
host.update_apt_if_needed
|
31
7
|
end
|
32
|
-
|
33
|
-
step '#deploy_apt_repo : deploy puppet-server nightly repo'
|
34
|
-
hosts.each do |host|
|
35
|
-
|
36
|
-
if /debian|ubuntu/.match?(host['platform'])
|
37
|
-
clean_file(host, pkg_name)
|
38
|
-
host.deploy_apt_repo(pkg_fixtures, pkg_name, 'latest')
|
39
|
-
assert(host.file_exist?(pkg_file(host, pkg_name)), 'apt file should exist')
|
40
|
-
clean_file(host, pkg_name)
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
step '#deploy_yum_repo : deploy puppet-server nightly repo'
|
46
|
-
hosts.each do |host|
|
47
|
-
|
48
|
-
if host['platform'].include?('el')
|
49
|
-
clean_file(host, pkg_name)
|
50
|
-
host.deploy_yum_repo(pkg_fixtures, pkg_name, 'latest')
|
51
|
-
assert(host.file_exist?(pkg_file(host, pkg_name)), 'yum file should exist')
|
52
|
-
clean_file(host, pkg_name)
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
step '#deploy_package_repo : deploy puppet-server nightly repo'
|
58
|
-
hosts.each do |host|
|
59
|
-
next if host['platform'].variant == 'sles' && Integer(host['platform'].version) < 12
|
60
|
-
host.deploy_package_repo(pkg_fixtures, pkg_name, 'latest')
|
61
|
-
clean_file(host, pkg_name)
|
62
|
-
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
test_name "confirm host prebuilt steps behave correctly" do
|
2
|
-
|
3
2
|
confine_block :except, :platform => /f5|windows/ do
|
4
3
|
step "confirm ssh environment file existence" do
|
5
4
|
hosts.each do |host|
|
@@ -29,4 +28,4 @@ test_name "confirm host prebuilt steps behave correctly" do
|
|
29
28
|
end
|
30
29
|
end
|
31
30
|
end
|
32
|
-
end
|
31
|
+
end
|
@@ -1,13 +1,10 @@
|
|
1
1
|
test_name 'ensure tests can export arbitrary data' do
|
2
|
-
|
3
2
|
step 'export nested hash' do
|
4
|
-
export({'middle earth' => {
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
export({'another' => 'author'})
|
3
|
+
export({ 'middle earth' => {
|
4
|
+
'Hobbits' => %w[Bilbo Frodo],
|
5
|
+
'Elves' => 'Arwen',
|
6
|
+
:total => { 'numbers' => 42 },
|
7
|
+
} })
|
8
|
+
export({ 'another' => 'author' })
|
11
9
|
end
|
12
|
-
|
13
10
|
end
|
@@ -6,15 +6,13 @@ step 'install arbitrary msi via url' do
|
|
6
6
|
hosts.each do |host|
|
7
7
|
if host['platform'].include?('win')
|
8
8
|
# this should be implemented at the host/win/pkg.rb level someday
|
9
|
-
generic_install_msi_on(host, 'https://releases.hashicorp.com/vagrant/1.8.4/vagrant_1.8.4.msi', {}, {:debug => true})
|
9
|
+
generic_install_msi_on(host, 'https://releases.hashicorp.com/vagrant/1.8.4/vagrant_1.8.4.msi', {}, { :debug => true })
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
step 'install arbitrary dmg via url' do
|
15
15
|
hosts.each do |host|
|
16
|
-
if host['platform'].include?('osx')
|
17
|
-
host.generic_install_dmg('https://releases.hashicorp.com/vagrant/1.8.4/vagrant_1.8.4.dmg', 'Vagrant', 'Vagrant.pkg')
|
18
|
-
end
|
16
|
+
host.generic_install_dmg('https://releases.hashicorp.com/vagrant/1.8.4/vagrant_1.8.4.dmg', 'Vagrant', 'Vagrant.pkg') if host['platform'].include?('osx')
|
19
17
|
end
|
20
18
|
end
|