Skip to content

Commit 92af8db

Browse files
George Gelashvilidbasner
andcommitted
Mob commit. Changed provisioner tests to use shared_examples pattern
Used to test different OS Version and IaaS combinations. Co-authored-by: Daniel Basner <[email protected]> Co-authored-by: George Gelashvili <[email protected]>
1 parent 3251c85 commit 92af8db

File tree

1 file changed

+95
-52
lines changed

1 file changed

+95
-52
lines changed

spec/packer/config/provisioners_spec.rb

Lines changed: 95 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
require 'rspec/expectations'
22

3-
RSpec::Matchers.define :include_provisioner do |expected_provisioner, after:[]|
3+
RSpec::Matchers.define :include_provisioner do |expected_provisioner, after: []|
44

55
def provisioner_is_after?(actual_provisioners, after, provisioner_index)
66
after_index = actual_provisioners.find_index do |provisioner|
@@ -58,72 +58,56 @@ def self.new_powershell_provisioner(command)
5858

5959
def inspect
6060
case @provisioner_type
61-
when :powershell
62-
return "Powershell provisioner with command: '#{@command}'"
63-
when :file
64-
return "File Provisioner with source: '#{@source}' and destination: '#{@destination}'"
61+
when :powershell
62+
return "Powershell provisioner with command: '#{@command}'"
63+
when :file
64+
return "File Provisioner with source: '#{@source}' and destination: '#{@destination}'"
6565
end
6666
end
6767

6868
def matches?(actual_provisioner)
6969
case @provisioner_type
70-
when :powershell
71-
actual_provisioner['type'] == 'powershell' &&
72-
actual_provisioner.has_key?('inline') &&
73-
actual_provisioner['inline'].find do |script_line|
74-
if @command.is_a?(String)
75-
script_line.eql? @command
76-
elsif @command.is_a?(Regexp)
77-
script_line =~ @command
78-
else
79-
raise "provisioner command neither string nor regex"
70+
when :powershell
71+
actual_provisioner['type'] == 'powershell' &&
72+
actual_provisioner.has_key?('inline') &&
73+
actual_provisioner['inline'].find do |script_line|
74+
if @command.is_a?(String)
75+
script_line.eql? @command
76+
elsif @command.is_a?(Regexp)
77+
script_line =~ @command
78+
else
79+
raise "provisioner command neither string nor regex"
80+
end
8081
end
81-
end
82-
when :file
83-
actual_provisioner['type'] == 'file' &&
84-
actual_provisioner['source'] == @source &&
85-
actual_provisioner['destination'] == @destination
86-
else
87-
false
82+
when :file
83+
actual_provisioner['type'] == 'file' &&
84+
actual_provisioner['source'] == @source &&
85+
actual_provisioner['destination'] == @destination
86+
else
87+
false
8888
end
8989
end
9090
end
9191

92-
describe 'provisioners' do
93-
before(:context) do
94-
stemcell_deps_dir = Dir.mktmpdir('gcp')
95-
ENV['STEMCELL_DEPS_DIR'] = stemcell_deps_dir
96-
@provisioners = Packer::Config::Aws.new(
97-
aws_access_key: '',
98-
aws_secret_key: '',
99-
region: '',
100-
output_directory: 'some-output-directory',
101-
os: 'windows2012R2',
102-
version: '1200.1.2',
103-
vm_prefix: '',
104-
mount_ephemeral_disk: false
105-
).provisioners
106-
107-
FileUtils.rm_rf(stemcell_deps_dir)
108-
ENV.delete('STEMCELL_DEPS_DIR')
109-
end
92+
shared_examples "a standard provisioner" do |provisioner_config|
93+
let(:provisioners) { provisioner_config.provisioners }
11094

11195
it 'does not have nonsense provisioner' do
11296
nonsense_provisioner = TestProvisioner.new_powershell_provisioner('some-garbage')
113-
expect(@provisioners).not_to include_provisioner(nonsense_provisioner), 'test matcher'
97+
expect(provisioners).not_to include_provisioner(nonsense_provisioner), 'test matcher'
11498
end
11599

116100
it 'uploads bosh ps-modules' do
117101
upload_bosh_ps_modules = TestProvisioner.new_file_provisioner('build/bosh-psmodules.zip', 'C:\provision\bosh-psmodules.zip')
118-
expect(@provisioners).to include_provisioner(upload_bosh_ps_modules)
102+
expect(provisioners).to include_provisioner(upload_bosh_ps_modules)
119103
end
120104

121105
it 'uploads the install-bosh-psmodules script' do
122106
upload_install_bosh_ps_modules = TestProvisioner.new_file_provisioner(
123107
'scripts/install-bosh-psmodules.ps1',
124108
'C:\provision\install-bosh-psmodules.ps1'
125109
)
126-
expect(@provisioners).to include_provisioner(upload_install_bosh_ps_modules)
110+
expect(provisioners).to include_provisioner(upload_install_bosh_ps_modules)
127111
end
128112

129113
it 'runs install bosh ps modules after uploading zip file and install script' do
@@ -134,26 +118,26 @@ def matches?(actual_provisioner)
134118
'C:\provision\install-bosh-psmodules.ps1'
135119
)
136120

137-
expect(@provisioners).to include_provisioner(install_modules_provisioner, after:[upload_install_modules, upload_modules])
121+
expect(provisioners).to include_provisioner(install_modules_provisioner, after: [upload_install_modules, upload_modules])
138122
end
139123

140124
it 'runs get-hotfix after windows updates are applied' do
141125
get_hotfix_prov = TestProvisioner.new_powershell_provisioner('Get-HotFix > hotfixes.log')
142126
wait_windows_update_prov = TestProvisioner.new_powershell_provisioner(/Wait-WindowsUpdates -Password .+ -User Provisioner/)
143-
expect(@provisioners).to include_provisioner(get_hotfix_prov, after:[wait_windows_update_prov])
144-
# expect(@provisioners).to include_provisioner(get_hotfix_prov)
127+
expect(provisioners).to include_provisioner(get_hotfix_prov, after: [wait_windows_update_prov])
128+
# expect(provisioners).to include_provisioner(get_hotfix_prov)
145129

146-
prov_index = @provisioners.find_index do |p|
130+
prov_index = provisioners.find_index do |p|
147131
p['type'] == 'powershell' && p.has_key?('inline') && p['inline'].include?('Get-HotFix > hotfixes.log')
148132
end
149133
expect(prov_index).not_to be_nil, 'Could not find Get-Hotfix provisioner'
150134

151135

152-
hotfixes_applied_index = @provisioners.find_index do |p|
136+
hotfixes_applied_index = provisioners.find_index do |p|
153137
p['type'] == 'powershell' && p.has_key?('inline') && p['inline'].include?('Register-WindowsUpdatesTask')
154138
end
155139

156-
unregister_windows_index = @provisioners.find_index do |p|
140+
unregister_windows_index = provisioners.find_index do |p|
157141
p['type'] == 'powershell' && p.has_key?('inline') && p['inline'].include?('Unregister-WindowsUpdatesTask')
158142
end
159143

@@ -163,16 +147,16 @@ def matches?(actual_provisioner)
163147

164148
it 'runs Unregister windows update after the post-RegisterWindowsUpdates windows-restart' do
165149
register_windows_updates_task_provisioner = TestProvisioner.new_powershell_provisioner('Register-WindowsUpdatesTask')
166-
expect(@provisioners).to include_provisioner(register_windows_updates_task_provisioner), 'test matcher'
150+
expect(provisioners).to include_provisioner(register_windows_updates_task_provisioner), 'test matcher'
167151

168152

169153
# noinspection RubyInterpreter
170-
register_updates_index = @provisioners.find_index do |p|
154+
register_updates_index = provisioners.find_index do |p|
171155
p['type'] == 'powershell' && p.has_key?('inline') && p['inline'].include?('Register-WindowsUpdatesTask')
172156
end
173157
expect(register_updates_index).not_to be_nil, 'Could not find RegisterWindowsUpdates provisioner'
174158

175-
post_register_provisioners = @provisioners[(register_updates_index + 1)..-1]
159+
post_register_provisioners = provisioners[(register_updates_index + 1)..-1]
176160

177161
prov_index = post_register_provisioners.find_index do |p|
178162
provisionerCommand = 'Unregister-WindowsUpdatesTask'
@@ -187,4 +171,63 @@ def matches?(actual_provisioner)
187171

188172
expect(prov_index).to be > windows_restart_index, 'UnregisterWindowsUpdates not before windows-restart'
189173
end
174+
end
175+
176+
describe 'provisioners' do
177+
before(:context) do
178+
@stemcell_deps_dir = Dir.mktmpdir('gcp')
179+
ENV['STEMCELL_DEPS_DIR'] = @stemcell_deps_dir
180+
end
181+
182+
after(:context) do
183+
FileUtils.rm_rf(@stemcell_deps_dir)
184+
ENV.delete('STEMCELL_DEPS_DIR')
185+
end
186+
187+
context 'aws' do
188+
standard_options = {
189+
aws_access_key: '',
190+
aws_secret_key: '',
191+
region: '',
192+
output_directory: 'some-output-directory',
193+
version: '',
194+
}
195+
196+
context '2012R2' do
197+
it_behaves_like "a standard provisioner", Packer::Config::Aws.new(
198+
standard_options.merge(os: 'windows2012R2')
199+
)
200+
end
201+
202+
context '1803' do
203+
it_behaves_like "a standard provisioner", Packer::Config::Aws.new(
204+
standard_options.merge(os: 'windows1803')
205+
)
206+
end
207+
end
208+
209+
context 'vsphere' do
210+
standard_options = {
211+
output_directory: 'output_directory',
212+
num_vcpus: 1,
213+
mem_size: 1000,
214+
product_key: 'key',
215+
organization: 'me',
216+
owner: 'me',
217+
administrator_password: 'password',
218+
source_path: 'source_path',
219+
version: '',
220+
enable_rdp: false,
221+
new_password: 'new-password',
222+
http_proxy: nil,
223+
https_proxy: nil,
224+
bypass_list: nil,
225+
}
226+
227+
context '2012R2' do
228+
it_behaves_like 'a standard provisioner', Packer::Config::VSphere.new(
229+
standard_options.merge(os: 'windows2012R2')
230+
)
231+
end
232+
end
190233
end

0 commit comments

Comments
 (0)