beaker 1.21.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/CONTRIBUTING.md +1 -0
- data/HISTORY.md +17288 -2
- data/Rakefile +6 -2
- data/beaker.gemspec +15 -19
- data/lib/beaker.rb +2 -5
- data/lib/beaker/answers.rb +2 -0
- data/lib/beaker/answers/version34.rb +37 -1
- data/lib/beaker/cli.rb +4 -0
- data/lib/beaker/command.rb +16 -84
- data/lib/beaker/command_factory.rb +13 -2
- data/lib/beaker/dsl/assertions.rb +25 -2
- data/lib/beaker/dsl/ezbake_utils.rb +2 -2
- data/lib/beaker/dsl/helpers.rb +66 -12
- data/lib/beaker/dsl/install_utils.rb +128 -66
- data/lib/beaker/dsl/wrappers.rb +41 -3
- data/lib/beaker/host.rb +42 -6
- data/lib/beaker/host/mac.rb +62 -0
- data/lib/beaker/host/mac/group.rb +96 -0
- data/lib/beaker/host/mac/user.rb +93 -0
- data/lib/beaker/host/unix/exec.rb +1 -1
- data/lib/beaker/host/unix/pkg.rb +11 -11
- data/lib/beaker/host/windows.rb +4 -4
- data/lib/beaker/host_prebuilt_steps.rb +194 -58
- data/lib/beaker/hypervisor.rb +16 -9
- data/lib/beaker/hypervisor/aws_sdk.rb +61 -17
- data/lib/beaker/hypervisor/docker.rb +14 -2
- data/lib/beaker/hypervisor/ec2_helper.rb +15 -3
- data/lib/beaker/hypervisor/vagrant.rb +22 -10
- data/lib/beaker/hypervisor/vagrant_libvirt.rb +11 -0
- data/lib/beaker/hypervisor/vagrant_virtualbox.rb +1 -1
- data/lib/beaker/hypervisor/vcloud_pooled.rb +8 -39
- data/lib/beaker/logger.rb +15 -9
- data/lib/beaker/network_manager.rb +2 -2
- data/lib/beaker/options/command_line_parser.rb +1 -1
- data/lib/beaker/options/parser.rb +1 -8
- data/lib/beaker/options/presets.rb +70 -45
- data/lib/beaker/perf.rb +3 -4
- data/lib/beaker/platform.rb +2 -1
- data/lib/beaker/result.rb +3 -9
- data/lib/beaker/ssh_connection.rb +2 -0
- data/lib/beaker/test_case.rb +2 -21
- data/lib/beaker/test_suite.rb +21 -25
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/answers_spec.rb +36 -0
- data/spec/beaker/cli_spec.rb +45 -45
- data/spec/beaker/command_spec.rb +25 -36
- data/spec/beaker/dsl/assertions_spec.rb +20 -27
- data/spec/beaker/dsl/ezbake_utils_spec.rb +5 -5
- data/spec/beaker/dsl/helpers_spec.rb +293 -208
- data/spec/beaker/dsl/install_utils_spec.rb +310 -189
- data/spec/beaker/dsl/outcomes_spec.rb +6 -6
- data/spec/beaker/dsl/roles_spec.rb +27 -18
- data/spec/beaker/dsl/structure_spec.rb +11 -11
- data/spec/beaker/dsl/wrappers_spec.rb +35 -11
- data/spec/beaker/host/mac/group_spec.rb +124 -0
- data/spec/beaker/host/mac/user_spec.rb +134 -0
- data/spec/beaker/host/unix/pkg_spec.rb +40 -24
- data/spec/beaker/host/windows/group_spec.rb +1 -1
- data/spec/beaker/host_prebuilt_steps_spec.rb +194 -68
- data/spec/beaker/host_spec.rb +145 -67
- data/spec/beaker/hypervisor/aixer_spec.rb +6 -6
- data/spec/beaker/hypervisor/aws_sdk_spec.rb +22 -7
- data/spec/beaker/hypervisor/docker_spec.rb +71 -50
- data/spec/beaker/hypervisor/ec2_helper_spec.rb +25 -4
- data/spec/beaker/hypervisor/fusion_spec.rb +2 -2
- data/spec/beaker/hypervisor/hypervisor_spec.rb +20 -27
- data/spec/beaker/hypervisor/hypervisor_spec.rb.orig +80 -0
- data/spec/beaker/hypervisor/solaris_spec.rb +8 -8
- data/spec/beaker/hypervisor/vagrant_fusion_spec.rb +6 -8
- data/spec/beaker/hypervisor/vagrant_libvirt_spec.rb +34 -0
- data/spec/beaker/hypervisor/vagrant_spec.rb +34 -33
- data/spec/beaker/hypervisor/vagrant_virtualbox_spec.rb +18 -8
- data/spec/beaker/hypervisor/vagrant_workstation_spec.rb +6 -8
- data/spec/beaker/hypervisor/vcloud_pooled_spec.rb +8 -8
- data/spec/beaker/hypervisor/vcloud_spec.rb +10 -10
- data/spec/beaker/hypervisor/vsphere_helper_spec.rb +8 -8
- data/spec/beaker/hypervisor/vsphere_spec.rb +1 -1
- data/spec/beaker/logger_spec.rb +45 -31
- data/spec/beaker/options/command_line_parser_spec.rb +10 -2
- data/spec/beaker/options/hosts_file_parser_spec.rb +9 -2
- data/spec/beaker/options/options_hash_spec.rb +2 -2
- data/spec/beaker/options/parser_spec.rb +2 -2
- data/spec/beaker/options/pe_version_scaper_spec.rb +6 -1
- data/spec/beaker/options/presets_spec.rb +11 -1
- data/spec/beaker/shared/error_handler_spec.rb +5 -5
- data/spec/beaker/shared/host_manager_spec.rb +3 -2
- data/spec/beaker/shared/repetition_spec.rb +18 -18
- data/spec/beaker/ssh_connection_spec.rb +33 -4
- data/spec/beaker/test_case_spec.rb +9 -9
- data/spec/beaker/test_suite_spec.rb +14 -14
- data/spec/helpers.rb +4 -4
- data/spec/matchers.rb +4 -4
- data/spec/mocks.rb +5 -1
- data/spec/spec_helper.rb +2 -8
- metadata +114 -80
- data/lib/beaker/hypervisor/blimper.rb +0 -108
- data/spec/beaker/hypervisor/blimper_spec.rb +0 -42
- data/spec/beaker/options/data/LATEST +0 -1
- data/spec/beaker/puppet_command_spec.rb +0 -161
- data/spec/mock_blimpy.rb +0 -48
@@ -25,67 +25,83 @@ module Beaker
|
|
25
25
|
|
26
26
|
context "check_for_package" do
|
27
27
|
|
28
|
-
it "
|
28
|
+
it "checks correctly on sles" do
|
29
29
|
@opts = {'platform' => 'sles-is-me'}
|
30
30
|
pkg = 'sles_package'
|
31
|
-
Beaker::Command.
|
32
|
-
instance.
|
31
|
+
expect( Beaker::Command ).to receive(:new).with("zypper se -i --match-exact #{pkg}").and_return('')
|
32
|
+
expect( instance ).to receive(:exec).with('', :acceptable_exit_codes => (0...127)).and_return(generate_result("hello", {:exit_code => 0}))
|
33
33
|
expect( instance.check_for_package(pkg) ).to be === true
|
34
34
|
end
|
35
35
|
|
36
|
-
it "
|
36
|
+
it "checks correctly on fedora" do
|
37
37
|
@opts = {'platform' => 'fedora-is-me'}
|
38
38
|
pkg = 'fedora_package'
|
39
|
-
Beaker::Command.
|
40
|
-
instance.
|
39
|
+
expect( Beaker::Command ).to receive(:new).with("rpm -q #{pkg}").and_return('')
|
40
|
+
expect( instance ).to receive(:exec).with('', :acceptable_exit_codes => (0...127)).and_return(generate_result("hello", {:exit_code => 0}))
|
41
41
|
expect( instance.check_for_package(pkg) ).to be === true
|
42
42
|
end
|
43
43
|
|
44
|
-
it "
|
44
|
+
it "checks correctly on centos" do
|
45
45
|
@opts = {'platform' => 'centos-is-me'}
|
46
46
|
pkg = 'centos_package'
|
47
|
-
Beaker::Command.
|
48
|
-
instance.
|
47
|
+
expect( Beaker::Command ).to receive(:new).with("rpm -q #{pkg}").and_return('')
|
48
|
+
expect( instance ).to receive(:exec).with('', :acceptable_exit_codes => (0...127)).and_return(generate_result("hello", {:exit_code => 0}))
|
49
49
|
expect( instance.check_for_package(pkg) ).to be === true
|
50
50
|
end
|
51
51
|
|
52
|
-
it "
|
52
|
+
it "checks correctly on EOS" do
|
53
|
+
@opts = {'platform' => 'eos-is-me'}
|
54
|
+
pkg = 'eos-package'
|
55
|
+
expect( Beaker::Command ).to receive(:new).with("rpm -q #{pkg}").and_return('')
|
56
|
+
expect( instance ).to receive(:exec).with('', :acceptable_exit_codes => (0...127)).and_return(generate_result("hello", {:exit_code => 0}))
|
57
|
+
expect( instance.check_for_package(pkg) ).to be === true
|
58
|
+
end
|
59
|
+
|
60
|
+
it "checks correctly on el-" do
|
53
61
|
@opts = {'platform' => 'el-is-me'}
|
54
62
|
pkg = 'el_package'
|
55
|
-
Beaker::Command.
|
56
|
-
instance.
|
63
|
+
expect( Beaker::Command ).to receive(:new).with("rpm -q #{pkg}").and_return('')
|
64
|
+
expect( instance ).to receive(:exec).with('', :acceptable_exit_codes => (0...127)).and_return(generate_result("hello", {:exit_code => 0}))
|
57
65
|
expect( instance.check_for_package(pkg) ).to be === true
|
58
66
|
end
|
59
67
|
|
60
|
-
it "
|
68
|
+
it "checks correctly on debian" do
|
61
69
|
@opts = {'platform' => 'debian-is-me'}
|
62
70
|
pkg = 'debian_package'
|
63
|
-
Beaker::Command.
|
64
|
-
instance.
|
71
|
+
expect( Beaker::Command ).to receive(:new).with("dpkg -s #{pkg}").and_return('')
|
72
|
+
expect( instance ).to receive(:exec).with('', :acceptable_exit_codes => (0...127)).and_return(generate_result("hello", {:exit_code => 0}))
|
65
73
|
expect( instance.check_for_package(pkg) ).to be === true
|
66
74
|
end
|
67
75
|
|
68
|
-
it "
|
76
|
+
it "checks correctly on ubuntu" do
|
69
77
|
@opts = {'platform' => 'ubuntu-is-me'}
|
70
78
|
pkg = 'ubuntu_package'
|
71
|
-
Beaker::Command.
|
72
|
-
instance.
|
79
|
+
expect( Beaker::Command ).to receive(:new).with("dpkg -s #{pkg}").and_return('')
|
80
|
+
expect( instance ).to receive(:exec).with('', :acceptable_exit_codes => (0...127)).and_return(generate_result("hello", {:exit_code => 0}))
|
81
|
+
expect( instance.check_for_package(pkg) ).to be === true
|
82
|
+
end
|
83
|
+
|
84
|
+
it "checks correctly on cumulus" do
|
85
|
+
@opts = {'platform' => 'cumulus-is-me'}
|
86
|
+
pkg = 'cumulus_package'
|
87
|
+
expect( Beaker::Command ).to receive(:new).with("dpkg -s #{pkg}").and_return('')
|
88
|
+
expect( instance ).to receive(:exec).with('', :acceptable_exit_codes => (0...127)).and_return(generate_result("hello", {:exit_code => 0}))
|
73
89
|
expect( instance.check_for_package(pkg) ).to be === true
|
74
90
|
end
|
75
91
|
|
76
|
-
it "
|
92
|
+
it "checks correctly on solaris-11" do
|
77
93
|
@opts = {'platform' => 'solaris-11-is-me'}
|
78
94
|
pkg = 'solaris-11_package'
|
79
|
-
Beaker::Command.
|
80
|
-
instance.
|
95
|
+
expect( Beaker::Command ).to receive(:new).with("pkg info #{pkg}").and_return('')
|
96
|
+
expect( instance ).to receive(:exec).with('', :acceptable_exit_codes => (0...127)).and_return(generate_result("hello", {:exit_code => 0}))
|
81
97
|
expect( instance.check_for_package(pkg) ).to be === true
|
82
98
|
end
|
83
99
|
|
84
|
-
it "
|
100
|
+
it "checks correctly on solaris-10" do
|
85
101
|
@opts = {'platform' => 'solaris-10-is-me'}
|
86
102
|
pkg = 'solaris-10_package'
|
87
|
-
Beaker::Command.
|
88
|
-
instance.
|
103
|
+
expect( Beaker::Command ).to receive(:new).with("pkginfo #{pkg}").and_return('')
|
104
|
+
expect( instance ).to receive(:exec).with('', :acceptable_exit_codes => (0...127)).and_return(generate_result("hello", {:exit_code => 0}))
|
89
105
|
expect( instance.check_for_package(pkg) ).to be === true
|
90
106
|
end
|
91
107
|
|
@@ -19,8 +19,7 @@ describe Beaker do
|
|
19
19
|
hosts[1][:roles] = ['master', 'dashboard', 'agent', 'database']
|
20
20
|
hosts[2][:roles] = ['agent']
|
21
21
|
hosts }
|
22
|
-
let( :dummy_class ) { Class.new { include Beaker::HostPrebuiltSteps
|
23
|
-
include Beaker::DSL::Patterns } }
|
22
|
+
let( :dummy_class ) { Class.new { include Beaker::HostPrebuiltSteps } }
|
24
23
|
|
25
24
|
context 'timesync' do
|
26
25
|
|
@@ -29,25 +28,25 @@ describe Beaker do
|
|
29
28
|
it "can sync time on unix hosts" do
|
30
29
|
hosts = make_hosts( { :platform => 'unix' } )
|
31
30
|
|
32
|
-
Beaker::Command.
|
31
|
+
expect( Beaker::Command ).to receive( :new ).with("ntpdate -t 20 #{ntpserver}").exactly( 3 ).times
|
33
32
|
|
34
33
|
subject.timesync( hosts, options )
|
35
34
|
end
|
36
35
|
|
37
36
|
it "can retry on failure on unix hosts" do
|
38
37
|
hosts = make_hosts( { :platform => 'unix', :exit_code => [1, 0] } )
|
39
|
-
subject.
|
38
|
+
allow( subject ).to receive( :sleep ).and_return(true)
|
40
39
|
|
41
|
-
Beaker::Command.
|
40
|
+
expect( Beaker::Command ).to receive( :new ).with("ntpdate -t 20 #{ntpserver}").exactly( 6 ).times
|
42
41
|
|
43
42
|
subject.timesync( hosts, options )
|
44
43
|
end
|
45
44
|
|
46
45
|
it "eventually gives up and raises an error when unix hosts can't be synched" do
|
47
46
|
hosts = make_hosts( { :platform => 'unix', :exit_code => 1 } )
|
48
|
-
subject.
|
47
|
+
allow( subject ).to receive( :sleep ).and_return(true)
|
49
48
|
|
50
|
-
Beaker::Command.
|
49
|
+
expect( Beaker::Command ).to receive( :new ).with("ntpdate -t 20 #{ntpserver}").exactly( 5 ).times
|
51
50
|
|
52
51
|
expect{ subject.timesync( hosts, options ) }.to raise_error
|
53
52
|
end
|
@@ -55,10 +54,10 @@ describe Beaker do
|
|
55
54
|
it "can sync time on windows hosts" do
|
56
55
|
hosts = make_hosts( { :platform => 'windows' } )
|
57
56
|
|
58
|
-
Beaker::Command.
|
59
|
-
Beaker::Command.
|
60
|
-
Beaker::Command.
|
61
|
-
Beaker::Command.
|
57
|
+
expect( Beaker::Command ).to receive( :new ).with("w32tm /register").exactly( 3 ).times
|
58
|
+
expect( Beaker::Command ).to receive( :new ).with("net start w32time").exactly( 3 ).times
|
59
|
+
expect( Beaker::Command ).to receive( :new ).with("w32tm /config /manualpeerlist:#{ntpserver} /syncfromflags:manual /update").exactly( 3 ).times
|
60
|
+
expect( Beaker::Command ).to receive( :new ).with("w32tm /resync").exactly( 3 ).times
|
62
61
|
|
63
62
|
subject.timesync( hosts, options )
|
64
63
|
|
@@ -67,7 +66,7 @@ describe Beaker do
|
|
67
66
|
it "can sync time on Sles hosts" do
|
68
67
|
hosts = make_hosts( { :platform => 'sles-13.1-x64' } )
|
69
68
|
|
70
|
-
Beaker::Command.
|
69
|
+
expect( Beaker::Command ).to receive( :new ).with("sntp #{ntpserver}").exactly( 3 ).times
|
71
70
|
|
72
71
|
subject.timesync( hosts, options )
|
73
72
|
|
@@ -76,7 +75,7 @@ describe Beaker do
|
|
76
75
|
it "can set time server on unix hosts" do
|
77
76
|
hosts = make_hosts( { :platform => 'unix' } )
|
78
77
|
|
79
|
-
Beaker::Command.
|
78
|
+
expect( Beaker::Command ).to receive( :new ).with("ntpdate -t 20 #{ntpserver_set}").exactly( 3 ).times
|
80
79
|
|
81
80
|
subject.timesync( hosts, options_ntp )
|
82
81
|
end
|
@@ -84,10 +83,10 @@ describe Beaker do
|
|
84
83
|
it "can set time server on windows hosts" do
|
85
84
|
hosts = make_hosts( { :platform => 'windows' } )
|
86
85
|
|
87
|
-
Beaker::Command.
|
88
|
-
Beaker::Command.
|
89
|
-
Beaker::Command.
|
90
|
-
Beaker::Command.
|
86
|
+
expect( Beaker::Command ).to receive( :new ).with("w32tm /register").exactly( 3 ).times
|
87
|
+
expect( Beaker::Command ).to receive( :new ).with("net start w32time").exactly( 3 ).times
|
88
|
+
expect( Beaker::Command ).to receive( :new ).with("w32tm /config /manualpeerlist:#{ntpserver_set} /syncfromflags:manual /update").exactly( 3 ).times
|
89
|
+
expect( Beaker::Command ).to receive( :new ).with("w32tm /resync").exactly( 3 ).times
|
91
90
|
|
92
91
|
subject.timesync( hosts, options_ntp )
|
93
92
|
|
@@ -96,7 +95,7 @@ describe Beaker do
|
|
96
95
|
it "can set time server on Sles hosts" do
|
97
96
|
hosts = make_hosts( { :platform => 'sles-13.1-x64' } )
|
98
97
|
|
99
|
-
Beaker::Command.
|
98
|
+
expect( Beaker::Command ).to receive( :new ).with("sntp #{ntpserver_set}").exactly( 3 ).times
|
100
99
|
|
101
100
|
subject.timesync( hosts, options_ntp )
|
102
101
|
|
@@ -134,7 +133,7 @@ describe Beaker do
|
|
134
133
|
it "can perform apt-get on ubuntu hosts" do
|
135
134
|
host = make_host( 'testhost', { :platform => 'ubuntu' } )
|
136
135
|
|
137
|
-
Beaker::Command.
|
136
|
+
expect( Beaker::Command ).to receive( :new ).with("apt-get update").once
|
138
137
|
|
139
138
|
subject.apt_get_update( host )
|
140
139
|
|
@@ -143,16 +142,25 @@ describe Beaker do
|
|
143
142
|
it "can perform apt-get on debian hosts" do
|
144
143
|
host = make_host( 'testhost', { :platform => 'debian' } )
|
145
144
|
|
146
|
-
Beaker::Command.
|
145
|
+
expect( Beaker::Command ).to receive( :new ).with("apt-get update").once
|
147
146
|
|
148
147
|
subject.apt_get_update( host )
|
149
148
|
|
150
149
|
end
|
151
150
|
|
152
|
-
it "
|
151
|
+
it "can perform apt-get on cumulus hosts" do
|
152
|
+
host = make_host( 'testhost', { :platform => 'cumulus' } )
|
153
|
+
|
154
|
+
expect( Beaker::Command ).to receive( :new ).with("apt-get update").once
|
155
|
+
|
156
|
+
subject.apt_get_update( host )
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
it "does nothing on non debian/ubuntu/cumulus hosts" do
|
153
161
|
host = make_host( 'testhost', { :platform => 'windows' } )
|
154
162
|
|
155
|
-
Beaker::Command.
|
163
|
+
expect( Beaker::Command ).to receive( :new ).never
|
156
164
|
|
157
165
|
subject.apt_get_update( host )
|
158
166
|
|
@@ -169,13 +177,13 @@ describe Beaker do
|
|
169
177
|
filepath = "/path/to/file"
|
170
178
|
host = make_host( 'testhost', { :platform => 'windows' })
|
171
179
|
tempfile = double( 'tempfile' )
|
172
|
-
tempfile.
|
173
|
-
Tempfile.
|
180
|
+
allow( tempfile ).to receive( :path ).and_return( tempfilepath )
|
181
|
+
allow( Tempfile ).to receive( :open ).and_yield( tempfile )
|
174
182
|
file = double( 'file' )
|
175
|
-
File.
|
183
|
+
allow( File ).to receive( :open ).and_yield( file )
|
176
184
|
|
177
|
-
file.
|
178
|
-
host.
|
185
|
+
expect( file ).to receive( :puts ).with( content ).once
|
186
|
+
expect( host ).to receive( :do_scp_to ).with( tempfilepath, filepath, subject.instance_variable_get( :@options ) ).once
|
179
187
|
|
180
188
|
subject.copy_file_to_remote(host, filepath, content)
|
181
189
|
|
@@ -189,10 +197,10 @@ describe Beaker do
|
|
189
197
|
it "correctly configures ubuntu hosts" do
|
190
198
|
hosts = make_hosts( { :platform => 'ubuntu', :exit_code => 1 } )
|
191
199
|
|
192
|
-
Beaker::Command.
|
200
|
+
expect( Beaker::Command ).to receive( :new ).with( "if test -f /etc/apt/apt.conf; then mv /etc/apt/apt.conf /etc/apt/apt.conf.bk; fi" ).exactly( 3 )
|
193
201
|
hosts.each do |host|
|
194
|
-
subject.
|
195
|
-
subject.
|
202
|
+
expect( subject ).to receive( :copy_file_to_remote ).with( host, '/etc/apt/apt.conf', apt_cfg ).once
|
203
|
+
expect( subject ).to receive( :apt_get_update ).with( host ).once
|
196
204
|
end
|
197
205
|
|
198
206
|
subject.proxy_config( hosts, options )
|
@@ -202,10 +210,23 @@ describe Beaker do
|
|
202
210
|
it "correctly configures debian hosts" do
|
203
211
|
hosts = make_hosts( { :platform => 'debian' } )
|
204
212
|
|
205
|
-
Beaker::Command.
|
213
|
+
expect( Beaker::Command ).to receive( :new ).with( "if test -f /etc/apt/apt.conf; then mv /etc/apt/apt.conf /etc/apt/apt.conf.bk; fi" ).exactly( 3 ).times
|
214
|
+
hosts.each do |host|
|
215
|
+
expect( subject ).to receive( :copy_file_to_remote ).with( host, '/etc/apt/apt.conf', apt_cfg ).once
|
216
|
+
expect( subject ).to receive( :apt_get_update ).with( host ).once
|
217
|
+
end
|
218
|
+
|
219
|
+
subject.proxy_config( hosts, options )
|
220
|
+
|
221
|
+
end
|
222
|
+
|
223
|
+
it "correctly configures cumulus hosts" do
|
224
|
+
hosts = make_hosts( { :platform => 'cumulus' } )
|
225
|
+
|
226
|
+
expect( Beaker::Command ).to receive( :new ).with( "if test -f /etc/apt/apt.conf; then mv /etc/apt/apt.conf /etc/apt/apt.conf.bk; fi" ).exactly( 3 ).times
|
206
227
|
hosts.each do |host|
|
207
|
-
subject.
|
208
|
-
subject.
|
228
|
+
expect( subject ).to receive( :copy_file_to_remote ).with( host, '/etc/apt/apt.conf', apt_cfg ).once
|
229
|
+
expect( subject ).to receive( :apt_get_update ).with( host ).once
|
209
230
|
end
|
210
231
|
|
211
232
|
subject.proxy_config( hosts, options )
|
@@ -215,19 +236,19 @@ describe Beaker do
|
|
215
236
|
it "correctly configures solaris-11 hosts" do
|
216
237
|
hosts = make_hosts( { :platform => 'solaris-11' } )
|
217
238
|
|
218
|
-
Beaker::Command.
|
239
|
+
expect( Beaker::Command ).to receive( :new ).with( "/usr/bin/pkg unset-publisher solaris || :" ).exactly( 3 ).times
|
219
240
|
hosts.each do |host|
|
220
|
-
Beaker::Command.
|
241
|
+
expect( Beaker::Command ).to receive( :new ).with( "/usr/bin/pkg set-publisher -g %s solaris" % ips_pkg_repo ).once
|
221
242
|
end
|
222
243
|
|
223
244
|
subject.proxy_config( hosts, options )
|
224
245
|
|
225
246
|
end
|
226
247
|
|
227
|
-
it "does nothing for non ubuntu/debian/solaris-11 hosts" do
|
248
|
+
it "does nothing for non ubuntu/debian/cumulus/solaris-11 hosts" do
|
228
249
|
hosts = make_hosts( { :platform => 'windows' } )
|
229
|
-
|
230
|
-
Beaker::Command.
|
250
|
+
|
251
|
+
expect( Beaker::Command ).to receive( :new ).never
|
231
252
|
|
232
253
|
subject.proxy_config( hosts, options )
|
233
254
|
|
@@ -238,16 +259,21 @@ describe Beaker do
|
|
238
259
|
subject { dummy_class.new }
|
239
260
|
|
240
261
|
it "add extras for el-5/6 hosts" do
|
241
|
-
hosts = make_hosts( { :platform => Beaker::Platform.new('el-5-arch'), :exit_code => 1 } )
|
242
|
-
hosts[0][:platform] = Beaker::Platform.new('el-6-arch')
|
243
262
|
|
244
|
-
|
245
|
-
Beaker::
|
246
|
-
Beaker::
|
247
|
-
Beaker::
|
248
|
-
Beaker::
|
249
|
-
Beaker::
|
250
|
-
|
263
|
+
hosts = make_hosts( { :platform => Beaker::Platform.new('el-5-arch'), :exit_code => 1 }, 6 )
|
264
|
+
hosts[0][:platform] = Beaker::Platform.new('el-6-arch')
|
265
|
+
hosts[1][:platform] = Beaker::Platform.new('centos-6-arch')
|
266
|
+
hosts[2][:platform] = Beaker::Platform.new('scientific-6-arch')
|
267
|
+
hosts[3][:platform] = Beaker::Platform.new('redhat-6-arch')
|
268
|
+
hosts[4][:platform] = Beaker::Platform.new('oracle-5-arch')
|
269
|
+
|
270
|
+
expect( Beaker::Command ).to receive( :new ).with("rpm -qa | grep epel-release").exactly( 6 ).times
|
271
|
+
expect( Beaker::Command ).to receive( :new ).with("rpm -i http://mirrors.kernel.org/fedora-epel/6/i386/epel-release-6-8.noarch.rpm").exactly( 4 ).times
|
272
|
+
expect( Beaker::Command ).to receive( :new ).with("rpm -i http://mirrors.kernel.org/fedora-epel/5/i386/epel-release-5-4.noarch.rpm").exactly( 2 ).times
|
273
|
+
expect( Beaker::Command ).to receive( :new ).with("sed -i -e 's;#baseurl.*$;baseurl=http://mirrors\\.kernel\\.org/fedora\\-epel/6/$basearch;' /etc/yum.repos.d/epel.repo").exactly( 4 ).times
|
274
|
+
expect( Beaker::Command ).to receive( :new ).with("sed -i -e 's;#baseurl.*$;baseurl=http://mirrors\\.kernel\\.org/fedora\\-epel/5/$basearch;' /etc/yum.repos.d/epel.repo").exactly( 2 ).times
|
275
|
+
expect( Beaker::Command ).to receive( :new ).with("sed -i -e '/mirrorlist/d' /etc/yum.repos.d/epel.repo").exactly( 6 ).times
|
276
|
+
expect( Beaker::Command ).to receive( :new ).with("yum clean all && yum makecache").exactly( 6 ).times
|
251
277
|
|
252
278
|
subject.add_el_extras( hosts, options )
|
253
279
|
|
@@ -256,7 +282,7 @@ describe Beaker do
|
|
256
282
|
it "should do nothing for non el-5/6 hosts" do
|
257
283
|
hosts = make_hosts( { :platform => Beaker::Platform.new('windows-version-arch') } )
|
258
284
|
|
259
|
-
Beaker::Command.
|
285
|
+
expect( Beaker::Command ).to receive( :new ).never
|
260
286
|
|
261
287
|
subject.add_el_extras( hosts, options )
|
262
288
|
|
@@ -269,7 +295,18 @@ describe Beaker do
|
|
269
295
|
it "can sync keys on a solaris host" do
|
270
296
|
@platform = 'solaris'
|
271
297
|
|
272
|
-
Beaker::Command.
|
298
|
+
expect( Beaker::Command ).to receive( :new ).with( sync_cmd % "| bash" ).exactly( 3 ).times
|
299
|
+
|
300
|
+
subject.sync_root_keys( hosts, options )
|
301
|
+
|
302
|
+
end
|
303
|
+
|
304
|
+
it "can sync keys on an eos host" do
|
305
|
+
@platform = 'eos'
|
306
|
+
|
307
|
+
expect( Beaker::Command ).to receive( :new ).with( sync_cmd % "> manage_root_authorized_keys" ).exactly( 3 ).times
|
308
|
+
expect( Beaker::Command ).to receive( :new ).with( "sed -i 's|mv -f $SSH_HOME/authorized_keys.tmp $SSH_HOME/authorized_keys|cp -f $SSH_HOME/authorized_keys.tmp $SSH_HOME/authorized_keys|' manage_root_authorized_keys" ).exactly( 3 ).times
|
309
|
+
expect( Beaker::Command ).to receive( :new ).with( "bash manage_root_authorized_keys" ).exactly( 3 ).times
|
273
310
|
|
274
311
|
subject.sync_root_keys( hosts, options )
|
275
312
|
|
@@ -277,7 +314,7 @@ describe Beaker do
|
|
277
314
|
|
278
315
|
it "can sync keys on a non-solaris host" do
|
279
316
|
|
280
|
-
Beaker::Command.
|
317
|
+
expect( Beaker::Command ).to receive( :new ).with( sync_cmd % "| env PATH=/usr/gnu/bin:$PATH bash" ).exactly( 3 ).times
|
281
318
|
|
282
319
|
subject.sync_root_keys( hosts, options )
|
283
320
|
|
@@ -292,8 +329,8 @@ describe Beaker do
|
|
292
329
|
|
293
330
|
hosts.each do |host|
|
294
331
|
unix_only_pkgs.each do |pkg|
|
295
|
-
host.
|
296
|
-
host.
|
332
|
+
expect( host ).to receive( :check_for_package ).with( pkg ).once.and_return( false )
|
333
|
+
expect( host ).to receive( :install_package ).with( pkg ).once
|
297
334
|
end
|
298
335
|
end
|
299
336
|
|
@@ -306,8 +343,8 @@ describe Beaker do
|
|
306
343
|
|
307
344
|
hosts.each do |host|
|
308
345
|
windows_pkgs.each do |pkg|
|
309
|
-
host.
|
310
|
-
host.
|
346
|
+
expect( host ).to receive( :check_for_package ).with( pkg ).once.and_return( false )
|
347
|
+
expect( host ).to receive( :install_package ).with( pkg ).once
|
311
348
|
end
|
312
349
|
end
|
313
350
|
|
@@ -320,8 +357,8 @@ describe Beaker do
|
|
320
357
|
|
321
358
|
hosts.each do |host|
|
322
359
|
sles_only_pkgs.each do |pkg|
|
323
|
-
host.
|
324
|
-
host.
|
360
|
+
expect( host ).to receive( :check_for_package).with( pkg ).once.and_return( false )
|
361
|
+
expect( host ).to receive( :install_package ).with( pkg ).once
|
325
362
|
end
|
326
363
|
|
327
364
|
end
|
@@ -337,7 +374,7 @@ describe Beaker do
|
|
337
374
|
it "can find the domain for a host" do
|
338
375
|
host = make_host('name', { :stdout => "domain labs.lan d.labs.net dc1.labs.net labs.com\nnameserver 10.16.22.10\nnameserver 10.16.22.11" } )
|
339
376
|
|
340
|
-
Beaker::Command.
|
377
|
+
expect( Beaker::Command ).to receive( :new ).with( "cat /etc/resolv.conf" ).once
|
341
378
|
|
342
379
|
expect( subject.get_domain_name( host ) ).to be === "labs.lan"
|
343
380
|
|
@@ -346,7 +383,7 @@ describe Beaker do
|
|
346
383
|
it "can find the search for a host" do
|
347
384
|
host = make_host('name', { :stdout => "search labs.lan d.labs.net dc1.labs.net labs.com\nnameserver 10.16.22.10\nnameserver 10.16.22.11" } )
|
348
385
|
|
349
|
-
Beaker::Command.
|
386
|
+
expect( Beaker::Command ).to receive( :new ).with( "cat /etc/resolv.conf" ).once
|
350
387
|
|
351
388
|
expect( subject.get_domain_name( host ) ).to be === "labs.lan"
|
352
389
|
|
@@ -359,7 +396,7 @@ describe Beaker do
|
|
359
396
|
it "can exec the get_ip command" do
|
360
397
|
host = make_host('name', { :stdout => "192.168.2.130\n" } )
|
361
398
|
|
362
|
-
Beaker::Command.
|
399
|
+
expect( Beaker::Command ).to receive( :new ).with( "ip a|awk '/global/{print$2}' | cut -d/ -f1 | head -1" ).once
|
363
400
|
|
364
401
|
expect( subject.get_ip( host ) ).to be === "192.168.2.130"
|
365
402
|
|
@@ -374,8 +411,8 @@ describe Beaker do
|
|
374
411
|
host = make_host('name', {})
|
375
412
|
etc_hosts = "127.0.0.1 localhost\n192.168.2.130 pe-ubuntu-lucid\n192.168.2.128 pe-centos6\n192.168.2.131 pe-debian6"
|
376
413
|
|
377
|
-
Beaker::Command.
|
378
|
-
host.
|
414
|
+
expect( Beaker::Command ).to receive( :new ).with( "echo '#{etc_hosts}' > /etc/hosts" ).once
|
415
|
+
expect( host ).to receive( :exec ).once
|
379
416
|
|
380
417
|
subject.set_etc_hosts(host, etc_hosts)
|
381
418
|
end
|
@@ -387,23 +424,112 @@ describe Beaker do
|
|
387
424
|
subject { dummy_class.new }
|
388
425
|
proxyurl = "http://192.168.2.100:3128"
|
389
426
|
|
390
|
-
it "can set proxy config on a debian/ubuntu host" do
|
391
|
-
host = make_host('name', { :platform => '
|
427
|
+
it "can set proxy config on a debian/ubuntu/cumulus host" do
|
428
|
+
host = make_host('name', { :platform => 'cumulus' } )
|
392
429
|
|
393
|
-
Beaker::Command.
|
394
|
-
host.
|
430
|
+
expect( Beaker::Command ).to receive( :new ).with( "echo 'Acquire::http::Proxy \"#{proxyurl}/\";' >> /etc/apt/apt.conf.d/10proxy" ).once
|
431
|
+
expect( host ).to receive( :exec ).once
|
395
432
|
|
396
433
|
subject.package_proxy(host, options.merge( {'package_proxy' => proxyurl}) )
|
397
434
|
end
|
398
435
|
|
399
|
-
it "can set proxy config on a
|
436
|
+
it "can set proxy config on a centos host" do
|
400
437
|
host = make_host('name', { :platform => 'centos' } )
|
401
438
|
|
402
|
-
Beaker::Command.
|
403
|
-
host.
|
439
|
+
expect( Beaker::Command ).to receive( :new ).with( "echo 'proxy=#{proxyurl}/' >> /etc/yum.conf" ).once
|
440
|
+
expect( host ).to receive( :exec ).once
|
404
441
|
|
405
442
|
subject.package_proxy(host, options.merge( {'package_proxy' => proxyurl}) )
|
443
|
+
end
|
444
|
+
|
445
|
+
end
|
446
|
+
|
447
|
+
context "set_env" do
|
448
|
+
subject { dummy_class.new }
|
449
|
+
|
450
|
+
it "can set the environment on a windows host" do
|
451
|
+
commands = [
|
452
|
+
"echo 'PermitUserEnvironment yes' >> /etc/sshd_config",
|
453
|
+
"cygrunsrv -E sshd",
|
454
|
+
"cygrunsrv -S sshd"
|
455
|
+
]
|
456
|
+
set_env_helper('windows', commands)
|
457
|
+
end
|
458
|
+
|
459
|
+
it "can set the environment on an OS X host" do
|
460
|
+
commands = [
|
461
|
+
"echo 'PermitUserEnvironment yes' >> /etc/sshd_config",
|
462
|
+
"launchctl unload /System/Library/LaunchDaemons/ssh.plist",
|
463
|
+
"launchctl load /System/Library/LaunchDaemons/ssh.plist"
|
464
|
+
]
|
465
|
+
set_env_helper('osx', commands)
|
466
|
+
end
|
467
|
+
|
468
|
+
it "can set the environment on an ssh-based linux host" do
|
469
|
+
commands = [
|
470
|
+
"echo 'PermitUserEnvironment yes' >> /etc/ssh/sshd_config",
|
471
|
+
"service ssh restart"
|
472
|
+
]
|
473
|
+
set_env_helper('ubuntu', commands)
|
474
|
+
end
|
475
|
+
|
476
|
+
it "can set the environment on an sshd-based linux host" do
|
477
|
+
commands = [
|
478
|
+
"echo 'PermitUserEnvironment yes' >> /etc/ssh/sshd_config",
|
479
|
+
"service sshd restart"
|
480
|
+
]
|
481
|
+
set_env_helper('eos', commands)
|
482
|
+
end
|
483
|
+
|
484
|
+
it "can set the environment on an sles host" do
|
485
|
+
commands = [
|
486
|
+
"echo 'PermitUserEnvironment yes' >> /etc/ssh/sshd_config",
|
487
|
+
"rcsshd restart"
|
488
|
+
]
|
489
|
+
set_env_helper('sles', commands)
|
490
|
+
end
|
491
|
+
|
492
|
+
it "can set the environment on a solaris host" do
|
493
|
+
commands = [
|
494
|
+
"echo 'PermitUserEnvironment yes' >> /etc/ssh/sshd_config",
|
495
|
+
"svcadm restart svc:/network/ssh:default"
|
496
|
+
]
|
497
|
+
set_env_helper('solaris', commands)
|
498
|
+
end
|
499
|
+
|
500
|
+
it "can set the environment on an aix host" do
|
501
|
+
commands = [
|
502
|
+
"echo 'PermitUserEnvironment yes' >> /etc/ssh/sshd_config",
|
503
|
+
"stopsrc -g ssh",
|
504
|
+
"startsrc -g ssh"
|
505
|
+
]
|
506
|
+
set_env_helper('aix', commands)
|
507
|
+
end
|
508
|
+
|
509
|
+
def set_env_helper(platform_name, host_specific_commands_array)
|
510
|
+
host = make_host('name', {
|
511
|
+
:platform => platform_name,
|
512
|
+
:ssh_env_file => 'ssh_env_file'
|
513
|
+
} )
|
514
|
+
opts = {
|
515
|
+
:env1_key => :env1_value,
|
516
|
+
:env2_key => :env2_value
|
517
|
+
}
|
518
|
+
|
519
|
+
expect( subject ).to receive( :construct_env ).and_return( opts )
|
520
|
+
host_specific_commands_array.each do |command|
|
521
|
+
expect( Beaker::Command ).to receive( :new ).with( command ).once
|
522
|
+
end
|
523
|
+
expect( Beaker::Command ).to receive( :new ).with( "touch #{host[:ssh_env_file]}" ).once
|
524
|
+
expect( host ).to receive( :add_env_var ).with( 'RUBYLIB', '$RUBYLIB' ).once
|
525
|
+
expect( host ).to receive( :add_env_var ).with( 'PATH', '$PATH' ).once
|
526
|
+
opts.each_pair do |key, value|
|
527
|
+
expect( host ).to receive( :add_env_var ).with( key, value ).once
|
528
|
+
end
|
529
|
+
expect( host ).to receive( :add_env_var ).with( 'CYGWIN', 'nodosfilewarning' ).once if platform_name =~ /windows/
|
530
|
+
expect( host ).to receive( :exec ).exactly( host_specific_commands_array.length + 1 ).times
|
406
531
|
|
532
|
+
subject.set_env(host, options.merge( opts ))
|
407
533
|
end
|
408
534
|
|
409
535
|
end
|