berkshelf 0.3.3 → 0.3.7
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/Guardfile +1 -1
- data/features/install.feature +129 -2
- data/features/lockfile.feature +1 -1
- data/features/step_definitions/filesystem_steps.rb +12 -0
- data/features/update.feature +1 -1
- data/features/upload_command.feature +1 -1
- data/lib/berkshelf/berksfile.rb +4 -1
- data/lib/berkshelf/cached_cookbook.rb +36 -9
- data/lib/berkshelf/cli.rb +2 -2
- data/lib/berkshelf/cookbook_source.rb +26 -63
- data/lib/berkshelf/cookbook_source/git_location.rb +21 -10
- data/lib/berkshelf/cookbook_source/location.rb +50 -0
- data/lib/berkshelf/cookbook_source/path_location.rb +13 -5
- data/lib/berkshelf/cookbook_source/site_location.rb +14 -4
- data/lib/berkshelf/cookbook_store.rb +34 -16
- data/lib/berkshelf/core_ext/string.rb +12 -0
- data/lib/berkshelf/downloader.rb +0 -4
- data/lib/berkshelf/errors.rb +41 -1
- data/lib/berkshelf/git.rb +83 -14
- data/lib/berkshelf/resolver.rb +85 -66
- data/lib/berkshelf/version.rb +1 -1
- data/spec/fixtures/cookbooks/example_cookbook-0.5.0/metadata.rb +1 -0
- data/spec/fixtures/cookbooks/example_metadata_name/metadata.rb +2 -0
- data/spec/fixtures/cookbooks/example_metadata_no_name/metadata.rb +1 -0
- data/spec/fixtures/cookbooks/example_no_metadata/recipes/default.rb +1 -0
- data/spec/support/chef_api.rb +42 -0
- data/spec/unit/berkshelf/cached_cookbook_spec.rb +55 -11
- data/spec/unit/berkshelf/cookbook_source/git_location_spec.rb +65 -15
- data/spec/unit/berkshelf/cookbook_source/location_spec.rb +42 -0
- data/spec/unit/berkshelf/cookbook_source/path_location_spec.rb +22 -5
- data/spec/unit/berkshelf/cookbook_source/site_location_spec.rb +32 -13
- data/spec/unit/berkshelf/cookbook_source_spec.rb +24 -33
- data/spec/unit/berkshelf/cookbook_store_spec.rb +47 -7
- data/spec/unit/berkshelf/git_spec.rb +97 -12
- data/spec/unit/berkshelf/resolver_spec.rb +72 -48
- data/spec/unit/berkshelf/uploader_spec.rb +12 -4
- metadata +13 -7
- data/spec/fixtures/cookbooks/invalid_ruby_files-1.0.0/recipes/default.rb +0 -1
- data/spec/fixtures/cookbooks/invalid_template_files-1.0.0/templates/default/broken.erb +0 -1
@@ -2,59 +2,83 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Berkshelf
|
4
4
|
describe Resolver do
|
5
|
+
let(:source) do
|
6
|
+
double('source',
|
7
|
+
name: 'mysql',
|
8
|
+
version_constraint: DepSelector::VersionConstraint.new('= 1.2.4'),
|
9
|
+
downloaded?: true,
|
10
|
+
cached_cookbook: double('mysql-cookbook',
|
11
|
+
name: 'mysql-1.2.4',
|
12
|
+
cookbook_name: 'mysql',
|
13
|
+
version: '1.2.4',
|
14
|
+
dependencies: { "nginx" => ">= 0.1.0", "artifact" => "~> 0.10.0" }
|
15
|
+
),
|
16
|
+
location: double('location', validate_cached: true)
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:source_two) do
|
21
|
+
double('source-two',
|
22
|
+
name: 'nginx',
|
23
|
+
version_constraint: DepSelector::VersionConstraint.new('= 0.101.2'),
|
24
|
+
downloaded?: true,
|
25
|
+
cached_cookbook: double('nginx-cookbook',
|
26
|
+
name: 'nginx-0.101.2',
|
27
|
+
cookbook_name: 'nginx',
|
28
|
+
version: '0.101.2',
|
29
|
+
dependencies: Hash.new
|
30
|
+
),
|
31
|
+
location: double('location', validate_cached: true)
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
5
35
|
describe "ClassMethods" do
|
6
36
|
subject { Resolver }
|
7
37
|
|
8
|
-
describe "
|
38
|
+
describe "::initialize" do
|
9
39
|
let(:downloader) { Berkshelf.downloader }
|
10
40
|
|
11
41
|
it "adds the specified sources to the sources hash" do
|
12
|
-
source = CookbookSource.new("mysql", "= 1.2.4")
|
13
42
|
resolver = subject.new(downloader, source)
|
14
43
|
|
15
|
-
resolver.should have_source(source)
|
44
|
+
resolver.should have_source(source.name)
|
16
45
|
end
|
17
46
|
|
18
|
-
it "adds the dependencies of the source as
|
19
|
-
source = CookbookSource.new("mysql", "= 1.2.4")
|
47
|
+
it "adds the dependencies of the source as sources" do
|
20
48
|
resolver = subject.new(downloader, source)
|
21
49
|
|
22
|
-
source.dependencies.each do |name, constraint|
|
50
|
+
source.cached_cookbook.dependencies.each do |name, constraint|
|
23
51
|
resolver.package(name).should_not be_nil
|
24
52
|
end
|
25
53
|
end
|
26
54
|
|
27
55
|
it "adds the version_constraints of the dependencies to the graph" do
|
28
|
-
source = CookbookSource.new("mysql", "= 1.2.4")
|
29
56
|
resolver = subject.new(downloader, source)
|
30
57
|
|
31
|
-
source.dependencies.each do |name, constraint|
|
58
|
+
source.cached_cookbook.dependencies.each do |name, constraint|
|
32
59
|
resolver.package(name).versions.should_not be_empty
|
33
60
|
end
|
34
61
|
end
|
35
62
|
|
36
63
|
context "given an array of sources" do
|
37
|
-
it "adds
|
38
|
-
sources = [
|
64
|
+
it "adds each source to the sources hash" do
|
65
|
+
sources = [source]
|
39
66
|
resolver = subject.new(downloader, sources)
|
40
67
|
|
41
|
-
resolver.should have_source(sources[0])
|
68
|
+
resolver.should have_source(sources[0].name)
|
42
69
|
end
|
43
70
|
end
|
44
71
|
end
|
45
72
|
end
|
46
73
|
|
47
|
-
|
48
|
-
|
49
|
-
subject do
|
50
|
-
downloader = Berkshelf.downloader
|
51
|
-
Resolver.new(downloader)
|
52
|
-
end
|
74
|
+
subject { Resolver.new(Berkshelf.downloader) }
|
53
75
|
|
54
76
|
describe "#add_source" do
|
55
|
-
|
77
|
+
let(:package_version) { double('package-version', dependencies: Array.new) }
|
56
78
|
|
57
79
|
it "adds the source to the instance of resolver" do
|
80
|
+
subject.add_source(source)
|
81
|
+
|
58
82
|
subject.sources.should include(source)
|
59
83
|
end
|
60
84
|
|
@@ -63,46 +87,50 @@ module Berkshelf
|
|
63
87
|
end
|
64
88
|
|
65
89
|
it "adds a version constraint specified by the source to the package of the same name" do
|
90
|
+
subject.add_source(source)
|
91
|
+
|
66
92
|
subject.package(source.name).versions.collect(&:version).should include(source.version_constraint.version)
|
67
93
|
end
|
68
94
|
|
69
95
|
it "adds the dependencies of the source as packages to the graph" do
|
70
|
-
|
71
|
-
|
72
|
-
|
96
|
+
subject.should_receive(:add_source_dependencies).with(source)
|
97
|
+
|
98
|
+
subject.add_source(source)
|
73
99
|
end
|
74
100
|
|
75
101
|
it "raises a DuplicateSourceDefined exception if a source of the same name is added" do
|
76
|
-
|
102
|
+
subject.should_receive(:has_source?).with(source).and_return(true)
|
77
103
|
|
78
104
|
lambda {
|
79
|
-
subject.add_source(
|
105
|
+
subject.add_source(source)
|
80
106
|
}.should raise_error(DuplicateSourceDefined)
|
81
107
|
end
|
82
|
-
end
|
83
108
|
|
84
|
-
|
85
|
-
|
86
|
-
pkg_ver = subject.add_source(source)
|
87
|
-
subject.add_dependencies(pkg_ver, source.dependencies)
|
109
|
+
it "adds a package for each dependency to the packages attribute" do
|
110
|
+
subject.add_source(source)
|
88
111
|
|
89
|
-
|
112
|
+
source.cached_cookbook.dependencies.each do |name, constraint|
|
113
|
+
subject.package(name).should_not be_nil
|
114
|
+
end
|
90
115
|
end
|
91
116
|
|
92
|
-
|
93
|
-
|
94
|
-
|
117
|
+
context "when include_dependencies is false" do
|
118
|
+
it "does not try to include_dependencies" do
|
119
|
+
subject.should_not_receive(:add_source_dependencies)
|
95
120
|
|
96
|
-
|
121
|
+
subject.add_source(source, false)
|
122
|
+
end
|
97
123
|
end
|
98
124
|
end
|
99
125
|
|
100
|
-
describe "#
|
126
|
+
describe "#get_source" do
|
101
127
|
before(:each) { subject.add_source(source) }
|
102
128
|
|
103
|
-
|
104
|
-
|
105
|
-
|
129
|
+
context "given a string representation of the source to retrieve" do
|
130
|
+
it "returns the source of the same name" do
|
131
|
+
subject.get_source(source.name).should eql(source)
|
132
|
+
end
|
133
|
+
end
|
106
134
|
end
|
107
135
|
|
108
136
|
describe "#has_source?" do
|
@@ -116,24 +144,20 @@ module Berkshelf
|
|
116
144
|
describe "#resolve" do
|
117
145
|
before(:each) do
|
118
146
|
subject.add_source(source)
|
147
|
+
subject.add_source(source_two)
|
119
148
|
@solution = subject.resolve
|
120
149
|
end
|
121
150
|
|
122
|
-
it "returns an array of CachedCookbooks" do
|
123
|
-
@solution.
|
124
|
-
|
125
|
-
end
|
151
|
+
it "returns an array of the CachedCookbooks which make up the solution" do
|
152
|
+
@solution.should include(source.cached_cookbook)
|
153
|
+
@solution.should include(source_two.cached_cookbook)
|
126
154
|
end
|
127
|
-
|
128
|
-
it "returns a CachedCookbook for each resolved source" do
|
129
|
-
@solution.should have(2).items
|
130
|
-
end
|
131
|
-
|
155
|
+
|
132
156
|
it "resolves the given mysql source" do
|
133
157
|
@solution[0].cookbook_name.should eql("mysql")
|
134
158
|
@solution[0].version.should eql("1.2.4")
|
135
|
-
@solution[1].cookbook_name.should eql("
|
136
|
-
@solution[1].version.should eql("
|
159
|
+
@solution[1].cookbook_name.should eql("nginx")
|
160
|
+
@solution[1].version.should eql("0.101.2")
|
137
161
|
end
|
138
162
|
end
|
139
163
|
end
|
@@ -2,9 +2,14 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Berkshelf
|
4
4
|
describe Uploader do
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
|
6
|
+
unless config = YAML.load_file('features/config.yml')
|
7
|
+
raise "Could not load features/config.yml -- please generate it from features/config.sample.yml"
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:server_url) { config["chef_server_url"] }
|
11
|
+
let(:client_key) { config["client_key"] }
|
12
|
+
let(:node_name) { config["node_name"] }
|
8
13
|
|
9
14
|
subject { Uploader.new(server_url, client_key: client_key, node_name: node_name) }
|
10
15
|
|
@@ -14,7 +19,10 @@ module Berkshelf
|
|
14
19
|
context "when cookbook is valid" do
|
15
20
|
before(:each) do
|
16
21
|
cookbook.should_receive(:validate!).and_return(true)
|
17
|
-
cookbook.should_receive(:checksums).and_return(
|
22
|
+
cookbook.should_receive(:checksums).and_return(
|
23
|
+
"da97c94bb6acb2b7900cbf951654fea3" =>
|
24
|
+
File.expand_path("spec/fixtures/cookbooks/example_cookbook-0.5.0/recipes/default.rb")
|
25
|
+
)
|
18
26
|
subject.should_receive(:create_sandbox)
|
19
27
|
subject.should_receive(:upload_checksums_to_sandbox)
|
20
28
|
subject.should_receive(:commit_sandbox)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: berkshelf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-
|
15
|
+
date: 2012-07-04 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: dep_selector
|
@@ -388,6 +388,7 @@ files:
|
|
388
388
|
- lib/berkshelf/cli.rb
|
389
389
|
- lib/berkshelf/cookbook_source.rb
|
390
390
|
- lib/berkshelf/cookbook_source/git_location.rb
|
391
|
+
- lib/berkshelf/cookbook_source/location.rb
|
391
392
|
- lib/berkshelf/cookbook_source/path_location.rb
|
392
393
|
- lib/berkshelf/cookbook_source/site_location.rb
|
393
394
|
- lib/berkshelf/cookbook_store.rb
|
@@ -396,6 +397,7 @@ files:
|
|
396
397
|
- lib/berkshelf/core_ext/fileutils.rb
|
397
398
|
- lib/berkshelf/core_ext/kernel.rb
|
398
399
|
- lib/berkshelf/core_ext/pathname.rb
|
400
|
+
- lib/berkshelf/core_ext/string.rb
|
399
401
|
- lib/berkshelf/downloader.rb
|
400
402
|
- lib/berkshelf/dsl.rb
|
401
403
|
- lib/berkshelf/errors.rb
|
@@ -417,8 +419,9 @@ files:
|
|
417
419
|
- spec/fixtures/cookbooks/example_cookbook/README.md
|
418
420
|
- spec/fixtures/cookbooks/example_cookbook/metadata.rb
|
419
421
|
- spec/fixtures/cookbooks/example_cookbook/recipes/default.rb
|
420
|
-
- spec/fixtures/cookbooks/
|
421
|
-
- spec/fixtures/cookbooks/
|
422
|
+
- spec/fixtures/cookbooks/example_metadata_name/metadata.rb
|
423
|
+
- spec/fixtures/cookbooks/example_metadata_no_name/metadata.rb
|
424
|
+
- spec/fixtures/cookbooks/example_no_metadata/recipes/default.rb
|
422
425
|
- spec/fixtures/cookbooks/nginx-0.100.5/README.md
|
423
426
|
- spec/fixtures/cookbooks/nginx-0.100.5/attributes/default.rb
|
424
427
|
- spec/fixtures/cookbooks/nginx-0.100.5/definitions/nginx_site.rb
|
@@ -440,6 +443,7 @@ files:
|
|
440
443
|
- spec/unit/berkshelf/berksfile_spec.rb
|
441
444
|
- spec/unit/berkshelf/cached_cookbook_spec.rb
|
442
445
|
- spec/unit/berkshelf/cookbook_source/git_location_spec.rb
|
446
|
+
- spec/unit/berkshelf/cookbook_source/location_spec.rb
|
443
447
|
- spec/unit/berkshelf/cookbook_source/path_location_spec.rb
|
444
448
|
- spec/unit/berkshelf/cookbook_source/site_location_spec.rb
|
445
449
|
- spec/unit/berkshelf/cookbook_source_spec.rb
|
@@ -474,7 +478,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
474
478
|
version: '0'
|
475
479
|
segments:
|
476
480
|
- 0
|
477
|
-
hash: -
|
481
|
+
hash: -4298839394573709666
|
478
482
|
requirements: []
|
479
483
|
rubyforge_project:
|
480
484
|
rubygems_version: 1.8.23
|
@@ -501,8 +505,9 @@ test_files:
|
|
501
505
|
- spec/fixtures/cookbooks/example_cookbook/README.md
|
502
506
|
- spec/fixtures/cookbooks/example_cookbook/metadata.rb
|
503
507
|
- spec/fixtures/cookbooks/example_cookbook/recipes/default.rb
|
504
|
-
- spec/fixtures/cookbooks/
|
505
|
-
- spec/fixtures/cookbooks/
|
508
|
+
- spec/fixtures/cookbooks/example_metadata_name/metadata.rb
|
509
|
+
- spec/fixtures/cookbooks/example_metadata_no_name/metadata.rb
|
510
|
+
- spec/fixtures/cookbooks/example_no_metadata/recipes/default.rb
|
506
511
|
- spec/fixtures/cookbooks/nginx-0.100.5/README.md
|
507
512
|
- spec/fixtures/cookbooks/nginx-0.100.5/attributes/default.rb
|
508
513
|
- spec/fixtures/cookbooks/nginx-0.100.5/definitions/nginx_site.rb
|
@@ -524,6 +529,7 @@ test_files:
|
|
524
529
|
- spec/unit/berkshelf/berksfile_spec.rb
|
525
530
|
- spec/unit/berkshelf/cached_cookbook_spec.rb
|
526
531
|
- spec/unit/berkshelf/cookbook_source/git_location_spec.rb
|
532
|
+
- spec/unit/berkshelf/cookbook_source/location_spec.rb
|
527
533
|
- spec/unit/berkshelf/cookbook_source/path_location_spec.rb
|
528
534
|
- spec/unit/berkshelf/cookbook_source/site_location_spec.rb
|
529
535
|
- spec/unit/berkshelf/cookbook_source_spec.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
(*&)*^^^@(8123_)@(jkladsf}})end))) +++ /0
|
@@ -1 +0,0 @@
|
|
1
|
-
<%= (*&)*^^^@(8123_)@(jkladsf}})end))) +++%>
|