beaker 1.19.1 → 1.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/HISTORY.md +295 -4
- data/README.md +4 -0
- data/lib/beaker/answers/version20.rb +103 -107
- data/lib/beaker/answers/version28.rb +111 -115
- data/lib/beaker/answers/version30.rb +194 -192
- data/lib/beaker/answers/version32.rb +27 -22
- data/lib/beaker/answers/version34.rb +6 -6
- data/lib/beaker/answers.rb +55 -21
- data/lib/beaker/cli.rb +13 -11
- data/lib/beaker/dsl/helpers.rb +2 -2
- data/lib/beaker/dsl/install_utils.rb +2 -4
- data/lib/beaker/host.rb +9 -5
- data/lib/beaker/host_prebuilt_steps.rb +33 -20
- data/lib/beaker/hypervisor/aws_sdk.rb +12 -10
- data/lib/beaker/hypervisor/ec2_helper.rb +1 -0
- data/lib/beaker/hypervisor/google_compute.rb +0 -1
- data/lib/beaker/hypervisor/vagrant.rb +11 -16
- data/lib/beaker/hypervisor/vagrant_fusion.rb +17 -0
- data/lib/beaker/hypervisor/vagrant_virtualbox.rb +26 -0
- data/lib/beaker/hypervisor/vagrant_workstation.rb +13 -0
- data/lib/beaker/hypervisor/vcloud_pooled.rb +3 -1
- data/lib/beaker/hypervisor.rb +22 -13
- data/lib/beaker/logger.rb +29 -0
- data/lib/beaker/options/command_line_parser.rb +2 -0
- data/lib/beaker/options/parser.rb +5 -4
- data/lib/beaker/options/presets.rb +58 -35
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/answers_spec.rb +156 -135
- data/spec/beaker/cli_spec.rb +35 -2
- data/spec/beaker/dsl/install_utils_spec.rb +2 -3
- data/spec/beaker/host_prebuilt_steps_spec.rb +47 -24
- data/spec/beaker/host_spec.rb +6 -6
- data/spec/beaker/hypervisor/ec2_helper_spec.rb +2 -2
- data/spec/beaker/hypervisor/hypervisor_spec.rb +35 -0
- data/spec/beaker/hypervisor/vagrant_fusion_spec.rb +34 -0
- data/spec/beaker/hypervisor/vagrant_spec.rb +39 -2
- data/spec/beaker/hypervisor/vagrant_virtualbox_spec.rb +34 -0
- data/spec/beaker/hypervisor/vagrant_workstation_spec.rb +34 -0
- data/spec/beaker/logger_spec.rb +30 -0
- data/spec/beaker/options/presets_spec.rb +4 -4
- data/spec/helpers.rb +2 -1
- data/spec/mocks.rb +5 -1
- metadata +9 -60
data/spec/beaker/answers_spec.rb
CHANGED
@@ -3,205 +3,226 @@ require 'spec_helper'
|
|
3
3
|
module Beaker
|
4
4
|
describe Answers do
|
5
5
|
let( :basic_hosts ) { make_hosts( { 'pe_ver' => @ver } ) }
|
6
|
-
let( :options ) { Beaker::Options::Presets.presets }
|
6
|
+
let( :options ) { Beaker::Options::Presets.new.presets }
|
7
7
|
let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'database', 'dashboard']
|
8
8
|
basic_hosts[1]['platform'] = 'windows'
|
9
9
|
basic_hosts }
|
10
|
-
let( :
|
10
|
+
let( :answers ) { Beaker::Answers.create(@ver, hosts, options) }
|
11
11
|
|
12
12
|
it 'generates 3.4 answers for 3.4 hosts' do
|
13
13
|
@ver = '3.4'
|
14
|
-
|
15
|
-
subject.answers( @ver, hosts, master_certname, {} )
|
14
|
+
expect( answers ).to be_a_kind_of Version34
|
16
15
|
end
|
17
16
|
|
18
17
|
it 'generates 3.2 answers for 3.3 hosts' do
|
19
18
|
@ver = '3.3'
|
20
|
-
|
21
|
-
subject.answers( @ver, hosts, master_certname, {} )
|
19
|
+
expect( answers ).to be_a_kind_of Version32
|
22
20
|
end
|
23
21
|
|
24
22
|
it 'generates 3.2 answers for 3.2 hosts' do
|
25
23
|
@ver = '3.2'
|
26
|
-
|
27
|
-
subject.answers( @ver, hosts, master_certname, options )
|
24
|
+
expect( answers ).to be_a_kind_of Version32
|
28
25
|
end
|
29
26
|
|
30
27
|
it 'generates 3.0 answers for 3.1 hosts' do
|
31
28
|
@ver = '3.1'
|
32
|
-
|
33
|
-
subject.answers( @ver, hosts, master_certname, options )
|
29
|
+
expect( answers ).to be_a_kind_of Version30
|
34
30
|
end
|
35
31
|
|
36
32
|
it 'generates 3.0 answers for 3.0 hosts' do
|
37
33
|
@ver = '3.0'
|
38
|
-
|
39
|
-
subject.answers( @ver, hosts, master_certname, options )
|
34
|
+
expect( answers ).to be_a_kind_of Version30
|
40
35
|
end
|
41
36
|
|
42
37
|
it 'generates 2.8 answers for 2.8 hosts' do
|
43
38
|
@ver = '2.8'
|
44
|
-
|
45
|
-
subject.answers( @ver, hosts, master_certname, options )
|
39
|
+
expect( answers ).to be_a_kind_of Version28
|
46
40
|
end
|
47
41
|
|
48
42
|
it 'generates 2.0 answers for 2.0 hosts' do
|
49
43
|
@ver = '2.0'
|
50
|
-
|
51
|
-
subject.answers( @ver, hosts, master_certname, options )
|
44
|
+
expect( answers ).to be_a_kind_of Version20
|
52
45
|
end
|
53
46
|
|
54
47
|
it 'raises an error for an unknown version' do
|
55
48
|
@ver = 'x.x'
|
56
|
-
expect{
|
49
|
+
expect{ answers }.to raise_error( NotImplementedError )
|
57
50
|
end
|
58
51
|
end
|
59
52
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
expect( host[:answers] ).to be === answers[host.name]
|
74
|
-
end
|
75
|
-
end
|
53
|
+
describe Version34 do
|
54
|
+
let( :options ) { Beaker::Options::Presets.new.presets }
|
55
|
+
let( :basic_hosts ) { make_hosts( {'pe_ver' => @ver } ) }
|
56
|
+
let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'agent']
|
57
|
+
basic_hosts[0][:custom_answers] = { :q_custom => 'LOOKYHERE' }
|
58
|
+
basic_hosts[1]['roles'] = ['dashboard', 'agent']
|
59
|
+
basic_hosts[2]['roles'] = ['database', 'agent']
|
60
|
+
basic_hosts }
|
61
|
+
let( :answers ) { Beaker::Answers.create(@ver, hosts, options) }
|
62
|
+
|
63
|
+
before :each do
|
64
|
+
@ver = '3.4'
|
65
|
+
@answers = answers.answers
|
76
66
|
end
|
77
67
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'agent']
|
82
|
-
basic_hosts[1]['roles'] = ['dashboard', 'agent']
|
83
|
-
basic_hosts[2]['roles'] = ['database', 'agent']
|
84
|
-
basic_hosts }
|
85
|
-
let( :master_certname ) { 'master_certname' }
|
86
|
-
|
87
|
-
# The only difference between 3.2 and 3.0 is the addition of the
|
88
|
-
# master certname to the dashboard answers
|
89
|
-
it 'should add q_puppetmaster_certname to the dashboard answers' do
|
90
|
-
@ver = '3.2'
|
91
|
-
expect( subject.answers( hosts, master_certname, options )['vm2']).to include :q_puppetmaster_certname
|
68
|
+
it 'should add answers to the host objects' do
|
69
|
+
hosts.each do |host|
|
70
|
+
expect( host[:answers] ).to be === @answers[host.name]
|
92
71
|
end
|
72
|
+
end
|
93
73
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
74
|
+
it 'appends custom answers to generated answers' do
|
75
|
+
expect( hosts[0][:custom_answers] ).to be == { :q_custom => 'LOOKYHERE' }
|
76
|
+
expect( @answers['vm1'] ).to include :q_custom
|
77
|
+
expect( hosts[0][:answers] ).to include :q_custom
|
78
|
+
end
|
98
79
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
80
|
+
end
|
81
|
+
|
82
|
+
describe Version32 do
|
83
|
+
let( :options ) { Beaker::Options::Presets.new.presets }
|
84
|
+
let( :basic_hosts ) { make_hosts( {'pe_ver' => @ver } ) }
|
85
|
+
let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'agent']
|
86
|
+
basic_hosts[1]['roles'] = ['dashboard', 'agent']
|
87
|
+
basic_hosts[2]['roles'] = ['database', 'agent']
|
88
|
+
basic_hosts }
|
89
|
+
let( :answers ) { Beaker::Answers.create(@ver, hosts, options) }
|
90
|
+
let( :upgrade_answers ) { Beaker::Answers.create(@ver, hosts, options.merge( {:type => :upgrade}) ) }
|
91
|
+
|
92
|
+
before :each do
|
93
|
+
@ver = '3.2'
|
94
|
+
@answers = answers.answers
|
106
95
|
end
|
107
96
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
basic_hosts }
|
114
|
-
let( :master_certname ) { 'master_certname' }
|
97
|
+
# The only difference between 3.2 and 3.0 is the addition of the
|
98
|
+
# master certname to the dashboard answers
|
99
|
+
it 'should add q_puppetmaster_certname to the dashboard answers' do
|
100
|
+
expect( @answers['vm2']).to include :q_puppetmaster_certname
|
101
|
+
end
|
115
102
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
103
|
+
it 'should add q_upgrade_with_unknown_disk_space to the dashboard on upgrade' do
|
104
|
+
@upgrade_answers = upgrade_answers.answers
|
105
|
+
expect( @upgrade_answers['vm2']).to include :q_upgrade_with_unknown_disk_space
|
106
|
+
end
|
120
107
|
|
121
|
-
|
122
|
-
|
108
|
+
it 'should add answers to the host objects' do
|
109
|
+
hosts.each do |host|
|
110
|
+
expect( host[:answers] ).to be === @answers[host.name]
|
123
111
|
end
|
112
|
+
end
|
113
|
+
end
|
124
114
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
115
|
+
describe Version30 do
|
116
|
+
let( :options ) { Beaker::Options::Presets.new.presets }
|
117
|
+
let( :basic_hosts ) { make_hosts( { 'pe_ver' => @ver } ) }
|
118
|
+
let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'database', 'dashboard']
|
119
|
+
basic_hosts[1]['platform'] = 'windows'
|
120
|
+
basic_hosts[2][:custom_answers] = { :q_custom => 'LOOKLOOKLOOK' }
|
121
|
+
basic_hosts }
|
122
|
+
let( :answers ) { Beaker::Answers.create(@ver, hosts, options) }
|
123
|
+
let( :upgrade_answers ) { Beaker::Answers.create(@ver, hosts, options.merge( {:type => :upgrade}) ) }
|
129
124
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
125
|
+
before :each do
|
126
|
+
@ver = '3.0'
|
127
|
+
@answers = answers.answers
|
128
|
+
end
|
134
129
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
hosts.each do |host|
|
139
|
-
expect( host[:answers] ).to be === answers[host.name]
|
140
|
-
end
|
141
|
-
end
|
130
|
+
it 'uses simple answers for upgrade from 3.0.x to 3.0.x' do
|
131
|
+
@upgrade_answers = upgrade_answers.answers
|
132
|
+
expect( @upgrade_answers ).to be === { "vm2"=>{ :q_install=>"y", :q_install_vendor_packages=>"y" }, "vm1"=>{ :q_install=>"y", :q_install_vendor_packages=>"y" }, "vm3"=>{ :q_install=>"y", :q_install_vendor_packages=>"y", :q_custom=>"LOOKLOOKLOOK" } }
|
142
133
|
end
|
143
134
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
basic_hosts[1]['platform'] = 'windows'
|
149
|
-
basic_hosts }
|
150
|
-
let( :master_certname ) { 'master_certname' }
|
135
|
+
it 'sets correct answers for an agent' do
|
136
|
+
@ver = '3.0'
|
137
|
+
expect( @answers['vm3'] ).to be === { :q_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_verify_packages=>"y", :q_puppet_symlinks_install=>"y", :q_puppetagent_certname=>hosts[2], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"n", :q_all_in_one_install=>"n", :q_puppet_enterpriseconsole_install=>"n", :q_puppetdb_install=>"n", :q_database_install=>"n", :q_custom=>"LOOKLOOKLOOK" }
|
138
|
+
end
|
151
139
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
140
|
+
it 'sets correct answers for a master' do
|
141
|
+
@ver = '3.0'
|
142
|
+
expect( @answers['vm1'] ).to be === { :q_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_verify_packages=>"y", :q_puppet_symlinks_install=>"y", :q_puppetagent_certname=>hosts[0], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"y", :q_all_in_one_install=>"y", :q_puppet_enterpriseconsole_install=>"y", :q_puppetdb_install=>"y", :q_database_install=>"y", :q_puppetdb_hostname=>hosts[0], :q_puppetdb_port=>8081, :q_puppetmaster_dnsaltnames=>"#{hosts[0]},#{hosts[0][:ip]},puppet", :q_puppetmaster_enterpriseconsole_hostname=>hosts[0], :q_puppetmaster_enterpriseconsole_port=>443, :q_puppetmaster_certname=>hosts[0], :q_puppetdb_database_name=>"pe-puppetdb", :q_puppetdb_database_user=>"mYpdBu3r", :q_puppetdb_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_auth_database_name=>"console_auth", :q_puppet_enterpriseconsole_auth_database_user=>"mYu7hu3r", :q_puppet_enterpriseconsole_auth_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_name=>"console", :q_puppet_enterpriseconsole_database_user=>"mYc0nS03u3r", :q_puppet_enterpriseconsole_database_password=>"'~!@\#$%^*-/ aZ'", :q_database_host=>hosts[0], :q_database_port=>5432, :q_pe_database=>"y", :q_puppet_enterpriseconsole_inventory_hostname=>hosts[0], :q_puppet_enterpriseconsole_inventory_certname=>hosts[0], :q_puppet_enterpriseconsole_inventory_dnsaltnames=>hosts[0], :q_puppet_enterpriseconsole_inventory_port=>8140, :q_puppet_enterpriseconsole_master_hostname=>hosts[0], :q_puppet_enterpriseconsole_auth_user_email=>"'admin@example.com'", :q_puppet_enterpriseconsole_auth_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_httpd_port=>443, :q_puppet_enterpriseconsole_smtp_host=>"'vm1'", :q_puppet_enterpriseconsole_smtp_use_tls=>"'n'", :q_puppet_enterpriseconsole_smtp_port=>"'25'", :q_database_root_password=>"'=ZYdjiP3jCwV5eo9s1MBd'", :q_database_root_user=>"pe-postgres" }
|
143
|
+
end
|
156
144
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
145
|
+
it 'generates nil answers for a windows host' do
|
146
|
+
@ver = '3.0'
|
147
|
+
expect( @answers['vm2'] ).to be === nil
|
148
|
+
end
|
161
149
|
|
162
|
-
|
163
|
-
|
164
|
-
|
150
|
+
it 'should add answers to the host objects' do
|
151
|
+
@ver = '3.0'
|
152
|
+
a = answers.answers
|
153
|
+
hosts.each do |host|
|
154
|
+
expect( host[:answers] ).to be === @answers[host.name]
|
165
155
|
end
|
156
|
+
end
|
166
157
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
158
|
+
it 'appends custom answers to generated answers' do
|
159
|
+
expect( hosts[2][:custom_answers] ).to be == { :q_custom => 'LOOKLOOKLOOK' }
|
160
|
+
expect( @answers['vm3'] ).to include :q_custom
|
161
|
+
expect( hosts[2][:answers] ).to include :q_custom
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe Version28 do
|
166
|
+
let( :options ) { Beaker::Options::Presets.new.presets }
|
167
|
+
let( :basic_hosts ) { make_hosts( { 'pe_ver' => @ver } ) }
|
168
|
+
let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'database', 'dashboard']
|
169
|
+
basic_hosts[1]['platform'] = 'windows'
|
170
|
+
basic_hosts }
|
171
|
+
let( :answers ) { Beaker::Answers.create(@ver, hosts, options) }
|
174
172
|
|
173
|
+
before :each do
|
174
|
+
@ver = '2.8'
|
175
|
+
@answers = answers.answers
|
175
176
|
end
|
176
|
-
describe Version20 do
|
177
|
-
let( :options ) { Beaker::Options::Presets.presets }
|
178
|
-
let( :basic_hosts ) { make_hosts( { 'pe_ver' => @ver } ) }
|
179
|
-
let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'database', 'dashboard']
|
180
|
-
basic_hosts[1]['platform'] = 'windows'
|
181
|
-
basic_hosts }
|
182
|
-
let( :master_certname ) { 'master_certname' }
|
183
177
|
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
end
|
178
|
+
it 'sets correct answers for an agent' do
|
179
|
+
expect( @answers['vm3'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[2], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"n", :q_puppet_enterpriseconsole_install=>"n" }
|
180
|
+
end
|
188
181
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
182
|
+
it 'sets correct answers for a master' do
|
183
|
+
expect( @answers['vm1'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[0], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"y", :q_puppet_enterpriseconsole_install=>"y", :q_puppetmaster_certname=>hosts[0], :q_puppetmaster_dnsaltnames=>"#{hosts[0]},#{hosts[0][:ip]},puppet", :q_puppetmaster_enterpriseconsole_hostname=>hosts[0], :q_puppetmaster_enterpriseconsole_port=>443, :q_puppetmaster_forward_facts=>"y", :q_puppet_enterpriseconsole_database_install=>"y", :q_puppet_enterpriseconsole_auth_database_name=>"console_auth", :q_puppet_enterpriseconsole_auth_database_user=>"mYu7hu3r", :q_puppet_enterpriseconsole_auth_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_name=>"console", :q_puppet_enterpriseconsole_database_user=>"mYc0nS03u3r", :q_puppet_enterpriseconsole_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_inventory_hostname=>hosts[0], :q_puppet_enterpriseconsole_inventory_certname=>hosts[0], :q_puppet_enterpriseconsole_inventory_dnsaltnames=>hosts[0], :q_puppet_enterpriseconsole_inventory_port=>8140, :q_puppet_enterpriseconsole_master_hostname=>hosts[0], :q_puppet_enterpriseconsole_auth_user_email=>"'admin@example.com'", :q_puppet_enterpriseconsole_auth_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_httpd_port=>443, :q_puppet_enterpriseconsole_smtp_host=>"'vm1'", :q_puppet_enterpriseconsole_smtp_use_tls=>"'n'", :q_puppet_enterpriseconsole_smtp_port=>"'25'", :q_puppet_enterpriseconsole_auth_user=>"'admin@example.com'" }
|
184
|
+
end
|
185
|
+
|
186
|
+
it 'generates nil answers for a windows host' do
|
187
|
+
expect( @answers['vm2'] ).to be === nil
|
188
|
+
end
|
193
189
|
|
194
|
-
|
195
|
-
|
196
|
-
expect(
|
190
|
+
it 'should add answers to the host objects' do
|
191
|
+
hosts.each do |host|
|
192
|
+
expect( host[:answers] ).to be === @answers[host.name]
|
197
193
|
end
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
197
|
+
describe Version20 do
|
198
|
+
let( :options ) { Beaker::Options::Presets.new.presets }
|
199
|
+
let( :basic_hosts ) { make_hosts( { 'pe_ver' => @ver } ) }
|
200
|
+
let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'database', 'dashboard']
|
201
|
+
basic_hosts[1]['platform'] = 'windows'
|
202
|
+
basic_hosts }
|
203
|
+
|
204
|
+
let( :answers ) { Beaker::Answers.create(@ver, hosts, options) }
|
205
|
+
|
206
|
+
before :each do
|
207
|
+
@ver = '2.0'
|
208
|
+
@answers = answers.answers
|
209
|
+
end
|
210
|
+
|
211
|
+
it 'sets correct answers for an agent' do
|
212
|
+
expect( @answers['vm3'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[2], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"n", :q_puppet_enterpriseconsole_install=>"n" }
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'sets correct answers for a master' do
|
216
|
+
expect( @answers['vm1'] ).to be === { :q_install=>"y", :q_puppetagent_install=>"y", :q_puppet_cloud_install=>"y", :q_puppet_symlinks_install=>"y", :q_vendor_packages_install=>"y", :q_puppetagent_certname=>hosts[0], :q_puppetagent_server=>hosts[0], :q_puppetmaster_install=>"y", :q_puppet_enterpriseconsole_install=>"y", :q_puppetmaster_certname=>hosts[0], :q_puppetmaster_dnsaltnames=>"#{hosts[0]},#{hosts[0][:ip]},puppet", :q_puppetmaster_enterpriseconsole_hostname=>hosts[0], :q_puppetmaster_enterpriseconsole_port=>443, :q_puppetmaster_forward_facts=>"y", :q_puppet_enterpriseconsole_database_install=>"y", :q_puppet_enterpriseconsole_auth_database_name=>"console_auth", :q_puppet_enterpriseconsole_auth_database_user=>"mYu7hu3r", :q_puppet_enterpriseconsole_auth_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_name=>"console", :q_puppet_enterpriseconsole_database_user=>"mYc0nS03u3r", :q_puppet_enterpriseconsole_database_root_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_database_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_inventory_hostname=>hosts[0], :q_puppet_enterpriseconsole_inventory_certname=>hosts[0], :q_puppet_enterpriseconsole_inventory_dnsaltnames=>hosts[0], :q_puppet_enterpriseconsole_inventory_port=>8140, :q_puppet_enterpriseconsole_master_hostname=>hosts[0], :q_puppet_enterpriseconsole_auth_user_email=>"'admin@example.com'", :q_puppet_enterpriseconsole_auth_password=>"'~!@\#$%^*-/ aZ'", :q_puppet_enterpriseconsole_httpd_port=>443, :q_puppet_enterpriseconsole_smtp_host=>"'vm1'", :q_puppet_enterpriseconsole_smtp_use_tls=>"'n'", :q_puppet_enterpriseconsole_smtp_port=>"'25'", :q_puppet_enterpriseconsole_auth_user=>"'admin@example.com'" }
|
217
|
+
end
|
218
|
+
|
219
|
+
it 'generates nil answers for a windows host' do
|
220
|
+
expect( @answers['vm2'] ).to be === nil
|
221
|
+
end
|
198
222
|
|
199
|
-
|
200
|
-
|
201
|
-
answers
|
202
|
-
hosts.each do |host|
|
203
|
-
expect( host[:answers] ).to be === answers[host.name]
|
204
|
-
end
|
223
|
+
it 'should add answers to the host objects' do
|
224
|
+
hosts.each do |host|
|
225
|
+
expect( host[:answers] ).to be === @answers[host.name]
|
205
226
|
end
|
206
227
|
end
|
207
228
|
end
|
data/spec/beaker/cli_spec.rb
CHANGED
@@ -19,7 +19,7 @@ module Beaker
|
|
19
19
|
cli.stub(:validate).and_return(true)
|
20
20
|
cli.stub(:provision).and_return(true)
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
describe "test fail mode" do
|
24
24
|
it 'continues testing after failed test if using slow fail_mode' do
|
25
25
|
cli.stub(:run_suite).with(:pre_suite, :fast).and_return(true)
|
@@ -47,7 +47,7 @@ module Beaker
|
|
47
47
|
|
48
48
|
end
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
describe "SUT preserve mode" do
|
52
52
|
it 'cleans up SUTs post testing if tests fail and preserve_hosts = never' do
|
53
53
|
cli.stub(:run_suite).with(:pre_suite, :fast).and_return(true)
|
@@ -150,6 +150,39 @@ module Beaker
|
|
150
150
|
expect{ cli.execute! }.to raise_error
|
151
151
|
|
152
152
|
end
|
153
|
+
|
154
|
+
it 'cleans up SUTs post testing if tests fail and preserve_hosts = onpass' do
|
155
|
+
cli.stub(:run_suite).with(:pre_suite, :fast).and_return(true)
|
156
|
+
cli.stub(:run_suite).with(:tests).and_throw("bad test")
|
157
|
+
cli.stub(:run_suite).with(:post_suite).and_return(true)
|
158
|
+
options = cli.instance_variable_get(:@options)
|
159
|
+
options[:fail_mode] = 'fast'
|
160
|
+
options[:preserve_hosts] = 'onpass'
|
161
|
+
cli.instance_variable_set(:@options, options)
|
162
|
+
|
163
|
+
netmanager = double(:netmanager)
|
164
|
+
cli.instance_variable_set(:@network_manager, netmanager)
|
165
|
+
netmanager.should_receive(:cleanup).once
|
166
|
+
|
167
|
+
expect{ cli.execute! }.to raise_error
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'preserves SUTs post testing if no tests fail and preserve_hosts = onpass' do
|
172
|
+
cli.stub(:run_suite).with(:pre_suite, :fast).and_return(true)
|
173
|
+
cli.stub(:run_suite).with(:tests).and_return(true)
|
174
|
+
cli.stub(:run_suite).with(:post_suite).and_return(true)
|
175
|
+
options = cli.instance_variable_get(:@options)
|
176
|
+
options[:fail_mode] = 'fast'
|
177
|
+
options[:preserve_hosts] = 'onpass'
|
178
|
+
cli.instance_variable_set(:@options, options)
|
179
|
+
|
180
|
+
netmanager = double(:netmanager)
|
181
|
+
cli.instance_variable_set(:@network_manager, netmanager)
|
182
|
+
netmanager.should_receive(:cleanup).never
|
183
|
+
|
184
|
+
expect{ cli.execute! }.to_not raise_error
|
185
|
+
end
|
153
186
|
end
|
154
187
|
end
|
155
188
|
end
|
@@ -14,7 +14,8 @@ class ClassMixedWithDSLInstallUtils
|
|
14
14
|
end
|
15
15
|
|
16
16
|
describe ClassMixedWithDSLInstallUtils do
|
17
|
-
let(:
|
17
|
+
let(:presets) { Beaker::Options::Presets.new }
|
18
|
+
let(:opts) { presets.presets.merge(presets.env_vars) }
|
18
19
|
let(:basic_hosts) { make_hosts( { :pe_ver => '3.0',
|
19
20
|
:platform => 'linux',
|
20
21
|
:roles => [ 'agent' ] } ) }
|
@@ -325,8 +326,6 @@ describe ClassMixedWithDSLInstallUtils do
|
|
325
326
|
end
|
326
327
|
|
327
328
|
subject.stub( :hosts ).and_return( hosts )
|
328
|
-
#determine mastercert
|
329
|
-
subject.should_receive( :on ).with( hosts[0], /uname/ ).once
|
330
329
|
#create answers file per-host, except windows
|
331
330
|
subject.should_receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
|
332
331
|
#run installer on all hosts
|
@@ -2,6 +2,8 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Beaker do
|
4
4
|
let( :options ) { make_opts.merge({ 'logger' => double().as_null_object }) }
|
5
|
+
let( :ntpserver_set ) { "ntp_server_set" }
|
6
|
+
let( :options_ntp ) { make_opts.merge({ 'ntp_server' => ntpserver_set }) }
|
5
7
|
let( :ntpserver ) { Beaker::HostPrebuiltSteps::NTPSERVER }
|
6
8
|
let( :apt_cfg ) { Beaker::HostPrebuiltSteps::APT_CFG }
|
7
9
|
let( :ips_pkg_repo ) { Beaker::HostPrebuiltSteps::IPS_PKG_REPO }
|
@@ -50,15 +52,6 @@ describe Beaker do
|
|
50
52
|
expect{ subject.timesync( hosts, options ) }.to raise_error
|
51
53
|
end
|
52
54
|
|
53
|
-
it "can sync time on solaris-10 hosts" do
|
54
|
-
hosts = make_hosts( { :platform => 'solaris-10' } )
|
55
|
-
|
56
|
-
Beaker::Command.should_receive( :new ).with("sleep 10 && ntpdate -w #{ntpserver}").exactly( 3 ).times
|
57
|
-
|
58
|
-
subject.timesync( hosts, options )
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
55
|
it "can sync time on windows hosts" do
|
63
56
|
hosts = make_hosts( { :platform => 'windows' } )
|
64
57
|
|
@@ -79,28 +72,57 @@ describe Beaker do
|
|
79
72
|
subject.timesync( hosts, options )
|
80
73
|
|
81
74
|
end
|
75
|
+
|
76
|
+
it "can set time server on unix hosts" do
|
77
|
+
hosts = make_hosts( { :platform => 'unix' } )
|
78
|
+
|
79
|
+
Beaker::Command.should_receive( :new ).with("ntpdate -t 20 #{ntpserver_set}").exactly( 3 ).times
|
80
|
+
|
81
|
+
subject.timesync( hosts, options_ntp )
|
82
|
+
end
|
83
|
+
|
84
|
+
it "can set time server on windows hosts" do
|
85
|
+
hosts = make_hosts( { :platform => 'windows' } )
|
86
|
+
|
87
|
+
Beaker::Command.should_receive( :new ).with("w32tm /register").exactly( 3 ).times
|
88
|
+
Beaker::Command.should_receive( :new ).with("net start w32time").exactly( 3 ).times
|
89
|
+
Beaker::Command.should_receive( :new ).with("w32tm /config /manualpeerlist:#{ntpserver_set} /syncfromflags:manual /update").exactly( 3 ).times
|
90
|
+
Beaker::Command.should_receive( :new ).with("w32tm /resync").exactly( 3 ).times
|
91
|
+
|
92
|
+
subject.timesync( hosts, options_ntp )
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
it "can set time server on Sles hosts" do
|
97
|
+
hosts = make_hosts( { :platform => 'sles-13.1-x64' } )
|
98
|
+
|
99
|
+
Beaker::Command.should_receive( :new ).with("sntp #{ntpserver_set}").exactly( 3 ).times
|
100
|
+
|
101
|
+
subject.timesync( hosts, options_ntp )
|
102
|
+
|
103
|
+
end
|
82
104
|
end
|
83
105
|
|
84
106
|
context "epel_info_for!" do
|
85
107
|
subject { dummy_class.new }
|
86
|
-
|
108
|
+
|
87
109
|
it "can return the correct url for an el-6 host" do
|
88
|
-
host = make_host( 'testhost', { :platform => 'el-6-platform' } )
|
110
|
+
host = make_host( 'testhost', { :platform => Beaker::Platform.new('el-6-platform') } )
|
89
111
|
|
90
|
-
expect( subject.epel_info_for
|
112
|
+
expect( subject.epel_info_for( host, options )).to be === ["http://mirrors.kernel.org/fedora-epel/6", "i386", "epel-release-6-8.noarch.rpm"]
|
91
113
|
end
|
92
114
|
|
93
115
|
it "can return the correct url for an el-5 host" do
|
94
|
-
host = make_host( 'testhost', { :platform => 'el-5-platform' } )
|
116
|
+
host = make_host( 'testhost', { :platform => Beaker::Platform.new('el-5-platform') } )
|
95
117
|
|
96
|
-
expect( subject.epel_info_for
|
118
|
+
expect( subject.epel_info_for( host, options )).to be === ["http://mirrors.kernel.org/fedora-epel/5", "i386", "epel-release-5-4.noarch.rpm"]
|
97
119
|
|
98
120
|
end
|
99
121
|
|
100
122
|
it "raises an error on non el-5/6 host" do
|
101
|
-
host = make_host( 'testhost', { :platform => 'el-4-platform' } )
|
123
|
+
host = make_host( 'testhost', { :platform => Beaker::Platform.new('el-4-platform') } )
|
102
124
|
|
103
|
-
expect{ subject.epel_info_for
|
125
|
+
expect{ subject.epel_info_for( host, options )}.to raise_error
|
104
126
|
|
105
127
|
end
|
106
128
|
|
@@ -163,7 +185,7 @@ describe Beaker do
|
|
163
185
|
|
164
186
|
context "proxy_config" do
|
165
187
|
subject { dummy_class.new }
|
166
|
-
|
188
|
+
|
167
189
|
it "correctly configures ubuntu hosts" do
|
168
190
|
hosts = make_hosts( { :platform => 'ubuntu', :exit_code => 1 } )
|
169
191
|
|
@@ -216,14 +238,15 @@ describe Beaker do
|
|
216
238
|
subject { dummy_class.new }
|
217
239
|
|
218
240
|
it "add extras for el-5/6 hosts" do
|
219
|
-
hosts = make_hosts( { :platform => 'el-5', :exit_code => 1 } )
|
220
|
-
hosts[0][:platform] = 'el-6'
|
221
|
-
url = "http://el_extras_url"
|
222
|
-
|
223
|
-
subject.stub( :epel_info_for! ).and_return( url )
|
241
|
+
hosts = make_hosts( { :platform => Beaker::Platform.new('el-5-arch'), :exit_code => 1 } )
|
242
|
+
hosts[0][:platform] = Beaker::Platform.new('el-6-arch')
|
224
243
|
|
225
244
|
Beaker::Command.should_receive( :new ).with("rpm -qa | grep epel-release").exactly( 3 ).times
|
226
|
-
Beaker::Command.should_receive( :new ).with("rpm -i
|
245
|
+
Beaker::Command.should_receive( :new ).with("rpm -i http://mirrors.kernel.org/fedora-epel/6/i386/epel-release-6-8.noarch.rpm").exactly( 1 ).times
|
246
|
+
Beaker::Command.should_receive( :new ).with("rpm -i http://mirrors.kernel.org/fedora-epel/5/i386/epel-release-5-4.noarch.rpm").exactly( 2 ).times
|
247
|
+
Beaker::Command.should_receive( :new ).with("sed -i -e 's;#baseurl.*$;baseurl=http://mirrors\\.kernel\\.org/fedora\\-epel/6/$basearch;' /etc/yum.repos.d/epel.repo").exactly( 1 ).times
|
248
|
+
Beaker::Command.should_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
|
249
|
+
Beaker::Command.should_receive( :new ).with("sed -i -e '/mirrorlist/d' /etc/yum.repos.d/epel.repo").exactly( 3 ).times
|
227
250
|
Beaker::Command.should_receive( :new ).with("yum clean all && yum makecache").exactly( 3 ).times
|
228
251
|
|
229
252
|
subject.add_el_extras( hosts, options )
|
@@ -231,7 +254,7 @@ describe Beaker do
|
|
231
254
|
end
|
232
255
|
|
233
256
|
it "should do nothing for non el-5/6 hosts" do
|
234
|
-
hosts = make_hosts( { :platform => 'windows' } )
|
257
|
+
hosts = make_hosts( { :platform => Beaker::Platform.new('windows-version-arch') } )
|
235
258
|
|
236
259
|
Beaker::Command.should_receive( :new ).never
|
237
260
|
|