beaker 3.20.0 → 3.21.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/beaker.gemspec +4 -5
- data/docs/how_to/hypervisors/README.md +7 -3
- data/docs/tutorials/quick_start_rake_tasks.md +1 -1
- data/lib/beaker/command.rb +1 -1
- data/lib/beaker/host.rb +6 -4
- data/lib/beaker/host/windows/exec.rb +10 -0
- data/lib/beaker/host/windows/pkg.rb +1 -29
- data/lib/beaker/host_prebuilt_steps.rb +1 -0
- data/lib/beaker/hypervisor.rb +26 -37
- data/lib/beaker/ssh_connection.rb +8 -15
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/dsl/install_utils/windows_utils_spec.rb +1 -1
- data/spec/beaker/host/windows/exec_spec.rb +18 -0
- data/spec/beaker/host/windows/pkg_spec.rb +0 -7
- data/spec/beaker/host_prebuilt_steps_spec.rb +1 -0
- data/spec/beaker/host_spec.rb +31 -40
- data/spec/beaker/hypervisor/hypervisor_spec.rb +20 -34
- data/spec/beaker/ssh_connection_spec.rb +18 -19
- data/spec/spec_helper.rb +0 -1
- metadata +23 -57
- data/docs/how_to/hypervisors/aws.md +0 -149
- data/docs/how_to/hypervisors/ec2.md +0 -81
- data/docs/how_to/hypervisors/google_compute_engine.md +0 -41
- data/docs/how_to/hypervisors/vagrant.md +0 -165
- data/docs/how_to/hypervisors/vagrant_hosts_file_examples.md +0 -60
- data/docs/how_to/hypervisors/vagrant_libvirt.md +0 -58
- data/docs/how_to/hypervisors/vmware_fusion.md +0 -36
- data/docs/how_to/hypervisors/vsphere.md +0 -54
- data/lib/beaker/hypervisor/aws_sdk.rb +0 -989
- data/lib/beaker/hypervisor/ec2_helper.rb +0 -41
- data/lib/beaker/hypervisor/fusion.rb +0 -65
- data/lib/beaker/hypervisor/google_compute.rb +0 -164
- data/lib/beaker/hypervisor/google_compute_helper.rb +0 -577
- data/lib/beaker/hypervisor/vagrant.rb +0 -286
- data/lib/beaker/hypervisor/vagrant_custom.rb +0 -11
- data/lib/beaker/hypervisor/vagrant_fusion.rb +0 -17
- data/lib/beaker/hypervisor/vagrant_libvirt.rb +0 -41
- data/lib/beaker/hypervisor/vagrant_parallels.rb +0 -18
- data/lib/beaker/hypervisor/vagrant_virtualbox.rb +0 -76
- data/lib/beaker/hypervisor/vagrant_workstation.rb +0 -13
- data/lib/beaker/hypervisor/vsphere.rb +0 -85
- data/lib/beaker/hypervisor/vsphere_helper.rb +0 -204
- data/spec/beaker/hypervisor/aws_sdk_spec.rb +0 -980
- data/spec/beaker/hypervisor/ec2_helper_spec.rb +0 -44
- data/spec/beaker/hypervisor/fusion_spec.rb +0 -41
- data/spec/beaker/hypervisor/vagrant_custom_spec.rb +0 -46
- data/spec/beaker/hypervisor/vagrant_fusion_spec.rb +0 -32
- data/spec/beaker/hypervisor/vagrant_libvirt_spec.rb +0 -61
- data/spec/beaker/hypervisor/vagrant_parallels_spec.rb +0 -44
- data/spec/beaker/hypervisor/vagrant_spec.rb +0 -479
- data/spec/beaker/hypervisor/vagrant_virtualbox_spec.rb +0 -44
- data/spec/beaker/hypervisor/vagrant_workstation_spec.rb +0 -32
- data/spec/beaker/hypervisor/vsphere_helper_spec.rb +0 -163
- data/spec/beaker/hypervisor/vsphere_spec.rb +0 -90
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MmE5NjhiZTUwNGM4MzE4Y2IxMjY3YjVlZWYwNzFlNTYwNDNlODUwMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWViNWY1ZjJiNWVmYWU3N2QzMGMyZmQzZWQ0OGQ5YzVhYWQ5YjAzNQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NzFiZmUzY2ZkNDU1MTkyOGU5OGJmZDE0OGI1ZjYwZmIwMDgxMzgyYjE5ZDky
|
10
|
+
NzBhZWQ0ZTNlZTMwMDZjODgyY2FmYTJhMWJiMDMxNWNiMjAxMTQ4NWExOWM1
|
11
|
+
OGY2MDlhYmZmMTFlZTk5ZjQyYmVlOGRhYTE0ZjM1OGM5MDZiN2E=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZGE5MGI0MWM5Y2U5MTYwMmQ2NGEzNmVkN2E3MTMzOGU0NDVjZGZkYTRlNWQ0
|
14
|
+
Y2FjMjMzY2I0OWQ5MmM5MjY3NGViZGIwNjg4ZTUyZDUzZDNmZDY1NzNkOTAz
|
15
|
+
NTJjNDRhMjVlOTU0YmNiYmEzYmI2MWEyZTI4ZmU1NmFiNWIyNmU=
|
data/beaker.gemspec
CHANGED
@@ -51,13 +51,12 @@ Gem::Specification.new do |s|
|
|
51
51
|
s.add_runtime_dependency 'beaker-puppet', '~> 0.0'
|
52
52
|
|
53
53
|
# Optional provisioner specific support
|
54
|
-
s.add_runtime_dependency 'fission', '~> 0.4'
|
55
|
-
s.add_runtime_dependency 'google-api-client', '~> 0.9'
|
56
|
-
s.add_runtime_dependency 'aws-sdk-v1', '~> 1.57'
|
57
54
|
s.add_runtime_dependency 'docker-api'
|
58
55
|
s.add_runtime_dependency 'fog', '~> 1.38'
|
56
|
+
s.add_runtime_dependency 'beaker-aws', '~> 0.1'
|
59
57
|
s.add_runtime_dependency 'beaker-vmpooler', '~> 0.1'
|
58
|
+
s.add_runtime_dependency 'beaker-google', '~> 0.1'
|
59
|
+
s.add_runtime_dependency 'beaker-vagrant', '~> 0.1'
|
60
|
+
s.add_runtime_dependency 'beaker-vmware', '~> 0.1'
|
60
61
|
|
61
|
-
# So fog doesn't always complain of unmet AWS dependencies
|
62
|
-
s.add_runtime_dependency 'unf', '~> 0.1'
|
63
62
|
end
|
@@ -41,9 +41,13 @@ In order to offset this, we've made a listing of gems and community-supported fo
|
|
41
41
|
|
42
42
|
Hypervisor gems made by puppet (pre-included in beaker 3.x):
|
43
43
|
|
44
|
-
| Hypervisor
|
45
|
-
|
46
|
-
| Vmpooler
|
44
|
+
| Hypervisor | Fork |
|
45
|
+
| :----------------------: | :---------------------------------------------------------: |
|
46
|
+
| Vmpooler | [beaker-vmpooler](https://github.com/puppetlabs/beaker-vmpooler) |
|
47
|
+
| AWS | [beaker-aws](https://github.com/puppetlabs/beaker-aws) |
|
48
|
+
| Google Compute | [beaker-google](https://github.com/puppetlabs/beaker-google) |
|
49
|
+
| Vagrant | [beaker-vagrant](https://github.com/puppetlabs/beaker-vagrant) |
|
50
|
+
| VMware/Vsphere | [beaker-vmware](https://github.com/puppetlabs/beaker-vmware) |
|
47
51
|
|
48
52
|
Hypervisor gems and beaker forks made by community:
|
49
53
|
|
@@ -8,7 +8,7 @@ We have developed some rake tasks to help new Beaker users get up and running qu
|
|
8
8
|
* You will need to have already completed the Beaker installation tutorial - [Beaker Installation](installation.md)
|
9
9
|
|
10
10
|
* Hypervisors are services that provision SUTs for Beaker. We have made two available in this quick start guide to allow you to get up
|
11
|
-
and running. See the docs on how to setup [Vmpooler](
|
11
|
+
and running. See the docs on how to setup [Vmpooler](https://github.com/puppetlabs/beaker-vmpooler/blob/master/vmpooler.md) and [Vagrant](https://github.com/puppetlabs/beaker-vagrant/blob/master/docs/vagrant.md).
|
12
12
|
|
13
13
|
|
14
14
|
## How to use them
|
data/lib/beaker/command.rb
CHANGED
@@ -78,7 +78,7 @@ module Beaker
|
|
78
78
|
end
|
79
79
|
|
80
80
|
# This will cause things like `puppet -t -v agent` which is maybe bad.
|
81
|
-
if host[:platform] =~ /
|
81
|
+
if host[:platform] =~ /cisco_ios_xr/
|
82
82
|
cmd_line_array = [prepend_commands, env_string, cmd, options_string, args_string]
|
83
83
|
else
|
84
84
|
cmd_line_array = [env_string, prepend_commands, cmd, options_string, args_string]
|
data/lib/beaker/host.rb
CHANGED
@@ -242,9 +242,11 @@ module Beaker
|
|
242
242
|
# Determine the ip address using logic specific to the hypervisor
|
243
243
|
def get_public_ip
|
244
244
|
case host_hash[:hypervisor]
|
245
|
-
when
|
246
|
-
if
|
247
|
-
|
245
|
+
when /^(ec2|openstack)$/
|
246
|
+
if self[:hypervisor] == 'ec2' && self[:instance]
|
247
|
+
return self[:instance].ip_address
|
248
|
+
elsif self[:hypervisor] == 'openstack' && self[:ip]
|
249
|
+
return self[:ip]
|
248
250
|
else
|
249
251
|
# In the case of using ec2 instances with the --no-provision flag, the ec2
|
250
252
|
# instance object does not exist and we should just use the curl endpoint
|
@@ -274,7 +276,7 @@ module Beaker
|
|
274
276
|
# create new connection object if necessary
|
275
277
|
@connection ||= SshConnection.connect( { :ip => self['ip'], :vmhostname => self['vmhostname'], :hostname => @name },
|
276
278
|
self['user'],
|
277
|
-
self['ssh'], { :logger => @logger } )
|
279
|
+
self['ssh'], { :logger => @logger, :ssh_connection_preference => self[:ssh_connection_preference] } )
|
278
280
|
# update connection information
|
279
281
|
if self['ip'] && (@connection.ip != self['ip'])
|
280
282
|
@connection.ip = self['ip']
|
@@ -108,4 +108,14 @@ module Windows::Exec
|
|
108
108
|
false
|
109
109
|
end
|
110
110
|
|
111
|
+
# Determine if cygwin is actually installed on the SUT. Differs from
|
112
|
+
# is_cygwin?, which is just a type check for a Windows::Host.
|
113
|
+
#
|
114
|
+
# @return [Boolean]
|
115
|
+
def cygwin_installed?
|
116
|
+
output = exec(Beaker::Command.new('cygcheck --check-setup cygwin'), :accept_all_exit_codes => true).stdout
|
117
|
+
return true if output.match(/cygwin/) && output.match(/OK/)
|
118
|
+
false
|
119
|
+
end
|
120
|
+
|
111
121
|
end
|
@@ -12,9 +12,6 @@ module Windows::Pkg
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def install_package(name, cmdline_args = '')
|
15
|
-
cygwin = ""
|
16
|
-
rootdir = ""
|
17
|
-
|
18
15
|
arch = identify_windows_architecture
|
19
16
|
|
20
17
|
if arch == '64'
|
@@ -25,15 +22,6 @@ module Windows::Pkg
|
|
25
22
|
cygwin = "setup-x86.exe"
|
26
23
|
end
|
27
24
|
|
28
|
-
if not check_for_command(cygwin)
|
29
|
-
command = "curl --retry 5 https://cygwin.com/#{cygwin} -o /cygdrive/c/Windows/System32/#{cygwin}"
|
30
|
-
begin
|
31
|
-
execute(command)
|
32
|
-
rescue Beaker::Host::CommandFailure
|
33
|
-
command.sub!('https', 'http')
|
34
|
-
execute(command)
|
35
|
-
end
|
36
|
-
end
|
37
25
|
execute("#{cygwin} -q -n -N -d -R #{rootdir} -s http://cygwin.osuosl.org -P #{name} #{cmdline_args}")
|
38
26
|
end
|
39
27
|
|
@@ -101,23 +89,7 @@ module Windows::Pkg
|
|
101
89
|
|
102
90
|
# @api private
|
103
91
|
def identify_windows_architecture
|
104
|
-
arch
|
105
|
-
execute("echo '' | wmic os get osarchitecture", :accept_all_exit_codes => true) do |result|
|
106
|
-
arch = if result.exit_code == 0
|
107
|
-
result.stdout =~ /64/ ? '64' : '32'
|
108
|
-
else
|
109
|
-
identify_windows_architecture_from_os_name_for_win2003
|
110
|
-
end
|
111
|
-
end
|
112
|
-
arch
|
92
|
+
platform.arch =~ /64/ ? '64' : '32'
|
113
93
|
end
|
114
94
|
|
115
|
-
# @api private
|
116
|
-
def identify_windows_architecture_from_os_name_for_win2003
|
117
|
-
arch = nil
|
118
|
-
execute("echo '' | wmic os get name | grep x64", :accept_all_exit_codes => true) do |result|
|
119
|
-
arch = result.exit_code == 0 ? '64' : '32'
|
120
|
-
end
|
121
|
-
arch
|
122
|
-
end
|
123
95
|
end
|
@@ -107,6 +107,7 @@ module Beaker
|
|
107
107
|
when host['platform'] =~ /cumulus/
|
108
108
|
check_and_install_packages_if_needed(host, CUMULUS_PACKAGES)
|
109
109
|
when (host['platform'] =~ /windows/ and host.is_cygwin?)
|
110
|
+
raise RuntimeError, "cygwin is not installed on #{host}" if !host.cygwin_installed?
|
110
111
|
check_and_install_packages_if_needed(host, WINDOWS_PACKAGES)
|
111
112
|
when (host['platform'] =~ /windows/ and not host.is_cygwin?)
|
112
113
|
check_and_install_packages_if_needed(host, PSWINDOWS_PACKAGES)
|
data/lib/beaker/hypervisor.rb
CHANGED
@@ -26,28 +26,6 @@ module Beaker
|
|
26
26
|
Beaker::Aixer
|
27
27
|
when /^solaris$/
|
28
28
|
Beaker::Solaris
|
29
|
-
when /^vsphere$/
|
30
|
-
Beaker::Vsphere
|
31
|
-
when /^fusion$/
|
32
|
-
Beaker::Fusion
|
33
|
-
when /^ec2$/
|
34
|
-
Beaker::AwsSdk
|
35
|
-
when /^vagrant$/
|
36
|
-
Beaker::Vagrant
|
37
|
-
when /^vagrant_custom$/
|
38
|
-
Beaker::VagrantCustom
|
39
|
-
when /^vagrant_libvirt$/
|
40
|
-
Beaker::VagrantLibvirt
|
41
|
-
when /^vagrant_virtualbox$/
|
42
|
-
Beaker::VagrantVirtualbox
|
43
|
-
when /^vagrant_fusion$/
|
44
|
-
Beaker::VagrantFusion
|
45
|
-
when /^vagrant_workstation$/
|
46
|
-
Beaker::VagrantWorkstation
|
47
|
-
when /^vagrant_parallels$/
|
48
|
-
Beaker::VagrantParallels
|
49
|
-
when /^google$/
|
50
|
-
Beaker::GoogleCompute
|
51
29
|
when /^docker$/
|
52
30
|
Beaker::Docker
|
53
31
|
when /^openstack$/
|
@@ -63,12 +41,12 @@ module Beaker
|
|
63
41
|
rescue LoadError
|
64
42
|
raise "Invalid hypervisor: #{type}"
|
65
43
|
end
|
66
|
-
Beaker.const_get(type.capitalize)
|
44
|
+
Beaker.const_get(type.split('_').collect(&:capitalize).join)
|
67
45
|
end
|
68
46
|
|
69
47
|
hypervisor = hyper_class.new(hosts_to_provision, options)
|
48
|
+
self.set_ssh_connection_preference(hosts_to_provision, hypervisor)
|
70
49
|
hypervisor.provision if options[:provision]
|
71
|
-
|
72
50
|
hypervisor
|
73
51
|
end
|
74
52
|
|
@@ -87,6 +65,29 @@ module Beaker
|
|
87
65
|
nil
|
88
66
|
end
|
89
67
|
|
68
|
+
DEFAULT_CONNECTION_PREFERENCE = ['ip', 'vmhostname', 'hostname']
|
69
|
+
#SSH connection method preference. Can be overwritten by hypervisor to change the order
|
70
|
+
def connection_preference
|
71
|
+
DEFAULT_CONNECTION_PREFERENCE
|
72
|
+
end
|
73
|
+
|
74
|
+
#Check if overriding method returns correct array with ip, vmhostname hostname as elements
|
75
|
+
def self.set_ssh_connection_preference(hosts_to_provision, hypervisor)
|
76
|
+
if hypervisor.connection_preference.sort == DEFAULT_CONNECTION_PREFERENCE.sort
|
77
|
+
hosts_to_provision.each{ |h| h[:ssh_connection_preference] = hypervisor.connection_preference}
|
78
|
+
else
|
79
|
+
raise ArgumentError, <<-HEREDOC
|
80
|
+
Hypervisor's overriding connection_pereference method is not matching the API.
|
81
|
+
|
82
|
+
Make sure your hypervisor's connection_preference returns an array
|
83
|
+
containing the following elements in any order you prefer:
|
84
|
+
"ip", "hostname", "vmhostname"
|
85
|
+
|
86
|
+
Please check hypervisor.rb file's "self.connection_preference" method for an example
|
87
|
+
HEREDOC
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
90
91
|
#Proxy package managers on tests hosts created by this hypervisor, runs before validation and configuration.
|
91
92
|
def proxy_package_manager
|
92
93
|
if @options[:package_proxy]
|
@@ -143,21 +144,9 @@ module Beaker
|
|
143
144
|
end
|
144
145
|
|
145
146
|
[
|
146
|
-
'vsphere_helper',
|
147
|
-
'vagrant',
|
148
|
-
'vagrant_custom',
|
149
|
-
'vagrant_virtualbox',
|
150
|
-
'vagrant_parallels',
|
151
|
-
'vagrant_libvirt',
|
152
|
-
'vagrant_fusion',
|
153
|
-
'vagrant_workstation',
|
154
|
-
'fusion',
|
155
|
-
'aws_sdk',
|
156
|
-
'vsphere',
|
157
147
|
'docker',
|
158
|
-
'google_compute',
|
159
148
|
'openstack',
|
160
149
|
'noop'
|
161
150
|
].each do |lib|
|
162
|
-
|
151
|
+
require "beaker/hypervisor/#{lib}"
|
163
152
|
end
|
@@ -6,7 +6,7 @@ module Beaker
|
|
6
6
|
class SshConnection
|
7
7
|
|
8
8
|
attr_accessor :logger
|
9
|
-
attr_accessor :ip, :vmhostname, :hostname
|
9
|
+
attr_accessor :ip, :vmhostname, :hostname, :ssh_connection_preference
|
10
10
|
|
11
11
|
RETRYABLE_EXCEPTIONS = [
|
12
12
|
SocketError,
|
@@ -33,6 +33,7 @@ module Beaker
|
|
33
33
|
@ssh_opts = ssh_opts
|
34
34
|
@logger = options[:logger]
|
35
35
|
@options = options
|
36
|
+
@ssh_connection_preference = @options[:ssh_connection_preference]
|
36
37
|
end
|
37
38
|
|
38
39
|
def self.connect name_hash, user = 'root', ssh_opts = {}, options = {}
|
@@ -66,21 +67,13 @@ module Beaker
|
|
66
67
|
# connect to the host
|
67
68
|
def connect
|
68
69
|
#try three ways to connect to host (vmhostname, ip, hostname)
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
# Try each method in turn until we succeed
|
71
|
+
methods = @ssh_connection_preference.dup
|
72
|
+
while (not @ssh) && (not methods.empty?) do
|
73
|
+
@ssh = connect_block(instance_variable_get("@#{methods.shift}"), @user, @ssh_opts)
|
73
74
|
end
|
74
|
-
|
75
|
-
@
|
76
|
-
methods << "ip (#{@ip})"
|
77
|
-
end
|
78
|
-
if @hostname && !@ssh
|
79
|
-
@ssh ||= connect_block(@hostname, @user, @ssh_opts)
|
80
|
-
methods << "hostname (#{@hostname})"
|
81
|
-
end
|
82
|
-
if not @ssh
|
83
|
-
@logger.error "Failed to connect to #{@hostname}, attempted #{methods.join(', ')}"
|
75
|
+
unless @ssh
|
76
|
+
@logger.error "Failed to connect to #{@hostname}, attempted #{@ssh_connection_preference.join(', ')}"
|
84
77
|
raise RuntimeError, "Cannot connect to #{@hostname}"
|
85
78
|
end
|
86
79
|
@ssh
|
data/lib/beaker/version.rb
CHANGED
@@ -15,7 +15,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
15
15
|
let( :batch_path ) { '/fake/batch/path' }
|
16
16
|
let(:msi_path) { 'c:\\foo\\puppet.msi' }
|
17
17
|
let(:winhost) { make_host( 'winhost',
|
18
|
-
|
18
|
+
{ :platform => Beaker::Platform.new('windows-2008r2-64'),
|
19
19
|
:pe_ver => '3.0',
|
20
20
|
:working_dir => '/tmp',
|
21
21
|
:is_cygwin => true} ) }
|
@@ -60,5 +60,23 @@ module Beaker
|
|
60
60
|
instance.reboot
|
61
61
|
end
|
62
62
|
end
|
63
|
+
|
64
|
+
describe '#cygwin_installed?' do
|
65
|
+
let (:response) { double( 'response' ) }
|
66
|
+
|
67
|
+
it 'uses cygcheck to see if cygwin is installed' do
|
68
|
+
expect( Beaker::Command ).to receive(:new).with("cygcheck --check-setup cygwin").and_return(:foo)
|
69
|
+
expect( instance ).to receive( :exec ).with(:foo, :accept_all_exit_codes => true).and_return(response)
|
70
|
+
expect( response ).to receive(:stdout).and_return('cygwin OK')
|
71
|
+
expect(instance.cygwin_installed?).to eq(true)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'returns false when unable to find matching text' do
|
75
|
+
expect( Beaker::Command ).to receive(:new).with("cygcheck --check-setup cygwin").and_return(:foo)
|
76
|
+
expect( instance ).to receive( :exec ).with(:foo, :accept_all_exit_codes => true).and_return(response)
|
77
|
+
expect( response ).to receive(:stdout).and_return('No matching text')
|
78
|
+
expect(instance.cygwin_installed?).to eq(false)
|
79
|
+
end
|
80
|
+
end
|
63
81
|
end
|
64
82
|
end
|
@@ -39,17 +39,10 @@ module Beaker
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'curls the SSL URL for cygwin\'s installer' do
|
42
|
-
expect( instance ).to receive( :execute ).with( /^curl.*https\:/ ).ordered
|
43
42
|
allow( instance ).to receive( :execute ).with( /^setup\-x86/ ).ordered
|
44
43
|
instance.install_package( 'curl' )
|
45
44
|
end
|
46
45
|
|
47
|
-
it 'falls back to the non-SSL URL if that one fails' do
|
48
|
-
allow( instance ).to receive( :execute ).with( /^curl.*https\:/ ).and_raise( Beaker::Host::CommandFailure ).ordered
|
49
|
-
expect( instance ).to receive( :execute ).with( /^curl.*http\:/ ).ordered
|
50
|
-
allow( instance ).to receive( :execute ).with( /^setup\-x86/ ).ordered
|
51
|
-
instance.install_package( 'curl' )
|
52
|
-
end
|
53
46
|
end
|
54
47
|
end
|
55
48
|
|
@@ -409,6 +409,7 @@ describe Beaker do
|
|
409
409
|
|
410
410
|
hosts.each do |host|
|
411
411
|
windows_pkgs.each do |pkg|
|
412
|
+
allow( host ).to receive( :cygwin_installed? ).and_return( true )
|
412
413
|
allow( host ).to receive( :is_cygwin? ).and_return( true )
|
413
414
|
expect( host ).to receive( :check_for_package ).with( pkg ).once.and_return( false )
|
414
415
|
expect( host ).to receive( :install_package ).with( pkg ).once
|
data/spec/beaker/host_spec.rb
CHANGED
@@ -122,62 +122,31 @@ module Beaker
|
|
122
122
|
let(:cygwin64) { 'setup-x86_64.exe' }
|
123
123
|
let(:package) { 'foo' }
|
124
124
|
|
125
|
-
before(:each) do
|
126
|
-
@platform = 'windows'
|
127
|
-
allow( host ).to receive(:check_for_package).and_return(true)
|
128
|
-
end
|
129
|
-
|
130
125
|
context "testing osarchitecture" do
|
131
126
|
|
132
|
-
before(:each) do
|
133
|
-
expect( host ).to receive(:execute).with(/wmic os get osarchitecture/, anything).and_yield(success_osarch_check)
|
134
|
-
end
|
135
|
-
|
136
|
-
context "32 bit" do
|
137
|
-
let(:success_osarch_check) { double(:success, :exit_code => 0, :stdout => '32-bit') }
|
138
|
-
|
139
|
-
it "uses 32 bit cygwin" do
|
140
|
-
expect( host ).to receive(:execute).with(/#{cygwin}.*#{package}/)
|
141
|
-
host.install_package(package)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
127
|
context "64 bit" do
|
146
|
-
|
128
|
+
before do
|
129
|
+
@platform = Beaker::Platform.new('windows-2008r2-64')
|
130
|
+
end
|
147
131
|
|
148
132
|
it "uses 64 bit cygwin" do
|
149
133
|
expect( host ).to receive(:execute).with(/#{cygwin64}.*#{package}/)
|
150
134
|
host.install_package(package)
|
151
135
|
end
|
152
136
|
end
|
153
|
-
end
|
154
|
-
|
155
|
-
context "testing os name" do
|
156
|
-
let(:failed_osarch_check) { double(:failed, :exit_code => 1) }
|
157
|
-
|
158
|
-
before(:each) do
|
159
|
-
expect( host ).to receive(:execute).with(/wmic os get osarchitecture/, anything).and_yield(failed_osarch_check)
|
160
|
-
expect( host ).to receive(:execute).with(/wmic os get name/, anything).and_yield(name_check)
|
161
|
-
end
|
162
137
|
|
163
138
|
context "32 bit" do
|
164
|
-
|
139
|
+
before do
|
140
|
+
@platform = Beaker::Platform.new('windows-10ent-32')
|
141
|
+
end
|
165
142
|
|
166
143
|
it "uses 32 bit cygwin" do
|
167
144
|
expect( host ).to receive(:execute).with(/#{cygwin}.*#{package}/)
|
168
145
|
host.install_package(package)
|
169
146
|
end
|
170
147
|
end
|
171
|
-
|
172
|
-
context "64 bit" do
|
173
|
-
let(:name_check) { double(:success, :exit_code => 0) }
|
174
|
-
|
175
|
-
it "uses 64 bit cygwin" do
|
176
|
-
expect( host ).to receive(:execute).with(/#{cygwin64}.*#{package}/)
|
177
|
-
host.install_package(package)
|
178
|
-
end
|
179
|
-
end
|
180
148
|
end
|
149
|
+
|
181
150
|
end
|
182
151
|
end
|
183
152
|
|
@@ -710,12 +679,17 @@ module Beaker
|
|
710
679
|
host.get_public_ip
|
711
680
|
end
|
712
681
|
|
682
|
+
it 'call upon openstack host to get the ip address' do
|
683
|
+
host.host_hash[:hypervisor] = 'openstack'
|
684
|
+
expect(host.get_public_ip).to be(host.host_hash[:ip])
|
685
|
+
end
|
686
|
+
|
713
687
|
it 'returns nil when no matching hypervisor is found' do
|
714
688
|
host.host_hash[:hypervisor] = 'vmpooler'
|
715
689
|
expect(host.get_public_ip).to be(nil)
|
716
690
|
end
|
717
691
|
|
718
|
-
it 'calls execute with curl if the host_hash[:instance] is not defined and the host is not an instance of Windows::Host' do
|
692
|
+
it 'calls execute with curl if the host_hash[:instance] is not defined for ec2 and the host is not an instance of Windows::Host' do
|
719
693
|
host.host_hash[:hypervisor] = 'ec2'
|
720
694
|
host.host_hash[:instance] = nil
|
721
695
|
expect(host).to receive(:instance_of?).with(Windows::Host).and_return(false)
|
@@ -723,13 +697,30 @@ module Beaker
|
|
723
697
|
host.get_public_ip
|
724
698
|
end
|
725
699
|
|
726
|
-
it 'calls execute with wget if the host_hash[:instance] is not defined and the host is an instance of Windows::Host' do
|
700
|
+
it 'calls execute with wget if the host_hash[:instance] is not defined for ec2 and the host is an instance of Windows::Host' do
|
727
701
|
host.host_hash[:hypervisor] = 'ec2'
|
728
702
|
host.host_hash[:instance] = nil
|
729
703
|
expect(host).to receive(:instance_of?).with(Windows::Host).and_return(true)
|
730
704
|
expect(host).to receive(:execute).with("wget http://169.254.169.254/latest/meta-data/public-ipv4").and_return('127.0.0.1')
|
731
705
|
host.get_public_ip
|
732
706
|
end
|
707
|
+
|
708
|
+
it 'calls execute with curl if the host_hash[:ip] is not defined for openstack and the host is not an instance of Windows::Host' do
|
709
|
+
host.host_hash[:hypervisor] = 'openstack'
|
710
|
+
host.host_hash[:ip] = nil
|
711
|
+
expect(host).to receive(:instance_of?).with(Windows::Host).and_return(false)
|
712
|
+
expect(host).to receive(:execute).with("curl http://169.254.169.254/latest/meta-data/public-ipv4").and_return('127.0.0.1')
|
713
|
+
host.get_public_ip
|
714
|
+
end
|
715
|
+
|
716
|
+
it 'calls execute with wget if the host_hash[:ip] is not defined for openstack and the host is an instance of Windows::Host' do
|
717
|
+
host.host_hash[:hypervisor] = 'openstack'
|
718
|
+
host.host_hash[:ip] = nil
|
719
|
+
expect(host).to receive(:instance_of?).with(Windows::Host).and_return(true)
|
720
|
+
expect(host).to receive(:execute).with("wget http://169.254.169.254/latest/meta-data/public-ipv4").and_return('127.0.0.1')
|
721
|
+
host.get_public_ip
|
722
|
+
end
|
723
|
+
|
733
724
|
end
|
734
725
|
|
735
726
|
describe '#ip' do
|