beaker 1.12.1 → 1.12.2
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 +7 -15
- data/beaker.gemspec +2 -1
- data/lib/beaker.rb +7 -0
- data/lib/beaker/answers.rb +2 -6
- data/lib/beaker/dsl.rb +2 -6
- data/lib/beaker/dsl/helpers.rb +43 -3
- data/lib/beaker/dsl/install_utils.rb +0 -34
- data/lib/beaker/dsl/roles.rb +2 -14
- data/lib/beaker/dsl/wrappers.rb +0 -12
- data/lib/beaker/host.rb +5 -9
- data/lib/beaker/host/aix.rb +6 -5
- data/lib/beaker/host/unix.rb +6 -9
- data/lib/beaker/host/windows.rb +6 -9
- data/lib/beaker/host_prebuilt_steps.rb +27 -6
- data/lib/beaker/hypervisor.rb +15 -14
- data/lib/beaker/hypervisor/google_compute.rb +1 -0
- data/lib/beaker/hypervisor/vsphere_helper.rb +1 -5
- data/lib/beaker/network_manager.rb +12 -6
- data/lib/beaker/options/command_line_parser.rb +3 -0
- data/lib/beaker/options/parser.rb +42 -0
- data/lib/beaker/options/presets.rb +3 -1
- data/lib/beaker/shared.rb +2 -6
- data/lib/beaker/test_case.rb +2 -6
- data/lib/beaker/test_suite.rb +2 -6
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/dsl/helpers_spec.rb +28 -1
- data/spec/beaker/dsl/install_utils_spec.rb +6 -28
- data/spec/beaker/dsl/roles_spec.rb +10 -25
- data/spec/beaker/dsl/wrappers_spec.rb +0 -8
- data/spec/beaker/host_prebuilt_steps_spec.rb +26 -0
- data/spec/beaker/options/command_line_parser_spec.rb +2 -2
- data/spec/beaker/options/parser_spec.rb +35 -1
- metadata +154 -259
- data/spec/beaker/hypervisor/google_compute.rb +0 -23
@@ -119,6 +119,44 @@ module Beaker
|
|
119
119
|
git_opts
|
120
120
|
end
|
121
121
|
|
122
|
+
#Add the 'default' role to the host determined to be the default. If a host already has the role default then
|
123
|
+
#do nothing. If more than a single host has the role 'default', raise error.
|
124
|
+
#Default host determined to be 1) the only host in a single host configuration, 2) the host with the role 'master'
|
125
|
+
#defined.
|
126
|
+
#@param [Hash] hosts A hash of hosts, each identified by a String name. Each named host will have an Array of roles
|
127
|
+
def set_default_host!(hosts)
|
128
|
+
default = []
|
129
|
+
master = []
|
130
|
+
default_host_name = nil
|
131
|
+
|
132
|
+
#look through the hosts and find any hosts with role 'default' and any hosts with role 'master'
|
133
|
+
hosts.each_key do |name|
|
134
|
+
host = hosts[name]
|
135
|
+
if host[:roles].include?('default')
|
136
|
+
default << name
|
137
|
+
elsif host[:roles].include?('master')
|
138
|
+
master << name
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
if not default.empty?
|
143
|
+
#we already have a default set, do nothing
|
144
|
+
if default.length > 1
|
145
|
+
parser_error "Only one host may have the role 'default', default roles assigned to #{default}"
|
146
|
+
end
|
147
|
+
else
|
148
|
+
#no default set, let's make one
|
149
|
+
if not master.empty? and master.length == 1
|
150
|
+
default_host_name = master[0]
|
151
|
+
elsif hosts.length == 1
|
152
|
+
default_host_name = hosts[0].keys[0]
|
153
|
+
end
|
154
|
+
if default_host_name
|
155
|
+
hosts[default_host_name][:roles] << 'default'
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
122
160
|
#Constructor for Parser
|
123
161
|
#
|
124
162
|
def initialize
|
@@ -205,6 +243,7 @@ module Beaker
|
|
205
243
|
# - that one and only one master is defined per set of hosts
|
206
244
|
# - that solaris/windows/aix hosts are agent only for PE tests OR
|
207
245
|
# - that windows/aix host are agent only if type is not 'pe'
|
246
|
+
# - sets the default host based upon machine definitions
|
208
247
|
#
|
209
248
|
#@raise [ArgumentError] Raise if argument/options values are invalid
|
210
249
|
def normalize_args
|
@@ -303,6 +342,9 @@ module Beaker
|
|
303
342
|
end
|
304
343
|
end
|
305
344
|
|
345
|
+
#set the default role
|
346
|
+
set_default_host!(@options[:HOSTS])
|
347
|
+
|
306
348
|
end
|
307
349
|
|
308
350
|
private
|
@@ -42,7 +42,8 @@ module Beaker
|
|
42
42
|
ENV['q_verify_packages'] || 'y',
|
43
43
|
:q_puppetdb_password =>
|
44
44
|
ENV['q_puppetdb_password'] || '~!@#$%^*-/ aZ',
|
45
|
-
}
|
45
|
+
},
|
46
|
+
:package_proxy => ENV['BEAKER_PACKAGE_PROXY']
|
46
47
|
}.delete_if {|key, value| value.nil? or value.empty? })
|
47
48
|
end
|
48
49
|
|
@@ -73,6 +74,7 @@ module Beaker
|
|
73
74
|
:fail_mode => 'slow',
|
74
75
|
:timesync => false,
|
75
76
|
:repo_proxy => false,
|
77
|
+
:package_proxy => false,
|
76
78
|
:add_el_extras => false,
|
77
79
|
:add_master_entry => false,
|
78
80
|
:consoleport => 443,
|
data/lib/beaker/shared.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
|
-
[ 'repetition', 'error_handler', 'host_role_parser', 'timed' ].each do |
|
2
|
-
|
3
|
-
require "beaker/shared/#{file}"
|
4
|
-
rescue LoadError
|
5
|
-
require File.expand_path(File.join(File.dirname(__FILE__), 'shared', file))
|
6
|
-
end
|
1
|
+
[ 'repetition', 'error_handler', 'host_role_parser', 'timed' ].each do |lib|
|
2
|
+
require "beaker/shared/#{lib}"
|
7
3
|
end
|
8
4
|
module Beaker
|
9
5
|
module Shared
|
data/lib/beaker/test_case.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "beaker/#{lib}"
|
4
|
-
rescue LoadError
|
5
|
-
require File.expand_path(File.join(File.dirname(__FILE__), lib))
|
6
|
-
end
|
1
|
+
[ 'host', 'answers', 'dsl' ].each do |lib|
|
2
|
+
require "beaker/#{lib}"
|
7
3
|
end
|
8
4
|
|
9
5
|
require 'tempfile'
|
data/lib/beaker/test_suite.rb
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
require 'rexml/document'
|
3
3
|
require 'fileutils'
|
4
|
-
|
5
|
-
|
6
|
-
require "beaker/#{lib}"
|
7
|
-
rescue LoadError
|
8
|
-
require File.expand_path(File.join(File.dirname(__FILE__), lib))
|
9
|
-
end
|
4
|
+
[ 'test_case', 'logger' ].each do |lib|
|
5
|
+
require "beaker/#{lib}"
|
10
6
|
end
|
11
7
|
|
12
8
|
module Beaker
|
data/lib/beaker/version.rb
CHANGED
@@ -16,7 +16,7 @@ describe ClassMixedWithDSLHelpers do
|
|
16
16
|
let( :host ) { double.as_null_object }
|
17
17
|
let( :result ) { Beaker::Result.new( host, command ) }
|
18
18
|
|
19
|
-
let( :master ) { make_host( 'master', :roles => %w( master agent ) ) }
|
19
|
+
let( :master ) { make_host( 'master', :roles => %w( master agent default) ) }
|
20
20
|
let( :agent ) { make_host( 'agent', :roles => %w( agent ) ) }
|
21
21
|
let( :custom ) { make_host( 'custom', :roles => %w( custom agent ) ) }
|
22
22
|
let( :dash ) { make_host( 'console', :roles => %w( dashboard agent ) ) }
|
@@ -557,6 +557,33 @@ describe ClassMixedWithDSLHelpers do
|
|
557
557
|
end
|
558
558
|
end
|
559
559
|
|
560
|
+
describe 'version_is_less' do
|
561
|
+
|
562
|
+
it 'reports 3.0.0-160-gac44cfb is not less than 3.0.0' do
|
563
|
+
expect( subject.version_is_less( '3.0.0-160-gac44cfb', '3.0.0' ) ).to be === false
|
564
|
+
end
|
565
|
+
|
566
|
+
it 'reports 3.0.0-160-gac44cfb is not less than 2.8.2' do
|
567
|
+
expect( subject.version_is_less( '3.0.0-160-gac44cfb', '2.8.2' ) ).to be === false
|
568
|
+
end
|
569
|
+
|
570
|
+
it 'reports 3.0.0 is less than 3.0.0-160-gac44cfb' do
|
571
|
+
expect( subject.version_is_less( '3.0.0', '3.0.0-160-gac44cfb' ) ).to be === true
|
572
|
+
end
|
573
|
+
|
574
|
+
it 'reports 2.8.2 is less than 3.0.0-160-gac44cfb' do
|
575
|
+
expect( subject.version_is_less( '2.8.2', '3.0.0-160-gac44cfb' ) ).to be === true
|
576
|
+
end
|
577
|
+
|
578
|
+
it 'reports 2.8 is less than 3.0.0-160-gac44cfb' do
|
579
|
+
expect( subject.version_is_less( '2.8', '3.0.0-160-gac44cfb' ) ).to be === true
|
580
|
+
end
|
581
|
+
|
582
|
+
it 'reports 2.8 is less than 2.9' do
|
583
|
+
expect( subject.version_is_less( '2.8', '2.9' ) ).to be === true
|
584
|
+
end
|
585
|
+
end
|
586
|
+
|
560
587
|
describe "#stop_agent_on" do
|
561
588
|
let( :result_fail ) { Beaker::Result.new( [], "" ) }
|
562
589
|
let( :result_pass ) { Beaker::Result.new( [], "" ) }
|
@@ -101,33 +101,6 @@ describe ClassMixedWithDSLInstallUtils do
|
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
104
|
-
describe 'version_is_less' do
|
105
|
-
|
106
|
-
it 'reports 3.0.0-160-gac44cfb is not less than 3.0.0' do
|
107
|
-
expect( subject.version_is_less( '3.0.0-160-gac44cfb', '3.0.0' ) ).to be === false
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'reports 3.0.0-160-gac44cfb is not less than 2.8.2' do
|
111
|
-
expect( subject.version_is_less( '3.0.0-160-gac44cfb', '2.8.2' ) ).to be === false
|
112
|
-
end
|
113
|
-
|
114
|
-
it 'reports 3.0.0 is less than 3.0.0-160-gac44cfb' do
|
115
|
-
expect( subject.version_is_less( '3.0.0', '3.0.0-160-gac44cfb' ) ).to be === true
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'reports 2.8.2 is less than 3.0.0-160-gac44cfb' do
|
119
|
-
expect( subject.version_is_less( '2.8.2', '3.0.0-160-gac44cfb' ) ).to be === true
|
120
|
-
end
|
121
|
-
|
122
|
-
it 'reports 2.8 is less than 3.0.0-160-gac44cfb' do
|
123
|
-
expect( subject.version_is_less( '2.8', '3.0.0-160-gac44cfb' ) ).to be === true
|
124
|
-
end
|
125
|
-
|
126
|
-
it 'reports 2.8 is less than 2.9' do
|
127
|
-
expect( subject.version_is_less( '2.8', '2.9' ) ).to be === true
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
104
|
describe 'installer_cmd' do
|
132
105
|
|
133
106
|
it 'generates a windows PE install command for a windows host' do
|
@@ -243,18 +216,20 @@ describe ClassMixedWithDSLInstallUtils do
|
|
243
216
|
|
244
217
|
subject.should_not_receive(:scp_to)
|
245
218
|
subject.should_not_receive(:on)
|
219
|
+
subject.stub(:version_is_less).with('3.2.0', '3.2.0').and_return(false)
|
246
220
|
subject.fetch_puppet( [unixhost], {} )
|
247
221
|
end
|
248
222
|
end
|
249
223
|
|
250
224
|
describe 'do_install' do
|
251
|
-
it 'can
|
225
|
+
it 'can perform a simple installation' do
|
252
226
|
subject.stub( :on ).and_return( Beaker::Result.new( {}, '' ) )
|
253
227
|
subject.stub( :fetch_puppet ).and_return( true )
|
254
228
|
subject.stub( :create_remote_file ).and_return( true )
|
255
229
|
subject.stub( :sign_certificate_for ).and_return( true )
|
256
230
|
subject.stub( :stop_agent_on ).and_return( true )
|
257
231
|
subject.stub( :sleep_until_puppetdb_started ).and_return( true )
|
232
|
+
subject.stub( :version_is_less ).with('3.0', '3.0').and_return( false )
|
258
233
|
subject.stub( :wait_for_host_in_dashboard ).and_return( true )
|
259
234
|
subject.stub( :puppet_agent ).and_return do |arg|
|
260
235
|
"puppet agent #{arg}"
|
@@ -402,6 +377,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
402
377
|
the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
|
403
378
|
subject.stub( :hosts ).and_return( the_hosts )
|
404
379
|
subject.stub( :options ).and_return( {} )
|
380
|
+
subject.stub( :version_is_less ).with('2.8', '3.0').and_return( true )
|
405
381
|
version = version_win = '2.8'
|
406
382
|
path = "/path/to/upgradepkg"
|
407
383
|
subject.should_receive( :do_install ).with( the_hosts, { :type => :upgrade } )
|
@@ -417,6 +393,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
417
393
|
the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
|
418
394
|
subject.stub( :hosts ).and_return( the_hosts )
|
419
395
|
subject.stub( :options ).and_return( {} )
|
396
|
+
subject.stub( :version_is_less ).with('3.1', '3.0').and_return( false )
|
420
397
|
version = version_win = '3.1'
|
421
398
|
path = "/path/to/upgradepkg"
|
422
399
|
subject.should_receive( :do_install ).with( the_hosts, { :type => :upgrade } )
|
@@ -432,6 +409,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
432
409
|
the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
|
433
410
|
subject.stub( :hosts ).and_return( the_hosts )
|
434
411
|
subject.stub( :options ).and_return( {} )
|
412
|
+
subject.stub( :version_is_less ).with('2.8', '3.0').and_return( true )
|
435
413
|
version = version_win = '2.8'
|
436
414
|
path = "/path/to/upgradepkg"
|
437
415
|
subject.should_receive( :do_install ).with( the_hosts, { :type => :upgrade } )
|
@@ -39,19 +39,9 @@ describe ClassMixedWithDSLRoles do
|
|
39
39
|
end
|
40
40
|
it 'raises an error if there is more than one master' do
|
41
41
|
@hosts = [ master, monolith ]
|
42
|
-
subject.should_receive( :hosts ).exactly(
|
42
|
+
subject.should_receive( :hosts ).exactly( 1 ).times.and_return( hosts )
|
43
43
|
expect { subject.master }.to raise_error Beaker::DSL::FailTest
|
44
44
|
end
|
45
|
-
it 'and raises an error if there is no master and no default' do
|
46
|
-
@hosts = [ agent1, agent2, custom ]
|
47
|
-
subject.should_receive( :hosts ).exactly( 4 ).times.and_return( hosts )
|
48
|
-
expect { subject.master }.to raise_error Beaker::DSL::FailTest
|
49
|
-
end
|
50
|
-
it 'returns the default when there is no master' do
|
51
|
-
@hosts = [ agent1 ]
|
52
|
-
subject.should_receive( :hosts ).exactly( 3 ).times.and_return( hosts )
|
53
|
-
expect( subject.master ).to be == agent1
|
54
|
-
end
|
55
45
|
end
|
56
46
|
describe '#dashboard' do
|
57
47
|
it 'returns the dashboard if there is one' do
|
@@ -90,23 +80,18 @@ describe ClassMixedWithDSLRoles do
|
|
90
80
|
describe '#default' do
|
91
81
|
it 'returns the default host when one is specified' do
|
92
82
|
@hosts = [ db, agent1, agent2, default, master]
|
93
|
-
subject.should_receive( :hosts ).exactly(
|
83
|
+
subject.should_receive( :hosts ).exactly( 1 ).times.and_return( hosts )
|
94
84
|
expect( subject.default ).to be == default
|
95
85
|
end
|
96
|
-
it '
|
97
|
-
@hosts = [ db,
|
98
|
-
subject.should_receive( :hosts ).
|
99
|
-
expect
|
100
|
-
end
|
101
|
-
it 'returns the only host when only a single host is defined' do
|
102
|
-
@hosts = [ agent1 ]
|
103
|
-
subject.should_receive( :hosts ).exactly( 2 ).times.and_return( hosts )
|
104
|
-
expect( subject.default ).to be == agent1
|
86
|
+
it 'raises an error if there is more than one default' do
|
87
|
+
@hosts = [ db, monolith, default, default ]
|
88
|
+
subject.should_receive( :hosts ).and_return( hosts )
|
89
|
+
expect { subject.database }.to raise_error Beaker::DSL::FailTest
|
105
90
|
end
|
106
|
-
it 'raises an error
|
107
|
-
@hosts = [ agent1, agent2 ]
|
108
|
-
subject.should_receive( :hosts ).
|
109
|
-
expect{ subject.
|
91
|
+
it 'and raises an error if there is no default' do
|
92
|
+
@hosts = [ agent1, agent2, custom ]
|
93
|
+
subject.should_receive( :hosts ).and_return( hosts )
|
94
|
+
expect { subject.database }.to raise_error Beaker::DSL::FailTest
|
110
95
|
end
|
111
96
|
end
|
112
97
|
end
|
@@ -23,14 +23,6 @@ describe ClassMixedWithDSLWrappers do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
describe '#razor' do
|
27
|
-
it 'should split out the options and pass "razor" as first arg to Command' do
|
28
|
-
Beaker::Command.should_receive( :new ).
|
29
|
-
with('razor', [ '-p' ], opts)
|
30
|
-
subject.razor( '-p' )
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
26
|
describe '#puppet' do
|
35
27
|
it 'should split out the options and pass "puppet <blank>" to Command' do
|
36
28
|
merged_opts = {}
|
@@ -418,4 +418,30 @@ describe Beaker do
|
|
418
418
|
|
419
419
|
end
|
420
420
|
|
421
|
+
context "package_proxy" do
|
422
|
+
|
423
|
+
subject { dummy_class.new }
|
424
|
+
proxyurl = "http://192.168.2.100:3128"
|
425
|
+
|
426
|
+
it "can set proxy config on a debian/ubuntu host" do
|
427
|
+
host = make_host('name', { :platform => 'ubuntu' } )
|
428
|
+
|
429
|
+
Beaker::Command.should_receive( :new ).with( "echo 'Acquire::http::Proxy \"#{proxyurl}/\";' >> /etc/apt/apt.conf.d/10proxy" ).once
|
430
|
+
host.should_receive( :exec ).once
|
431
|
+
|
432
|
+
subject.package_proxy(host, options.merge( {'package_proxy' => proxyurl}) )
|
433
|
+
end
|
434
|
+
|
435
|
+
it "can set proxy config on a redhat/centos host" do
|
436
|
+
host = make_host('name', { :platform => 'centos' } )
|
437
|
+
|
438
|
+
Beaker::Command.should_receive( :new ).with( "echo 'proxy=#{proxyurl}/' >> /etc/yum.conf" ).once
|
439
|
+
host.should_receive( :exec ).once
|
440
|
+
|
441
|
+
subject.package_proxy(host, options.merge( {'package_proxy' => proxyurl}) )
|
442
|
+
|
443
|
+
end
|
444
|
+
|
445
|
+
end
|
446
|
+
|
421
447
|
end
|
@@ -6,14 +6,14 @@ module Beaker
|
|
6
6
|
|
7
7
|
let(:parser) {Beaker::Options::CommandLineParser.new}
|
8
8
|
let(:test_opts) {["-h", "vcloud.cfg", "--debug", "--tests", "test.rb", "--help"]}
|
9
|
-
let(:full_opts) {["--hosts", "host.cfg", "--options", "opts_file", "--type", "pe", "--helper", "path_to_helper", "--load-path", "load_path", "--tests", "test1.rb,test2.rb,test3.rb", "--pre-suite", "pre_suite.rb", "--post-suite", "post_suite.rb", "--no-provision", "--preserve-hosts", "always", "--root-keys", "--keyfile", "../.ssh/id_rsa", "--install", "gitrepopath", "-m", "module", "-q", "--no-xml", "--dry-run", "--no-ntp", "--repo-proxy", "--add-el-extras", "--config", "anotherfile.cfg", "--fail-mode", "fast", "--no-color", "--version", "--log-level", "info"]}
|
9
|
+
let(:full_opts) {["--hosts", "host.cfg", "--options", "opts_file", "--type", "pe", "--helper", "path_to_helper", "--load-path", "load_path", "--tests", "test1.rb,test2.rb,test3.rb", "--pre-suite", "pre_suite.rb", "--post-suite", "post_suite.rb", "--no-provision", "--preserve-hosts", "always", "--root-keys", "--keyfile", "../.ssh/id_rsa", "--install", "gitrepopath", "-m", "module", "-q", "--no-xml", "--dry-run", "--no-ntp", "--repo-proxy", "--add-el-extras", "--config", "anotherfile.cfg", "--fail-mode", "fast", "--no-color", "--version", "--log-level", "info", "--package-proxy", "http://192.168.100.1:3128"]}
|
10
10
|
|
11
11
|
it "can correctly read command line input" do
|
12
12
|
expect(parser.parse(test_opts)).to be === {:hosts_file=>"vcloud.cfg", :log_level=>"debug", :tests=>"test.rb", :help=>true}
|
13
13
|
end
|
14
14
|
|
15
15
|
it "supports all our command line options" do
|
16
|
-
expect(parser.parse(full_opts)).to be === {:hosts_file=>"anotherfile.cfg", :options_file=>"opts_file", :type=>"pe", :helper=>"path_to_helper", :load_path=>"load_path", :tests=>"test1.rb,test2.rb,test3.rb", :pre_suite=>"pre_suite.rb", :post_suite=>"post_suite.rb", :provision=>false, :preserve_hosts=>"always", :root_keys=>true, :keyfile=>"../.ssh/id_rsa", :install=>"gitrepopath", :modules=>"module", :quiet=>true, :xml=>false, :dry_run=>true, :timesync=>false, :repo_proxy=>true, :add_el_extras=>true, :fail_mode=>"fast", :color=>false, :version=>true, :log_level=>"info"}
|
16
|
+
expect(parser.parse(full_opts)).to be === {:hosts_file=>"anotherfile.cfg", :options_file=>"opts_file", :type=>"pe", :helper=>"path_to_helper", :load_path=>"load_path", :tests=>"test1.rb,test2.rb,test3.rb", :pre_suite=>"pre_suite.rb", :post_suite=>"post_suite.rb", :provision=>false, :preserve_hosts=>"always", :root_keys=>true, :keyfile=>"../.ssh/id_rsa", :install=>"gitrepopath", :modules=>"module", :quiet=>true, :xml=>false, :dry_run=>true, :timesync=>false, :repo_proxy=>true, :add_el_extras=>true, :fail_mode=>"fast", :color=>false, :version=>true, :log_level=>"info", :package_proxy => "http://192.168.100.1:3128"}
|
17
17
|
end
|
18
18
|
|
19
19
|
it "can produce a usage description" do
|
@@ -163,7 +163,7 @@ module Beaker
|
|
163
163
|
end
|
164
164
|
|
165
165
|
it "ensures that fail-mode is one of fast/slow" do
|
166
|
-
args = ["-h", hosts_path, "--log-level", "debug", "--fail-mode", "nope"]
|
166
|
+
args = ["-h", hosts_path, "--log-level", "debug", "--fail-mode", "nope"]
|
167
167
|
expect{parser.parse_args(args)}.to raise_error(ArgumentError)
|
168
168
|
end
|
169
169
|
|
@@ -173,6 +173,40 @@ module Beaker
|
|
173
173
|
end
|
174
174
|
end
|
175
175
|
|
176
|
+
context "set_default_host!" do
|
177
|
+
|
178
|
+
let(:roles) { @roles || [ [ "master", "agent", "database"], ["agent"]] }
|
179
|
+
let(:node1) { { :node1 => { :roles => roles[0]}} }
|
180
|
+
let(:node2) { { :node2 => { :roles => roles[1]}} }
|
181
|
+
let(:hosts) { node1.merge(node2) }
|
182
|
+
|
183
|
+
it "does nothing if the default host is already set" do
|
184
|
+
@roles = [ ["master"], ["agent", "default"] ]
|
185
|
+
parser.set_default_host!(hosts)
|
186
|
+
expect( hosts[:node1][:roles].include?('default') ).to be === false
|
187
|
+
expect( hosts[:node2][:roles].include?('default') ).to be === true
|
188
|
+
end
|
189
|
+
|
190
|
+
it "makes the master default" do
|
191
|
+
@roles = [ ["master"], ["agent"] ]
|
192
|
+
parser.set_default_host!(hosts)
|
193
|
+
expect( hosts[:node1][:roles].include?('default') ).to be === true
|
194
|
+
expect( hosts[:node2][:roles].include?('default') ).to be === false
|
195
|
+
end
|
196
|
+
|
197
|
+
it "makes a single node default" do
|
198
|
+
@roles = [ ["master", "database", "dashboard", "agent"] ]
|
199
|
+
parser.set_default_host!(node1)
|
200
|
+
expect( hosts[:node1][:roles].include?('default') ).to be === true
|
201
|
+
end
|
202
|
+
|
203
|
+
it "raises an error if two nodes are defined as default" do
|
204
|
+
@roles = [ ["master", "default"], ["default"] ]
|
205
|
+
expect{ parser.set_default_host!(hosts) }.to raise_error(ArgumentError)
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
|
176
210
|
describe "normalize_args" do
|
177
211
|
let(:hosts) do
|
178
212
|
{
|
metadata
CHANGED
@@ -1,317 +1,215 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.12.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.12.2
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- Puppetlabs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
|
12
|
+
date: 2014-06-12 00:00:00 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
14
15
|
name: minitest
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '4.0'
|
20
|
-
type: :development
|
21
16
|
prerelease: false
|
22
|
-
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '4.0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rspec
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
17
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
31
19
|
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version:
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: "4.0"
|
34
22
|
type: :development
|
23
|
+
version_requirements: *id001
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: rspec
|
35
26
|
prerelease: false
|
36
|
-
|
37
|
-
requirements:
|
27
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
38
29
|
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
30
|
+
- !ruby/object:Gem::Version
|
40
31
|
version: 2.14.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: fakefs
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0.4'
|
48
32
|
type: :development
|
33
|
+
version_requirements: *id002
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: fakefs
|
49
36
|
prerelease: false
|
50
|
-
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version:
|
55
|
-
|
37
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: "0.4"
|
42
|
+
type: :development
|
43
|
+
version_requirements: *id003
|
44
|
+
- !ruby/object:Gem::Dependency
|
56
45
|
name: rake
|
57
|
-
|
58
|
-
|
46
|
+
prerelease: false
|
47
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
59
49
|
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
50
|
+
- !ruby/object:Gem::Version
|
61
51
|
version: 10.1.0
|
62
52
|
type: :development
|
53
|
+
version_requirements: *id004
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: pry
|
63
56
|
prerelease: false
|
64
|
-
|
65
|
-
requirements:
|
57
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
66
59
|
- - ~>
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version:
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: simplecov
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ! '>='
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.9.12.6
|
76
62
|
type: :development
|
77
|
-
|
78
|
-
|
79
|
-
requirements:
|
80
|
-
- - ! '>='
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
63
|
+
version_requirements: *id005
|
64
|
+
- !ruby/object:Gem::Dependency
|
84
65
|
name: yard
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ! '>='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
66
|
prerelease: false
|
92
|
-
|
93
|
-
requirements:
|
94
|
-
-
|
95
|
-
-
|
96
|
-
|
97
|
-
|
98
|
-
name: markdown
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ! '>='
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
67
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- &id007
|
70
|
+
- ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: "0"
|
104
73
|
type: :development
|
105
|
-
|
106
|
-
|
107
|
-
requirements:
|
108
|
-
- - ! '>='
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
74
|
+
version_requirements: *id006
|
75
|
+
- !ruby/object:Gem::Dependency
|
112
76
|
name: thin
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ! '>='
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
77
|
prerelease: false
|
120
|
-
|
121
|
-
requirements:
|
122
|
-
-
|
123
|
-
|
124
|
-
|
125
|
-
- !ruby/object:Gem::Dependency
|
78
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- *id007
|
81
|
+
type: :development
|
82
|
+
version_requirements: *id008
|
83
|
+
- !ruby/object:Gem::Dependency
|
126
84
|
name: json
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ~>
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '1.8'
|
132
|
-
type: :runtime
|
133
85
|
prerelease: false
|
134
|
-
|
135
|
-
requirements:
|
86
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
136
88
|
- - ~>
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version:
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: net-ssh
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ~>
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '2.6'
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: "1.8"
|
146
91
|
type: :runtime
|
92
|
+
version_requirements: *id009
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: net-ssh
|
147
95
|
prerelease: false
|
148
|
-
|
149
|
-
requirements:
|
96
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
150
98
|
- - ~>
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version:
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: net-scp
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ~>
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '1.1'
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: "2.6"
|
160
101
|
type: :runtime
|
102
|
+
version_requirements: *id010
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: net-scp
|
161
105
|
prerelease: false
|
162
|
-
|
163
|
-
requirements:
|
106
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
164
108
|
- - ~>
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version:
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: inifile
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ~>
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '2.0'
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: "1.1"
|
174
111
|
type: :runtime
|
112
|
+
version_requirements: *id011
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: inifile
|
175
115
|
prerelease: false
|
176
|
-
|
177
|
-
requirements:
|
116
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
178
118
|
- - ~>
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version:
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: rbvmomi
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - '='
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: 1.8.1
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: "2.0"
|
188
121
|
type: :runtime
|
122
|
+
version_requirements: *id012
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
name: rbvmomi
|
189
125
|
prerelease: false
|
190
|
-
|
191
|
-
requirements:
|
192
|
-
- -
|
193
|
-
- !ruby/object:Gem::Version
|
126
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "="
|
129
|
+
- !ruby/object:Gem::Version
|
194
130
|
version: 1.8.1
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: blimpy
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - ~>
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0.6'
|
202
131
|
type: :runtime
|
132
|
+
version_requirements: *id013
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: blimpy
|
203
135
|
prerelease: false
|
204
|
-
|
205
|
-
requirements:
|
206
|
-
- - ~>
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '0.6'
|
209
|
-
- !ruby/object:Gem::Dependency
|
210
|
-
name: fission
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
212
|
-
requirements:
|
136
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
213
138
|
- - ~>
|
214
|
-
- !ruby/object:Gem::Version
|
215
|
-
version:
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: "0.6"
|
216
141
|
type: :runtime
|
142
|
+
version_requirements: *id014
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: fission
|
217
145
|
prerelease: false
|
218
|
-
|
219
|
-
requirements:
|
220
|
-
- - ~>
|
221
|
-
- !ruby/object:Gem::Version
|
222
|
-
version: '0.4'
|
223
|
-
- !ruby/object:Gem::Dependency
|
224
|
-
name: google-api-client
|
225
|
-
requirement: !ruby/object:Gem::Requirement
|
226
|
-
requirements:
|
146
|
+
requirement: &id015 !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
227
148
|
- - ~>
|
228
|
-
- !ruby/object:Gem::Version
|
229
|
-
version: 0.
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: "0.4"
|
230
151
|
type: :runtime
|
152
|
+
version_requirements: *id015
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: google-api-client
|
231
155
|
prerelease: false
|
232
|
-
|
233
|
-
requirements:
|
156
|
+
requirement: &id016 !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
234
158
|
- - ~>
|
235
|
-
- !ruby/object:Gem::Version
|
159
|
+
- !ruby/object:Gem::Version
|
236
160
|
version: 0.7.1
|
237
|
-
- !ruby/object:Gem::Dependency
|
238
|
-
name: aws-sdk
|
239
|
-
requirement: !ruby/object:Gem::Requirement
|
240
|
-
requirements:
|
241
|
-
- - ~>
|
242
|
-
- !ruby/object:Gem::Version
|
243
|
-
version: '1.38'
|
244
161
|
type: :runtime
|
162
|
+
version_requirements: *id016
|
163
|
+
- !ruby/object:Gem::Dependency
|
164
|
+
name: aws-sdk
|
245
165
|
prerelease: false
|
246
|
-
|
247
|
-
requirements:
|
166
|
+
requirement: &id017 !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
248
168
|
- - ~>
|
249
|
-
- !ruby/object:Gem::Version
|
250
|
-
version:
|
251
|
-
- !ruby/object:Gem::Dependency
|
252
|
-
name: docker-api
|
253
|
-
requirement: !ruby/object:Gem::Requirement
|
254
|
-
requirements:
|
255
|
-
- - ! '>='
|
256
|
-
- !ruby/object:Gem::Version
|
257
|
-
version: '0'
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: "1.38"
|
258
171
|
type: :runtime
|
259
|
-
|
260
|
-
|
261
|
-
requirements:
|
262
|
-
- - ! '>='
|
263
|
-
- !ruby/object:Gem::Version
|
264
|
-
version: '0'
|
265
|
-
- !ruby/object:Gem::Dependency
|
172
|
+
version_requirements: *id017
|
173
|
+
- !ruby/object:Gem::Dependency
|
266
174
|
name: nokogiri
|
267
|
-
requirement: !ruby/object:Gem::Requirement
|
268
|
-
requirements:
|
269
|
-
- - '='
|
270
|
-
- !ruby/object:Gem::Version
|
271
|
-
version: 1.5.10
|
272
|
-
type: :runtime
|
273
175
|
prerelease: false
|
274
|
-
|
275
|
-
requirements:
|
276
|
-
- - '='
|
277
|
-
- !ruby/object:Gem::Version
|
278
|
-
version: 1.5.10
|
279
|
-
- !ruby/object:Gem::Dependency
|
280
|
-
name: mime-types
|
281
|
-
requirement: !ruby/object:Gem::Requirement
|
282
|
-
requirements:
|
176
|
+
requirement: &id018 !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
283
178
|
- - ~>
|
284
|
-
- !ruby/object:Gem::Version
|
285
|
-
version:
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 1.5.10
|
286
181
|
type: :runtime
|
182
|
+
version_requirements: *id018
|
183
|
+
- !ruby/object:Gem::Dependency
|
184
|
+
name: mime-types
|
287
185
|
prerelease: false
|
288
|
-
|
289
|
-
requirements:
|
290
|
-
- - ~>
|
291
|
-
- !ruby/object:Gem::Version
|
292
|
-
version: '1.25'
|
293
|
-
- !ruby/object:Gem::Dependency
|
294
|
-
name: unf
|
295
|
-
requirement: !ruby/object:Gem::Requirement
|
296
|
-
requirements:
|
186
|
+
requirement: &id019 !ruby/object:Gem::Requirement
|
187
|
+
requirements:
|
297
188
|
- - ~>
|
298
|
-
- !ruby/object:Gem::Version
|
299
|
-
version:
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: "1.25"
|
300
191
|
type: :runtime
|
192
|
+
version_requirements: *id019
|
193
|
+
- !ruby/object:Gem::Dependency
|
194
|
+
name: unf
|
301
195
|
prerelease: false
|
302
|
-
|
303
|
-
requirements:
|
196
|
+
requirement: &id020 !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
304
198
|
- - ~>
|
305
|
-
- !ruby/object:Gem::Version
|
306
|
-
version:
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: "0.1"
|
201
|
+
type: :runtime
|
202
|
+
version_requirements: *id020
|
307
203
|
description: Puppetlabs accceptance testing harness
|
308
|
-
email:
|
204
|
+
email:
|
309
205
|
- delivery@puppetlabs.com
|
310
|
-
executables:
|
206
|
+
executables:
|
311
207
|
- beaker
|
312
208
|
extensions: []
|
209
|
+
|
313
210
|
extra_rdoc_files: []
|
314
|
-
|
211
|
+
|
212
|
+
files:
|
315
213
|
- .gitignore
|
316
214
|
- .rspec
|
317
215
|
- .simplecov
|
@@ -414,7 +312,6 @@ files:
|
|
414
312
|
- spec/beaker/hypervisor/docker_spec.rb
|
415
313
|
- spec/beaker/hypervisor/ec2_helper_spec.rb
|
416
314
|
- spec/beaker/hypervisor/fusion_spec.rb
|
417
|
-
- spec/beaker/hypervisor/google_compute.rb
|
418
315
|
- spec/beaker/hypervisor/hypervisor_spec.rb
|
419
316
|
- spec/beaker/hypervisor/solaris_spec.rb
|
420
317
|
- spec/beaker/hypervisor/vagrant_spec.rb
|
@@ -451,30 +348,29 @@ files:
|
|
451
348
|
- spec/mocks.rb
|
452
349
|
- spec/spec_helper.rb
|
453
350
|
homepage: https://github.com/puppetlabs/beaker
|
454
|
-
licenses:
|
351
|
+
licenses:
|
455
352
|
- Apache2
|
456
353
|
metadata: {}
|
354
|
+
|
457
355
|
post_install_message:
|
458
356
|
rdoc_options: []
|
459
|
-
|
357
|
+
|
358
|
+
require_paths:
|
460
359
|
- lib
|
461
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
462
|
-
requirements:
|
463
|
-
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
requirements:
|
468
|
-
- - ! '>='
|
469
|
-
- !ruby/object:Gem::Version
|
470
|
-
version: '0'
|
360
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
361
|
+
requirements:
|
362
|
+
- *id007
|
363
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
364
|
+
requirements:
|
365
|
+
- *id007
|
471
366
|
requirements: []
|
367
|
+
|
472
368
|
rubyforge_project:
|
473
369
|
rubygems_version: 2.2.2
|
474
370
|
signing_key:
|
475
371
|
specification_version: 4
|
476
372
|
summary: Let's test Puppet!
|
477
|
-
test_files:
|
373
|
+
test_files:
|
478
374
|
- spec/beaker/answers_spec.rb
|
479
375
|
- spec/beaker/cli_spec.rb
|
480
376
|
- spec/beaker/command_spec.rb
|
@@ -494,7 +390,6 @@ test_files:
|
|
494
390
|
- spec/beaker/hypervisor/docker_spec.rb
|
495
391
|
- spec/beaker/hypervisor/ec2_helper_spec.rb
|
496
392
|
- spec/beaker/hypervisor/fusion_spec.rb
|
497
|
-
- spec/beaker/hypervisor/google_compute.rb
|
498
393
|
- spec/beaker/hypervisor/hypervisor_spec.rb
|
499
394
|
- spec/beaker/hypervisor/solaris_spec.rb
|
500
395
|
- spec/beaker/hypervisor/vagrant_spec.rb
|