omnibus-sonian 1.2.0.1
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 +15 -0
- data/.gitignore +9 -0
- data/.rspec +1 -0
- data/.travis.yml +5 -0
- data/.yardopts +6 -0
- data/CHANGELOG.md +96 -0
- data/Gemfile +9 -0
- data/LICENSE +201 -0
- data/NOTICE +9 -0
- data/README.md +195 -0
- data/Rakefile +7 -0
- data/bin/makeself-header.sh +401 -0
- data/bin/makeself.sh +407 -0
- data/bin/omnibus +11 -0
- data/lib/omnibus.rb +304 -0
- data/lib/omnibus/artifact.rb +151 -0
- data/lib/omnibus/build_version.rb +285 -0
- data/lib/omnibus/builder.rb +328 -0
- data/lib/omnibus/clean_tasks.rb +30 -0
- data/lib/omnibus/cli.rb +35 -0
- data/lib/omnibus/cli/application.rb +140 -0
- data/lib/omnibus/cli/base.rb +118 -0
- data/lib/omnibus/cli/build.rb +62 -0
- data/lib/omnibus/cli/cache.rb +60 -0
- data/lib/omnibus/cli/release.rb +49 -0
- data/lib/omnibus/config.rb +224 -0
- data/lib/omnibus/exceptions.rb +143 -0
- data/lib/omnibus/fetcher.rb +184 -0
- data/lib/omnibus/fetchers.rb +22 -0
- data/lib/omnibus/fetchers/git_fetcher.rb +212 -0
- data/lib/omnibus/fetchers/net_fetcher.rb +193 -0
- data/lib/omnibus/fetchers/path_fetcher.rb +65 -0
- data/lib/omnibus/fetchers/s3_cache_fetcher.rb +42 -0
- data/lib/omnibus/health_check.rb +356 -0
- data/lib/omnibus/library.rb +62 -0
- data/lib/omnibus/overrides.rb +69 -0
- data/lib/omnibus/package_release.rb +163 -0
- data/lib/omnibus/project.rb +715 -0
- data/lib/omnibus/reports.rb +99 -0
- data/lib/omnibus/s3_cacher.rb +138 -0
- data/lib/omnibus/software.rb +441 -0
- data/lib/omnibus/templates/Berksfile.erb +3 -0
- data/lib/omnibus/templates/Gemfile.erb +4 -0
- data/lib/omnibus/templates/README.md.erb +102 -0
- data/lib/omnibus/templates/Vagrantfile.erb +95 -0
- data/lib/omnibus/templates/gitignore.erb +8 -0
- data/lib/omnibus/templates/omnibus.rb.example.erb +5 -0
- data/lib/omnibus/templates/package_scripts/makeselfinst.erb +27 -0
- data/lib/omnibus/templates/package_scripts/postinst.erb +17 -0
- data/lib/omnibus/templates/package_scripts/postrm.erb +9 -0
- data/lib/omnibus/templates/project.rb.erb +21 -0
- data/lib/omnibus/templates/software/c-example.rb.erb +42 -0
- data/lib/omnibus/templates/software/erlang-example.rb.erb +38 -0
- data/lib/omnibus/templates/software/ruby-example.rb.erb +24 -0
- data/lib/omnibus/util.rb +61 -0
- data/lib/omnibus/version.rb +20 -0
- data/omnibus.gemspec +34 -0
- data/spec/artifact_spec.rb +106 -0
- data/spec/build_version_spec.rb +266 -0
- data/spec/data/overrides/bad_line.overrides +3 -0
- data/spec/data/overrides/good.overrides +5 -0
- data/spec/data/overrides/with_dupes.overrides +4 -0
- data/spec/data/software/erchef.rb +40 -0
- data/spec/fetchers/net_fetcher_spec.rb +16 -0
- data/spec/overrides_spec.rb +114 -0
- data/spec/package_release_spec.rb +197 -0
- data/spec/s3_cacher_spec.rb +47 -0
- data/spec/software_spec.rb +85 -0
- data/spec/spec_helper.rb +28 -0
- metadata +252 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright (c) 2012 Opscode, Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
name "erchef"
|
19
|
+
version "4b19a96d57bff9bbf4764d7323b92a0944009b9e"
|
20
|
+
|
21
|
+
dependencies ["erlang", "rsync", "curl"]
|
22
|
+
|
23
|
+
source :git => "git://github.com/opscode/erchef"
|
24
|
+
|
25
|
+
relative_path "erchef"
|
26
|
+
|
27
|
+
env = {
|
28
|
+
"PATH" => "#{install_dir}/embedded/bin:#{ENV["PATH"]}",
|
29
|
+
"LDFLAGS" => "-L#{install_dir}/embedded/lib -I#{install_dir}/embedded/include",
|
30
|
+
"CFLAGS" => "-L#{install_dir}/embedded/lib -I#{install_dir}/embedded/include",
|
31
|
+
"LD_RUN_PATH" => "#{install_dir}/embedded/lib"
|
32
|
+
}
|
33
|
+
|
34
|
+
build do
|
35
|
+
command "make distclean", :env => env
|
36
|
+
command "make rel", :env => env
|
37
|
+
command "mkdir -p #{install_dir}/embedded/service/erchef"
|
38
|
+
command "#{install_dir}/embedded/bin/rsync -a --delete --exclude=.git/*** --exclude=.gitignore ./rel/erchef/ #{install_dir}/embedded/service/erchef/"
|
39
|
+
command "rm -rf #{install_dir}/embedded/service/erchef/log"
|
40
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Omnibus::NetFetcher do
|
4
|
+
it "should download and uncompress zip files" do
|
5
|
+
software_mock = stub 'software'
|
6
|
+
software_mock.stub :project_file => 'file.zip',
|
7
|
+
:name => 'file',
|
8
|
+
:source => '/tmp/out',
|
9
|
+
:checksum => 'abc123',
|
10
|
+
:source_uri => 'http://example.com/file.zip',
|
11
|
+
:source_dir => '/tmp/out',
|
12
|
+
:project_dir => '/tmp/project'
|
13
|
+
net_fetcher = Omnibus::NetFetcher.new software_mock
|
14
|
+
net_fetcher.extract_cmd.should == 'unzip file.zip -d /tmp/out'
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'omnibus/overrides'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Omnibus::Overrides do
|
5
|
+
describe "#parse_file" do
|
6
|
+
|
7
|
+
let(:overrides){Omnibus::Overrides.parse_file(file)}
|
8
|
+
subject{overrides}
|
9
|
+
|
10
|
+
context "with a valid overrides file" do
|
11
|
+
let(:file){ overrides_path("good") }
|
12
|
+
|
13
|
+
its(:size){should eq(5)}
|
14
|
+
its(["foo"]){should eq("1.2.3")}
|
15
|
+
its(["bar"]){should eq("0.0.1")}
|
16
|
+
its(["baz"]){should eq("deadbeefdeadbeefdeadbeefdeadbeef")}
|
17
|
+
its(["spunky"]){should eq("master")}
|
18
|
+
its(["monkey"]){should eq("release")}
|
19
|
+
end
|
20
|
+
|
21
|
+
context "with an overrides file that contains a bad line" do
|
22
|
+
let(:file){ overrides_path("bad_line")}
|
23
|
+
|
24
|
+
it "fails" do
|
25
|
+
expect{ overrides }.to raise_error(ArgumentError, "Invalid overrides line: 'THIS IS A BAD LINE'")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "with an overrides file that contains duplicates" do
|
30
|
+
let(:file){ overrides_path("with_dupes") }
|
31
|
+
let(:duplicated_package){"erchef"}
|
32
|
+
it "fails" do
|
33
|
+
expect{ overrides }.to raise_error(ArgumentError, "Multiple overrides present for '#{duplicated_package}' in overrides file #{file}!")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when passed 'nil'" do
|
38
|
+
let(:file){nil}
|
39
|
+
it{should be_nil}
|
40
|
+
end
|
41
|
+
end #parse_file
|
42
|
+
|
43
|
+
describe "#resolve_override_file" do
|
44
|
+
before :each do
|
45
|
+
@original = ENV['OMNIBUS_OVERRIDE_FILE']
|
46
|
+
ENV['OMNIBUS_OVERRIDE_FILE'] = env_override_file
|
47
|
+
end
|
48
|
+
|
49
|
+
after :each do
|
50
|
+
ENV['OMNIBUS_OVERRIDE_FILE'] = @original
|
51
|
+
end
|
52
|
+
|
53
|
+
subject{ Omnibus::Overrides.resolve_override_file }
|
54
|
+
|
55
|
+
context "with no environment variable set" do
|
56
|
+
let(:env_override_file){nil}
|
57
|
+
|
58
|
+
before :each do
|
59
|
+
stub_const("Omnibus::Overrides::DEFAULT_OVERRIDE_FILE_NAME", new_default_file)
|
60
|
+
end
|
61
|
+
|
62
|
+
context "and a non-existent overrides file" do
|
63
|
+
let(:new_default_file){ "/this/file/totally/does/not/exist.txt" }
|
64
|
+
it{should be_nil}
|
65
|
+
end
|
66
|
+
|
67
|
+
context "with an existing overrides file" do
|
68
|
+
let(:path){overrides_path("good")}
|
69
|
+
let(:new_default_file){ path }
|
70
|
+
it{should eq(path)}
|
71
|
+
end
|
72
|
+
end # no environment variable
|
73
|
+
|
74
|
+
context "with OMNIBUS_OVERRIDE_FILE environment variable set" do
|
75
|
+
context "to an existing file" do
|
76
|
+
let(:path){ overrides_path("good") }
|
77
|
+
let(:env_override_file){ path }
|
78
|
+
it{should eq(path)}
|
79
|
+
end
|
80
|
+
|
81
|
+
context "to a non-existent file" do
|
82
|
+
let(:env_override_file){ "/this/file/totally/does/not/exist.txt"}
|
83
|
+
it{should be_nil}
|
84
|
+
end
|
85
|
+
|
86
|
+
context "to a non-existent file, but with an existing DEFAULT_OVERRIDE_FILE_NAME file" do
|
87
|
+
let(:env_override_file){ "/this/file/totally/does/not/exist.txt"}
|
88
|
+
let(:new_default_file){overrides_path("good")}
|
89
|
+
|
90
|
+
it "should still return 'nil', because environment variable has priority" do
|
91
|
+
stub_const("Omnibus::Overrides::DEFAULT_OVERRIDE_FILE_NAME", new_default_file)
|
92
|
+
|
93
|
+
File.exist?(Omnibus::Overrides::DEFAULT_OVERRIDE_FILE_NAME).should be_true
|
94
|
+
ENV['OMNIBUS_OVERRIDE_FILE'].should_not be_nil
|
95
|
+
|
96
|
+
subject.should be_nil
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "#overrides" do
|
103
|
+
context "when an overrides file cannot be found" do
|
104
|
+
before :each do
|
105
|
+
Omnibus::Overrides.stub(:resolve_override_file).and_return(nil)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "returns an empty hash" do
|
109
|
+
Omnibus::Overrides.overrides.should eq({})
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
@@ -0,0 +1,197 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright (c) 2012 Opscode, Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require 'omnibus/package_release'
|
19
|
+
require 'spec_helper'
|
20
|
+
|
21
|
+
describe Omnibus::PackageRelease do
|
22
|
+
let(:s3_key) { "s3key" }
|
23
|
+
let(:s3_secret) { "hey-bezos-store-my-stuff" }
|
24
|
+
let(:s3_bucket) { "myorg-omnibus-packages" }
|
25
|
+
let(:pkg_path) { "pkg/chef_11.4.0-183-g2c0040c-0.el6.x86_64.rpm" }
|
26
|
+
let(:pkg_metadata_path) { "#{pkg_path}.metadata.json" }
|
27
|
+
|
28
|
+
let(:config) do
|
29
|
+
{
|
30
|
+
:release_s3_access_key => s3_key,
|
31
|
+
:release_s3_secret_key => s3_secret,
|
32
|
+
:release_s3_bucket => s3_bucket
|
33
|
+
}
|
34
|
+
end
|
35
|
+
subject(:package_release) do
|
36
|
+
Omnibus::PackageRelease.new(pkg_path)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "has a package path" do
|
40
|
+
package_release.package_path.should == pkg_path
|
41
|
+
end
|
42
|
+
|
43
|
+
it "defaults to `:private' access policy" do
|
44
|
+
package_release.access_policy.should == :private
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "validating configuration" do
|
48
|
+
|
49
|
+
before do
|
50
|
+
Omnibus.stub!(:config).and_return(config)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "validates that the s3 key is set" do
|
54
|
+
config.delete(:release_s3_access_key)
|
55
|
+
lambda { package_release.validate_config! }.should raise_error(Omnibus::InvalidS3ReleaseConfiguration)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "validates that the s3 secret key is set" do
|
59
|
+
config.delete(:release_s3_secret_key)
|
60
|
+
lambda { package_release.validate_config! }.should raise_error(Omnibus::InvalidS3ReleaseConfiguration)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "validates that the s3 bucket is set" do
|
64
|
+
config.delete(:release_s3_bucket)
|
65
|
+
lambda { package_release.validate_config! }.should raise_error(Omnibus::InvalidS3ReleaseConfiguration)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "does not error on a valid configuration" do
|
69
|
+
lambda { package_release.validate_config! }.should_not raise_error
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "validating package for upload" do
|
74
|
+
it "ensures that the package file exists" do
|
75
|
+
lambda { package_release.validate_package! }.should raise_error(Omnibus::NoPackageFile)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "ensures that there is a metadata file for the package" do
|
79
|
+
File.should_receive(:exist?).with(pkg_path).and_return(true)
|
80
|
+
File.should_receive(:exist?).with(pkg_metadata_path).and_return(false)
|
81
|
+
lambda { package_release.validate_package! }.should raise_error(Omnibus::NoPackageMetadataFile)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context "with a valid config and package" do
|
86
|
+
|
87
|
+
let(:basename) { "chef_11.4.0-183-g2c0040c-0.el6.x86_64.rpm" }
|
88
|
+
let(:md5) { "016f2e0854c69901b3f0ad8f99ffdb75" }
|
89
|
+
let(:platform_path) { "el/6/x86_64" }
|
90
|
+
let(:pkg_content) { "expected package content" }
|
91
|
+
|
92
|
+
let(:metadata_json) do
|
93
|
+
<<-E
|
94
|
+
{
|
95
|
+
"platform": "el",
|
96
|
+
"platform_version": "6",
|
97
|
+
"arch": "x86_64",
|
98
|
+
"version": "11.4.0-183-g2c0040c",
|
99
|
+
"basename": "#{basename}",
|
100
|
+
"md5": "#{md5}",
|
101
|
+
"sha256": "21191ab698d1663a5e738e470fad16a2c6efee05ed597002f2e846ec80ade38c"
|
102
|
+
}
|
103
|
+
E
|
104
|
+
end
|
105
|
+
|
106
|
+
before do
|
107
|
+
package_release.stub!(:config).and_return(config)
|
108
|
+
File.stub(:exist?).with(pkg_metadata_path).and_return(true)
|
109
|
+
File.stub(:exist?).with(pkg_path).and_return(true)
|
110
|
+
IO.stub(:read).with(pkg_metadata_path).and_return(metadata_json)
|
111
|
+
IO.stub(:read).with(pkg_path).and_return(pkg_content)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "configures s3 with the given credentials" do
|
115
|
+
expected_s3_config = {
|
116
|
+
:access_key => s3_key,
|
117
|
+
:secret_access_key => s3_secret,
|
118
|
+
:bucket => s3_bucket,
|
119
|
+
:adaper => :net_http
|
120
|
+
}
|
121
|
+
UberS3.should_receive(:new).with(expected_s3_config)
|
122
|
+
package_release.s3_client
|
123
|
+
end
|
124
|
+
|
125
|
+
it "generates the relative path for the package s3 key" do
|
126
|
+
package_release.platform_path.should == platform_path
|
127
|
+
end
|
128
|
+
|
129
|
+
|
130
|
+
it "uploads the package and metadata" do
|
131
|
+
package_release.s3_client.should_receive(:store).with(
|
132
|
+
"#{platform_path}/#{basename}.metadata.json",
|
133
|
+
metadata_json,
|
134
|
+
:access => :private
|
135
|
+
)
|
136
|
+
package_release.s3_client.should_receive(:store).with(
|
137
|
+
"#{platform_path}/#{basename}",
|
138
|
+
pkg_content,
|
139
|
+
:access => :private,
|
140
|
+
:content_md5 => md5
|
141
|
+
)
|
142
|
+
package_release.release
|
143
|
+
end
|
144
|
+
|
145
|
+
context "and a callback is given for after upload" do
|
146
|
+
let(:upload_records) { [] }
|
147
|
+
|
148
|
+
subject(:package_release) do
|
149
|
+
Omnibus::PackageRelease.new(pkg_path) do |uploaded|
|
150
|
+
upload_records << uploaded
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
it "fires the after_upload callback for each item uploaded" do
|
155
|
+
package_release.s3_client.should_receive(:store).with(
|
156
|
+
"#{platform_path}/#{basename}.metadata.json",
|
157
|
+
metadata_json,
|
158
|
+
:access => :private
|
159
|
+
)
|
160
|
+
package_release.s3_client.should_receive(:store).with(
|
161
|
+
"#{platform_path}/#{basename}",
|
162
|
+
pkg_content,
|
163
|
+
:access => :private,
|
164
|
+
:content_md5 => md5
|
165
|
+
)
|
166
|
+
package_release.release
|
167
|
+
|
168
|
+
upload_records.should == [ "#{platform_path}/#{basename}.metadata.json",
|
169
|
+
"#{platform_path}/#{basename}" ]
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
context "and the package is public" do
|
174
|
+
|
175
|
+
subject(:package_release) do
|
176
|
+
Omnibus::PackageRelease.new(pkg_path, :access => :public_read)
|
177
|
+
end
|
178
|
+
|
179
|
+
it "uploads the package and metadata" do
|
180
|
+
package_release.s3_client.should_receive(:store).with(
|
181
|
+
"#{platform_path}/#{basename}.metadata.json",
|
182
|
+
metadata_json,
|
183
|
+
:access => :public_read
|
184
|
+
)
|
185
|
+
package_release.s3_client.should_receive(:store).with(
|
186
|
+
"#{platform_path}/#{basename}",
|
187
|
+
pkg_content,
|
188
|
+
:access => :public_read,
|
189
|
+
:content_md5 => md5
|
190
|
+
)
|
191
|
+
package_release.release
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright (c) 2013 Opscode, Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require 'spec_helper'
|
19
|
+
require 'omnibus/s3_cacher'
|
20
|
+
|
21
|
+
describe Omnibus::S3Cache do
|
22
|
+
|
23
|
+
describe '#tarball_software' do
|
24
|
+
subject(:tarball_software) { described_class.new.tarball_software }
|
25
|
+
|
26
|
+
let(:source_a) { stub(source: { url: 'a' }) }
|
27
|
+
let(:source_b) { stub(source: { url: 'b' }) }
|
28
|
+
let(:source_c) { stub(source: {}) }
|
29
|
+
let(:projects) { [
|
30
|
+
stub({ library: [source_a, source_c] }),
|
31
|
+
stub({ library: [source_c, source_b] })
|
32
|
+
] }
|
33
|
+
let(:software_with_urls) { [source_a, source_b] }
|
34
|
+
|
35
|
+
before do
|
36
|
+
Omnibus.stub(config: stub({
|
37
|
+
s3_bucket: 'test', s3_access_key: 'test', s3_secret_key: 'test'
|
38
|
+
}))
|
39
|
+
|
40
|
+
Omnibus.stub(projects: projects)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'lists all software with urls' do
|
44
|
+
tarball_software.should == software_with_urls
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'rake/dsl_definition'
|
2
|
+
require 'omnibus/software'
|
3
|
+
|
4
|
+
require 'spec_helper'
|
5
|
+
|
6
|
+
describe Omnibus::Software do
|
7
|
+
|
8
|
+
let(:project) do
|
9
|
+
p = mock(Omnibus::Project)
|
10
|
+
p.should_receive(:install_path).any_number_of_times.and_return("monkeys")
|
11
|
+
p
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:software_name) { "erchef" }
|
15
|
+
let(:software_file){ software_path(software_name) }
|
16
|
+
let(:version_from_file){ "4b19a96d57bff9bbf4764d7323b92a0944009b9e" }
|
17
|
+
let(:software){ Omnibus::Software.load(software_file, project) }
|
18
|
+
|
19
|
+
before :each do
|
20
|
+
# We don't want to mess with any of this stuff for these
|
21
|
+
# tests... we're just looking at version info right now
|
22
|
+
Omnibus::Software.any_instance.stub(:render_tasks)
|
23
|
+
end
|
24
|
+
|
25
|
+
subject { software }
|
26
|
+
|
27
|
+
describe "#whitelist_file" do
|
28
|
+
|
29
|
+
it "appends to the whitelist_files array" do
|
30
|
+
software.whitelist_files.size.should equal 0
|
31
|
+
software.whitelist_file(/foo\/bar/)
|
32
|
+
software.whitelist_files.size.should equal 1
|
33
|
+
end
|
34
|
+
|
35
|
+
it "converts Strings to Regexp instances" do
|
36
|
+
software.whitelist_file "foo/bar"
|
37
|
+
software.whitelist_files.size.should equal 1
|
38
|
+
software.whitelist_files.first.should be_kind_of(Regexp)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "testing version overrides" do
|
43
|
+
|
44
|
+
context "without overrides" do
|
45
|
+
its(:name){should eq(software_name)}
|
46
|
+
its(:version){should eq(version_from_file)}
|
47
|
+
its(:given_version){should eq(software.version)}
|
48
|
+
its(:override_version){should be_nil}
|
49
|
+
end
|
50
|
+
|
51
|
+
context "with overrides" do
|
52
|
+
let(:override_software_version){"6.6.6"}
|
53
|
+
let(:overrides) do
|
54
|
+
{override_software_name => override_software_version}
|
55
|
+
end
|
56
|
+
let(:software){Omnibus::Software.load(software_file, project, overrides)}
|
57
|
+
|
58
|
+
context "but not for this software" do
|
59
|
+
let(:override_software_name){"chaos_monkey"}
|
60
|
+
|
61
|
+
it "really should not have any overrides for this software" do
|
62
|
+
overrides.should_not have_key(software_name)
|
63
|
+
end
|
64
|
+
|
65
|
+
its(:version){should eq(version_from_file)}
|
66
|
+
its(:given_version){should eq(software.version)}
|
67
|
+
its(:override_version){should be_nil}
|
68
|
+
end
|
69
|
+
|
70
|
+
context "for this software" do
|
71
|
+
let(:override_software_name){software_name}
|
72
|
+
|
73
|
+
it "really should have an override for this software" do
|
74
|
+
overrides.should have_key(software_name)
|
75
|
+
end
|
76
|
+
|
77
|
+
its(:version){should eq(override_software_version)}
|
78
|
+
its(:override_version){should eq(software.version)}
|
79
|
+
its(:version){should_not eq(software.given_version)}
|
80
|
+
its(:given_version){should eq(version_from_file)}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|