beaker 3.12.0 → 3.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/acceptance/tests/subcommands/init.rb +17 -15
- data/acceptance/tests/subcommands/provision.rb +45 -0
- data/beaker.gemspec +5 -9
- data/bin/beaker +1 -1
- data/docs/concepts/test_tagging.md +27 -14
- data/docs/how_to/archive_sut_files.md +19 -1
- data/docs/how_to/hypervisors/README.md +20 -3
- data/docs/how_to/hypervisors/ec2.md +4 -0
- data/docs/how_to/hypervisors/vmpooler.md +24 -0
- data/docs/how_to/hypervisors/vsphere.md +0 -3
- data/docs/tutorials/installation.md +22 -7
- data/lib/beaker/cli.rb +28 -12
- data/lib/beaker/dsl.rb +2 -1
- data/lib/beaker/dsl/helpers/puppet_helpers.rb +1 -1
- data/lib/beaker/dsl/helpers/tk_helpers.rb +1 -1
- data/lib/beaker/dsl/structure.rb +0 -130
- data/lib/beaker/dsl/test_tagging.rb +157 -0
- data/lib/beaker/host/unix/exec.rb +9 -1
- data/lib/beaker/host_prebuilt_steps.rb +1 -1
- data/lib/beaker/hypervisor/openstack.rb +8 -9
- data/lib/beaker/options/command_line_parser.rb +19 -4
- data/lib/beaker/options/parser.rb +18 -9
- data/lib/beaker/options/presets.rb +6 -4
- data/lib/beaker/options/validator.rb +11 -5
- data/lib/beaker/subcommand.rb +84 -6
- data/lib/beaker/subcommands/subcommand_util.rb +58 -7
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/cli_spec.rb +44 -1
- data/spec/beaker/dsl/structure_spec.rb +1 -214
- data/spec/beaker/dsl/test_tagging_spec.rb +274 -0
- data/spec/beaker/host/cisco_spec.rb +4 -4
- data/spec/beaker/host/unix/exec_spec.rb +2 -2
- data/spec/beaker/host_prebuilt_steps_spec.rb +1 -1
- data/spec/beaker/options/command_line_parser_spec.rb +2 -2
- data/spec/beaker/options/parser_spec.rb +33 -24
- data/spec/beaker/options/validator_spec.rb +18 -3
- data/spec/beaker/subcommand/subcommand_util_spec.rb +121 -10
- metadata +12 -8
@@ -16,6 +16,14 @@ module Beaker
|
|
16
16
|
double("file")
|
17
17
|
}
|
18
18
|
|
19
|
+
let(:store) {
|
20
|
+
double("store")
|
21
|
+
}
|
22
|
+
|
23
|
+
let(:host) {
|
24
|
+
double("host")
|
25
|
+
}
|
26
|
+
|
19
27
|
describe 'reset_argv' do
|
20
28
|
it "resets argv" do
|
21
29
|
args = ["test1", "test2"]
|
@@ -30,9 +38,15 @@ module Beaker
|
|
30
38
|
it "determines if we should execute the init subcommand" do
|
31
39
|
expect(subject.execute_subcommand?("init")).to be == true
|
32
40
|
end
|
41
|
+
it "does not attempt to execute intialize as a subcommand" do
|
42
|
+
expect(subject.execute_subcommand?("initialize")).to be == false
|
43
|
+
end
|
33
44
|
it "determines if we should execute the help subcommand" do
|
34
45
|
expect(subject.execute_subcommand?("help")).to be == true
|
35
46
|
end
|
47
|
+
it "determines if we should execute the provision subcommand" do
|
48
|
+
expect(subject.execute_subcommand?("provision")).to be == true
|
49
|
+
end
|
36
50
|
it "determines that a subcommand should not be executed" do
|
37
51
|
expect(subject.execute_subcommand?("notasubcommand")).to be == false
|
38
52
|
end
|
@@ -48,13 +62,31 @@ module Beaker
|
|
48
62
|
end
|
49
63
|
end
|
50
64
|
|
51
|
-
describe '
|
52
|
-
it "the exit value should
|
65
|
+
describe 'error_with' do
|
66
|
+
it "the exit value should default to 1" do
|
67
|
+
expect(STDOUT).to receive(:puts).with("exiting").exactly(1).times
|
68
|
+
begin
|
69
|
+
subject.error_with("exiting")
|
70
|
+
rescue SystemExit=>e
|
71
|
+
expect(e.status).to eq(1)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
it "the exit value should return specified value" do
|
75
|
+
expect(STDOUT).to receive(:puts).with("exiting").exactly(1).times
|
76
|
+
begin
|
77
|
+
subject.error_with("exiting", {exit_code: 3})
|
78
|
+
rescue SystemExit=>e
|
79
|
+
expect(e.status).to eq(3)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
it "the exit value should default to 1 with a stack trace" do
|
53
84
|
expect(STDOUT).to receive(:puts).with("exiting").exactly(1).times
|
85
|
+
expect(STDOUT).to receive(:puts).with("testing").exactly(1).times
|
54
86
|
begin
|
55
|
-
subject.
|
87
|
+
subject.error_with("exiting", {stack_trace: "testing"})
|
56
88
|
rescue SystemExit=>e
|
57
|
-
expect(e.status).to eq(
|
89
|
+
expect(e.status).to eq(1)
|
58
90
|
end
|
59
91
|
end
|
60
92
|
end
|
@@ -75,24 +107,21 @@ module Beaker
|
|
75
107
|
|
76
108
|
describe 'init_hypervisor' do
|
77
109
|
it "calls init_vagrant" do
|
78
|
-
options = {:hypervisor => "vagrant"}
|
79
110
|
expect(subject).to receive(:init_vagrant).with(no_args).exactly(1).times
|
80
111
|
expect(subject).to receive(:init_vmpooler).with(no_args).exactly(0).times
|
81
|
-
subject.init_hypervisor(
|
112
|
+
subject.init_hypervisor('vagrant')
|
82
113
|
end
|
83
114
|
|
84
115
|
it "calls init_vmpooler" do
|
85
|
-
options = {:hypervisor => "vmpooler"}
|
86
116
|
expect(subject).to receive(:init_vagrant).with(no_args).exactly(0).times
|
87
117
|
expect(subject).to receive(:init_vmpooler).with(no_args).exactly(1).times
|
88
|
-
subject.init_hypervisor(
|
118
|
+
subject.init_hypervisor('vmpooler')
|
89
119
|
end
|
90
120
|
|
91
121
|
it "fails to call init for a hypervisor" do
|
92
|
-
options = {:hypervisor => "invalid"}
|
93
122
|
expect(subject).to receive(:init_vagrant).with(no_args).exactly(0).times
|
94
123
|
expect(subject).to receive(:init_vmpooler).with(no_args).exactly(0).times
|
95
|
-
subject.init_hypervisor(
|
124
|
+
subject.init_hypervisor('invalid')
|
96
125
|
end
|
97
126
|
end
|
98
127
|
|
@@ -163,9 +192,91 @@ module Beaker
|
|
163
192
|
expect(file).to receive(:puts).with("require 'beaker/tasks/quick_start'").exactly(0).times
|
164
193
|
subject.require_tasks
|
165
194
|
end
|
195
|
+
end
|
166
196
|
|
197
|
+
describe "init_config" do
|
198
|
+
it "creates a .beaker folder and loads the config" do
|
199
|
+
expect(FileUtils).to receive(:mkdir_p).with(".beaker").exactly(1).times
|
200
|
+
expect(YAML::Store).to receive(:new).with(".beaker/config").exactly(1).times
|
201
|
+
subject.init_config
|
202
|
+
end
|
167
203
|
end
|
168
204
|
|
205
|
+
describe "store_config" do
|
206
|
+
before(:each) { SubcommandUtil.class_variable_set :@@store, store}
|
207
|
+
|
208
|
+
it "stores some values in the YAML store" do
|
209
|
+
options = { :hypervisor => "vmpooler", :test => "abc", :provisioned => true}
|
210
|
+
allow(store).to receive(:transaction).and_yield
|
211
|
+
expect(store).to receive(:[]=).with(:hypervisor, "vmpooler").exactly(1).times
|
212
|
+
expect(store).to receive(:[]=).with(:test, "abc").exactly(0).times
|
213
|
+
expect(store).to receive(:[]=).with(:provisioned, true).exactly(1).times
|
214
|
+
subject.store_config(options)
|
215
|
+
end
|
216
|
+
|
217
|
+
it "stores all values in the YAML store" do
|
218
|
+
options = { :hypervisor => "vmpooler", :provisioned => true}
|
219
|
+
allow(store).to receive(:transaction).and_yield
|
220
|
+
expect(store).to receive(:[]=).with(:hypervisor, "vmpooler").exactly(1).times
|
221
|
+
expect(store).to receive(:[]=).with(:provisioned, true).exactly(1).times
|
222
|
+
subject.store_config(options)
|
223
|
+
end
|
224
|
+
|
225
|
+
it "stores no values in the YAML store" do
|
226
|
+
options = {:test => "abc"}
|
227
|
+
allow(store).to receive(:transaction).and_yield
|
228
|
+
expect(store).to receive(:[]=).with(:hypervisor, anything).exactly(0).times
|
229
|
+
expect(store).to receive(:[]=).with(:provisioned, anything).exactly(0).times
|
230
|
+
subject.store_config(options)
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
describe "delete_config" do
|
235
|
+
before(:each) { SubcommandUtil.class_variable_set :@@store, store}
|
236
|
+
it "deletes keys from the YAML store" do
|
237
|
+
keys = [ :hypervisor, :test, :provisioned ]
|
238
|
+
allow(store).to receive(:transaction).and_yield
|
239
|
+
expect(store).to receive(:delete).with(:hypervisor).exactly(1).times
|
240
|
+
expect(store).to receive(:delete).with(:test).exactly(1).times
|
241
|
+
expect(store).to receive(:delete).with(:provisioned).exactly(1).times
|
242
|
+
subject.delete_config(keys)
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
describe "provision" do
|
247
|
+
it "provisions, validates, and configures with vmpooler" do
|
248
|
+
options = {:validate => true, :configure => true}
|
249
|
+
expect(cli).to receive(:provision).and_return(true)
|
250
|
+
expect(cli).to receive(:preserve_hosts_file).exactly(1).times
|
251
|
+
allow(Beaker::CLI).to receive(:new).and_return(cli)
|
252
|
+
allow(cli).to receive(:parse_options).and_return(cli)
|
253
|
+
hypervisor = "vmpooler"
|
254
|
+
expect(subject).to receive(:reset_argv).with(["--hosts",".beaker/acceptance/config/default_#{hypervisor}_hosts.yaml", "--validate", true, "--configure", true]).exactly(1).times
|
255
|
+
subject.provision(hypervisor, options)
|
256
|
+
end
|
257
|
+
|
258
|
+
it "provisions and validates with vmpooler" do
|
259
|
+
options = {:validate => true, :configure => false }
|
260
|
+
expect(cli).to receive(:provision).and_return(true)
|
261
|
+
expect(cli).to receive(:preserve_hosts_file).exactly(1).times
|
262
|
+
allow(Beaker::CLI).to receive(:new).and_return(cli)
|
263
|
+
allow(cli).to receive(:parse_options).and_return(cli)
|
264
|
+
hypervisor = "vmpooler"
|
265
|
+
expect(subject).to receive(:reset_argv).with(["--hosts",".beaker/acceptance/config/default_#{hypervisor}_hosts.yaml", "--validate", true, "--configure", false]).exactly(1).times
|
266
|
+
subject.provision(hypervisor, options)
|
267
|
+
end
|
268
|
+
|
269
|
+
it "only provisions with vmpooler" do
|
270
|
+
options = {:validate => false, :configure => false }
|
271
|
+
expect(cli).to receive(:provision).and_return(true)
|
272
|
+
expect(cli).to receive(:preserve_hosts_file).exactly(1).times
|
273
|
+
allow(Beaker::CLI).to receive(:new).and_return(cli)
|
274
|
+
allow(cli).to receive(:parse_options).and_return(cli)
|
275
|
+
hypervisor = "vmpooler"
|
276
|
+
expect(subject).to receive(:reset_argv).with(["--hosts",".beaker/acceptance/config/default_#{hypervisor}_hosts.yaml", "--validate", false, "--configure", false]).exactly(1).times
|
277
|
+
subject.provision(hypervisor, options)
|
278
|
+
end
|
279
|
+
end
|
169
280
|
end
|
170
281
|
end
|
171
282
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -170,14 +170,14 @@ dependencies:
|
|
170
170
|
requirements:
|
171
171
|
- - ~>
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: '
|
173
|
+
version: '3.0'
|
174
174
|
type: :runtime
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - ~>
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: '
|
180
|
+
version: '3.0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: rake
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -388,9 +388,9 @@ dependencies:
|
|
388
388
|
- - ~>
|
389
389
|
- !ruby/object:Gem::Version
|
390
390
|
version: '0.1'
|
391
|
-
description:
|
391
|
+
description: Puppet's accceptance testing harness
|
392
392
|
email:
|
393
|
-
- delivery@
|
393
|
+
- delivery@puppet.com
|
394
394
|
executables:
|
395
395
|
- beaker
|
396
396
|
extensions: []
|
@@ -524,6 +524,7 @@ files:
|
|
524
524
|
- acceptance/tests/puppet/web_helpers_test.rb
|
525
525
|
- acceptance/tests/puppet/with_puppet_running_on.rb
|
526
526
|
- acceptance/tests/subcommands/init.rb
|
527
|
+
- acceptance/tests/subcommands/provision.rb
|
527
528
|
- beaker.gemspec
|
528
529
|
- bin/beaker
|
529
530
|
- docs/README.md
|
@@ -556,6 +557,7 @@ files:
|
|
556
557
|
- docs/how_to/hypervisors/vagrant.md
|
557
558
|
- docs/how_to/hypervisors/vagrant_hosts_file_examples.md
|
558
559
|
- docs/how_to/hypervisors/vagrant_libvirt.md
|
560
|
+
- docs/how_to/hypervisors/vmpooler.md
|
559
561
|
- docs/how_to/hypervisors/vmware_fusion.md
|
560
562
|
- docs/how_to/hypervisors/vsphere.md
|
561
563
|
- docs/how_to/install_puppet.md
|
@@ -608,6 +610,7 @@ files:
|
|
608
610
|
- lib/beaker/dsl/patterns.rb
|
609
611
|
- lib/beaker/dsl/roles.rb
|
610
612
|
- lib/beaker/dsl/structure.rb
|
613
|
+
- lib/beaker/dsl/test_tagging.rb
|
611
614
|
- lib/beaker/dsl/wrappers.rb
|
612
615
|
- lib/beaker/host.rb
|
613
616
|
- lib/beaker/host/aix.rb
|
@@ -713,6 +716,7 @@ files:
|
|
713
716
|
- spec/beaker/dsl/outcomes_spec.rb
|
714
717
|
- spec/beaker/dsl/roles_spec.rb
|
715
718
|
- spec/beaker/dsl/structure_spec.rb
|
719
|
+
- spec/beaker/dsl/test_tagging_spec.rb
|
716
720
|
- spec/beaker/dsl/wrappers_spec.rb
|
717
721
|
- spec/beaker/host/aix_spec.rb
|
718
722
|
- spec/beaker/host/cisco_spec.rb
|
@@ -798,7 +802,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
798
802
|
requirements:
|
799
803
|
- - ! '>='
|
800
804
|
- !ruby/object:Gem::Version
|
801
|
-
version: 2.
|
805
|
+
version: 2.1.8
|
802
806
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
803
807
|
requirements:
|
804
808
|
- - ! '>='
|