beaker 1.13.1 → 1.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -7
- data/lib/beaker/answers.rb +3 -1
- data/lib/beaker/answers/version34.rb +12 -0
- data/lib/beaker/cli.rb +1 -0
- data/lib/beaker/dsl.rb +2 -1
- data/lib/beaker/dsl/ezbake_utils.rb +220 -0
- data/lib/beaker/dsl/helpers.rb +47 -38
- data/lib/beaker/dsl/install_utils.rb +229 -9
- data/lib/beaker/host/unix.rb +2 -2
- data/lib/beaker/host/unix/pkg.rb +8 -2
- data/lib/beaker/host/windows.rb +0 -1
- data/lib/beaker/host_prebuilt_steps.rb +1 -43
- data/lib/beaker/hypervisor.rb +0 -3
- data/lib/beaker/hypervisor/docker.rb +6 -1
- data/lib/beaker/logger.rb +22 -3
- data/lib/beaker/options/presets.rb +3 -1
- data/lib/beaker/platform.rb +38 -26
- data/lib/beaker/result.rb +3 -2
- data/lib/beaker/tasks/rake_task.rb +2 -8
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/answers_spec.rb +23 -0
- data/spec/beaker/dsl/ezbake_utils_spec.rb +239 -0
- data/spec/beaker/dsl/helpers_spec.rb +46 -36
- data/spec/beaker/dsl/install_utils_spec.rb +180 -1
- data/spec/beaker/host_prebuilt_steps_spec.rb +0 -43
- data/spec/beaker/hypervisor/docker_spec.rb +19 -4
- data/spec/beaker/platform_spec.rb +19 -1
- data/spec/helpers.rb +14 -14
- metadata +272 -151
@@ -16,6 +16,9 @@ module Beaker
|
|
16
16
|
:project => ENV['BEAKER_PROJECT'] || ENV['BEAKER_project'],
|
17
17
|
:department => ENV['BEAKER_DEPARTMENT'] || ENV['BEAKER_department'],
|
18
18
|
:jenkins_build_url => ENV['BEAKER_BUILD_URL'] || ENV['BUILD_URL'],
|
19
|
+
:release_apt_repo_url=> ENV['BEAKER_RELEASE_APT_REPO'] || ENV['RELEASE_APT_REPO'] || "http://apt.puppetlabs.com",
|
20
|
+
:release_yum_repo_url=> ENV['BEAKER_RELEASE_YUM_REPO'] || ENV['RELEASE_YUM_REPO'] || "http://yum.puppetlabs.com",
|
21
|
+
:dev_builds_url => ENV['BEAKER_DEV_BUILDS_URL'] || ENV['DEV_BUILDS_URL'] || "http://builds.puppetlabs.lan",
|
19
22
|
:consoleport => consoleport ? consoleport.to_i : nil,
|
20
23
|
:type => (ENV['BEAKER_IS_PE'] || ENV['IS_PE']) ? 'pe' : nil,
|
21
24
|
:pe_dir => ENV['BEAKER_PE_DIR'] || ENV['pe_dist_dir'],
|
@@ -80,7 +83,6 @@ module Beaker
|
|
80
83
|
:repo_proxy => false,
|
81
84
|
:package_proxy => false,
|
82
85
|
:add_el_extras => false,
|
83
|
-
:add_master_entry => false,
|
84
86
|
:consoleport => 443,
|
85
87
|
:pe_dir => '/opt/enterprise/dists',
|
86
88
|
:pe_version_file => 'LATEST',
|
data/lib/beaker/platform.rb
CHANGED
@@ -17,6 +17,16 @@ module Beaker
|
|
17
17
|
},
|
18
18
|
}
|
19
19
|
|
20
|
+
# A string with the name of the platform.
|
21
|
+
attr_reader :variant
|
22
|
+
# A string with the version number of the platform.
|
23
|
+
attr_reader :version
|
24
|
+
# A string with the codename of the platform+version, nil on platforms
|
25
|
+
# without codenames.
|
26
|
+
attr_reader :codename
|
27
|
+
# A string with the cpu architecture of the platform.
|
28
|
+
attr_reader :arch
|
29
|
+
|
20
30
|
#Creates the Platform object. Checks to ensure that the platform String provided meets the platform
|
21
31
|
#formatting rules. Platforms name must be of the format /^OSFAMILY-VERSION-ARCH.*$/ where OSFAMILY is one of:
|
22
32
|
# * osx
|
@@ -36,7 +46,30 @@ module Beaker
|
|
36
46
|
if name !~ PLATFORMS
|
37
47
|
raise ArgumentError, "Unsupported platform name #{name}"
|
38
48
|
end
|
49
|
+
|
39
50
|
super
|
51
|
+
|
52
|
+
@variant, version, @arch = self.split('-', 3)
|
53
|
+
codename_version_hash = PLATFORM_VERSION_CODES[@variant.to_sym]
|
54
|
+
|
55
|
+
@version = version
|
56
|
+
@codename = nil
|
57
|
+
|
58
|
+
if codename_version_hash
|
59
|
+
if codename_version_hash[version]
|
60
|
+
@version = codename_version_hash[version]
|
61
|
+
else
|
62
|
+
version = version.delete('.')
|
63
|
+
version_codename_hash = codename_version_hash.invert
|
64
|
+
@codename = version_codename_hash[version]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Returns array of attributes to allow single line assignment to local
|
70
|
+
# variables in DSL and test case methods.
|
71
|
+
def to_array
|
72
|
+
return @variant, @version, @arch, @codename
|
40
73
|
end
|
41
74
|
|
42
75
|
# Returns the platform string with the platform version as a codename. If no conversion is
|
@@ -44,20 +77,11 @@ module Beaker
|
|
44
77
|
# @example Platform.new('debian-7-xxx').with_version_codename == 'debian-wheezy-xxx'
|
45
78
|
# @return [String] the platform string with the platform version represented as a codename
|
46
79
|
def with_version_codename
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
PLATFORM_VERSION_CODES[platform].each do |version_codename, version_number|
|
51
|
-
#remove '.' from version number
|
52
|
-
if version.delete('.') =~ /#{version_number}/
|
53
|
-
version = version_codename
|
54
|
-
break
|
55
|
-
end
|
56
|
-
end
|
57
|
-
break
|
58
|
-
end
|
80
|
+
version_array = [@variant, @version, @arch]
|
81
|
+
if @codename
|
82
|
+
version_array = [@variant, @codename, @arch]
|
59
83
|
end
|
60
|
-
|
84
|
+
return version_array.join('-')
|
61
85
|
end
|
62
86
|
|
63
87
|
# Returns the platform string with the platform version as a number. If no conversion is necessary
|
@@ -65,19 +89,7 @@ module Beaker
|
|
65
89
|
# @example Platform.new('debian-wheezy-xxx').with_version_number == 'debian-7-xxx'
|
66
90
|
# @return [String] the platform string with the platform version represented as a number
|
67
91
|
def with_version_number
|
68
|
-
|
69
|
-
PLATFORM_VERSION_CODES.each_key do |platform|
|
70
|
-
if name =~ /#{platform}/
|
71
|
-
PLATFORM_VERSION_CODES[platform].each do |version_codename, version_number|
|
72
|
-
if version =~ /#{version_codename}/
|
73
|
-
version = version_number
|
74
|
-
break
|
75
|
-
end
|
76
|
-
end
|
77
|
-
break
|
78
|
-
end
|
79
|
-
end
|
80
|
-
[name, version, extra].join('-')
|
92
|
+
[@variant, @version, @arch].join('-')
|
81
93
|
end
|
82
94
|
|
83
95
|
end
|
data/lib/beaker/result.rb
CHANGED
@@ -31,9 +31,10 @@ module Beaker
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def convert string
|
34
|
-
if string.respond_to?( :
|
34
|
+
if string.respond_to?( :encode )
|
35
35
|
# We're running in >= 1.9 and we'll need to convert
|
36
|
-
|
36
|
+
# Remove invalide and undefined UTF-8 character encodings
|
37
|
+
return string.encode('UTF-8', 'binary', :invalid => :replace, :undef => :replace, :replace => '')
|
37
38
|
else
|
38
39
|
# We're running in < 1.9 and Ruby doesn't care
|
39
40
|
return string
|
@@ -49,14 +49,8 @@ module Beaker
|
|
49
49
|
|
50
50
|
check_for_beaker_type_config
|
51
51
|
command = beaker_command
|
52
|
-
|
53
|
-
|
54
|
-
puts command if verbose
|
55
|
-
success = system(command)
|
56
|
-
preserve_configuration(@options_file)
|
57
|
-
rescue
|
58
|
-
puts failure_message if failure_message
|
59
|
-
end
|
52
|
+
puts command if verbose
|
53
|
+
success = system(command)
|
60
54
|
if fail_mode == "fast" && !success
|
61
55
|
$stderr.puts "#{command} failed"
|
62
56
|
exit $?.exitstatus
|
data/lib/beaker/version.rb
CHANGED
data/spec/beaker/answers_spec.rb
CHANGED
@@ -9,6 +9,12 @@ module Beaker
|
|
9
9
|
basic_hosts }
|
10
10
|
let( :master_certname ) { 'master_certname' }
|
11
11
|
|
12
|
+
it 'generates 3.4 answers for 3.4 hosts' do
|
13
|
+
@ver = '3.4'
|
14
|
+
Beaker::Answers::Version34.should_receive( :answers ).with( hosts, master_certname, {}).once
|
15
|
+
subject.answers( @ver, hosts, master_certname, {} )
|
16
|
+
end
|
17
|
+
|
12
18
|
it 'generates 3.2 answers for 3.3 hosts' do
|
13
19
|
@ver = '3.3'
|
14
20
|
Beaker::Answers::Version32.should_receive( :answers ).with( hosts, master_certname, {}).once
|
@@ -52,6 +58,23 @@ module Beaker
|
|
52
58
|
end
|
53
59
|
|
54
60
|
module Answers
|
61
|
+
describe Version34 do
|
62
|
+
let( :options ) { Beaker::Options::Presets.env_vars }
|
63
|
+
let( :basic_hosts ) { make_hosts( {'pe_ver' => @ver } ) }
|
64
|
+
let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'agent']
|
65
|
+
basic_hosts[1]['roles'] = ['dashboard', 'agent']
|
66
|
+
basic_hosts[2]['roles'] = ['database', 'agent']
|
67
|
+
basic_hosts }
|
68
|
+
let( :master_certname ) { 'master_certname' }
|
69
|
+
it 'should add answers to the host objects' do
|
70
|
+
@ver = '3.4'
|
71
|
+
answers = subject.answers( hosts, master_certname, options )
|
72
|
+
hosts.each do |host|
|
73
|
+
expect( host[:answers] ).to be === answers[host.name]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
55
78
|
describe Version32 do
|
56
79
|
let( :options ) { Beaker::Options::Presets.env_vars }
|
57
80
|
let( :basic_hosts ) { make_hosts( {'pe_ver' => @ver } ) }
|
@@ -0,0 +1,239 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
EZBAKE_CONFIG_EXAMPLE= {
|
4
|
+
:project => 'jvm-puppet',
|
5
|
+
:real_name => 'jvm-puppet',
|
6
|
+
:user => 'puppet',
|
7
|
+
:group => 'puppet',
|
8
|
+
:uberjar_name => 'jvm-puppet-release.jar',
|
9
|
+
:config_files => [],
|
10
|
+
:terminus_info => {},
|
11
|
+
:debian => { :additional_dependencies => ["puppet (= 3.6.1-puppetlabs1)"], },
|
12
|
+
:redhat => { :additional_dependencies => ["puppet = 3.6.1"], },
|
13
|
+
:java_args => '-Xmx192m',
|
14
|
+
}
|
15
|
+
|
16
|
+
class ClassMixedWithEZBakeUtils
|
17
|
+
include Beaker::DSL::EZBakeUtils
|
18
|
+
|
19
|
+
def initialize_ezbake_config
|
20
|
+
Beaker::DSL::EZBakeUtils.config = EZBAKE_CONFIG_EXAMPLE
|
21
|
+
end
|
22
|
+
|
23
|
+
def wipe_out_ezbake_config
|
24
|
+
Beaker::DSL::EZBakeUtils.config = nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def logger
|
28
|
+
@logger ||= RSpec::Mocks::Mock.new('logger').as_null_object
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
module Beaker::DSL::EZBakeUtils::EZBake
|
33
|
+
Config = EZBAKE_CONFIG_EXAMPLE
|
34
|
+
end
|
35
|
+
|
36
|
+
describe ClassMixedWithEZBakeUtils do
|
37
|
+
let( :opts ) { Beaker::Options::Presets.env_vars }
|
38
|
+
let( :host ) { double.as_null_object }
|
39
|
+
let( :local_commands ) { Beaker::DSL::EZBakeUtils::LOCAL_COMMANDS_REQUIRED }
|
40
|
+
let( :remote_packages ) { Beaker::DSL::EZBakeUtils::REMOTE_PACKAGES_REQUIRED }
|
41
|
+
|
42
|
+
describe '#ezbake_config' do
|
43
|
+
it "returns a map with ezbake configuration parameters" do
|
44
|
+
subject.initialize_ezbake_config
|
45
|
+
config = subject.ezbake_config
|
46
|
+
expect(config).to include(EZBAKE_CONFIG_EXAMPLE)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#ezbake_tools_available?' do
|
51
|
+
|
52
|
+
before do
|
53
|
+
allow(subject).to receive(:check_for_package) { true }
|
54
|
+
allow(subject).to receive(:system) { true }
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "checks for remote packages when given a host" do
|
58
|
+
|
59
|
+
it "and succeeds if all packages are found" do
|
60
|
+
remote_packages.each do |package|
|
61
|
+
expect(subject).to receive(:check_for_package).with(host, package)
|
62
|
+
end
|
63
|
+
subject.ezbake_tools_available? host
|
64
|
+
end
|
65
|
+
|
66
|
+
it "and raises an exception if a package is missing" do
|
67
|
+
allow(subject).to receive(:check_for_package) { false }
|
68
|
+
remote_packages.each do |package|
|
69
|
+
expect(subject).to receive(:check_for_package).with(host, package)
|
70
|
+
break # just need first element
|
71
|
+
end
|
72
|
+
expect{
|
73
|
+
subject.ezbake_tools_available? host
|
74
|
+
}.to raise_error(RuntimeError, /Required package, .*, not installed on/)
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "checks for local successful local commands when no host given" do
|
80
|
+
|
81
|
+
it "and succeeds if all commands return successfully" do
|
82
|
+
local_commands.each do |software_name, command, additional_error_messages|
|
83
|
+
expect(subject).to receive(:system).with(/#{command}/)
|
84
|
+
end
|
85
|
+
subject.ezbake_tools_available?
|
86
|
+
end
|
87
|
+
|
88
|
+
it "and raises an exception if a command returns failure" do
|
89
|
+
allow(subject).to receive(:system) { false }
|
90
|
+
local_commands.each do |software_name, command, additional_error_messages|
|
91
|
+
expect(subject).to receive(:system).with(/#{command}/)
|
92
|
+
break # just need first element
|
93
|
+
end
|
94
|
+
expect{
|
95
|
+
subject.ezbake_tools_available?
|
96
|
+
}.to raise_error(RuntimeError, /Must have .* installed on development system./)
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#ezbake_stage' do
|
104
|
+
before do
|
105
|
+
allow(subject).to receive(:ezbake_tools_available?) { true }
|
106
|
+
subject.wipe_out_ezbake_config
|
107
|
+
end
|
108
|
+
|
109
|
+
it "initializes EZBakeUtils.config" do
|
110
|
+
Dir.stub( :chdir ).and_yield()
|
111
|
+
allow(subject).to receive(:conditionally_clone) { true }
|
112
|
+
|
113
|
+
expect(subject).to receive(:`).with(/^lein.*/).ordered
|
114
|
+
expect(subject).to receive(:`).with("rake package:bootstrap").ordered
|
115
|
+
expect(subject).to receive(:load) { }.ordered
|
116
|
+
expect(subject).to receive(:`).with(anything()).ordered
|
117
|
+
|
118
|
+
config = subject.ezbake_config
|
119
|
+
expect(config).to eq(nil)
|
120
|
+
|
121
|
+
subject.ezbake_stage "ruby", "is", "junky"
|
122
|
+
|
123
|
+
config = subject.ezbake_config
|
124
|
+
expect(config).to include(EZBAKE_CONFIG_EXAMPLE)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
RSpec.shared_examples "installs-ezbake-dependencies" do
|
129
|
+
it "installs ezbake dependencies" do
|
130
|
+
expect(subject).to receive(:install_package).
|
131
|
+
with( kind_of(FakeHost), anything(), anything())
|
132
|
+
subject.install_ezbake_deps host
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe '#install_ezbake_deps' do
|
137
|
+
let( :platform ) { Beaker::Platform.new('redhat-7-i386') }
|
138
|
+
let(:host) do
|
139
|
+
FakeHost.new( :options => { 'platform' => platform })
|
140
|
+
end
|
141
|
+
|
142
|
+
before do
|
143
|
+
allow(subject).to receive(:ezbake_tools_available?) { true }
|
144
|
+
subject.initialize_ezbake_config
|
145
|
+
end
|
146
|
+
|
147
|
+
it "Raises an exception for unsupported platforms." do
|
148
|
+
expect{
|
149
|
+
subject.install_ezbake_deps host
|
150
|
+
}.to raise_error(RuntimeError, /No repository installation step for/)
|
151
|
+
end
|
152
|
+
|
153
|
+
context "When host is a debian-like platform" do
|
154
|
+
let( :platform ) { Beaker::Platform.new('debian-7-i386') }
|
155
|
+
include_examples "installs-ezbake-dependencies"
|
156
|
+
end
|
157
|
+
|
158
|
+
context "When host is a redhat-like platform" do
|
159
|
+
let( :platform ) { Beaker::Platform.new('centos-7-i386') }
|
160
|
+
include_examples "installs-ezbake-dependencies"
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def install_from_ezbake_common_expects
|
165
|
+
expect(subject).to receive(:`).with(/rake package:tar/).ordered
|
166
|
+
expect(subject).to receive(:scp_to).
|
167
|
+
with( kind_of(FakeHost), anything(), anything()).ordered
|
168
|
+
expect(subject).to receive(:on).
|
169
|
+
with( kind_of(FakeHost), /tar -xzf/).ordered
|
170
|
+
expect(subject).to receive(:on).
|
171
|
+
with( kind_of(FakeHost), /make -e install-#{EZBAKE_CONFIG_EXAMPLE[:real_name]}/).ordered
|
172
|
+
end
|
173
|
+
|
174
|
+
describe '#install_from_ezbake' do
|
175
|
+
let( :platform ) { Beaker::Platform.new('redhat-7-i386') }
|
176
|
+
let(:host) do
|
177
|
+
FakeHost.new( :options => { 'platform' => platform })
|
178
|
+
end
|
179
|
+
|
180
|
+
before do
|
181
|
+
allow(subject).to receive(:ezbake_tools_available?) { true }
|
182
|
+
end
|
183
|
+
|
184
|
+
|
185
|
+
context "for non *nix-like platforms" do
|
186
|
+
let( :platform ) { Beaker::Platform.new('windows-7-i386') }
|
187
|
+
it "raises an exception" do
|
188
|
+
expect{
|
189
|
+
subject.install_from_ezbake host, "blah", "blah"
|
190
|
+
}.to raise_error(RuntimeError, /Beaker::DSL::EZBakeUtils unsupported platform:/)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
it "raises an exception for unsupported *nix-like platforms" do
|
195
|
+
Dir.stub( :chdir ).and_yield()
|
196
|
+
install_from_ezbake_common_expects
|
197
|
+
expect{
|
198
|
+
subject.install_from_ezbake host, "blah", "blah"
|
199
|
+
}.to raise_error(RuntimeError, /No ezbake installation step for/)
|
200
|
+
end
|
201
|
+
|
202
|
+
context "When Beaker::DSL::EZBakeUtils.config is nil" do
|
203
|
+
let( :platform ) { Beaker::Platform.new('el-7-i386') }
|
204
|
+
before do
|
205
|
+
Dir.stub( :chdir ).and_yield()
|
206
|
+
subject.wipe_out_ezbake_config
|
207
|
+
end
|
208
|
+
|
209
|
+
it "runs ezbake_stage" do
|
210
|
+
expect(subject).to receive(:ezbake_stage) {
|
211
|
+
Beaker::DSL::EZBakeUtils.config = EZBAKE_CONFIG_EXAMPLE
|
212
|
+
}.ordered
|
213
|
+
install_from_ezbake_common_expects
|
214
|
+
expect(subject).to receive(:on).
|
215
|
+
with( kind_of(FakeHost), /install-rpm-sysv-init/).ordered
|
216
|
+
subject.install_from_ezbake host, "blah", "blah"
|
217
|
+
end
|
218
|
+
|
219
|
+
end
|
220
|
+
|
221
|
+
context "When Beaker::DSL::EZBakeUtils.config is a hash" do
|
222
|
+
let( :platform ) { Beaker::Platform.new('el-7-i386') }
|
223
|
+
before do
|
224
|
+
Dir.stub( :chdir ).and_yield()
|
225
|
+
subject.initialize_ezbake_config
|
226
|
+
end
|
227
|
+
|
228
|
+
it "skips ezbake_stage" do
|
229
|
+
install_from_ezbake_common_expects
|
230
|
+
expect(subject).to receive(:on).
|
231
|
+
with( kind_of(FakeHost), /install-rpm-sysv-init/).ordered
|
232
|
+
subject.install_from_ezbake host, "blah", "blah"
|
233
|
+
end
|
234
|
+
|
235
|
+
end
|
236
|
+
|
237
|
+
end
|
238
|
+
|
239
|
+
end
|
@@ -300,7 +300,7 @@ describe ClassMixedWithDSLHelpers do
|
|
300
300
|
it 'scps the module to the module dir' do
|
301
301
|
subject.stub( :hosts ).and_return( hosts )
|
302
302
|
|
303
|
-
subject.should_receive( :
|
303
|
+
subject.should_receive( :puppet ).with('module install test' ).once
|
304
304
|
subject.puppet_module_install_on( master, {:source => '/module', :module_name => 'test'} )
|
305
305
|
end
|
306
306
|
end
|
@@ -776,6 +776,7 @@ describe ClassMixedWithDSLHelpers do
|
|
776
776
|
subject.instance_variable_set(:@path, test_case_path)
|
777
777
|
host.stub(:tmpdir).and_return(tmpdir_path)
|
778
778
|
host.stub(:file_exist?).and_return(true)
|
779
|
+
subject.stub( :options ).and_return( {} )
|
779
780
|
end
|
780
781
|
|
781
782
|
before do
|
@@ -802,12 +803,14 @@ describe ClassMixedWithDSLHelpers do
|
|
802
803
|
let(:puppetservice) { 'whatever' }
|
803
804
|
|
804
805
|
it 'bounces puppet twice' do
|
806
|
+
subject.stub(:curl_with_retries)
|
805
807
|
subject.with_puppet_running_on(host, {})
|
806
808
|
expect(host).to execute_commands_matching(/#{@ps} restart/).exactly(2).times
|
807
809
|
end
|
808
810
|
|
809
811
|
it 'yield to a block after bouncing service' do
|
810
812
|
execution = 0
|
813
|
+
subject.stub(:curl_with_retries)
|
811
814
|
expect do
|
812
815
|
subject.with_puppet_running_on(host, {}) do
|
813
816
|
expect(host).to execute_commands_matching(/#{@ps} restart/).once
|
@@ -966,43 +969,50 @@ describe ClassMixedWithDSLHelpers do
|
|
966
969
|
end
|
967
970
|
|
968
971
|
|
969
|
-
describe '
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
|
982
|
-
|
983
|
-
|
972
|
+
describe 'copy_module_to' do
|
973
|
+
let(:ignore_list){%w(.git .idea .vagrant .vendor acceptance spec tests log . ..)}
|
974
|
+
let(:source){'./'}
|
975
|
+
let(:target){'/etc/puppetlabs/puppet/modules/testmodule'}
|
976
|
+
let(:module_parse_name){'testmodule'}
|
977
|
+
|
978
|
+
shared_examples 'copy_module_to' do |opts|
|
979
|
+
it{
|
980
|
+
host = double("host")
|
981
|
+
host.stub(:[]).with('distmoduledir').and_return('/etc/puppetlabs/puppet/modules')
|
982
|
+
Dir.stub(:getpwd).and_return(source)
|
983
|
+
|
984
|
+
subject.stub(:parse_for_moduleroot).and_return(source)
|
985
|
+
if module_parse_name
|
986
|
+
subject.stub(:parse_for_modulename).with(any_args()).and_return(module_parse_name)
|
987
|
+
else
|
988
|
+
subject.should_not_receive(:parse_for_modulename)
|
984
989
|
end
|
985
|
-
|
986
|
-
|
990
|
+
|
991
|
+
File.stub(:exists?).with(any_args()).and_return(false)
|
992
|
+
File.stub(:directory?).with(any_args()).and_return(false)
|
993
|
+
|
994
|
+
subject.should_receive(:scp_to).with(host,source, target, {:ignore => ignore_list})
|
995
|
+
if opts.nil?
|
996
|
+
subject.copy_module_to(host)
|
997
|
+
else
|
998
|
+
subject.copy_module_to(host,opts)
|
999
|
+
end
|
1000
|
+
}
|
1001
|
+
end
|
1002
|
+
describe 'should call scp with the correct info, with only providing host' do
|
1003
|
+
let(:target){'/etc/puppetlabs/puppet/modules/testmodule'}
|
1004
|
+
|
1005
|
+
it_should_behave_like 'copy_module_to'
|
1006
|
+
end
|
1007
|
+
describe 'should call scp with the correct info, when specifying the modulename' do
|
1008
|
+
let(:target){'/etc/puppetlabs/puppet/modules/bogusmodule'}
|
1009
|
+
let(:module_parse_name){false}
|
1010
|
+
it_should_behave_like 'copy_module_to', {:module_name =>'bogusmodule'}
|
987
1011
|
end
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
subject.copy_root_module_to(master)
|
993
|
-
end
|
994
|
-
it 'should call scp with the correct info, when specifying the modulename' do
|
995
|
-
files = ['manifests','lib','metadata.json','Modulefile']
|
996
|
-
source_to_scp '/totalfake/testmodule',"#{master['puppetpath']}/modules/bogusmodule",files
|
997
|
-
subject.stub(:parse_for_modulename).and_return('testmodule')
|
998
|
-
subject.copy_root_module_to(master,{:module_name =>"bogusmodule"})
|
999
|
-
end
|
1000
|
-
it 'should call scp with the correct info, when specifying the target to a different path' do
|
1001
|
-
files = ['manifests','lib','templates','metadata.json','Modulefile','files']
|
1002
|
-
target = "/opt/shared/puppet/modules"
|
1003
|
-
source_to_scp '/totalfake/testmodule',"#{target}/testmodule",files
|
1004
|
-
subject.stub(:parse_for_modulename).and_return('testmodule')
|
1005
|
-
subject.copy_root_module_to(master,{:target_module_path => target})
|
1012
|
+
describe 'should call scp with the correct info, when specifying the target to a different path' do
|
1013
|
+
target = '/opt/shared/puppet/modules'
|
1014
|
+
let(:target){"#{target}/testmodule"}
|
1015
|
+
it_should_behave_like 'copy_module_to', {:target_module_path => target}
|
1006
1016
|
end
|
1007
1017
|
end
|
1008
1018
|
|