cookbook-omnifetch 0.8.0 → 0.8.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.
@@ -1,3 +0,0 @@
1
- name "example_cookbook"
2
- maintainer "Berkshelf Core"
3
- version "0.5.0"
@@ -1,8 +0,0 @@
1
- #
2
- # Cookbook Name:: example_cookbook
3
- # Recipe:: default
4
- #
5
- # Copyright 2012, YOUR_COMPANY_NAME
6
- #
7
- # All rights reserved - Do Not Redistribute
8
- #
@@ -1,43 +0,0 @@
1
- require "cookbook-omnifetch"
2
-
3
- module Fixtures
4
-
5
- def fixtures_path
6
- spec_root.join("fixtures")
7
- end
8
-
9
- def spec_root
10
- Pathname.new(File.expand_path(File.dirname(__FILE__)))
11
- end
12
-
13
- end
14
-
15
- module MockShellOut; end
16
- module MockCachedCookbook; end
17
-
18
- RSpec.configure do |config|
19
-
20
- config.raise_errors_for_deprecations!
21
-
22
- config.include Fixtures
23
-
24
- config.expect_with :rspec do |c|
25
- c.syntax = [:expect]
26
- end
27
- config.mock_with :rspec do |c|
28
- c.syntax = [:expect, :should]
29
- end
30
-
31
- config.filter_run :focus => true
32
-
33
- config.run_all_when_everything_filtered = true
34
-
35
- config.before(:suite) do
36
- CookbookOmnifetch.configure do |c|
37
- c.cache_path = File.expand_path("~/.berkshelf")
38
- c.storage_path = Pathname.new(File.expand_path("~/.berkshelf/cookbooks"))
39
- c.shell_out_class = MockShellOut
40
- c.cached_cookbook_class = MockCachedCookbook
41
- end
42
- end
43
- end
@@ -1,64 +0,0 @@
1
- require "spec_helper"
2
- require "cookbook-omnifetch/artifactory"
3
- require "zlib"
4
- require "archive/tar/minitar"
5
-
6
- module CookbookOmnifetch
7
- describe ArtifactoryLocation do
8
-
9
- let(:cookbook_name) { "nginx" }
10
-
11
- let(:cookbook_version) { "1.5.23" }
12
-
13
- let(:http_client) { double("Chef::HTTP::Simple") }
14
-
15
- let(:constraint) { double("Constraint") }
16
-
17
- let(:dependency) { double("Dependency", name: cookbook_name, constraint: constraint) }
18
-
19
- let(:url) { "https://artifactory.example.com/api/v1/cookbooks/nginx/versions/1.5.23/download" }
20
-
21
- let(:options) { { artifactory: url, version: cookbook_version, http_client: http_client } }
22
-
23
- subject(:public_repo_location) { described_class.new(dependency, options) }
24
-
25
- it "has a URI" do
26
- expect(public_repo_location.uri).to eq(url)
27
- end
28
-
29
- it "has a repo host" do
30
- expect(public_repo_location.repo_host).to eq("artifactory.example.com")
31
- end
32
-
33
- it "has an exact version" do
34
- expect(public_repo_location.cookbook_version).to eq("1.5.23")
35
- end
36
-
37
- it "has a cache key containing the site URI and version" do
38
- expect(public_repo_location.cache_key).to eq("nginx-1.5.23-artifactory.example.com")
39
- end
40
-
41
- it "sets the install location as the cache path plus cache key" do
42
- expected_install_path = Pathname.new("~/.berkshelf/cookbooks").expand_path.join("nginx-1.5.23-artifactory.example.com")
43
- expect(public_repo_location.install_path).to eq(expected_install_path)
44
- end
45
-
46
- it "considers the cookbook installed if it exists in the main cache" do
47
- expect(public_repo_location.install_path).to receive(:exist?).and_return(true)
48
- expect(public_repo_location.installed?).to be true
49
- end
50
-
51
- it "considers the cookbook not installed if it doesn't exist in the main cache" do
52
- expect(public_repo_location.install_path).to receive(:exist?).and_return(false)
53
- expect(public_repo_location.installed?).to be false
54
- end
55
-
56
- it "provides lock data as a Hash" do
57
- expected_data = {
58
- "artifactory" => url,
59
- "version" => "1.5.23",
60
- }
61
- expect(public_repo_location.lock_data).to eq(expected_data)
62
- end
63
- end
64
- end
@@ -1,116 +0,0 @@
1
- require "spec_helper"
2
- require "cookbook-omnifetch/artifactserver"
3
- require "zlib"
4
- require "archive/tar/minitar"
5
-
6
- module CookbookOmnifetch
7
- describe ArtifactserverLocation do
8
-
9
- let(:cookbook_name) { "nginx" }
10
-
11
- let(:cookbook_version) { "1.5.23" }
12
-
13
- let(:constraint) { double("Constraint") }
14
-
15
- let(:dependency) { double("Dependency", name: cookbook_name, constraint: constraint) }
16
-
17
- let(:url) { "https://supermarket.getchef.com/api/v1/cookbooks/nginx/versions/1.5.23/download" }
18
-
19
- let(:options) { { artifactserver: url, version: cookbook_version } }
20
-
21
- subject(:public_repo_location) { described_class.new(dependency, options) }
22
-
23
- it "has a URI" do
24
- expect(public_repo_location.uri).to eq(url)
25
- end
26
-
27
- it "has a repo host" do
28
- expect(public_repo_location.repo_host).to eq("supermarket.getchef.com")
29
- end
30
-
31
- it "has an exact version" do
32
- expect(public_repo_location.cookbook_version).to eq("1.5.23")
33
- end
34
-
35
- it "has a cache key containing the site URI and version" do
36
- expect(public_repo_location.cache_key).to eq("nginx-1.5.23-supermarket.getchef.com")
37
- end
38
-
39
- it "sets the install location as the cache path plus cache key" do
40
- expected_install_path = Pathname.new("~/.berkshelf/cookbooks").expand_path.join("nginx-1.5.23-supermarket.getchef.com")
41
- expect(public_repo_location.install_path).to eq(expected_install_path)
42
- end
43
-
44
- it "considers the cookbook installed if it exists in the main cache" do
45
- expect(public_repo_location.install_path).to receive(:exist?).and_return(true)
46
- expect(public_repo_location.installed?).to be true
47
- end
48
-
49
- it "considers the cookbook not installed if it doesn't exist in the main cache" do
50
- expect(public_repo_location.install_path).to receive(:exist?).and_return(false)
51
- expect(public_repo_location.installed?).to be false
52
- end
53
-
54
- it "provides lock data as a Hash" do
55
- expected_data = {
56
- "artifactserver" => url,
57
- "version" => "1.5.23",
58
- }
59
- expect(public_repo_location.lock_data).to eq(expected_data)
60
- end
61
-
62
- context "when asked to install a new cookbook" do
63
-
64
- let(:http_client) { double("Http Client") }
65
-
66
- let(:test_root) { Dir.mktmpdir(nil) }
67
-
68
- let(:storage_path) { File.join(test_root, "storage") }
69
-
70
- let(:cache_path) { File.join(test_root, "cache") }
71
-
72
- let(:cookbook_fixtures_path) { fixtures_path.join("cookbooks") }
73
-
74
- let(:cookbook_name) { "example_cookbook" }
75
-
76
- let(:cookbook_version) { "0.5.0" }
77
-
78
- let(:cookbook_tarball_handle) do
79
- gz_file_name = File.join(test_root, "input.gz")
80
- Zlib::GzipWriter.open(gz_file_name) do |gz|
81
- # Minitar writes the full paths provided and doesn't seem to have a way to
82
- # remove prefixes. So we chdir like barbarians.
83
- Dir.chdir(cookbook_fixtures_path) do
84
- Archive::Tar::Minitar.pack(cookbook_name, gz)
85
- end
86
- end
87
- File.open(gz_file_name)
88
- end
89
-
90
- let(:cookbook_files) { %w{. .. .gitignore .kitchen.yml Berksfile Berksfile.lock metadata.rb README.md recipes} }
91
-
92
- before do
93
- allow(CookbookOmnifetch).to receive(:storage_path).and_return(Pathname.new(storage_path))
94
- allow(CookbookOmnifetch).to receive(:cache_path).and_return(cache_path)
95
- FileUtils.mkdir_p(storage_path)
96
- end
97
-
98
- after do
99
- FileUtils.rm_r(test_root)
100
- end
101
-
102
- it "installs the cookbook to the desired install path" do
103
- expect(public_repo_location).to receive(:http_client).and_return(http_client)
104
- expect(cookbook_tarball_handle).to receive(:close).and_call_original
105
- expect(http_client).to receive(:streaming_request).with(nil).and_yield(cookbook_tarball_handle)
106
- expect(public_repo_location).to receive(:validate_cached!)
107
-
108
- public_repo_location.install
109
-
110
- expect(File).to exist(public_repo_location.cache_path)
111
- expect(Dir).to exist(public_repo_location.install_path)
112
- expect(Dir.entries(public_repo_location.install_path)).to match_array(cookbook_files)
113
- end
114
- end
115
- end
116
- end
@@ -1,87 +0,0 @@
1
- require "spec_helper"
2
- require "cookbook-omnifetch/base"
3
-
4
- module CookbookOmnifetch
5
- describe BaseLocation do
6
- let(:constraint) { double("constraint") }
7
- let(:dependency) { double("dependency", name: "cookbook", version_constraint: constraint) }
8
-
9
- subject { described_class.new(dependency) }
10
-
11
- describe "#installed?" do
12
- it "is an abstract function" do
13
- expect { subject.installed? }.to raise_error(AbstractFunction)
14
- end
15
- end
16
-
17
- describe "#install" do
18
- it "is an abstract function" do
19
- expect { subject.install }.to raise_error(AbstractFunction)
20
- end
21
- end
22
-
23
- describe "#cached_cookbook" do
24
- it "is an abstract function" do
25
- expect { subject.cached_cookbook }.to raise_error(AbstractFunction)
26
- end
27
- end
28
-
29
- describe "#to_lock" do
30
- it "is an abstract function" do
31
- expect { subject.to_lock }.to raise_error(AbstractFunction)
32
- end
33
- end
34
-
35
- describe "#lock_data" do
36
- it "is an abstract function" do
37
- expect { subject.lock_data }.to raise_error(AbstractFunction)
38
- end
39
- end
40
-
41
- describe "#validate_cached!" do
42
- context "when the path is not a cookbook" do
43
- before { CookbookOmnifetch.stub(:cookbook?).and_return(false) }
44
-
45
- it "raises an error" do
46
- expect do
47
- subject.validate_cached!("/foo/bar")
48
- end.to raise_error(NotACookbook)
49
- end
50
- end
51
-
52
- context "when the path is a cookbook" do
53
- let(:cookbook) do
54
- double("cookbook",
55
- cookbook_name: "cookbook",
56
- version: "0.1.0"
57
- )
58
- end
59
-
60
- before do
61
- CookbookOmnifetch.stub(:cookbook?).and_return(true)
62
- MockCachedCookbook.stub(:from_path).and_return(cookbook)
63
- end
64
-
65
- it "raises an error if the constraint does not satisfy" do
66
- constraint.stub(:satisfies?).with("0.1.0").and_return(false)
67
- expect do
68
- subject.validate_cached!(cookbook)
69
- end.to raise_error(CookbookValidationFailure)
70
- end
71
-
72
- it "raises an error if the names do not match" do
73
- constraint.stub(:satisfies?).with("0.1.0").and_return(true)
74
- cookbook.stub(:cookbook_name).and_return("different_name")
75
- expect do
76
- subject.validate_cached!(cookbook)
77
- end.to raise_error(MismatchedCookbookName)
78
- end
79
-
80
- it "returns true when the validation succeeds" do
81
- constraint.stub(:satisfies?).with("0.1.0").and_return(true)
82
- expect(subject.validate_cached!(cookbook)).to be true
83
- end
84
- end
85
- end
86
- end
87
- end
@@ -1,110 +0,0 @@
1
- require "spec_helper"
2
- require "cookbook-omnifetch/chef_server.rb"
3
-
4
- RSpec.describe CookbookOmnifetch::ChefServerArtifactLocation do
5
-
6
- let(:http_client) { double("Http Client") }
7
-
8
- let(:test_root) { "/some/fake/path" }
9
-
10
- let(:storage_path) { File.join(test_root, "storage") }
11
-
12
- let(:dependency) { double("Dependency", name: cookbook_name) }
13
-
14
- let(:cookbook_name) { "example" }
15
-
16
- let(:cookbook_identifier) { "467dc855408ce8b74f991c5dc2fd72a6aa369b60" }
17
-
18
- let(:url) { "https://chef.example.com/organizations/example" }
19
-
20
- let(:options) { { chef_server_artifact: url, identifier: cookbook_identifier, http_client: http_client } }
21
-
22
- let(:expected_cache_key) { "example-467dc855408ce8b74f991c5dc2fd72a6aa369b60" }
23
-
24
- let(:expected_install_path) { File.join(storage_path, expected_cache_key) }
25
-
26
- subject(:chef_server_artifact_location) { described_class.new(dependency, options) }
27
-
28
- before do
29
- allow(CookbookOmnifetch).to receive(:storage_path).and_return(Pathname.new(storage_path))
30
- end
31
-
32
- it "has a URI" do
33
- expect(chef_server_artifact_location.uri).to eq(url)
34
- end
35
-
36
- it "has an HTTP client" do
37
- expect(chef_server_artifact_location.http_client).to eq(http_client)
38
- end
39
-
40
- it "has a metadata_based_installer" do
41
- installer = chef_server_artifact_location.installer
42
- expect(installer).to be_a(CookbookOmnifetch::MetadataBasedInstaller)
43
- expect(installer.http_client).to eq(http_client)
44
- expect(installer.url_path).to eq("/cookbook_artifacts/example/467dc855408ce8b74f991c5dc2fd72a6aa369b60")
45
- expect(installer.install_path.to_s).to eq(expected_install_path)
46
- end
47
-
48
- it "has a cache key containing the site URI and version" do
49
- expect(chef_server_artifact_location.cache_key).to eq(expected_cache_key)
50
- end
51
-
52
- it "has an identifier" do
53
- expect(chef_server_artifact_location.cookbook_identifier).to eq(cookbook_identifier)
54
- end
55
-
56
- it "provides lock data as a Hash" do
57
- expected_data = {
58
- "chef_server_artifact" => url,
59
- "identifier" => cookbook_identifier,
60
- }
61
- expect(chef_server_artifact_location.lock_data).to eq(expected_data)
62
- end
63
-
64
- it "returns a cached cookbook object" do
65
- expect(MockCachedCookbook).to receive(:from_path).with(Pathname.new(expected_install_path))
66
- chef_server_artifact_location.cached_cookbook
67
- end
68
-
69
- context "when using the default chef server HTTP client" do
70
-
71
- let(:options) { { chef_server_artifact: url, identifier: cookbook_identifier } }
72
-
73
- let(:default_http_client) { double("Http Client") }
74
-
75
- before do
76
- CookbookOmnifetch.integration.default_chef_server_http_client = default_http_client
77
- end
78
-
79
- after do
80
- CookbookOmnifetch.integration.default_chef_server_http_client = nil
81
- end
82
-
83
- it "uses the default http client for requests" do
84
- expect(chef_server_artifact_location.http_client).to eq(default_http_client)
85
- end
86
-
87
- context "and an http client is explicitly passed" do
88
-
89
- let(:options) { { chef_server: url, identifier: cookbook_identifier, http_client: http_client } }
90
-
91
- it "uses the explicitly passed client instead of the default" do
92
- expect(chef_server_artifact_location.http_client).to eq(http_client)
93
- end
94
-
95
- end
96
- end
97
-
98
- describe "when installing" do
99
-
100
- let(:installer) { instance_double("CookbookOmnifetch::MetadataBasedInstaller") }
101
-
102
- it "delegates to the MetadataBasedInstaller" do
103
- allow(chef_server_artifact_location).to receive(:installer).and_return(installer)
104
- expect(installer).to receive(:install)
105
- chef_server_artifact_location.install
106
- end
107
-
108
- end
109
-
110
- end
@@ -1,108 +0,0 @@
1
- require "spec_helper"
2
- require "cookbook-omnifetch/chef_server.rb"
3
-
4
- RSpec.describe CookbookOmnifetch::ChefServerLocation do
5
-
6
- let(:http_client) { double("Http Client") }
7
-
8
- let(:test_root) { "/some/fake/path" }
9
-
10
- let(:storage_path) { File.join(test_root, "storage") }
11
-
12
- let(:dependency) { double("Dependency", name: cookbook_name) }
13
-
14
- let(:cookbook_name) { "example" }
15
-
16
- let(:cookbook_version) { "0.5.0" }
17
-
18
- let(:url) { "https://chef.example.com/organizations/example" }
19
-
20
- let(:options) { { chef_server: url, version: cookbook_version, http_client: http_client } }
21
-
22
- let(:expected_install_path) { File.join(storage_path, "example-0.5.0") }
23
-
24
- subject(:chef_server_location) { described_class.new(dependency, options) }
25
-
26
- before do
27
- allow(CookbookOmnifetch).to receive(:storage_path).and_return(Pathname.new(storage_path))
28
- end
29
-
30
- it "has a URI" do
31
- expect(chef_server_location.uri).to eq(url)
32
- end
33
-
34
- it "has an HTTP client" do
35
- expect(chef_server_location.http_client).to eq(http_client)
36
- end
37
-
38
- it "has a metadata_based_installer" do
39
- installer = chef_server_location.installer
40
- expect(installer).to be_a(CookbookOmnifetch::MetadataBasedInstaller)
41
- expect(installer.http_client).to eq(http_client)
42
- expect(installer.url_path).to eq("/cookbooks/example/0.5.0")
43
- expect(installer.install_path.to_s).to eq(expected_install_path)
44
- end
45
-
46
- it "has a cache key containing the site URI and version" do
47
- expect(chef_server_location.cache_key).to eq("example-0.5.0")
48
- end
49
-
50
- it "has an exact version" do
51
- expect(chef_server_location.cookbook_version).to eq("0.5.0")
52
- end
53
-
54
- it "provides lock data as a Hash" do
55
- expected_data = {
56
- "chef_server" => url,
57
- "version" => "0.5.0",
58
- }
59
- expect(chef_server_location.lock_data).to eq(expected_data)
60
- end
61
-
62
- it "returns a cached cookbook object" do
63
- expect(MockCachedCookbook).to receive(:from_path).with(Pathname.new(expected_install_path))
64
- chef_server_location.cached_cookbook
65
- end
66
-
67
- context "when using the default chef server HTTP client" do
68
-
69
- let(:options) { { chef_server_artifact: url, version: cookbook_version } }
70
-
71
- let(:default_http_client) { double("Http Client") }
72
-
73
- before do
74
- CookbookOmnifetch.integration.default_chef_server_http_client = default_http_client
75
- end
76
-
77
- after do
78
- CookbookOmnifetch.integration.default_chef_server_http_client = nil
79
- end
80
-
81
- it "uses the default http client for requests" do
82
- expect(chef_server_location.http_client).to eq(default_http_client)
83
- end
84
-
85
- context "and an http client is explicitly passed" do
86
-
87
- let(:options) { { chef_server: url, version: cookbook_version, http_client: http_client } }
88
-
89
- it "uses the explicitly passed client instead of the default" do
90
- expect(chef_server_location.http_client).to eq(http_client)
91
- end
92
-
93
- end
94
- end
95
-
96
- describe "when installing" do
97
-
98
- let(:installer) { instance_double("CookbookOmnifetch::MetadataBasedInstaller") }
99
-
100
- it "delegates to the MetadataBasedInstaller" do
101
- allow(chef_server_location).to receive(:installer).and_return(installer)
102
- expect(installer).to receive(:install)
103
- chef_server_location.install
104
- end
105
-
106
- end
107
-
108
- end