beaker 3.37.0 → 4.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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +32 -1
  3. data/acceptance/lib/helpers/test_helper.rb +0 -28
  4. data/acceptance/pre_suite/subcommands/08_install_beaker.rb +1 -1
  5. data/acceptance/tests/base/dsl/helpers/host_helpers/backup_the_file_test.rb +9 -9
  6. data/acceptance/tests/base/dsl/helpers/host_helpers/create_remote_file_test.rb +106 -103
  7. data/acceptance/tests/base/dsl/helpers/host_helpers/curl_on_test.rb +2 -2
  8. data/acceptance/tests/base/dsl/helpers/host_helpers/install_package_test.rb +1 -50
  9. data/acceptance/tests/base/dsl/helpers/host_helpers/retry_on_test.rb +3 -3
  10. data/acceptance/tests/base/dsl/helpers/host_helpers/rsync_to_test.rb +71 -27
  11. data/acceptance/tests/base/dsl/helpers/host_helpers/scp_from_test.rb +3 -3
  12. data/acceptance/tests/base/dsl/helpers/host_helpers/scp_to_test.rb +3 -3
  13. data/acceptance/tests/base/host/file_test.rb +81 -0
  14. data/beaker.gemspec +6 -14
  15. data/docs/how_to/install_puppet.md +2 -0
  16. data/docs/how_to/the_beaker_dsl.md +150 -150
  17. data/docs/how_to/upgrade_from_3_to_4.md +52 -0
  18. data/lib/beaker.rb +0 -10
  19. data/lib/beaker/dsl.rb +7 -0
  20. data/lib/beaker/dsl/helpers.rb +4 -6
  21. data/lib/beaker/dsl/helpers/host_helpers.rb +10 -34
  22. data/lib/beaker/dsl/install_utils.rb +0 -5
  23. data/lib/beaker/dsl/roles.rb +1 -1
  24. data/lib/beaker/host.rb +12 -11
  25. data/lib/beaker/host/aix/file.rb +2 -2
  26. data/lib/beaker/host/aix/group.rb +1 -0
  27. data/lib/beaker/host/aix/user.rb +1 -0
  28. data/lib/beaker/host/freebsd/pkg.rb +9 -0
  29. data/lib/beaker/host/mac/group.rb +1 -0
  30. data/lib/beaker/host/mac/user.rb +8 -13
  31. data/lib/beaker/host/pswindows/file.rb +2 -2
  32. data/lib/beaker/host/pswindows/group.rb +1 -0
  33. data/lib/beaker/host/pswindows/user.rb +1 -0
  34. data/lib/beaker/host/unix/exec.rb +5 -5
  35. data/lib/beaker/host/unix/file.rb +43 -2
  36. data/lib/beaker/host/unix/group.rb +1 -0
  37. data/lib/beaker/host/unix/user.rb +1 -0
  38. data/lib/beaker/host/windows/file.rb +32 -2
  39. data/lib/beaker/host/windows/group.rb +1 -0
  40. data/lib/beaker/host/windows/user.rb +1 -0
  41. data/lib/beaker/host_prebuilt_steps.rb +0 -4
  42. data/lib/beaker/hypervisor.rb +1 -5
  43. data/lib/beaker/result.rb +4 -0
  44. data/lib/beaker/version.rb +1 -1
  45. data/spec/beaker/dsl/helpers/host_helpers_spec.rb +14 -51
  46. data/spec/beaker/dsl/wrappers_spec.rb +0 -46
  47. data/spec/beaker/host/mac/user_spec.rb +5 -8
  48. data/spec/beaker/host/unix/exec_spec.rb +1 -1
  49. data/spec/beaker/host/unix/file_spec.rb +39 -0
  50. data/spec/beaker/host/windows/file_spec.rb +55 -0
  51. data/spec/beaker/host_prebuilt_steps_spec.rb +16 -67
  52. data/spec/beaker/host_spec.rb +10 -14
  53. data/spec/beaker/hypervisor/hypervisor_spec.rb +1 -1
  54. metadata +47 -165
  55. data/acceptance/lib/beaker/acceptance/install_utils.rb +0 -58
  56. data/acceptance/tests/base/dsl/helpers/host_helpers/create_tmpdir_on_test.rb +0 -68
  57. data/acceptance/tests/base/dsl/install_utils/clone_git_repo_on_test.rb +0 -49
  58. data/lib/beaker/dsl/helpers/facter_helpers.rb +0 -57
  59. data/lib/beaker/dsl/install_utils/pe_defaults.rb +0 -143
  60. data/lib/beaker/dsl/install_utils/windows_utils.rb +0 -223
  61. data/spec/beaker/dsl/ezbake_utils_spec.rb +0 -279
  62. data/spec/beaker/dsl/install_utils/pe_defaults_spec.rb +0 -61
  63. data/spec/beaker/dsl/install_utils/windows_utils_spec.rb +0 -263
@@ -1,279 +0,0 @@
1
- require 'spec_helper'
2
-
3
- EZBAKE_CONFIG_EXAMPLE= {
4
- :project => 'puppetserver',
5
- :real_name => 'puppetserver',
6
- :user => 'puppet',
7
- :group => 'puppet',
8
- :uberjar_name => 'puppetserver-release.jar',
9
- :config_files => [],
10
- :terminus_info => {},
11
- :debian => { :additional_dependencies => ["puppet (= 3.6.1-puppetlabs1)"], },
12
- :redhat => { :additional_dependencies => ["puppet = 3.6.1"], },
13
- :java_args => '-Xmx192m',
14
- }
15
-
16
- class ClassMixedWithEZBakeUtils
17
- include Beaker::DSL::EZBakeUtils
18
-
19
- def initialize_ezbake_config
20
- Beaker::DSL::EZBakeUtils.config = EZBAKE_CONFIG_EXAMPLE
21
- end
22
-
23
- def wipe_out_ezbake_config
24
- Beaker::DSL::EZBakeUtils.config = nil
25
- end
26
-
27
- def logger
28
- @logger ||= RSpec::Mocks::Double.new('logger').as_null_object
29
- end
30
- end
31
-
32
- module Beaker::DSL::EZBakeUtils::EZBake
33
- Config = EZBAKE_CONFIG_EXAMPLE
34
- end
35
-
36
- describe ClassMixedWithEZBakeUtils do
37
- let( :opts ) { Beaker::Options::Presets.env_vars }
38
- let( :host ) { double.as_null_object }
39
- let( :local_commands ) { Beaker::DSL::EZBakeUtils::LOCAL_COMMANDS_REQUIRED }
40
-
41
- describe '#install_from_ezbake' do
42
- let(:platform) { Beaker::Platform.new('el-7-i386') }
43
- let(:host) do
44
- FakeHost.create('fakevm', platform.to_s)
45
- end
46
-
47
- before do
48
- allow(subject).to receive(:ezbake_tools_available?) { true }
49
- end
50
-
51
- it "when ran with an el-7 machine runs correct installsh command" do
52
- expect(subject).to receive(:install_ezbake_tarball_on_host).
53
- ordered
54
- expect(subject).
55
- to receive(:ezbake_installsh).with(host, "service")
56
- subject.install_from_ezbake host
57
- end
58
- end
59
-
60
- describe '#install_termini_from_ezbake' do
61
- let(:platform) { Beaker::Platform.new('el-7-i386') }
62
- let(:host) do
63
- FakeHost.create('fakevm', platform.to_s)
64
- end
65
-
66
- before do
67
- allow(subject).to receive(:ezbake_tools_available?) { true }
68
- end
69
-
70
- it "when ran with an el-7 machine runs correct installsh command" do
71
- expect(subject).to receive(:ezbake_validate_support).with(host).ordered
72
- expect(subject).to receive(:install_ezbake_tarball_on_host).
73
- with(host).ordered
74
- expect(subject).
75
- to receive(:ezbake_installsh).with(host, "termini")
76
- subject.install_termini_from_ezbake host
77
- end
78
- end
79
-
80
- describe '#ezbake_validate_support' do
81
- context 'when OS supported' do
82
- let(:platform) { Beaker::Platform.new('el-7-i386') }
83
- let(:host) do
84
- FakeHost.create('fakevm', platform.to_s)
85
- end
86
-
87
- it 'should do nothing' do
88
- subject.ezbake_validate_support host
89
- end
90
- end
91
-
92
- context 'when OS not supported' do
93
- let(:platform) { Beaker::Platform.new('aix-12-ppc') }
94
- let(:host) do
95
- FakeHost.create('fakevm', platform.to_s)
96
- end
97
-
98
- it 'should throw exception' do
99
- expect {
100
- subject.ezbake_validate_support host
101
- }.to raise_error(RuntimeError,
102
- "No support for aix within ezbake_utils ...")
103
- end
104
- end
105
- end
106
-
107
- def install_ezbake_tarball_on_host_common_expects
108
- result = object_double(Beaker::Result.new(host, "foo"), :exit_code => 1)
109
- expect(subject).to receive(:on).
110
- with(kind_of(Beaker::Host), /test -d/,
111
- anything()).ordered { result }
112
- expect(Dir).to receive(:chdir).and_yield()
113
- expect(subject).to receive(:ezbake_local_cmd).with(/rake package:tar/).ordered
114
- expect(subject).to receive(:scp_to).
115
- with(kind_of(Beaker::Host), anything(), anything()).ordered
116
- expect(subject).to receive(:on).
117
- with(kind_of(Beaker::Host), /tar -xzf/).ordered
118
- expect(subject).to receive(:on).
119
- with(kind_of(Beaker::Host), /test -d/).ordered
120
- end
121
-
122
- describe '#install_ezbake_tarball_on_host' do
123
- let(:platform) { Beaker::Platform.new('el-7-i386') }
124
- let(:host) do
125
- FakeHost.create('fakevm', platform.to_s)
126
- end
127
-
128
- it 'when invoked with configuration should run expected tasks' do
129
- subject.initialize_ezbake_config
130
- install_ezbake_tarball_on_host_common_expects
131
- subject.install_ezbake_tarball_on_host host
132
- end
133
-
134
- it 'when invoked with nil configuration runs ezbake_stage' do
135
- subject.wipe_out_ezbake_config
136
- expect(subject).to receive(:ezbake_stage) {
137
- Beaker::DSL::EZBakeUtils.config = EZBAKE_CONFIG_EXAMPLE
138
- }.ordered
139
- install_ezbake_tarball_on_host_common_expects
140
- subject.install_ezbake_tarball_on_host host
141
- end
142
- end
143
-
144
- describe '#ezbake_tools_available?' do
145
- before do
146
- allow(subject).to receive(:check_for_package) { true }
147
- allow(subject).to receive(:system) { true }
148
- end
149
-
150
- describe "checks for local successful commands" do
151
-
152
- it "and succeeds if all commands return successfully" do
153
- local_commands.each do |software_name, command, additional_error_messages|
154
- expect(subject).to receive(:system).with(/#{command}/)
155
- end
156
- subject.ezbake_tools_available?
157
- end
158
-
159
- it "and raises an exception if a command returns failure" do
160
- allow(subject).to receive(:system) { false }
161
- local_commands.each do |software_name, command, additional_error_messages|
162
- expect(subject).to receive(:system).with(/#{command}/)
163
- break # just need first element
164
- end
165
- expect{
166
- subject.ezbake_tools_available?
167
- }.to raise_error(RuntimeError, /Must have .* installed on development system./)
168
- end
169
-
170
- end
171
-
172
- end
173
-
174
- describe '#ezbake_config' do
175
- it "returns a map with ezbake configuration parameters" do
176
- subject.initialize_ezbake_config
177
- config = subject.ezbake_config
178
- expect(config).to include(EZBAKE_CONFIG_EXAMPLE)
179
- end
180
- end
181
-
182
- describe '#ezbake_stage' do
183
- before do
184
- allow(subject).to receive(:ezbake_tools_available?) { true }
185
- subject.wipe_out_ezbake_config
186
- end
187
-
188
- it "initializes EZBakeUtils.config" do
189
- allow(Dir).to receive(:chdir).and_yield()
190
-
191
- expect(subject).to receive(:ezbake_local_cmd).
192
- with(/^lein.*install/, :throw_on_failure =>
193
- true).ordered
194
- expect(subject).to receive(:ezbake_local_cmd).
195
- with(/^lein.*with-profile ezbake ezbake stage/, :throw_on_failure =>
196
- true).ordered
197
- expect(subject).to receive(:ezbake_local_cmd).with("rake package:bootstrap").ordered
198
- expect(subject).to receive(:load) { }.ordered
199
- expect(subject).to receive(:`).ordered
200
-
201
- config = subject.ezbake_config
202
- expect(config).to eq(nil)
203
-
204
- subject.ezbake_stage
205
-
206
- config = subject.ezbake_config
207
- expect(config).to include(EZBAKE_CONFIG_EXAMPLE)
208
- end
209
- end
210
-
211
- describe '#ezbake_local_cmd' do
212
- it 'should execute system on the command specified' do
213
- expect(subject).to receive(:system).with("my command") { true }
214
- subject.ezbake_local_cmd("my command")
215
- end
216
-
217
- it 'with :throw_on_failure should throw exeception when failed' do
218
- expect(subject).to receive(:system).with("my failure") { false }
219
- expect {
220
- subject.ezbake_local_cmd("my failure", :throw_on_failure => true)
221
- }.to raise_error(RuntimeError, "Command failure my failure")
222
- end
223
-
224
- it 'without :throw_on_failure should just fail and return false' do
225
- expect(subject).to receive(:system).with("my failure") { false }
226
- expect(subject.ezbake_local_cmd("my failure")).to eq(false)
227
- end
228
- end
229
-
230
- describe '#ezbake_install_name' do
231
- it 'should return the installation name from example configuration' do
232
- expect(subject).to receive(:ezbake_config) {{
233
- :package_version => '1.1.1',
234
- :project => 'myproject',
235
- }}
236
- expect(subject.ezbake_install_name).to eq "myproject-1.1.1"
237
- end
238
- end
239
-
240
- describe '#ezbake_install_dir' do
241
- it 'should return the full path from ezbake_install_name' do
242
- expect(subject).to receive(:ezbake_install_name) {
243
- "mynewproject-2.3.4"
244
- }
245
- expect(subject.ezbake_install_dir).to eq "/root/mynewproject-2.3.4"
246
- end
247
- end
248
-
249
- describe '#ezbake_installsh' do
250
- it 'run on command correctly when invoked' do
251
- expect(subject).to receive(:on).with(host,
252
- /install.sh my_task/)
253
- subject.ezbake_installsh host, "my_task"
254
- end
255
- end
256
-
257
- describe '#conditionally_clone' do
258
- it 'when repo exists, just do fetch and checkout' do
259
- expect(subject).to receive(:ezbake_local_cmd).
260
- with(/git status/) { true }
261
- expect(subject).to receive(:ezbake_local_cmd).
262
- with(/git fetch origin/)
263
- expect(subject).to receive(:ezbake_local_cmd).
264
- with(/git checkout/)
265
- subject.conditionally_clone("my_url", "my_local_path")
266
- end
267
-
268
- it 'when repo does not exist, do clone and checkout' do
269
- expect(subject).to receive(:ezbake_local_cmd).
270
- with(/git status/) { false }
271
- expect(subject).to receive(:ezbake_local_cmd).
272
- with(/git clone/)
273
- expect(subject).to receive(:ezbake_local_cmd).
274
- with(/git checkout/)
275
- subject.conditionally_clone("my_url", "my_local_path")
276
- end
277
- end
278
-
279
- end
@@ -1,61 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class ClassMixedWithDSLInstallUtils
4
- include Beaker::DSL::InstallUtils
5
- include Beaker::DSL::Wrappers
6
- include Beaker::DSL::Helpers
7
- include Beaker::DSL::Structure
8
- include Beaker::DSL::Roles
9
- include Beaker::DSL::Patterns
10
-
11
- attr_accessor :hosts
12
-
13
- def logger
14
- @logger ||= RSpec::Mocks::Double.new('logger').as_null_object
15
- end
16
- end
17
-
18
- describe ClassMixedWithDSLInstallUtils do
19
- let(:presets) { Beaker::Options::Presets.new }
20
- let(:opts) { presets.presets.merge(presets.env_vars) }
21
- let(:basic_hosts) { make_hosts( { :pe_ver => @pe_ver || '3.0',
22
- :platform => 'linux',
23
- :roles => [ 'agent' ] }, 4 ) }
24
- let(:hosts) { basic_hosts[0][:roles] = ['master', 'database', 'dashboard']
25
- basic_hosts[1][:platform] = 'windows'
26
- basic_hosts[2][:platform] = 'osx-10.9-x86_64'
27
- basic_hosts[3][:platform] = 'eos'
28
- basic_hosts }
29
- let(:hosts_sorted) { [ hosts[1], hosts[0], hosts[2], hosts[3] ] }
30
- let(:winhost) { make_host( 'winhost', { :platform => 'windows',
31
- :pe_ver => '3.0',
32
- :working_dir => '/tmp' } ) }
33
- let(:machost) { make_host( 'machost', { :platform => 'osx-10.9-x86_64',
34
- :pe_ver => '3.0',
35
- :working_dir => '/tmp' } ) }
36
- let(:unixhost) { make_host( 'unixhost', { :platform => 'linux',
37
- :pe_ver => '3.0',
38
- :working_dir => '/tmp',
39
- :dist => 'puppet-enterprise-3.1.0-rc0-230-g36c9e5c-debian-7-i386' } ) }
40
- let(:eoshost) { make_host( 'eoshost', { :platform => 'eos',
41
- :pe_ver => '3.0',
42
- :working_dir => '/tmp',
43
- :dist => 'puppet-enterprise-3.7.1-rc0-78-gffc958f-eos-4-i386' } ) }
44
-
45
- describe '#add_platform_pe_defaults' do
46
- it 'sets puppetservice on master to be pe-httpd on pre-3.4 pe' do
47
- @pe_ver = '3.3'
48
- subject.add_platform_pe_defaults(hosts[0], 'unix')
49
- expect(hosts[0]['puppetservice']).to be == 'pe-httpd'
50
-
51
- end
52
-
53
- it 'sets puppetservice on master to be pe-puppetserver on post-3.4 pe' do
54
- @pe_ver = '3.7'
55
- subject.add_platform_pe_defaults(hosts[0], 'unix')
56
- expect(hosts[0]['puppetservice']).to be == 'pe-puppetserver'
57
- end
58
-
59
- end
60
-
61
- end
@@ -1,263 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class ClassMixedWithDSLInstallUtils
4
- include Beaker::DSL::Helpers
5
- include Beaker::DSL::Patterns
6
- include Beaker::DSL::InstallUtils
7
-
8
- def logger
9
- @logger ||= RSpec::Mocks::Double.new('logger').as_null_object
10
- end
11
- end
12
-
13
- describe ClassMixedWithDSLInstallUtils do
14
- let(:windows_temp) { 'C:\\Windows\\Temp' }
15
- let( :batch_path ) { '/fake/batch/path' }
16
- let(:msi_path) { 'c:\\foo\\puppet.msi' }
17
- let(:winhost) { make_host( 'winhost',
18
- { :platform => Beaker::Platform.new('windows-2008r2-64'),
19
- :pe_ver => '3.0',
20
- :working_dir => '/tmp',
21
- :is_cygwin => true} ) }
22
- let(:winhost_non_cygwin) { make_host( 'winhost_non_cygwin',
23
- { :platform => 'windows',
24
- :pe_ver => '3.0',
25
- :working_dir => '/tmp',
26
- :is_cygwin => 'false' } ) }
27
- let(:hosts) { [ winhost, winhost_non_cygwin ] }
28
-
29
- def expect_install_called(times = hosts.length)
30
- result = expect( Beaker::Command ).to receive( :new )
31
- .with( /^"#{batch_path}"$/, [], {:cmdexe => true})
32
- .exactly( times ).times
33
-
34
- yield result if block_given?
35
- end
36
-
37
- def expect_status_called(times = hosts.length)
38
- expect( Beaker::Command ).to receive( :new )
39
- .with( "sc qc puppet || sc qc pe-puppet", [], {:cmdexe => true} )
40
- .exactly( times ).times
41
- end
42
-
43
- def expect_version_log_called(times = hosts.length)
44
- [
45
- "\\\"%ProgramFiles%\\Puppet Labs\\puppet\\misc\\versions.txt\\\"",
46
- "\\\"%ProgramFiles(x86)%\\Puppet Labs\\puppet\\misc\\versions.txt\\\"",
47
- ].each do |path|
48
- expect( Beaker::Command ).to receive( :new )
49
- .with( "\"if exist #{path} type #{path}\"", [], {:cmdexe => true} )
50
- .exactly( times ).times
51
- end
52
- end
53
-
54
- def expect_script_matches(hosts, contents)
55
- hosts.each do |host|
56
- expect( host )
57
- .to receive( :do_scp_to ) do |local_path, remote_path|
58
- expect(File.read(local_path)).to match(contents)
59
- end
60
- .and_return( true )
61
- end
62
- end
63
-
64
- def expect_reg_query_called(times = hosts.length)
65
- hosts.each do |host|
66
- expect(host).to receive(:is_x86_64?).and_return(:true)
67
- end
68
-
69
- expect( Beaker::Command ).to receive( :new )
70
- .with(%r{reg query "HKLM\\SOFTWARE\\Wow6432Node\\Puppet Labs\\PuppetInstaller}, [], {:cmdexe => true})
71
- .exactly(times).times
72
- end
73
-
74
- describe "#install_msi_on" do
75
- let( :log_file ) { '/fake/log/file.log' }
76
- before :each do
77
- allow( subject ).to receive( :on ).and_return( true )
78
- allow( subject ).to receive( :create_install_msi_batch_on ).and_return( [batch_path, log_file] )
79
- end
80
-
81
- it "will specify a PUPPET_AGENT_STARTUP_MODE of Manual (disabling the service) by default" do
82
- expect_install_called
83
- expect_status_called
84
- expect_reg_query_called
85
- expect_version_log_called
86
- expect( subject ).to receive( :create_install_msi_batch_on ).with(
87
- anything, anything,
88
- 'PUPPET_AGENT_STARTUP_MODE' => 'Manual')
89
- subject.install_msi_on(hosts, msi_path, {})
90
- end
91
-
92
- it "allows configuration of PUPPET_AGENT_STARTUP_MODE" do
93
- expect_install_called
94
- expect_status_called
95
- expect_reg_query_called
96
- expect_version_log_called
97
- value = 'Automatic'
98
- expect( subject ).to receive( :create_install_msi_batch_on ).with(
99
- anything, anything,
100
- 'PUPPET_AGENT_STARTUP_MODE' => value)
101
- subject.install_msi_on(hosts, msi_path, {'PUPPET_AGENT_STARTUP_MODE' => value})
102
- end
103
-
104
- it "will not generate a command to emit a log file without the :debug option set" do
105
- expect_install_called
106
- expect_status_called
107
- expect( Beaker::Command ).not_to receive( :new ).with( /^type .*\.log$/, [], {:cmdexe => true} )
108
- subject.install_msi_on(hosts, msi_path)
109
- end
110
-
111
- it "will generate a command to emit a log file when the install script fails" do
112
- # note a single failure aborts executing against remaining hosts
113
- hosts_affected = 1
114
-
115
- expect_install_called(hosts_affected) { |e| e.and_raise }
116
- expect_status_called(0)
117
-
118
- expect( Beaker::Command ).to receive( :new ).with( /^type \".*\.log\"$/, [], {:cmdexe => true} ).exactly( hosts_affected ).times
119
- expect { subject.install_msi_on(hosts, msi_path) }.to raise_error(RuntimeError)
120
- end
121
-
122
- it "will generate a command to emit a log file with the :debug option set" do
123
- expect_install_called
124
- expect_reg_query_called
125
- expect_status_called
126
- expect_version_log_called
127
-
128
- expect( Beaker::Command ).to receive( :new ).with( /^type \".*\.log\"$/, [], {:cmdexe => true} ).exactly( hosts.length ).times
129
- subject.install_msi_on(hosts, msi_path, {}, { :debug => true })
130
- end
131
-
132
- it 'will pass msi_path to #create_install_msi_batch_on as-is' do
133
- expect_install_called
134
- expect_reg_query_called
135
- expect_status_called
136
- expect_version_log_called
137
- test_path = 'test/path'
138
- expect( subject ).to receive( :create_install_msi_batch_on ).with(
139
- anything, test_path, anything)
140
- subject.install_msi_on(hosts, test_path)
141
- end
142
-
143
- it 'will search in Wow6432Node for the remembered startup setting on 64-bit hosts' do
144
- expect_install_called
145
- expect_status_called
146
- expect_version_log_called
147
-
148
- hosts.each do |host|
149
- expect(host).to receive(:is_x86_64?).and_return(true)
150
- end
151
-
152
- expect( Beaker::Command ).to receive( :new )
153
- .with('reg query "HKLM\\SOFTWARE\\Wow6432Node\\Puppet Labs\\PuppetInstaller" /v "RememberedPuppetAgentStartupMode" | findstr Foo', [], {:cmdexe => true})
154
- .exactly(hosts.length).times
155
-
156
- subject.install_msi_on(hosts, msi_path, {'PUPPET_AGENT_STARTUP_MODE' => "Foo"})
157
- end
158
-
159
- it 'will omit Wow6432Node in the registry search for remembered startup setting on 32-bit hosts' do
160
- expect_install_called
161
- expect_status_called
162
- expect_version_log_called
163
-
164
- hosts.each do |host|
165
- expect(host).to receive(:is_x86_64?).and_return(false)
166
- end
167
-
168
- expect( Beaker::Command ).to receive( :new )
169
- .with('reg query "HKLM\\SOFTWARE\\Puppet Labs\\PuppetInstaller" /v "RememberedPuppetAgentStartupMode" | findstr Foo', [], {:cmdexe => true})
170
- .exactly(hosts.length).times
171
-
172
- subject.install_msi_on(hosts, msi_path, {'PUPPET_AGENT_STARTUP_MODE' => "Foo"})
173
- end
174
- end
175
-
176
- describe '#create_install_msi_batch_on' do
177
- let( :tmp ) { '/tmp/create_install_msi_batch_on' }
178
- let( :tmp_slashes ) { tmp.gsub('/', '\\') }
179
-
180
- before :each do
181
- FakeFS::FileSystem.add(File.expand_path tmp)
182
- hosts.each do |host|
183
- allow( host ).to receive( :system_temp_path ).and_return( tmp )
184
- end
185
- end
186
-
187
- it 'passes msi_path & msi_opts down to #msi_install_script' do
188
- allow( winhost ).to receive( :do_scp_to )
189
- test_path = '/path/to/test/with/13540'
190
- test_opts = { 'key1' => 'val1', 'key2' => 'val2' }
191
- expect( subject ).to receive( :msi_install_script ).with(
192
- test_path, test_opts, anything )
193
- subject.create_install_msi_batch_on(winhost, test_path, test_opts)
194
- end
195
-
196
- it 'SCPs to & returns the same batch file path, corrected for slashes' do
197
- test_time = Time.now
198
- allow( Time ).to receive( :new ).and_return( test_time )
199
- timestamp = test_time.strftime('%Y-%m-%d_%H.%M.%S')
200
-
201
- correct_path = "#{tmp_slashes}\\install-puppet-msi-#{timestamp}.bat"
202
- expect( winhost ).to receive( :do_scp_to ).with( anything, correct_path, {} )
203
- test_path, _ = subject.create_install_msi_batch_on( winhost, msi_path, {} )
204
- expect( test_path ).to be === correct_path
205
- end
206
-
207
- it 'returns & sends log_path to #msi_install_scripts, corrected for slashes' do
208
- allow( winhost ).to receive( :do_scp_to )
209
- test_time = Time.now
210
- allow( Time ).to receive( :new ).and_return( test_time )
211
- timestamp = test_time.strftime('%Y-%m-%d_%H.%M.%S')
212
-
213
- correct_path = "#{tmp_slashes}\\install-puppet-#{timestamp}.log"
214
- expect( subject ).to receive( :msi_install_script ).with(
215
- anything, anything, correct_path )
216
- _, log_path = subject.create_install_msi_batch_on( winhost, msi_path, {} )
217
- expect( log_path ).to be === correct_path
218
- end
219
- end
220
-
221
- describe '#msi_install_script' do
222
- let( :log_path ) { '/log/msi_install_script' }
223
-
224
- context 'msi_params parameter' do
225
- it 'can take an empty hash' do
226
- expected_cmd = /^start \/w msiexec\.exe \/i ".*" \/qn \/L\*V #{log_path}\ .exit/m
227
- expect( subject.msi_install_script(msi_path, {}, log_path) ).to match(expected_cmd)
228
- end
229
-
230
- it 'uses a key-value pair correctly' do
231
- params = { 'tk1' => 'tv1' }
232
- expected_cmd = /^start \/w msiexec\.exe \/i ".*" \/qn \/L\*V #{log_path}\ tk1\=tv1/
233
- expect( subject.msi_install_script(msi_path, params, log_path) ).to match(expected_cmd)
234
- end
235
-
236
- it 'uses multiple key-value pairs correctly' do
237
- params = { 'tk1' => 'tv1', 'tk2' => 'tv2' }
238
- expected_cmd = /^start \/w msiexec\.exe \/i ".*" \/qn \/L\*V #{log_path}\ tk1\=tv1\ tk2\=tv2/
239
- expect( subject.msi_install_script(msi_path, params, log_path) ).to match(expected_cmd)
240
- end
241
- end
242
-
243
- context 'msi_path parameter' do
244
- it "will generate an appropriate command with a MSI file path using non-Windows slashes" do
245
- msi_path = 'c:/foo/puppet.msi'
246
- expected_cmd = /^start \/w msiexec\.exe \/i "c:\\foo\\puppet.msi" \/qn \/L\*V #{log_path}/
247
- expect( subject.msi_install_script(msi_path, {}, log_path) ).to match(expected_cmd)
248
- end
249
-
250
- it "will generate an appropriate command with a MSI http(s) url" do
251
- msi_url = "https://downloads.puppetlabs.com/puppet.msi"
252
- expected_cmd = /^start \/w msiexec\.exe \/i "https\:\/\/downloads\.puppetlabs\.com\/puppet\.msi" \/qn \/L\*V #{log_path}/
253
- expect( subject.msi_install_script(msi_url, {}, log_path) ).to match(expected_cmd)
254
- end
255
-
256
- it "will generate an appropriate command with a MSI file url" do
257
- msi_url = "file://c:\\foo\\puppet.msi"
258
- expected_cmd = /^start \/w msiexec\.exe \/i "file\:\/\/c:\\foo\\puppet\.msi" \/qn \/L\*V #{log_path}/
259
- expect( subject.msi_install_script(msi_url, {}, log_path) ).to match(expected_cmd)
260
- end
261
- end
262
- end
263
- end