beaker 5.1.0 → 5.3.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/workflows/release.yml +1 -1
- data/.github/workflows/test.yml +1 -1
- data/.rubocop.yml +7 -3
- data/.rubocop_todo.yml +55 -3
- data/CHANGELOG.md +30 -0
- data/Gemfile +1 -7
- data/Rakefile +0 -122
- data/acceptance/tests/base/dsl/helpers/configuration_test.rb +1 -0
- data/acceptance/tests/base/dsl/helpers/hocon_helpers_test.rb +5 -2
- data/acceptance/tests/base/dsl/helpers/host_helpers/archive_file_from_test.rb +5 -1
- data/acceptance/tests/base/dsl/helpers/host_helpers/backup_the_file_test.rb +3 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/check_for_package_test.rb +6 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/create_remote_file_test.rb +6 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/curl_on_test.rb +2 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/echo_on_test.rb +3 -1
- data/acceptance/tests/base/dsl/helpers/host_helpers/on_test.rb +10 -1
- data/acceptance/tests/base/dsl/helpers/host_helpers/retry_on_test.rb +1 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/rsync_to_test.rb +2 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/run_cron_on_test.rb +13 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/run_script_on_test.rb +2 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/run_script_test.rb +2 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/scp_from_test.rb +2 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/scp_to_test.rb +2 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/shell_test.rb +5 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/upgrade_package_test.rb +2 -0
- data/acceptance/tests/base/host/file_test.rb +7 -0
- data/acceptance/tests/base/host/host_test.rb +27 -4
- data/acceptance/tests/base/host_prebuilt_steps/ssh_environment_test.rb +3 -3
- data/acceptance/tests/hypervisor/communication_test.rb +1 -1
- data/beaker.gemspec +8 -7
- data/docs/tutorials/creating_a_test_environment.md +2 -1
- data/lib/beaker/host/aix/file.rb +2 -2
- data/lib/beaker/host/freebsd/pkg.rb +1 -1
- data/lib/beaker/host/pswindows/file.rb +7 -1
- data/lib/beaker/host/unix/exec.rb +1 -1
- data/lib/beaker/host/unix/file.rb +2 -2
- data/lib/beaker/host/windows/file.rb +2 -2
- data/lib/beaker/host.rb +24 -0
- data/lib/beaker/version.rb +1 -1
- metadata +50 -18
@@ -25,6 +25,7 @@ test_name "dsl::helpers::host_helpers #curl_on" do
|
|
25
25
|
|
26
26
|
assert_equal 0, result.exit_code
|
27
27
|
remote_contents = on(default, "cat #{remote_targetfilename}").stdout
|
28
|
+
|
28
29
|
assert_equal contents, remote_contents
|
29
30
|
end
|
30
31
|
|
@@ -42,6 +43,7 @@ test_name "dsl::helpers::host_helpers #curl_on" do
|
|
42
43
|
|
43
44
|
hosts.each do |host|
|
44
45
|
remote_contents = on(host, "cat #{remote_targetfilename}").stdout
|
46
|
+
|
45
47
|
assert_equal contents, remote_contents
|
46
48
|
end
|
47
49
|
end
|
@@ -3,11 +3,13 @@ require "helpers/test_helper"
|
|
3
3
|
test_name "dsl::helpers::host_helpers #echo_on" do
|
4
4
|
step "#echo_on echoes the supplied string on the remote host" do
|
5
5
|
output = echo_on(default, "contents")
|
6
|
-
|
6
|
+
|
7
|
+
assert_equal("contents", output)
|
7
8
|
end
|
8
9
|
|
9
10
|
step "#echo_on echoes the supplied string on all hosts when given a hosts array" do
|
10
11
|
results = echo_on(hosts, "contents")
|
12
|
+
|
11
13
|
assert_equal ["contents"] * hosts.size, results
|
12
14
|
end
|
13
15
|
end
|
@@ -9,24 +9,29 @@ test_name "dsl::helpers::host_helpers #on" do
|
|
9
9
|
|
10
10
|
step "#on makes command output available via `.stdout` on success" do
|
11
11
|
output = on(default, %{echo "echo via on"}).stdout
|
12
|
+
|
12
13
|
assert_equal "echo via on\n", output
|
13
14
|
end
|
14
15
|
|
15
16
|
step "#on makes command error output available via `.stderr` on success" do
|
16
17
|
output = on(default, "/bin/nonexistent-command", :acceptable_exit_codes => [0, 127]).stderr
|
18
|
+
|
17
19
|
assert_match(/No such file/, output)
|
18
20
|
end
|
19
21
|
|
20
22
|
step "#on makes exit status available via `.exit_code`" do
|
21
23
|
status = on(default, %{echo "echo via on"}).exit_code
|
24
|
+
|
22
25
|
assert_equal 0, status
|
23
26
|
end
|
24
27
|
|
25
28
|
step "#on with :acceptable_exit_codes will not fail for named exit codes" do
|
26
29
|
result = on default, "/bin/nonexistent-command", :acceptable_exit_codes => [0, 127]
|
27
30
|
output = result.stderr
|
31
|
+
|
28
32
|
assert_match(/No such file/, output)
|
29
33
|
status = result.exit_code
|
34
|
+
|
30
35
|
assert_equal 127, status
|
31
36
|
end
|
32
37
|
|
@@ -59,6 +64,7 @@ test_name "dsl::helpers::host_helpers #on" do
|
|
59
64
|
|
60
65
|
# and that we have |hosts| distinct outputs
|
61
66
|
unique_outputs = results.map(&:output).uniq
|
67
|
+
|
62
68
|
assert_equal hosts.size, unique_outputs.size
|
63
69
|
end
|
64
70
|
|
@@ -78,6 +84,7 @@ test_name "dsl::helpers::host_helpers #on" do
|
|
78
84
|
|
79
85
|
# and that we have |hosts| distinct outputs
|
80
86
|
unique_outputs = results.map(&:output).uniq
|
87
|
+
|
81
88
|
assert_equal hosts.size, unique_outputs.size
|
82
89
|
end
|
83
90
|
|
@@ -97,6 +104,7 @@ test_name "dsl::helpers::host_helpers #on" do
|
|
97
104
|
|
98
105
|
# and that we have |hosts| distinct outputs
|
99
106
|
unique_outputs = results.map(&:output).uniq
|
107
|
+
|
100
108
|
assert_equal hosts.size, unique_outputs.size
|
101
109
|
end
|
102
110
|
|
@@ -112,7 +120,7 @@ test_name "dsl::helpers::host_helpers #on" do
|
|
112
120
|
|
113
121
|
parent_pid = Process.pid
|
114
122
|
results = on(hosts, %{echo "${RANDOM}:${RANDOM}:${RANDOM}"}, :run_in_parallel => true) do
|
115
|
-
|
123
|
+
refute_equal(Process.pid, parent_pid)
|
116
124
|
end
|
117
125
|
|
118
126
|
# assert that we got results back for every host
|
@@ -125,6 +133,7 @@ test_name "dsl::helpers::host_helpers #on" do
|
|
125
133
|
|
126
134
|
# and that we have |hosts| distinct outputs
|
127
135
|
unique_outputs = results.map(&:output).uniq
|
136
|
+
|
128
137
|
assert_equal hosts.size, unique_outputs.size
|
129
138
|
end
|
130
139
|
|
@@ -19,6 +19,7 @@ test_name "dsl::helpers::host_helpers #retry_on" do
|
|
19
19
|
create_remote_file_from_fixture("retry_script", default, remote_tmpdir, "test.sh")
|
20
20
|
|
21
21
|
result = retry_on default, "bash #{remote_script_file} #{remote_tmpdir} 2", { :max_retries => 4, :retry_interval => 0.1 }
|
22
|
+
|
22
23
|
assert_equal 0, result.exit_code
|
23
24
|
assert_equal "", result.stdout
|
24
25
|
end
|
@@ -130,6 +130,7 @@ test_name "dsl::helpers::host_helpers #rsync_to" do
|
|
130
130
|
"remote_tmdir" => remote_tmpdir,
|
131
131
|
"result" => result.inspect) do
|
132
132
|
remote_contents = on(default, "cat #{remote_filename}").stdout
|
133
|
+
|
133
134
|
assert_equal contents, remote_contents
|
134
135
|
end
|
135
136
|
end
|
@@ -154,6 +155,7 @@ test_name "dsl::helpers::host_helpers #rsync_to" do
|
|
154
155
|
"remote_tmdir" => remote_tmpdir,
|
155
156
|
"result" => result.inspect) do
|
156
157
|
remote_contents = on(host, "cat #{remote_filename}").stdout
|
158
|
+
|
157
159
|
assert_equal contents, remote_contents
|
158
160
|
end
|
159
161
|
end
|
@@ -24,6 +24,7 @@ test_name "dsl::helpers::host_helpers #run_cron_on" do
|
|
24
24
|
|
25
25
|
step "#run_cron_on CURRENTLY does not fail when listing cron jobs for a user with no cron entries" do
|
26
26
|
result = run_cron_on default, :list, default['user']
|
27
|
+
|
27
28
|
assert_equal 0, result.exit_code
|
28
29
|
end
|
29
30
|
|
@@ -31,23 +32,27 @@ test_name "dsl::helpers::host_helpers #run_cron_on" do
|
|
31
32
|
# this basically requires us to add a cron entry to make this work
|
32
33
|
run_cron_on default, :add, default['user'], "* * * * * /bin/ls >/dev/null"
|
33
34
|
result = run_cron_on default, :list, default['user']
|
35
|
+
|
34
36
|
assert_equal 0, result.exit_code
|
35
37
|
assert_match %r{/bin/ls}, result.stdout
|
36
38
|
end
|
37
39
|
|
38
40
|
step "#run_cron_on CURRENTLY does not fail, but returns nil, when adding cron jobs for an unknown user" do
|
39
41
|
result = run_cron_on default, :add, "nonexistentuser", %{* * * * * /bin/echo "hello" >/dev/null}
|
42
|
+
|
40
43
|
assert_nil result
|
41
44
|
end
|
42
45
|
|
43
46
|
step "#run_cron_on CURRENTLY does not fail, but returns nil, when attempting to add a bad cron entry" do
|
44
47
|
result = run_cron_on default, :add, default['user'], "* * * * /bin/ls >/dev/null"
|
48
|
+
|
45
49
|
assert_nil result
|
46
50
|
end
|
47
51
|
|
48
52
|
step "#run_cron_on can add a cron job for a user on a host" do
|
49
53
|
run_cron_on default, :add, default['user'], %{* * * * * /bin/echo "hello" >/dev/null}
|
50
54
|
result = run_cron_on default, :list, default['user']
|
55
|
+
|
51
56
|
assert_equal 0, result.exit_code
|
52
57
|
assert_match %r{/bin/echo}, result.stdout
|
53
58
|
end
|
@@ -73,6 +78,7 @@ test_name "dsl::helpers::host_helpers #run_cron_on" do
|
|
73
78
|
|
74
79
|
run_cron_on default, :add, default['user'], %{* * * * * /bin/echo "quality: job 1" >/dev/null}
|
75
80
|
result = run_cron_on default, :list, default['user']
|
81
|
+
|
76
82
|
assert_match %r{quality: job 1}, result.stdout
|
77
83
|
|
78
84
|
run_cron_on default, :remove, default['user']
|
@@ -95,6 +101,7 @@ test_name "dsl::helpers::host_helpers #run_cron_on" do
|
|
95
101
|
end
|
96
102
|
|
97
103
|
results = run_cron_on hosts, :list, default['user']
|
104
|
+
|
98
105
|
results.each do |result|
|
99
106
|
assert_match %r{/bin/ls}, result.stdout
|
100
107
|
end
|
@@ -104,6 +111,7 @@ test_name "dsl::helpers::host_helpers #run_cron_on" do
|
|
104
111
|
run_cron_on hosts, :add, default['user'], "* * * * * /bin/ls >/dev/null"
|
105
112
|
|
106
113
|
results = run_cron_on hosts, :list, default['user']
|
114
|
+
|
107
115
|
results.each do |result|
|
108
116
|
assert_match %r{/bin/ls}, result.stdout
|
109
117
|
end
|
@@ -144,6 +152,7 @@ test_name "dsl::helpers::host_helpers #run_cron_on" do
|
|
144
152
|
# this basically requires us to add a cron entry to make this work
|
145
153
|
run_cron_on default, :add, default['user'], "* * * * * /bin/ls >/dev/null"
|
146
154
|
result = run_cron_on default, :list, default['user']
|
155
|
+
|
147
156
|
assert_equal 0, result.exit_code
|
148
157
|
assert_match %r{/bin/ls}, result.stdout
|
149
158
|
end
|
@@ -163,6 +172,7 @@ test_name "dsl::helpers::host_helpers #run_cron_on" do
|
|
163
172
|
step "#run_cron_on can add a cron job for a user on a host" do
|
164
173
|
run_cron_on default, :add, default['user'], %{* * * * * /bin/echo "hello" >/dev/null}
|
165
174
|
result = run_cron_on default, :list, default['user']
|
175
|
+
|
166
176
|
assert_equal 0, result.exit_code
|
167
177
|
assert_match %r{/bin/echo}, result.stdout
|
168
178
|
end
|
@@ -188,6 +198,7 @@ test_name "dsl::helpers::host_helpers #run_cron_on" do
|
|
188
198
|
|
189
199
|
run_cron_on default, :add, default['user'], %{* * * * * /bin/echo "quality: job 1" >/dev/null}
|
190
200
|
result = run_cron_on default, :list, default['user']
|
201
|
+
|
191
202
|
assert_match %r{quality: job 1}, result.stdout
|
192
203
|
|
193
204
|
run_cron_on default, :remove, default['user']
|
@@ -210,6 +221,7 @@ test_name "dsl::helpers::host_helpers #run_cron_on" do
|
|
210
221
|
end
|
211
222
|
|
212
223
|
results = run_cron_on hosts, :list, default['user']
|
224
|
+
|
213
225
|
results.each do |result|
|
214
226
|
assert_match %r{/bin/ls}, result.stdout
|
215
227
|
end
|
@@ -219,6 +231,7 @@ test_name "dsl::helpers::host_helpers #run_cron_on" do
|
|
219
231
|
run_cron_on hosts, :add, default['user'], "* * * * * /bin/ls >/dev/null"
|
220
232
|
|
221
233
|
results = run_cron_on hosts, :list, default['user']
|
234
|
+
|
222
235
|
results.each do |result|
|
223
236
|
assert_match %r{/bin/ls}, result.stdout
|
224
237
|
end
|
@@ -22,6 +22,7 @@ test_name "dsl::helpers::host_helpers #run_script_on" do
|
|
22
22
|
local_filename, _contents = create_local_file_from_fixture("failing_shell_script", local_dir, "testfile.sh", "a+x")
|
23
23
|
|
24
24
|
result = run_script_on default, local_filename, { :accept_all_exit_codes => true }
|
25
|
+
|
25
26
|
assert_equal 1, result.exit_code
|
26
27
|
end
|
27
28
|
end
|
@@ -31,6 +32,7 @@ test_name "dsl::helpers::host_helpers #run_script_on" do
|
|
31
32
|
local_filename, _contents = create_local_file_from_fixture("shell_script_with_output", local_dir, "testfile.sh", "a+x")
|
32
33
|
|
33
34
|
results = run_script_on default, local_filename
|
35
|
+
|
34
36
|
assert_equal 0, results.exit_code
|
35
37
|
assert_equal "output\n", results.stdout
|
36
38
|
end
|
@@ -22,6 +22,7 @@ test_name "dsl::helpers::host_helpers #run_script" do
|
|
22
22
|
local_filename, _contents = create_local_file_from_fixture("failing_shell_script", local_dir, "testfile.sh", "a+x")
|
23
23
|
|
24
24
|
result = run_script local_filename, { :accept_all_exit_codes => true }
|
25
|
+
|
25
26
|
assert_equal 1, result.exit_code
|
26
27
|
end
|
27
28
|
end
|
@@ -31,6 +32,7 @@ test_name "dsl::helpers::host_helpers #run_script" do
|
|
31
32
|
local_filename, _contents = create_local_file_from_fixture("shell_script_with_output", local_dir, "testfile.sh", "a+x")
|
32
33
|
|
33
34
|
results = run_script local_filename
|
35
|
+
|
34
36
|
assert_equal 0, results.exit_code
|
35
37
|
assert_equal "output\n", results.stdout
|
36
38
|
end
|
@@ -28,6 +28,7 @@ test_name "dsl::helpers::host_helpers #scp_from" do
|
|
28
28
|
scp_from default, remote_filename, local_dir
|
29
29
|
|
30
30
|
local_filename = File.join(local_dir, "testfile.txt")
|
31
|
+
|
31
32
|
assert_equal contents, File.read(local_filename)
|
32
33
|
end
|
33
34
|
end
|
@@ -47,6 +48,7 @@ test_name "dsl::helpers::host_helpers #scp_from" do
|
|
47
48
|
|
48
49
|
local_filename = File.join(local_dir, "testfile.txt")
|
49
50
|
local_contents = File.read(local_filename)
|
51
|
+
|
50
52
|
assert_equal remote_contents, local_contents
|
51
53
|
end
|
52
54
|
end
|
@@ -30,6 +30,7 @@ test_name "dsl::helpers::host_helpers #scp_to" do
|
|
30
30
|
|
31
31
|
remote_filename = File.join(remote_tmpdir, "testfile.txt")
|
32
32
|
remote_contents = on(default, "cat #{remote_filename}").stdout
|
33
|
+
|
33
34
|
assert_equal contents, remote_contents
|
34
35
|
end
|
35
36
|
end
|
@@ -46,6 +47,7 @@ test_name "dsl::helpers::host_helpers #scp_to" do
|
|
46
47
|
|
47
48
|
hosts.each do |host|
|
48
49
|
remote_contents = on(host, "cat #{remote_filename}").stdout
|
50
|
+
|
49
51
|
assert_equal contents, remote_contents
|
50
52
|
end
|
51
53
|
end
|
@@ -9,24 +9,29 @@ test_name "dsl::helpers::host_helpers #shell" do
|
|
9
9
|
|
10
10
|
step "#shell makes command output available via `.stdout` on success" do
|
11
11
|
output = shell(%{echo "echo via on"}).stdout
|
12
|
+
|
12
13
|
assert_equal "echo via on\n", output
|
13
14
|
end
|
14
15
|
|
15
16
|
step "#shell makes command error output available via `.stderr` on success" do
|
16
17
|
output = shell("/bin/nonexistent-command", :acceptable_exit_codes => [0, 127]).stderr
|
18
|
+
|
17
19
|
assert_match(/No such file/, output)
|
18
20
|
end
|
19
21
|
|
20
22
|
step "#shell makes exit status available via `.exit_code`" do
|
21
23
|
status = shell(%{echo "echo via on"}).exit_code
|
24
|
+
|
22
25
|
assert_equal 0, status
|
23
26
|
end
|
24
27
|
|
25
28
|
step "#shell with :acceptable_exit_codes will not fail for named exit codes" do
|
26
29
|
result = shell "/bin/nonexistent-command", :acceptable_exit_codes => [0, 127]
|
27
30
|
output = result.stderr
|
31
|
+
|
28
32
|
assert_match(/No such file/, output)
|
29
33
|
status = result.exit_code
|
34
|
+
|
30
35
|
assert_equal 127, status
|
31
36
|
end
|
32
37
|
|
@@ -42,6 +42,7 @@ test_name "dsl::helpers::host_helpers #upgrade_package" do
|
|
42
42
|
# > No Packages marked for Update
|
43
43
|
|
44
44
|
result = upgrade_package default, "non-existent-package-name"
|
45
|
+
|
45
46
|
assert_match(/No Packages marked for Update/i, result)
|
46
47
|
end
|
47
48
|
end
|
@@ -60,6 +61,7 @@ test_name "dsl::helpers::host_helpers #upgrade_package" do
|
|
60
61
|
|
61
62
|
install_package default, "rsync"
|
62
63
|
upgrade_package default, "rsync"
|
64
|
+
|
63
65
|
assert check_for_package(default, "rsync"), "package was not successfully installed/upgraded"
|
64
66
|
end
|
65
67
|
|
@@ -11,6 +11,7 @@ test_name 'File Test' do
|
|
11
11
|
tmpfile = host.tmpfile('beaker')
|
12
12
|
# ensure we have a user to chown to
|
13
13
|
host.chown('testuser', tmpfile)
|
14
|
+
|
14
15
|
assert_match(/testuser/, host.ls_ld(tmpfile), "Should have found testuser in `ls -ld` output")
|
15
16
|
end
|
16
17
|
end
|
@@ -21,6 +22,7 @@ test_name 'File Test' do
|
|
21
22
|
tmpdir = host.tmpdir('beaker')
|
22
23
|
# ensure we have a user to chown to
|
23
24
|
host.chgrp('testgroup', tmpdir)
|
25
|
+
|
24
26
|
assert_match(/testgroup/, host.ls_ld(tmpdir), "Should have found testgroup in `ls -ld` output")
|
25
27
|
end
|
26
28
|
end
|
@@ -31,6 +33,7 @@ test_name 'File Test' do
|
|
31
33
|
tmpdir = host.tmpdir('beaker')
|
32
34
|
on host, host.touch("#{tmpdir}/somefile.txt", false)
|
33
35
|
host.chown('testuser', tmpdir, true)
|
36
|
+
|
34
37
|
assert_match(/testuser/, host.ls_ld("#{tmpdir}/somefile.txt"), "Should have found testuser in `ls -ld` output for sub-file")
|
35
38
|
end
|
36
39
|
end
|
@@ -41,6 +44,7 @@ test_name 'File Test' do
|
|
41
44
|
tmpfile = host.tmpfile('beaker')
|
42
45
|
# ensure we have a group to chgrp to
|
43
46
|
host.chgrp('testgroup', tmpfile)
|
47
|
+
|
44
48
|
assert_match(/testgroup/, host.ls_ld(tmpfile), "Should have found testgroup in `ls -ld` output")
|
45
49
|
end
|
46
50
|
end
|
@@ -51,6 +55,7 @@ test_name 'File Test' do
|
|
51
55
|
tmpdir = host.tmpdir('beaker')
|
52
56
|
# ensure we have a group to chgrp to
|
53
57
|
host.chgrp('testgroup', tmpdir)
|
58
|
+
|
54
59
|
assert_match(/testgroup/, host.ls_ld(tmpdir), "Should have found testgroup in `ls -ld` output")
|
55
60
|
end
|
56
61
|
end
|
@@ -61,6 +66,7 @@ test_name 'File Test' do
|
|
61
66
|
tmpdir = host.tmpdir('beaker')
|
62
67
|
on host, host.touch("#{tmpdir}/somefile.txt", false)
|
63
68
|
host.chgrp('testgroup', tmpdir, true)
|
69
|
+
|
64
70
|
assert_match(/testgroup/, host.ls_ld("#{tmpdir}/somefile.txt"), "Should have found testgroup in `ls -ld` output for sub-file")
|
65
71
|
end
|
66
72
|
end
|
@@ -69,6 +75,7 @@ test_name 'File Test' do
|
|
69
75
|
hosts.each do |host|
|
70
76
|
# create a tmp file to mangle
|
71
77
|
tmpdir = host.tmpdir('beaker')
|
78
|
+
|
72
79
|
assert_match(/beaker/, host.ls_ld(tmpdir), "Should have found beaker in `ls -ld` output")
|
73
80
|
end
|
74
81
|
end
|
@@ -5,8 +5,10 @@ test_name "confirm host object behave correctly"
|
|
5
5
|
step "#port_open? : can determine if a port is open on hosts"
|
6
6
|
hosts.each do |host|
|
7
7
|
logger.debug "port 22 (ssh) should be open on #{host}"
|
8
|
+
|
8
9
|
assert_equal(true, host.port_open?(22), "port 22 on #{host} should be open")
|
9
10
|
logger.debug "port 65535 should be closed on #{host}"
|
11
|
+
|
10
12
|
assert_equal(false, host.port_open?(65535), "port 65535 on #{host} should be closed")
|
11
13
|
end
|
12
14
|
|
@@ -15,6 +17,7 @@ hosts.each do |host|
|
|
15
17
|
ip = host.ip
|
16
18
|
# confirm ip format
|
17
19
|
logger.debug("format of #{ip} for #{host} should be correct")
|
20
|
+
|
18
21
|
assert_match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/, ip, "#{ip} on #{host} isn't correct format")
|
19
22
|
end
|
20
23
|
|
@@ -62,7 +65,8 @@ hosts.each do |host|
|
|
62
65
|
host.add_env_var(env_param1, env_value3)
|
63
66
|
|
64
67
|
val = host.get_env_var(env_id)
|
65
|
-
|
68
|
+
|
69
|
+
assert_equal('', val, 'get_env_var should not match a partial env key name')
|
66
70
|
end
|
67
71
|
|
68
72
|
step "#get_env_var : should not return a match from a key\'s value"
|
@@ -75,7 +79,8 @@ hosts.each do |host|
|
|
75
79
|
host.add_env_var(env_param1, env_value1)
|
76
80
|
|
77
81
|
val = host.get_env_var(env_value1)
|
78
|
-
|
82
|
+
|
83
|
+
assert_equal('', val, 'get_env_var should not return a match from a key\'s value')
|
79
84
|
end
|
80
85
|
|
81
86
|
step "#clear_env_var : should only remove the specified key"
|
@@ -99,11 +104,14 @@ hosts.each do |host|
|
|
99
104
|
host.clear_env_var(env_param3)
|
100
105
|
|
101
106
|
val = host.get_env_var(env_param1)
|
107
|
+
|
102
108
|
assert_match(/^#{env_param1}=#{env_value1}$/, val, "#{env_param1} should exist after calling clear_env_var")
|
103
109
|
val = host.get_env_var(env_param2)
|
110
|
+
|
104
111
|
assert_match(/^#{env_param2}=#{env_value2}$/, val, "#{env_param2} should exist after calling clear_env_var")
|
105
112
|
val = host.get_env_var(env_param3)
|
106
|
-
|
113
|
+
|
114
|
+
assert_equal('', val, "#{env_param3} should not exist after calling clear_env_var")
|
107
115
|
end
|
108
116
|
|
109
117
|
step "#add_env_var : can add a unique environment variable"
|
@@ -126,10 +134,13 @@ hosts.each do |host|
|
|
126
134
|
host.add_env_var(env_param3, env_value3)
|
127
135
|
|
128
136
|
val = host.get_env_var(env_param1)
|
137
|
+
|
129
138
|
assert_match(/^#{env_param1}=#{env_value1}$/, val, "#{env_param1} should exist")
|
130
139
|
val = host.get_env_var(env_param2)
|
140
|
+
|
131
141
|
assert_match(/^#{env_param2}=#{env_value2}$/, val, "#{env_param2} should exist")
|
132
142
|
val = host.get_env_var(env_param3)
|
143
|
+
|
133
144
|
assert_match(/^#{env_param3}=#{env_value3}$/, val, "#{env_param3} should exist")
|
134
145
|
end
|
135
146
|
|
@@ -147,6 +158,7 @@ hosts.each do |host|
|
|
147
158
|
host.add_env_var("TEST", "3")
|
148
159
|
logger.debug("ensure that TEST env var has correct setting")
|
149
160
|
val = host.get_env_var("TEST")
|
161
|
+
|
150
162
|
assert_match(/TEST=3(;|:)2(;|:)1$/, val, "add_env_var can correctly add env vars")
|
151
163
|
end
|
152
164
|
|
@@ -169,6 +181,7 @@ step "#add_env_var : can preserve an environment between ssh connections" do
|
|
169
181
|
host.close
|
170
182
|
logger.debug("ensure that TEST env var has correct setting")
|
171
183
|
val = host.get_env_var("TEST")
|
184
|
+
|
172
185
|
assert_match(/TEST=3(;|:)2(;|:)1$/, val, "can preserve an environment between ssh connections")
|
173
186
|
end
|
174
187
|
end
|
@@ -178,14 +191,17 @@ hosts.each do |host|
|
|
178
191
|
logger.debug("remove TEST=3")
|
179
192
|
host.delete_env_var("TEST", "3")
|
180
193
|
val = host.get_env_var("TEST")
|
194
|
+
|
181
195
|
assert_match(/TEST=2(;|:)1$/, val, "delete_env_var can correctly delete part of a chained env var")
|
182
196
|
logger.debug("remove TEST=1")
|
183
197
|
host.delete_env_var("TEST", "1")
|
184
198
|
val = host.get_env_var("TEST")
|
199
|
+
|
185
200
|
assert_match(/TEST=2$/, val, "delete_env_var can correctly delete part of a chained env var")
|
186
201
|
logger.debug("remove TEST=2")
|
187
202
|
host.delete_env_var("TEST", "2")
|
188
203
|
val = host.get_env_var("TEST")
|
204
|
+
|
189
205
|
assert_equal("", val, "delete_env_var fully removes empty env var")
|
190
206
|
end
|
191
207
|
|
@@ -195,6 +211,7 @@ hosts.each do |host|
|
|
195
211
|
host.rm_rf("test1")
|
196
212
|
# test dir construction
|
197
213
|
logger.debug("create test1/test2/test3/test4")
|
214
|
+
|
198
215
|
assert_equal(true, host.mkdir_p("test1/test2/test3/test4"), "can create directory structure")
|
199
216
|
logger.debug("should be able to create a file in the new dir")
|
200
217
|
on host, host.touch("test1/test2/test3/test4/test.txt", false)
|
@@ -218,9 +235,11 @@ hosts.each do |host|
|
|
218
235
|
local_paths.each do |path|
|
219
236
|
search_name = path.gsub(/^.*fixtures\//, '') # reduce down to the path that should match
|
220
237
|
matched = host_paths.select { |check| /#{Regexp.escape(search_name)}$/.match?(check) }
|
238
|
+
|
221
239
|
assert_equal(1, matched.length, "should have found a single instance of path #{search_name}, found #{matched.length}: \n #{matched}")
|
222
240
|
host_paths = host_paths - matched
|
223
241
|
end
|
242
|
+
|
224
243
|
assert_equal(0, host_paths.length, "there are extra paths on #{host} (#{host_paths})")
|
225
244
|
end
|
226
245
|
end
|
@@ -251,6 +270,7 @@ hosts.each do |host|
|
|
251
270
|
end
|
252
271
|
host_paths = host_paths - matched
|
253
272
|
end
|
273
|
+
|
254
274
|
assert_equal(0, host_paths.length, "there are extra paths on #{host} (#{host_paths})")
|
255
275
|
end
|
256
276
|
end
|
@@ -282,6 +302,7 @@ hosts.each do |host|
|
|
282
302
|
end
|
283
303
|
host_paths = host_paths - matched
|
284
304
|
end
|
305
|
+
|
285
306
|
assert_equal(0, host_paths.length, "there are extra paths on #{host} (#{host_paths})")
|
286
307
|
end
|
287
308
|
end
|
@@ -326,10 +347,12 @@ step 'Ensure that a long 128+ character string with UTF-8 characters does not br
|
|
326
347
|
long_string = ('a' * 128) + "\u06FF"
|
327
348
|
on(default, "mkdir /tmp/#{long_string}")
|
328
349
|
result = on(default, 'ls /tmp')
|
329
|
-
|
350
|
+
|
351
|
+
assert_includes(result.stdout, long_string, 'Error in folder creation with long string + UTF-8 characters')
|
330
352
|
|
331
353
|
# remove the folder
|
332
354
|
on(default, "rm -rf /tmp/#{long_string}")
|
333
355
|
result = on(default, 'ls /tmp')
|
356
|
+
|
334
357
|
assert(!result.stdout.include?(long_string), 'Error in folder deletion with long string + UTF-8 characters')
|
335
358
|
end
|
@@ -8,7 +8,7 @@ test_name "confirm host prebuilt steps behave correctly" do
|
|
8
8
|
|
9
9
|
step "confirm PATH env variable is set in the ssh environment file" do
|
10
10
|
hosts.each do |host|
|
11
|
-
|
11
|
+
assert_equal(0, on(host, "grep \"PATH\" #{host[:ssh_env_file]}").exit_code)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -16,7 +16,7 @@ test_name "confirm host prebuilt steps behave correctly" do
|
|
16
16
|
confine_block :to, :platform => /solaris-10/ do
|
17
17
|
step "confirm /opt/csw/bin has been added to the path" do
|
18
18
|
hosts.each do |host|
|
19
|
-
|
19
|
+
assert_equal(0, on(host, "grep \"/opt/csw/bin\" #{host[:ssh_env_file]}").exit_code)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -24,7 +24,7 @@ test_name "confirm host prebuilt steps behave correctly" do
|
|
24
24
|
confine_block :to, :platform => /openbsd/ do
|
25
25
|
step "confirm PKG_PATH is set in the ssh environment file" do
|
26
26
|
hosts.each do |host|
|
27
|
-
|
27
|
+
assert_equal(0, on(host, "grep \"PKG_PATH\" #{host[:ssh_env_file]}").exit_code)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
data/beaker.gemspec
CHANGED
@@ -22,26 +22,27 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_development_dependency 'fakefs', '~> 2.4'
|
23
23
|
s.add_development_dependency 'rake', '~> 13.0'
|
24
24
|
s.add_development_dependency 'rspec', '~> 3.0'
|
25
|
-
|
26
|
-
# Documentation dependencies
|
27
|
-
s.add_development_dependency 'yard', '~> 0.9.11'
|
25
|
+
s.add_development_dependency 'voxpupuli-rubocop', '~> 1.1'
|
28
26
|
|
29
27
|
# Run time dependencies
|
30
28
|
s.add_runtime_dependency 'minitar', '~> 0.6'
|
31
29
|
s.add_runtime_dependency 'minitest', '~> 5.4'
|
32
|
-
s.add_runtime_dependency 'rexml'
|
30
|
+
s.add_runtime_dependency 'rexml', '~> 3.2', '>= 3.2.5'
|
31
|
+
|
32
|
+
# net-ssh compatibility with ed25519 keys
|
33
|
+
s.add_runtime_dependency 'bcrypt_pbkdf', '>= 1.0', '< 2.0'
|
34
|
+
s.add_runtime_dependency 'ed25519', '>= 1.2', '<2.0'
|
33
35
|
|
34
|
-
s.add_runtime_dependency 'ed25519', '~> 1.0' # net-ssh compatibility with ed25519 keys
|
35
36
|
s.add_runtime_dependency 'hocon', '~> 1.0'
|
36
37
|
s.add_runtime_dependency 'inifile', '~> 3.0'
|
37
38
|
s.add_runtime_dependency 'net-scp', '>= 1.2', '< 5.0'
|
38
|
-
s.add_runtime_dependency 'net-ssh', '
|
39
|
+
s.add_runtime_dependency 'net-ssh', '~> 7.1'
|
39
40
|
|
40
41
|
s.add_runtime_dependency 'in-parallel', '>= 0.1', '< 2.0'
|
41
42
|
s.add_runtime_dependency 'rsync', '~> 1.0.9'
|
42
43
|
s.add_runtime_dependency 'thor', ['>= 1.0.1', '< 2.0']
|
43
44
|
|
44
45
|
# Run time dependencies that are Beaker libraries
|
45
|
-
s.add_runtime_dependency 'beaker-hostgenerator'
|
46
|
+
s.add_runtime_dependency 'beaker-hostgenerator', '~> 2.0'
|
46
47
|
s.add_runtime_dependency 'stringify-hash', '~> 0.0'
|
47
48
|
end
|
@@ -45,6 +45,7 @@ To properly define a host you must provide:
|
|
45
45
|
|
46
46
|
* name: The string identifying this host.
|
47
47
|
* platform: One of the Beaker supported platforms.
|
48
|
+
* roles: In a multi-host setup roles are mandatory. One host needs the role of `default`. Roles describe the 'job' of a host, an array of `master`, `agent`, `frictionless`, `dashboard`, `database`, `default` or any user-defined string.
|
48
49
|
|
49
50
|
## Optional Host Settings
|
50
51
|
|
@@ -54,7 +55,7 @@ Additionally, Beaker supports the following host options:
|
|
54
55
|
* hypervisor: One of `docker`, `solaris`, `ec2`, `vsphere`, `fusion`, `aix`, `vcloud` or `vagrant`.
|
55
56
|
* Additional settings may be required depending on the selected hypervisor (ie, template, box, box_url, etc). Check the documentation below for your hypervisor for details.
|
56
57
|
* snapshot: The name of the snapshot to revert to before testing.
|
57
|
-
* roles:
|
58
|
+
* roles: In a single-host setup roles are optional. Roles describe the 'job' of a host, an array of `master`, `agent`, `frictionless`, `dashboard`, `database`, `default` or any user-defined string.
|
58
59
|
* pe_dir: The directory where PE builds are located, may be local directory or a URL.
|
59
60
|
* pe_ver: The version number of PE to install.
|
60
61
|
* vagrant_memsize: The memory size (in MB) for this host
|
data/lib/beaker/host/aix/file.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Aix::File
|
2
2
|
include Beaker::CommandFactory
|
3
3
|
|
4
|
-
def tmpfile(name = '')
|
5
|
-
execute("rndnum=${RANDOM} && touch /tmp/#{name}.${rndnum} && echo /tmp/#{name}.${rndnum}")
|
4
|
+
def tmpfile(name = '', extension = nil)
|
5
|
+
execute("rndnum=${RANDOM} && touch /tmp/#{name}.${rndnum}#{extension} && echo /tmp/#{name}.${rndnum}#{extension}")
|
6
6
|
end
|
7
7
|
|
8
8
|
def tmpdir(name = '')
|
@@ -16,7 +16,7 @@ module FreeBSD::Pkg
|
|
16
16
|
execute("/bin/sh -c '#{check_pkgng_sh}'", opts) { |r| r }.exit_code == 0
|
17
17
|
end
|
18
18
|
|
19
|
-
def install_package(package, cmdline_args = nil, opts = {})
|
19
|
+
def install_package(package, cmdline_args = nil, _version = nil, opts = {})
|
20
20
|
cmd = if pkgng_active?
|
21
21
|
"pkg install #{cmdline_args || '-y'} #{package}"
|
22
22
|
else
|