buildpack-support 1.0.0
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.
- data/LICENSE +202 -0
- data/NOTICE +2 -0
- data/docs/cache.md +77 -0
- data/docs/component.md +1 -0
- data/docs/configuration.md +27 -0
- data/docs/logging.md +54 -0
- data/docs/other.md +1 -0
- data/docs/rake.md +1 -0
- data/docs/repository.md +116 -0
- data/docs/test.md +1 -0
- data/lib/buildpack_support.rb +18 -0
- data/lib/buildpack_support/base_buildpack.rb +166 -0
- data/lib/buildpack_support/buildpack_version.rb +124 -0
- data/lib/buildpack_support/cache.rb +24 -0
- data/lib/buildpack_support/cache/application_cache.rb +41 -0
- data/lib/buildpack_support/cache/cached_file.rb +103 -0
- data/lib/buildpack_support/cache/download_cache.rb +280 -0
- data/lib/buildpack_support/cache/inferred_network_failure.rb +26 -0
- data/lib/buildpack_support/cache/internet_availability.rb +64 -0
- data/lib/buildpack_support/component.rb +24 -0
- data/lib/buildpack_support/component/application.rb +76 -0
- data/lib/buildpack_support/component/base_component.rb +78 -0
- data/lib/buildpack_support/component/base_droplet.rb +96 -0
- data/lib/buildpack_support/component/downloads.rb +88 -0
- data/lib/buildpack_support/component/services.rb +84 -0
- data/lib/buildpack_support/component/versioned_dependency_component.rb +71 -0
- data/lib/buildpack_support/component/versioned_downloads.rb +57 -0
- data/lib/buildpack_support/component/with_timing.rb +40 -0
- data/lib/buildpack_support/configuration_utils.rb +58 -0
- data/lib/buildpack_support/constantize.rb +46 -0
- data/lib/buildpack_support/dash_case.rb +29 -0
- data/lib/buildpack_support/directory_finder.rb +45 -0
- data/lib/buildpack_support/filtering_pathname.rb +227 -0
- data/lib/buildpack_support/format_duration.rb +57 -0
- data/lib/buildpack_support/logging.rb +22 -0
- data/lib/buildpack_support/logging/delegating_logger.rb +48 -0
- data/lib/buildpack_support/logging/logger_factory.rb +148 -0
- data/lib/buildpack_support/qualify_path.rb +36 -0
- data/lib/buildpack_support/rake.rb +22 -0
- data/lib/buildpack_support/rake/buildpack_stage_task.rb +86 -0
- data/lib/buildpack_support/rake/cached_artifact_finder.rb +99 -0
- data/lib/buildpack_support/rake/check_api_doc_task.rb +70 -0
- data/lib/buildpack_support/rake/dependency_cache_task.rb +87 -0
- data/lib/buildpack_support/rake/disable_remote_downloads_task.rb +80 -0
- data/lib/buildpack_support/rake/package_task.rb +133 -0
- data/lib/buildpack_support/rake/package_zip_task.rb +80 -0
- data/lib/buildpack_support/rake/repository_configuration_finder.rb +66 -0
- data/lib/buildpack_support/rake/write_version_file_task.rb +82 -0
- data/lib/buildpack_support/repository.rb +24 -0
- data/lib/buildpack_support/repository/configured_item.rb +81 -0
- data/lib/buildpack_support/repository/repository_index.rb +98 -0
- data/lib/buildpack_support/repository/wildcard_version_resolver.rb +75 -0
- data/lib/buildpack_support/shell.rb +41 -0
- data/lib/buildpack_support/snake_case.rb +30 -0
- data/lib/buildpack_support/space_case.rb +29 -0
- data/lib/buildpack_support/test/application_helper.rb +41 -0
- data/lib/buildpack_support/test/base_component_helper.rb +59 -0
- data/lib/buildpack_support/test/base_droplet_helper.rb +36 -0
- data/lib/buildpack_support/test/console_helper.rb +57 -0
- data/lib/buildpack_support/test/environment_helper.rb +32 -0
- data/lib/buildpack_support/test/internet_availability_helper.rb +29 -0
- data/lib/buildpack_support/test/logging_helper.rb +50 -0
- data/lib/buildpack_support/test/scratch_helper.rb +32 -0
- data/lib/buildpack_support/test/versioned_dependency_component_helper.rb +32 -0
- data/lib/buildpack_support/test/with_load_path_helper.rb +27 -0
- data/lib/buildpack_support/to_b.rb +38 -0
- data/lib/buildpack_support/tokenized_version.rb +157 -0
- data/lib/buildpack_support/version.rb +23 -0
- data/spec/buildpack_support/base_buildpack_spec.rb +112 -0
- data/spec/buildpack_support/buildpack_version_spec.rb +122 -0
- data/spec/buildpack_support/cache/application_cache_spec.rb +56 -0
- data/spec/buildpack_support/cache/cached_file_spec.rb +94 -0
- data/spec/buildpack_support/cache/download_cache_spec.rb +293 -0
- data/spec/buildpack_support/cache/internet_availability_spec.rb +57 -0
- data/spec/buildpack_support/cache/yield_file_with_content.rb +30 -0
- data/spec/buildpack_support/component/application_spec.rb +81 -0
- data/spec/buildpack_support/component/base_component_spec.rb +81 -0
- data/spec/buildpack_support/component/base_droplet_spec.rb +72 -0
- data/spec/buildpack_support/component/downloads_spec.rb +63 -0
- data/spec/buildpack_support/component/services_spec.rb +80 -0
- data/spec/buildpack_support/component/versioned_dependency_component_spec.rb +58 -0
- data/spec/buildpack_support/component/versioned_downloads_spec.rb +58 -0
- data/spec/buildpack_support/component/with_timing_spec.rb +30 -0
- data/spec/buildpack_support/configuration_utils_spec.rb +39 -0
- data/spec/buildpack_support/constantize_spec.rb +34 -0
- data/spec/buildpack_support/dash_case_spec.rb +41 -0
- data/spec/buildpack_support/directory_finder_spec.rb +41 -0
- data/spec/buildpack_support/filtering_pathname_spec.rb +443 -0
- data/spec/buildpack_support/format_duration_spec.rb +60 -0
- data/spec/buildpack_support/logging/delegating_logger_spec.rb +62 -0
- data/spec/buildpack_support/logging/logger_factory_spec.rb +262 -0
- data/spec/buildpack_support/qualify_path_spec.rb +42 -0
- data/spec/buildpack_support/rake/buildpack_stage_task_spec.rb +88 -0
- data/spec/buildpack_support/rake/cached_artifact_finder_spec.rb +73 -0
- data/spec/buildpack_support/rake/check_api_doc_task_spec.rb +69 -0
- data/spec/buildpack_support/rake/dependency_cache_task_spec.rb +133 -0
- data/spec/buildpack_support/rake/disable_remote_downloads_task_spec.rb +91 -0
- data/spec/buildpack_support/rake/package_task_spec.rb +335 -0
- data/spec/buildpack_support/rake/package_zip_task_spec.rb +91 -0
- data/spec/buildpack_support/rake/repository_configuration_finder_spec.rb +61 -0
- data/spec/buildpack_support/rake/write_version_file_task_spec.rb +96 -0
- data/spec/buildpack_support/repository/configured_item_spec.rb +78 -0
- data/spec/buildpack_support/repository/repository_index_spec.rb +118 -0
- data/spec/buildpack_support/repository/wildcard_version_resolver_spec.rb +73 -0
- data/spec/buildpack_support/shell_spec.rb +32 -0
- data/spec/buildpack_support/snake_case_spec.rb +45 -0
- data/spec/buildpack_support/space_case_spec.rb +41 -0
- data/spec/buildpack_support/to_b_spec.rb +41 -0
- data/spec/buildpack_support/tokenized_version_spec.rb +132 -0
- data/spec/fixtures/application/test-file +0 -0
- data/spec/fixtures/config/found-config.yml +2 -0
- data/spec/fixtures/droplet-resources/droplet-resource +0 -0
- data/spec/fixtures/stub-download-with-top-level.zip +0 -0
- data/spec/fixtures/stub-download.tar.gz +0 -0
- data/spec/fixtures/stub-download.zip +0 -0
- data/spec/fixtures/test-cache.yml +18 -0
- data/spec/fixtures/test-index.yml +2 -0
- data/spec/fixtures/test_component.rb +0 -0
- data/spec/fixtures/zip-contents/test-directory/test-deep-file +0 -0
- data/spec/fixtures/zip-contents/test-file +0 -0
- data/spec/spec_helper.rb +30 -0
- metadata +416 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Encoding: utf-8
|
|
2
|
+
# Copyright 2013-2014 the original author or authors.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
require 'spec_helper'
|
|
17
|
+
require 'buildpack_support/rake/package_zip_task'
|
|
18
|
+
require 'buildpack_support/test/console_helper'
|
|
19
|
+
require 'buildpack_support/test/scratch_helper'
|
|
20
|
+
require 'rake'
|
|
21
|
+
|
|
22
|
+
describe BuildpackSupport::Rake::PackageZipTask do
|
|
23
|
+
include_context 'console_helper'
|
|
24
|
+
include_context 'scratch_helper'
|
|
25
|
+
|
|
26
|
+
let(:package_name) { (scratch_dir + 'package.zip').to_s }
|
|
27
|
+
|
|
28
|
+
let(:staging_dir) { scratch_dir + 'staging' }
|
|
29
|
+
|
|
30
|
+
let(:task) do
|
|
31
|
+
described_class.new do |t|
|
|
32
|
+
t.package_name = package_name
|
|
33
|
+
t.staging_dir = staging_dir
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
before { Rake::Task.clear }
|
|
38
|
+
|
|
39
|
+
it 'should create a task with the specified name' do
|
|
40
|
+
task
|
|
41
|
+
|
|
42
|
+
expect(Rake::Task.task_defined?(package_name)).to be
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'should raise and error if name is not specified' do
|
|
46
|
+
expect { described_class.new }.to raise_error('package_name must be configured')
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'should call block if provided' do
|
|
50
|
+
called = false
|
|
51
|
+
|
|
52
|
+
described_class.new do |t|
|
|
53
|
+
t.package_name = package_name
|
|
54
|
+
t.staging_dir = staging_dir
|
|
55
|
+
called = true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
expect(called).to be
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'should not print package name if not verbose' do
|
|
62
|
+
task.run_task(package_name, staging_dir, false)
|
|
63
|
+
|
|
64
|
+
expect(stderr.string).not_to match(/Creating #{package_name}/)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'should create zip file' do
|
|
68
|
+
name = scratch_dir + 'test.zip'
|
|
69
|
+
|
|
70
|
+
task.run_task(name, staging_dir, false)
|
|
71
|
+
|
|
72
|
+
expect(name).to exist
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'should raise and error if staging_dir is not specified' do
|
|
76
|
+
expect { described_class.new { |t| t.package_name = package_name } }
|
|
77
|
+
.to raise_error('staging_dir must be configured')
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'should add contents of staging directory to zip file' do
|
|
81
|
+
name = scratch_dir + 'test.zip'
|
|
82
|
+
|
|
83
|
+
task.run_task(name, 'spec/fixtures/zip-contents', false)
|
|
84
|
+
|
|
85
|
+
Zip::File.open(name) do |zipfile|
|
|
86
|
+
filenames = zipfile.map { |entry| entry.name }
|
|
87
|
+
expect(filenames).to include('test-file', 'test-directory/', 'test-directory/test-deep-file')
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Encoding: utf-8
|
|
2
|
+
# Copyright 2013-2014 the original author or authors.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
require 'spec_helper'
|
|
17
|
+
require 'buildpack_support/configuration_utils'
|
|
18
|
+
require 'buildpack_support/rake/repository_configuration_finder'
|
|
19
|
+
|
|
20
|
+
describe BuildpackSupport::Rake::RepositoryConfigurationFinder do
|
|
21
|
+
|
|
22
|
+
let(:configuration_utils) { double('ConfigurationUtils') }
|
|
23
|
+
|
|
24
|
+
let(:configurations) { described_class.new.find }
|
|
25
|
+
|
|
26
|
+
before do
|
|
27
|
+
expect(BuildpackSupport::ConfigurationUtils).to receive(:new).and_return(configuration_utils)
|
|
28
|
+
expect(configuration_utils).to receive(:load).with('components').and_return('test-key' => 'TestComponent')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'should ignore non-repository configurations' do
|
|
32
|
+
expect(configuration_utils).to receive(:load).with('test_component').and_return('version' => 'test-version')
|
|
33
|
+
|
|
34
|
+
expect(configurations).to be_empty
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should return repository configurations' do
|
|
38
|
+
expect(configuration_utils).to receive(:load).with('test_component')
|
|
39
|
+
.and_return('version' => 'test-version',
|
|
40
|
+
'repository_root' => 'test-repository-root')
|
|
41
|
+
|
|
42
|
+
expect(configurations).not_to be_empty
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'should ignore non-repository sub-configurations' do
|
|
46
|
+
expect(configuration_utils).to receive(:load).with('test_component')
|
|
47
|
+
.and_return('sub-configuration' => { 'version' => 'test-version' })
|
|
48
|
+
|
|
49
|
+
expect(configurations).to be_empty
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'should return repository sub-configurations' do
|
|
53
|
+
expect(configuration_utils).to receive(:load).with('test_component')
|
|
54
|
+
.and_return('sub-configuration' => { 'version' => 'test-version',
|
|
55
|
+
'repository_root' => 'test-repository-root' })
|
|
56
|
+
|
|
57
|
+
expect(configurations).not_to be_empty
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Encoding: utf-8
|
|
2
|
+
# Copyright 2013-2014 the original author or authors.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
require 'spec_helper'
|
|
17
|
+
require 'buildpack_support/rake/write_version_file_task'
|
|
18
|
+
require 'buildpack_support/test/console_helper'
|
|
19
|
+
require 'buildpack_support/test/scratch_helper'
|
|
20
|
+
require 'rake'
|
|
21
|
+
|
|
22
|
+
describe BuildpackSupport::Rake::WriteVersionFileTask do
|
|
23
|
+
include_context 'console_helper'
|
|
24
|
+
include_context 'scratch_helper'
|
|
25
|
+
|
|
26
|
+
let(:package_name) { (scratch_dir + 'package.zip').to_s }
|
|
27
|
+
|
|
28
|
+
let(:staging_dir) { scratch_dir + 'staging' }
|
|
29
|
+
|
|
30
|
+
let(:target) { staging_dir + 'config/version.yml' }
|
|
31
|
+
|
|
32
|
+
let(:buildpack_version) { double('BuildpackVersion') }
|
|
33
|
+
|
|
34
|
+
let(:task) do
|
|
35
|
+
described_class.new do |t|
|
|
36
|
+
t.buildpack_version = buildpack_version
|
|
37
|
+
t.package_name = package_name
|
|
38
|
+
t.staging_dir = staging_dir
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
before do
|
|
43
|
+
Rake::Task.clear
|
|
44
|
+
allow(buildpack_version).to receive(:to_hash).and_return('foo')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'should create a task with the specified name' do
|
|
48
|
+
task
|
|
49
|
+
expect(Rake::Task.task_defined?(target.to_s)).to be
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'should add a prerequisite to the package' do
|
|
53
|
+
task
|
|
54
|
+
expect(Rake::Task[package_name].prerequisites.first).to eq(target.to_s)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should raise and error if buildpack_version is not specified' do
|
|
58
|
+
expect { described_class.new }.to raise_error('buildpack_version must be configured')
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'should raise and error if package_name is not specified' do
|
|
62
|
+
expect do
|
|
63
|
+
described_class.new do |t|
|
|
64
|
+
t.buildpack_version = buildpack_version
|
|
65
|
+
end
|
|
66
|
+
end.to raise_error('package_name must be configured')
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'should raise and error if staging_dir is not specified' do
|
|
70
|
+
expect do
|
|
71
|
+
described_class.new do |t|
|
|
72
|
+
t.buildpack_version = buildpack_version
|
|
73
|
+
t.package_name = package_name
|
|
74
|
+
end
|
|
75
|
+
end.to raise_error('staging_dir must be configured')
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'should create the version file' do
|
|
79
|
+
task.run_task(target, buildpack_version, false)
|
|
80
|
+
|
|
81
|
+
expect(target).to exist
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'should not print the buildpack version if not verbose' do
|
|
85
|
+
task.run_task(target, buildpack_version, false)
|
|
86
|
+
|
|
87
|
+
expect(stderr.string).not_to match("Wrote buildpack version to #{target}")
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'should print the buildpack version if verbose' do
|
|
91
|
+
task.run_task(target, buildpack_version, true)
|
|
92
|
+
|
|
93
|
+
expect(stderr.string).to match("Wrote buildpack version to #{target}")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Encoding: utf-8
|
|
2
|
+
# Copyright 2013-2014 the original author or authors.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
require 'spec_helper'
|
|
17
|
+
require 'buildpack_support/repository/configured_item'
|
|
18
|
+
require 'buildpack_support/repository/repository_index'
|
|
19
|
+
require 'buildpack_support/tokenized_version'
|
|
20
|
+
|
|
21
|
+
describe BuildpackSupport::Repository::ConfiguredItem do
|
|
22
|
+
|
|
23
|
+
let(:configured_item) { described_class.new }
|
|
24
|
+
|
|
25
|
+
let(:repository_index) { double('RepositoryIndex', find_item: [resolved_version, resolved_uri]) }
|
|
26
|
+
|
|
27
|
+
let(:resolved_uri) { 'resolved-uri' }
|
|
28
|
+
|
|
29
|
+
let(:resolved_version) { 'resolved-version' }
|
|
30
|
+
|
|
31
|
+
before do
|
|
32
|
+
allow(BuildpackSupport::Repository::RepositoryIndex).to receive(:new).and_return(repository_index)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'raises an error if no repository root is specified' do
|
|
36
|
+
expect { configured_item.find_item('Test', {}) }.to raise_error
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'resolves a system.properties version if specified' do
|
|
40
|
+
details = configured_item.find_item('Test',
|
|
41
|
+
'repository_root' => 'test-repository-root',
|
|
42
|
+
'other.key' => 'other-value',
|
|
43
|
+
'version' => '1.7.0'
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
expect(details[0]).to eq(resolved_version)
|
|
47
|
+
expect(details[1]).to eq(resolved_uri)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'resolves a configuration version if specified' do
|
|
51
|
+
details = configured_item.find_item('Test',
|
|
52
|
+
'repository_root' => 'test-repository-root',
|
|
53
|
+
'version' => '1.7.0'
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
expect(details[0]).to eq(resolved_version)
|
|
57
|
+
expect(details[1]).to eq(resolved_uri)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'drives the version validator block if supplied' do
|
|
61
|
+
configured_item.find_item('Test',
|
|
62
|
+
'repository_root' => 'test-repository-root',
|
|
63
|
+
'version' => '1.7.0'
|
|
64
|
+
) do |version|
|
|
65
|
+
expect(version).to eq(BuildpackSupport::TokenizedVersion.new('1.7.0'))
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'resolves nil if no version is specified' do
|
|
70
|
+
details = configured_item.find_item('Test',
|
|
71
|
+
'repository_root' => 'test-repository-root'
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
expect(details[0]).to eq(resolved_version)
|
|
75
|
+
expect(details[1]).to eq(resolved_uri)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Encoding: utf-8
|
|
2
|
+
# Copyright 2013-2014 the original author or authors.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific
|
|
14
|
+
|
|
15
|
+
require 'spec_helper'
|
|
16
|
+
require 'buildpack_support/cache/download_cache'
|
|
17
|
+
require 'buildpack_support/configuration_utils'
|
|
18
|
+
require 'buildpack_support/repository/repository_index'
|
|
19
|
+
require 'buildpack_support/test/logging_helper'
|
|
20
|
+
require 'buildpack_support/test/scratch_helper'
|
|
21
|
+
require 'buildpack_support/tokenized_version'
|
|
22
|
+
require 'fileutils'
|
|
23
|
+
|
|
24
|
+
describe BuildpackSupport::Repository::RepositoryIndex do
|
|
25
|
+
include_context 'logging_helper'
|
|
26
|
+
include_context 'scratch_helper'
|
|
27
|
+
|
|
28
|
+
let(:download_cache) { double('DownloadCache') }
|
|
29
|
+
|
|
30
|
+
let(:version_resolver) { double('VersionResolver') }
|
|
31
|
+
|
|
32
|
+
before do
|
|
33
|
+
allow(BuildpackSupport::Cache::DownloadCache).to receive(:new).and_return(download_cache)
|
|
34
|
+
allow_any_instance_of(BuildpackSupport::ConfigurationUtils).to receive(:load).with('repository')
|
|
35
|
+
.and_return('default_repository_root' => 'http://default-repository-root')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'should load index' do
|
|
39
|
+
allow(download_cache).to receive(:get).with(%r{/test-uri/index\.yml})
|
|
40
|
+
.and_yield(Pathname.new('spec/fixtures/test-index.yml').open)
|
|
41
|
+
allow(version_resolver).to receive(:resolve).with('test-version', %w(resolved-version))
|
|
42
|
+
.and_return('resolved-version')
|
|
43
|
+
|
|
44
|
+
repository_index = described_class.new('{platform}/{architecture}/test-uri', version_resolver)
|
|
45
|
+
|
|
46
|
+
expect(repository_index.find_item('test-version')).to eq(%w(resolved-version resolved-uri))
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'should cope with trailing slash in repository URI' do
|
|
50
|
+
allow(download_cache).to receive(:get).with(%r{/test-uri/index\.yml})
|
|
51
|
+
.and_yield(Pathname.new('spec/fixtures/test-index.yml').open)
|
|
52
|
+
allow(version_resolver).to receive(:resolve).with('test-version', %w(resolved-version))
|
|
53
|
+
.and_return('resolved-version')
|
|
54
|
+
|
|
55
|
+
repository_index = described_class.new('{platform}/{architecture}/test-uri/', version_resolver)
|
|
56
|
+
|
|
57
|
+
expect(repository_index.find_item('test-version')).to eq(%w(resolved-version resolved-uri))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'should substitute the default repository root' do
|
|
61
|
+
expect(download_cache).to receive(:get).with('http://default-repository-root/test-uri/index.yml')
|
|
62
|
+
.and_yield(Pathname.new('spec/fixtures/test-index.yml').open)
|
|
63
|
+
|
|
64
|
+
described_class.new('{default.repository.root}/test-uri')
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'should handle Centos correctly' do
|
|
68
|
+
allow(Pathname).to receive(:new).and_call_original
|
|
69
|
+
redhat_release = double('redhat-release')
|
|
70
|
+
allow(Pathname).to receive(:new).with('/etc/redhat-release').and_return(redhat_release)
|
|
71
|
+
|
|
72
|
+
allow_any_instance_of(described_class).to receive(:`).with('uname -s').and_return('Linux')
|
|
73
|
+
allow_any_instance_of(described_class).to receive(:`).with('uname -m').and_return('x86_64')
|
|
74
|
+
allow_any_instance_of(described_class).to receive(:`).with('which lsb_release 2> /dev/null').and_return('')
|
|
75
|
+
allow(redhat_release).to receive(:exist?).and_return(true)
|
|
76
|
+
allow(redhat_release).to receive(:read).and_return('CentOS release 6.4 (Final)')
|
|
77
|
+
allow(download_cache).to receive(:get).with('centos6/x86_64/test-uri/index.yml')
|
|
78
|
+
.and_yield(Pathname.new('spec/fixtures/test-index.yml').open)
|
|
79
|
+
|
|
80
|
+
described_class.new('{platform}/{architecture}/test-uri')
|
|
81
|
+
|
|
82
|
+
expect(download_cache).to have_received(:get).with %r{centos6/x86_64/test-uri/index\.yml}
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'should handle Mac OS X correctly' do
|
|
86
|
+
allow_any_instance_of(described_class).to receive(:`).with('uname -s').and_return('Darwin')
|
|
87
|
+
allow_any_instance_of(described_class).to receive(:`).with('uname -m').and_return('x86_64')
|
|
88
|
+
allow(download_cache).to receive(:get).with('mountainlion/x86_64/test-uri/index.yml')
|
|
89
|
+
.and_yield(Pathname.new('spec/fixtures/test-index.yml').open)
|
|
90
|
+
|
|
91
|
+
described_class.new('{platform}/{architecture}/test-uri')
|
|
92
|
+
|
|
93
|
+
expect(download_cache).to have_received(:get).with %r{mountainlion/x86_64/test-uri/index\.yml}
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it 'should handle Ubuntu correctly' do
|
|
97
|
+
allow_any_instance_of(described_class).to receive(:`).with('uname -s').and_return('Linux')
|
|
98
|
+
allow_any_instance_of(described_class).to receive(:`).with('uname -m').and_return('x86_64')
|
|
99
|
+
allow_any_instance_of(described_class).to receive(:`).with('which lsb_release 2> /dev/null').and_return('/usr/bin/lsb_release')
|
|
100
|
+
allow_any_instance_of(described_class).to receive(:`).with('lsb_release -cs').and_return('precise')
|
|
101
|
+
allow(download_cache).to receive(:get).with('precise/x86_64/test-uri/index.yml')
|
|
102
|
+
.and_yield(Pathname.new('spec/fixtures/test-index.yml').open)
|
|
103
|
+
|
|
104
|
+
described_class.new('{platform}/{architecture}/test-uri')
|
|
105
|
+
|
|
106
|
+
expect(download_cache).to have_received(:get).with %r{precise/x86_64/test-uri/index\.yml}
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it 'should handle unknown OS correctly' do
|
|
110
|
+
allow_any_instance_of(File).to receive(:exists?).with('/etc/redhat-release').and_return(false)
|
|
111
|
+
allow_any_instance_of(described_class).to receive(:`).with('uname -s').and_return('Linux')
|
|
112
|
+
allow_any_instance_of(described_class).to receive(:`).with('which lsb_release 2> /dev/null').and_return('')
|
|
113
|
+
|
|
114
|
+
expect { described_class.new('{platform}/{architecture}/test-uri') }
|
|
115
|
+
.to raise_error('Unable to determine platform')
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|