beaker 1.21.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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
|