beaker 2.27.0 → 2.28.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/HISTORY.md +378 -2
- data/README.md +1 -3
- data/acceptance/config/acceptance-options.rb +3 -0
- data/acceptance/fixtures/files/failing_shell_script.txt +3 -0
- data/acceptance/fixtures/files/retry_script.txt +14 -0
- data/acceptance/fixtures/files/shell_script_with_output.txt +3 -0
- data/acceptance/fixtures/files/simple_text_file.txt +3 -0
- data/acceptance/fixtures/files/sles-11-x86_64.repo +5 -0
- data/acceptance/lib/helpers/test_helper.rb +111 -0
- data/acceptance/tests/base/dsl/helpers/configuration_test.rb +17 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/add_system32_hosts_entry_test.rb +50 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/backup_the_file_test.rb +64 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/check_for_package_test.rb +100 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/create_remote_file_test.rb +201 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/create_tmpdir_on_test.rb +68 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/curl_on_test.rb +48 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/curl_with_retries_test.rb +28 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/deploy_package_repo_test.rb +142 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/echo_on_test.rb +13 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/install_package_test.rb +67 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/on_test.rb +109 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/retry_on_test.rb +42 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/rsync_to_test.rb +143 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/run_cron_on_test.rb +242 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/run_script_on_test.rb +69 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/run_script_test.rb +53 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/scp_from_test.rb +53 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/scp_to_test.rb +54 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/shell_test.rb +51 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/upgrade_package_test.rb +92 -0
- data/acceptance/tests/base/dsl/install_utils/clone_git_repo_on_test.rb +47 -0
- data/acceptance/tests/base/{host.rb → host_test.rb} +2 -0
- data/acceptance/tests/hypervisor/{communication.rb → communication_test.rb} +0 -0
- data/acceptance/tests/load_path_bootstrap.rb +10 -0
- data/acceptance/tests/puppet/{install_smoke.rb → install_smoke_test.rb} +0 -0
- data/beaker.gemspec +1 -1
- data/docs/Access-the-Live-Test-Console-with-Pry.md +305 -0
- data/docs/Argument-Processing-and-Precedence.md +325 -0
- data/docs/Beaker-Installation.md +59 -0
- data/docs/Beaker-Owners-and-Reviewers.md +16 -0
- data/docs/Beaker-Test-Tagging.md +76 -0
- data/docs/Beaker-with-Masterless-Puppet.md +42 -0
- data/docs/Creating-A-Test-Environment.md +91 -0
- data/docs/Docker-Support.md +129 -0
- data/docs/EC2-Support.md +77 -0
- data/docs/Example-Vagrant-Hosts-Files.md +66 -0
- data/docs/File-a-Beaker-Bug.md +3 -0
- data/docs/Google-Compute-Engine-Support.md +41 -0
- data/docs/How-To-Beaker.md +7 -0
- data/docs/How-To-Use-User-Password-Authentication-with-Beaker.md +53 -0
- data/docs/How-to-Write-a-Beaker-Test-for-a-Module.md +145 -0
- data/docs/Lets-Write-a-Test.md +73 -0
- data/docs/Openstack-Support.md +32 -0
- data/docs/Overview.md +31 -0
- data/docs/README.md +43 -0
- data/docs/Roles-What-Are-They.md +44 -0
- data/docs/Shared-Options-for-Executing-Beaker-Commands.md +43 -0
- data/docs/Solaris-Support.md +10 -0
- data/docs/The-Beaker-DSL.md +283 -0
- data/docs/The-Command-Line.md +24 -0
- data/docs/Types,-Puppet-4,-and-the-All-In-One-Agent.md +13 -0
- data/docs/VMWare-Fusion-Support.md +36 -0
- data/docs/Vagrant-Support.md +47 -0
- data/docs/beaker-vs.-beaker-rspec.md +87 -0
- data/docs/hosts/README.md +8 -0
- data/docs/hosts/eos.md +30 -0
- data/docs/hypervisors/README.md +8 -0
- data/docs/hypervisors/aws.md +143 -0
- data/docs/vSphere-Support.md +46 -0
- data/lib/beaker/dsl/helpers/host_helpers.rb +2 -4
- data/lib/beaker/dsl/helpers/puppet_helpers.rb +45 -11
- data/lib/beaker/dsl/install_utils/foss_utils.rb +20 -23
- data/lib/beaker/dsl/install_utils/module_utils.rb +4 -0
- data/lib/beaker/dsl/install_utils/pe_utils.rb +2 -6
- data/lib/beaker/dsl/patterns.rb +1 -1
- data/lib/beaker/host.rb +3 -0
- data/lib/beaker/host/eos.rb +56 -0
- data/lib/beaker/host/mac/pkg.rb +1 -1
- data/lib/beaker/host/unix/pkg.rb +36 -0
- data/lib/beaker/hypervisor/aws_sdk.rb +1 -1
- data/lib/beaker/hypervisor/vagrant.rb +3 -3
- data/lib/beaker/logger.rb +1 -0
- data/lib/beaker/options/presets.rb +5 -0
- data/lib/beaker/shared/host_manager.rb +7 -4
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/dsl/helpers/puppet_helpers_spec.rb +87 -0
- data/spec/beaker/dsl/install_utils/foss_utils_spec.rb +53 -20
- data/spec/beaker/dsl/install_utils/module_utils_spec.rb +1 -1
- data/spec/beaker/dsl/install_utils/pe_utils_spec.rb +7 -14
- data/spec/beaker/host/eos_spec.rb +65 -0
- data/spec/beaker/host/unix/pkg_spec.rb +42 -0
- data/spec/beaker/hypervisor/aws_sdk_spec.rb +17 -56
- data/spec/beaker/hypervisor/vagrant_spec.rb +1 -1
- data/spec/beaker/logger_spec.rb +1 -1
- data/spec/mocks.rb +0 -13
- metadata +76 -6
- data/acceptance/tests/dsl/install_utils/clone_git_repo_on.rb +0 -50
@@ -0,0 +1,68 @@
|
|
1
|
+
require "helpers/test_helper"
|
2
|
+
|
3
|
+
test_name "dsl::helpers::host_helpers #create_tmpdir_on" do
|
4
|
+
|
5
|
+
# NOTE: there does not seem to be a reliable way to confine to cygwin hosts.
|
6
|
+
confine_block :to, :platform => /windows/ do
|
7
|
+
|
8
|
+
step "#create_tmpdir_on CURRENTLY fails when attempting to chown the created tempdir to the host user + group, on windows platforms" do
|
9
|
+
# NOTE: would have expected this to work.
|
10
|
+
# TODO: fix via https://tickets.puppetlabs.com/browse/BKR-496
|
11
|
+
|
12
|
+
assert_raises Beaker::Host::CommandFailure do
|
13
|
+
tmpdir = create_tmpdir_on default
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
confine_block :to, :platform => /osx/ do
|
19
|
+
|
20
|
+
step "#create_tmpdir_on CURRENTLY fails when attempting to call getent to check the creating user" do
|
21
|
+
# NOTE: would have expected this to work.
|
22
|
+
# TODO: fix via https://tickets.puppetlabs.com/browse/BKR-496
|
23
|
+
|
24
|
+
assert_raises Beaker::Host::CommandFailure do
|
25
|
+
tmpdir = create_tmpdir_on default
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
confine_block :except, :platform => /windows|osx/ do
|
31
|
+
|
32
|
+
step "#create_tmpdir_on chowns the created tempdir to the host user + group" do
|
33
|
+
tmpdir = create_tmpdir_on default
|
34
|
+
listing = on(default, "ls -al #{tmpdir}").stdout
|
35
|
+
tmpdir_ls = listing.split("\n").grep %r{\s+\./?\s*$}
|
36
|
+
assert_equal 1, tmpdir_ls.size
|
37
|
+
perms, inodes, owner, group, *rest = tmpdir_ls.first.split(/\s+/)
|
38
|
+
assert_equal default['user'], owner
|
39
|
+
assert_equal default['user'], group
|
40
|
+
end
|
41
|
+
|
42
|
+
step "#create_tmpdir_on returns a temporary directory on the remote system" do
|
43
|
+
tmpdir = create_tmpdir_on default
|
44
|
+
assert_match %r{/}, tmpdir
|
45
|
+
assert_equal 0, on(default, "touch #{tmpdir}/testfile").exit_code
|
46
|
+
end
|
47
|
+
|
48
|
+
step "#create_tmpdir_on uses the specified path prefix when provided" do
|
49
|
+
tmpdir = create_tmpdir_on(default, "mypathprefix")
|
50
|
+
assert_match %r{/mypathprefix}, tmpdir
|
51
|
+
assert_equal 0, on(default, "touch #{tmpdir}/testfile").exit_code
|
52
|
+
end
|
53
|
+
|
54
|
+
step "#create_tmpdir_on fails if a non-existent user is specified" do
|
55
|
+
assert_raises Beaker::Host::CommandFailure do
|
56
|
+
tmpdir = create_tmpdir_on default, '', "fakeuser"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
step "#create_tmpdir_on operates on all hosts if given a hosts array" do
|
61
|
+
tmpdirs = create_tmpdir_on hosts
|
62
|
+
hosts.zip(tmpdirs).each do |(host, tmpdir)|
|
63
|
+
assert_match %r{/}, tmpdir
|
64
|
+
assert_equal 0, on(host, "touch #{tmpdir}/testfile").exit_code
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "helpers/test_helper"
|
2
|
+
|
3
|
+
# construct an appropriate local file URL for curl testing
|
4
|
+
def host_local_url(host, path)
|
5
|
+
if host.is_cygwin?
|
6
|
+
"file://#{path.gsub('/', '\\\\\\\\')}"
|
7
|
+
else
|
8
|
+
"file://#{path}"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
test_name "dsl::helpers::host_helpers #curl_on" do
|
13
|
+
step "#curl_on fails if the URL in question cannot be reached" do
|
14
|
+
assert Beaker::Host::CommandFailure do
|
15
|
+
curl_on default, "file:///non/existent.html"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
step "#curl_on can retrieve the contents of a URL, using standard curl options" do
|
20
|
+
remote_tmpdir = tmpdir_on default
|
21
|
+
remote_filename, contents = create_remote_file_from_fixture("simple_text_file", default, remote_tmpdir, "testfile.txt")
|
22
|
+
remote_targetfilename = File.join remote_tmpdir, "outfile.txt"
|
23
|
+
|
24
|
+
result = curl_on default, "-o #{remote_targetfilename} #{host_local_url default, remote_filename}"
|
25
|
+
|
26
|
+
assert_equal 0, result.exit_code
|
27
|
+
remote_contents = on(default, "cat #{remote_targetfilename}").stdout
|
28
|
+
assert_equal contents, remote_contents
|
29
|
+
end
|
30
|
+
|
31
|
+
step "#curl_on can retrieve the contents of a URL, when given a hosts array" do
|
32
|
+
remote_tmpdir = tmpdir_on default
|
33
|
+
on hosts, "mkdir -p #{remote_tmpdir}"
|
34
|
+
|
35
|
+
remote_filename = contents = nil
|
36
|
+
hosts.each do |host|
|
37
|
+
remote_filename, contents = create_remote_file_from_fixture("simple_text_file", host, remote_tmpdir, "testfile.txt")
|
38
|
+
end
|
39
|
+
remote_targetfilename = File.join remote_tmpdir, "outfile.txt"
|
40
|
+
|
41
|
+
result = curl_on hosts, "-o #{remote_targetfilename} #{host_local_url default, remote_filename}"
|
42
|
+
|
43
|
+
hosts.each do |host|
|
44
|
+
remote_contents = on(host, "cat #{remote_targetfilename}").stdout
|
45
|
+
assert_equal contents, remote_contents
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "helpers/test_helper"
|
2
|
+
|
3
|
+
test_name "dsl::helpers::host_helpers #curl_with_retries" do
|
4
|
+
|
5
|
+
step "#curl_with_retries CURRENTLY fails with a RuntimeError if retries are exhausted without fetching the specified URL" do
|
6
|
+
# NOTE: would expect that this would raise Beaker::Host::CommandFailure
|
7
|
+
|
8
|
+
assert_raises RuntimeError do
|
9
|
+
curl_with_retries \
|
10
|
+
"description",
|
11
|
+
default,
|
12
|
+
"file:///non/existent.html",
|
13
|
+
desired_exit_codes = [0],
|
14
|
+
max_retries = 2,
|
15
|
+
retry_interval = 0.01
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
step "#curl_with_retries retrieves the contents of a URL after retrying" do
|
20
|
+
# TODO: testing curl_with_retries relies on having a portable means of
|
21
|
+
# making an unavailable URL available after a period of time.
|
22
|
+
end
|
23
|
+
|
24
|
+
step "#curl_with_retries can retrieve the contents of a URL after retrying, when given a hosts array" do
|
25
|
+
# TODO: testing curl_with_retries relies on having a portable means of
|
26
|
+
# making an unavailable URL available after a period of time.
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require "helpers/test_helper"
|
2
|
+
require "fileutils"
|
3
|
+
|
4
|
+
test_name "dsl::helpers::host_helpers #deploy_package_repo" do
|
5
|
+
|
6
|
+
confine_block :to, :platform => /^el-4/ do
|
7
|
+
|
8
|
+
step "#deploy_package_repo CURRENTLY does nothing and throws no error on the #{default['platform']} platform" do
|
9
|
+
# NOTE: would expect this to fail with Beaker::Host::CommandFailure
|
10
|
+
|
11
|
+
Dir.mktmpdir do |local_dir|
|
12
|
+
name = "puppet-server"
|
13
|
+
version = "9.9.9"
|
14
|
+
platform = default['platform']
|
15
|
+
|
16
|
+
local_filename, contents = create_local_file_from_fixture("simple_text_file", local_dir, "pl-#{name}-#{version}-repos-pe-#{platform}.repo")
|
17
|
+
|
18
|
+
assert_nil deploy_package_repo(default, local_dir, name, version)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
confine_block :to, :platform => /fedora|centos|eos|el-[56789]/i do
|
24
|
+
|
25
|
+
step "#deploy_package_repo pushes repo package to /etc/yum.repos.d on the remote host" do
|
26
|
+
Dir.mktmpdir do |local_dir|
|
27
|
+
name = "puppet-server"
|
28
|
+
version = "9.9.9"
|
29
|
+
platform = default['platform']
|
30
|
+
|
31
|
+
FileUtils.mkdir(File.join(local_dir, "rpm"))
|
32
|
+
local_filename, contents = create_local_file_from_fixture("simple_text_file", File.join(local_dir, "rpm"), "pl-#{name}-#{version}-repos-pe-#{platform}.repo")
|
33
|
+
|
34
|
+
deploy_package_repo default, local_dir, name, version
|
35
|
+
|
36
|
+
remote_contents = on(default, "cat /etc/yum.repos.d/#{name}.repo").stdout
|
37
|
+
assert_equal contents, remote_contents
|
38
|
+
|
39
|
+
# teardown
|
40
|
+
on default, "rm /etc/yum.repos.d/#{name}.repo"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
step "#deploy_package_repo CURRENTLY fails with NoMethodError when passed a hosts array" do
|
45
|
+
# NOTE: would expect this to handle host arrays, or raise Beaker::Host::CommandFailure
|
46
|
+
|
47
|
+
Dir.mktmpdir do |local_dir|
|
48
|
+
name = "puppet-server"
|
49
|
+
version = "9.9.9"
|
50
|
+
platform = default['platform']
|
51
|
+
|
52
|
+
local_filename, contents = create_local_file_from_fixture("simple_text_file", local_dir, "pl-#{name}-#{version}-repos-pe-#{platform}.repo")
|
53
|
+
|
54
|
+
assert_raises NoMethodError do
|
55
|
+
deploy_package_repo hosts, local_dir, name, version
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
confine_block :to, :platform => /ubuntu|debian|cumulus/i do
|
62
|
+
|
63
|
+
step "#deploy_package_repo pushes repo package to /etc/apt/sources.list.d on the remote host" do
|
64
|
+
Dir.mktmpdir do |local_dir|
|
65
|
+
name = "puppet-server"
|
66
|
+
version = "9.9.9"
|
67
|
+
codename = default['platform'].codename
|
68
|
+
|
69
|
+
FileUtils.mkdir(File.join(local_dir, "deb"))
|
70
|
+
local_filename, contents = create_local_file_from_fixture("simple_text_file", File.join(local_dir, "deb"), "pl-#{name}-#{version}-#{codename}.list")
|
71
|
+
|
72
|
+
deploy_package_repo default, local_dir, name, version
|
73
|
+
|
74
|
+
remote_contents = on(default, "cat /etc/apt/sources.list.d/#{name}.list").stdout
|
75
|
+
assert_equal contents, remote_contents
|
76
|
+
|
77
|
+
# teardown
|
78
|
+
on default, "rm /etc/apt/sources.list.d/#{name}.list"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
step "#deploy_package_repo CURRENTLY fails with NoMethodError when passed a hosts array" do
|
83
|
+
# NOTE: would expect this to handle host arrays, or raise Beaker::Host::CommandFailure
|
84
|
+
|
85
|
+
Dir.mktmpdir do |local_dir|
|
86
|
+
name = "puppet-server"
|
87
|
+
version = "9.9.9"
|
88
|
+
codename = default['platform'].codename
|
89
|
+
|
90
|
+
FileUtils.mkdir(File.join(local_dir, "deb"))
|
91
|
+
local_filename, contents = create_local_file_from_fixture("simple_text_file", File.join(local_dir, "deb"), "pl-#{name}-#{version}-#{codename}.list")
|
92
|
+
|
93
|
+
assert_raises NoMethodError do
|
94
|
+
deploy_package_repo hosts, local_dir, name, version
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
confine_block :to, :platform => /sles/i do
|
101
|
+
|
102
|
+
step "#deploy_package_repo updates zypper repository list on the remote host" do
|
103
|
+
Dir.mktmpdir do |local_dir|
|
104
|
+
name = "puppet-server"
|
105
|
+
version = "9.9.9"
|
106
|
+
platform = default['platform']
|
107
|
+
|
108
|
+
FileUtils.mkdir(File.join(local_dir, "rpm"))
|
109
|
+
local_filename, contents = create_local_file_from_fixture("sles-11-x86_64.repo", File.join(local_dir, "rpm"), "pl-#{name}-#{version}-repos-pe-#{platform}.repo")
|
110
|
+
|
111
|
+
deploy_package_repo default, local_dir, name, version
|
112
|
+
|
113
|
+
result = on default, "zypper repos -d"
|
114
|
+
assert_match "PE-3.8-sles-11-x86_64", result.stdout
|
115
|
+
|
116
|
+
# teardown
|
117
|
+
on default, "zypper rr PE-3.8-sles-11-x86_64"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
confine_block :except, :platform => /el-\d|fedora|centos|eos|ubuntu|debian|cumulus|sles/i do
|
123
|
+
|
124
|
+
# OS X, windows (cygwin, powershell), solaris, etc.
|
125
|
+
|
126
|
+
step "#deploy_package_repo CURRENTLY fails with a RuntimeError on on the #{default['platform']} platform" do
|
127
|
+
# NOTE: would expect this to raise Beaker::Host::CommandFailure instead of RuntimeError
|
128
|
+
|
129
|
+
Dir.mktmpdir do |local_dir|
|
130
|
+
name = "puppet-server"
|
131
|
+
version = "9.9.9"
|
132
|
+
platform = default['platform']
|
133
|
+
|
134
|
+
local_filename, contents = create_local_file_from_fixture("simple_text_file", local_dir, "pl-#{name}-#{version}-repos-pe-#{platform}.repo")
|
135
|
+
|
136
|
+
assert_raises RuntimeError do
|
137
|
+
deploy_package_repo default, local_dir, name, version
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "helpers/test_helper"
|
2
|
+
|
3
|
+
test_name "dsl::helpers::host_helpers #echo_on" do
|
4
|
+
step "#echo_on echoes the supplied string on the remote host" do
|
5
|
+
output = echo_on(default, "contents")
|
6
|
+
assert_equal output, "contents"
|
7
|
+
end
|
8
|
+
|
9
|
+
step "#echo_on echoes the supplied string on all hosts when given a hosts array" do
|
10
|
+
results = echo_on(hosts, "contents")
|
11
|
+
assert_equal ["contents"] * hosts.size, results
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require "helpers/test_helper"
|
2
|
+
|
3
|
+
test_name "dsl::helpers::host_helpers #install_package" do
|
4
|
+
# NOTE: vivid packages are not ready on nightlies.puppetlabs.com,
|
5
|
+
# see: https://tickets.puppetlabs.com/browse/CPR-173
|
6
|
+
# also: https://tickets.puppetlabs.com/browse/BKR-513
|
7
|
+
confine :except, :platform => /ubuntu.*15/
|
8
|
+
|
9
|
+
# NOTE: there does not appear to be a way to confine just to cygwin hosts
|
10
|
+
confine_block :to, :platform => /windows/ do
|
11
|
+
|
12
|
+
# NOTE: install_package on windows currently fails as follows:
|
13
|
+
#
|
14
|
+
# ArgumentError: wrong number of arguments (3 for 1..2)
|
15
|
+
#
|
16
|
+
# Would expect this to be documented better, and to fail with Beaker::Host::CommandFailure
|
17
|
+
|
18
|
+
step "#install_package CURRENTLY fails on windows platforms" do
|
19
|
+
assert_raises ArgumentError do
|
20
|
+
install_package default, "rsync"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
confine_block :to, :platform => /solaris/ do
|
26
|
+
|
27
|
+
step "#install_package CURRENTLY fails on solaris platforms" do
|
28
|
+
assert_raises Beaker::Host::CommandFailure do
|
29
|
+
install_package default, "rsync"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
confine_block :to, :platform => /osx/ do
|
35
|
+
# TODO: install_package on OSX installs via a .dmg file -- how to test this?
|
36
|
+
end
|
37
|
+
|
38
|
+
confine_block :except, :platform => /windows|solaris|osx/ do
|
39
|
+
|
40
|
+
step "#install_package fails if package is not known on the OS" do
|
41
|
+
assert_raises Beaker::Host::CommandFailure do
|
42
|
+
install_package default, "non-existent-package-name"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
step "#install_package installs a known package successfully" do
|
47
|
+
result = install_package default, "rsync"
|
48
|
+
assert check_for_package(default, "rsync"), "package was not successfully installed"
|
49
|
+
end
|
50
|
+
|
51
|
+
step "#install_package succeeds when installing an already-installed package" do
|
52
|
+
result = install_package default, "rsync"
|
53
|
+
result = install_package default, "rsync"
|
54
|
+
assert check_for_package(default, "rsync"), "package was not successfully installed"
|
55
|
+
end
|
56
|
+
|
57
|
+
step "#install_package CURRENTLY fails if given a host array" do
|
58
|
+
# NOTE: would expect this to work across hosts, or to be better
|
59
|
+
# documented. If not supported, should raise
|
60
|
+
# Beaker::Host::CommandFailure
|
61
|
+
|
62
|
+
assert_raises NoMethodError do
|
63
|
+
install_package hosts, "rsync"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require "helpers/test_helper"
|
2
|
+
|
3
|
+
test_name "dsl::helpers::host_helpers #on" do
|
4
|
+
|
5
|
+
step "#on raises an exception when remote command fails" do
|
6
|
+
assert_raises(Beaker::Host::CommandFailure) do
|
7
|
+
on default, "/bin/nonexistent-command"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
step "#on makes command output available via `.stdout` on success" do
|
12
|
+
output = on(default, %Q{echo "echo via on"}).stdout
|
13
|
+
assert_equal "echo via on\n", output
|
14
|
+
end
|
15
|
+
|
16
|
+
step "#on makes command error output available via `.stderr` on success" do
|
17
|
+
output = on(default, "/bin/nonexistent-command", :acceptable_exit_codes => [0, 127]).stderr
|
18
|
+
assert_match /No such file/, output
|
19
|
+
end
|
20
|
+
|
21
|
+
step "#on makes exit status available via `.exit_code`" do
|
22
|
+
status = on(default, %Q{echo "echo via on"}).exit_code
|
23
|
+
assert_equal 0, status
|
24
|
+
end
|
25
|
+
|
26
|
+
step "#on with :acceptable_exit_codes will not fail for named exit codes" do
|
27
|
+
result = on default, "/bin/nonexistent-command", :acceptable_exit_codes => [0, 127]
|
28
|
+
output = result.stderr
|
29
|
+
assert_match /No such file/, output
|
30
|
+
status = result.exit_code
|
31
|
+
assert_equal 127, status
|
32
|
+
end
|
33
|
+
|
34
|
+
step "#on with :acceptable_exit_codes will fail for other exit codes" do
|
35
|
+
assert_raises(Beaker::Host::CommandFailure) do
|
36
|
+
on default, %Q{echo "echo via on"}, :acceptable_exit_codes => [127]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
step "#on will pass :environment options to the remote host as ENV settings" do
|
41
|
+
result = on default, "env", { :environment => { 'FOO' => 'bar' } }
|
42
|
+
output = result.stdout
|
43
|
+
|
44
|
+
assert_match /\bFOO=bar\b/, output
|
45
|
+
end
|
46
|
+
|
47
|
+
step "#on runs command on all hosts when given a host array" do
|
48
|
+
# Run a command which is (basically) guaranteed to have distinct output
|
49
|
+
# on every host, and only requires bash to be present to run on any of
|
50
|
+
# our platforms.
|
51
|
+
results = on hosts, %Q{echo "${RANDOM}:${RANDOM}:${RANDOM}"}
|
52
|
+
|
53
|
+
# assert that we got results back for every host
|
54
|
+
assert_equal hosts.size, results.size
|
55
|
+
|
56
|
+
# that they were all successful runs
|
57
|
+
results.each do |result|
|
58
|
+
assert_equal 0, result.exit_code
|
59
|
+
end
|
60
|
+
|
61
|
+
# and that we have |hosts| distinct outputs
|
62
|
+
unique_outputs = results.map(&:output).uniq
|
63
|
+
assert_equal hosts.size, unique_outputs.size
|
64
|
+
end
|
65
|
+
|
66
|
+
step "#on runs command on all hosts matching a role, when given a symbol" do
|
67
|
+
# Run a command which is (basically) guaranteed to have distinct output
|
68
|
+
# on every host, and only requires bash to be present to run on any of
|
69
|
+
# our platforms.
|
70
|
+
results = on :agent, %Q{echo "${RANDOM}:${RANDOM}:${RANDOM}"}
|
71
|
+
|
72
|
+
# assert that we got results back for every host
|
73
|
+
assert_equal hosts.size, results.size
|
74
|
+
|
75
|
+
# that they were all successful runs
|
76
|
+
results.each do |result|
|
77
|
+
assert_equal 0, result.exit_code
|
78
|
+
end
|
79
|
+
|
80
|
+
# and that we have |hosts| distinct outputs
|
81
|
+
unique_outputs = results.map(&:output).uniq
|
82
|
+
assert_equal hosts.size, unique_outputs.size
|
83
|
+
end
|
84
|
+
|
85
|
+
step "#on runs command on all hosts matching a role, when given a string" do
|
86
|
+
# Run a command which is (basically) guaranteed to have distinct output
|
87
|
+
# on every host, and only requires bash to be present to run on any of
|
88
|
+
# our platforms.
|
89
|
+
results = on "agent", %Q{echo "${RANDOM}:${RANDOM}:${RANDOM}"}
|
90
|
+
|
91
|
+
# assert that we got results back for every host
|
92
|
+
assert_equal hosts.size, results.size
|
93
|
+
|
94
|
+
# that they were all successful runs
|
95
|
+
results.each do |result|
|
96
|
+
assert_equal 0, result.exit_code
|
97
|
+
end
|
98
|
+
|
99
|
+
# and that we have |hosts| distinct outputs
|
100
|
+
unique_outputs = results.map(&:output).uniq
|
101
|
+
assert_equal hosts.size, unique_outputs.size
|
102
|
+
end
|
103
|
+
|
104
|
+
step "#on allows assertions to be used in the optional block" do
|
105
|
+
on hosts, %Q{echo "${RANDOM}:${RANDOM}"} do
|
106
|
+
assert_match /\d+:\d+/, stdout
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|