beaker 1.19.1 → 1.20.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/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
|
|