beaker 3.20.0 → 3.21.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|