berkshelf 7.0.9 → 7.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -12
  3. data/Rakefile +2 -2
  4. data/berkshelf.gemspec +3 -4
  5. data/bin/berks +1 -1
  6. data/lib/berkshelf.rb +7 -8
  7. data/lib/berkshelf/api_client.rb +2 -2
  8. data/lib/berkshelf/api_client/chef_server_connection.rb +4 -6
  9. data/lib/berkshelf/api_client/remote_cookbook.rb +1 -1
  10. data/lib/berkshelf/berksfile.rb +32 -32
  11. data/lib/berkshelf/chef_config_compat.rb +1 -1
  12. data/lib/berkshelf/cli.rb +5 -5
  13. data/lib/berkshelf/community_rest.rb +3 -3
  14. data/lib/berkshelf/config.rb +2 -2
  15. data/lib/berkshelf/cookbook_store.rb +2 -4
  16. data/lib/berkshelf/core_ext/file_utils.rb +3 -3
  17. data/lib/berkshelf/downloader.rb +5 -5
  18. data/lib/berkshelf/errors.rb +3 -0
  19. data/lib/berkshelf/file_syncer.rb +10 -12
  20. data/lib/berkshelf/installer.rb +7 -7
  21. data/lib/berkshelf/location.rb +3 -3
  22. data/lib/berkshelf/locations/git.rb +6 -12
  23. data/lib/berkshelf/lockfile.rb +9 -9
  24. data/lib/berkshelf/mixin/git.rb +2 -2
  25. data/lib/berkshelf/packager.rb +5 -7
  26. data/lib/berkshelf/shell.rb +1 -1
  27. data/lib/berkshelf/shell_out.rb +4 -3
  28. data/lib/berkshelf/source.rb +2 -2
  29. data/lib/berkshelf/source_uri.rb +1 -1
  30. data/lib/berkshelf/ssl_policies.rb +5 -7
  31. data/lib/berkshelf/uploader.rb +36 -36
  32. data/lib/berkshelf/validator.rb +2 -8
  33. data/lib/berkshelf/version.rb +1 -1
  34. data/lib/berkshelf/visualizer.rb +2 -2
  35. data/spec/spec_helper.rb +1 -1
  36. data/spec/support/git.rb +18 -18
  37. data/spec/support/path_helpers.rb +4 -4
  38. data/spec/unit/berkshelf/berkshelf/api_client/chef_server_connection_spec.rb +65 -0
  39. data/spec/unit/berkshelf/core_ext/file_utils_spec.rb +2 -2
  40. data/spec/unit/berkshelf/locations/git_spec.rb +2 -5
  41. data/spec/unit/berkshelf/ridley_compat_spec.rb +1 -1
  42. data/spec/unit/berkshelf/source_spec.rb +22 -12
  43. data/spec/unit/berkshelf/ssl_policies_spec.rb +0 -1
  44. data/spec/unit/berkshelf/validator_spec.rb +0 -13
  45. metadata +11 -10
@@ -0,0 +1,65 @@
1
+ require "spec_helper"
2
+
3
+ describe Berkshelf::APIClient::ChefServerConnection do
4
+ let(:instance) do
5
+ described_class.new(
6
+ server_url: "https://chef.example.org/organizations/foobar",
7
+ timeout: 30,
8
+ open_timeout: 3,
9
+ ssl: {}
10
+ )
11
+ end
12
+
13
+ describe "#universe" do
14
+ before do
15
+ body_response = %q{{"ruby":{"1.2.3":{"endpoint_priority":0,"platforms":{},"dependencies":{"build-essential":">= 1.2.2"},"location_type":"supermarket","location_path":"https://supermarket.getchef.com/"},"2.0.0":{"endpoint_priority":0,"platforms":{},"dependencies":{"build-essential":">= 1.2.2"},"location_type":"supermarket","location_path":"https://supermarket.getchef.com/"}},"elixir":{"1.0.0":{"endpoint_priority":0,"platforms":{"CentOS":"= 6.0.0"},"dependencies":{},"location_type":"supermarket","location_path":"https://supermarket.getchef.com/"}}}}
16
+
17
+ stub_request(:get, "https://chef.example.org/organizations/foobar/universe")
18
+ .to_return(status: 200, body: body_response, headers: { "Content-Type" => "application/json; charset=utf-8" })
19
+ end
20
+
21
+ subject { instance.universe }
22
+
23
+ it "returns an array of APIClient::RemoteCookbook" do
24
+ expect(subject).to be_a(Array)
25
+
26
+ subject.each do |remote|
27
+ expect(remote).to be_a(Berkshelf::APIClient::RemoteCookbook)
28
+ end
29
+ end
30
+
31
+ it "contains a item for each dependency" do
32
+ expect(subject.size).to eq(3)
33
+ expect(subject[0].name).to eql("ruby")
34
+ expect(subject[0].version).to eql("1.2.3")
35
+ expect(subject[1].name).to eql("ruby")
36
+ expect(subject[1].version).to eql("2.0.0")
37
+ expect(subject[2].name).to eql("elixir")
38
+ expect(subject[2].version).to eql("1.0.0")
39
+ end
40
+
41
+ it "has the dependencies for each" do
42
+ expect(subject[0].dependencies).to include("build-essential" => ">= 1.2.2")
43
+ expect(subject[1].dependencies).to include("build-essential" => ">= 1.2.2")
44
+ expect(subject[2].dependencies).to be_empty
45
+ end
46
+
47
+ it "has the platforms for each" do
48
+ expect(subject[0].platforms).to be_empty
49
+ expect(subject[1].platforms).to be_empty
50
+ expect(subject[2].platforms).to include("CentOS" => "= 6.0.0")
51
+ end
52
+
53
+ it "has a location_path for each" do
54
+ subject.each do |remote|
55
+ expect(remote.location_path).to_not be_nil
56
+ end
57
+ end
58
+
59
+ it "has a location_type for each" do
60
+ subject.each do |remote|
61
+ expect(remote.location_type).to_not be_nil
62
+ end
63
+ end
64
+ end
65
+ end
@@ -7,12 +7,12 @@ describe FileUtils do
7
7
  let(:options) { {} }
8
8
 
9
9
  it "uses mv by default" do
10
- expect(FileUtils).to receive(:old_mv).with(src, dest, options)
10
+ expect(FileUtils).to receive(:old_mv).with(src, dest, **options)
11
11
  FileUtils.mv(src, dest, options)
12
12
  end
13
13
 
14
14
  it "replaces mv with cp_r and rm_rf" do
15
- expect(FileUtils).to receive(:cp_r).with(src, dest, options)
15
+ expect(FileUtils).to receive(:cp_r).with(src, dest, **options)
16
16
  expect(FileUtils).to receive(:rm_rf).with(src)
17
17
 
18
18
  FileUtils.mv(src, dest, options)
@@ -104,11 +104,10 @@ module Berkshelf
104
104
 
105
105
  context "when the repository is cached" do
106
106
  it "pulls a new version" do
107
- allow(Dir).to receive(:chdir) { |args, &b| b.call } # Force eval the chdir block
108
-
107
+ cache_path = subject.send(:cache_path)
109
108
  allow(subject).to receive(:cached?).and_return(true)
110
109
  expect(subject).to receive(:git).with(
111
- 'fetch --force --tags https://repo.com "refs/heads/*:refs/heads/*"'
110
+ 'fetch --force --tags https://repo.com "refs/heads/*:refs/heads/*"', cwd: cache_path.to_s
112
111
  )
113
112
  subject.install
114
113
  end
@@ -116,8 +115,6 @@ module Berkshelf
116
115
 
117
116
  context "when the revision is not cached" do
118
117
  it "clones the repository" do
119
- allow(Dir).to receive(:chdir) { |args, &b| b.call } # Force eval the chdir block
120
-
121
118
  cache_path = subject.send(:cache_path)
122
119
  allow(subject).to receive(:cached?).and_return(false)
123
120
  expect(subject).to receive(:git).with(
@@ -4,7 +4,7 @@ require "chef/cookbook_manifest"
4
4
  describe Berkshelf::RidleyCompat do
5
5
  let(:opts) { {} }
6
6
 
7
- subject { described_class.new(opts) }
7
+ subject { described_class.new(**opts) }
8
8
 
9
9
  context "default" do
10
10
  it "has a cookbook version_class" do
@@ -4,8 +4,9 @@ module Berkshelf
4
4
  describe Source do
5
5
  let(:berksfile) { double("Berksfile", filepath: "/test/Berksfile") }
6
6
  let(:arguments) { [] }
7
+ let(:kwargs) { {} }
7
8
  let(:config) { Config.new }
8
- subject(:instance) { described_class.new(berksfile, *arguments) }
9
+ subject(:instance) { described_class.new(berksfile, *arguments, **kwargs) }
9
10
  before do
10
11
  allow(Berkshelf::Config).to receive(:instance).and_return(config)
11
12
  end
@@ -19,7 +20,8 @@ module Berkshelf
19
20
  end
20
21
 
21
22
  context "with a string argument and options" do
22
- let(:arguments) { ["https://example.com", { key: "value" }] }
23
+ let(:arguments) { ["https://example.com" ] }
24
+ let(:kwargs) { { key: "value" } }
23
25
  it { is_expected.to eq :supermarket }
24
26
  end
25
27
 
@@ -29,7 +31,8 @@ module Berkshelf
29
31
  end
30
32
 
31
33
  context "with a symbol argument and options" do
32
- let(:arguments) { [:chef_server, { key: "value" }] }
34
+ let(:arguments) { [:chef_server ] }
35
+ let(:kwargs) { { key: "value" } }
33
36
  it { is_expected.to eq :chef_server }
34
37
  end
35
38
 
@@ -44,7 +47,8 @@ module Berkshelf
44
47
  end
45
48
 
46
49
  context "with a hash argument and disconnected options" do
47
- let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" }, { key: "value" }] }
50
+ let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" }] }
51
+ let(:kwargs) { { key: "value" } }
48
52
  it { is_expected.to eq :artifactory }
49
53
  end
50
54
  end
@@ -58,7 +62,8 @@ module Berkshelf
58
62
  end
59
63
 
60
64
  context "with a string argument and options" do
61
- let(:arguments) { ["https://example.com", { key: "value" }] }
65
+ let(:arguments) { ["https://example.com" ] }
66
+ let(:kwargs) { { key: "value" } }
62
67
  it { is_expected.to eq "https://example.com" }
63
68
  end
64
69
 
@@ -69,7 +74,8 @@ module Berkshelf
69
74
  end
70
75
 
71
76
  context "with a symbol argument and options" do
72
- let(:arguments) { [:chef_server, { key: "value" }] }
77
+ let(:arguments) { [:chef_server] }
78
+ let(:kwargs) { { key: "value" } }
73
79
  before { config.chef.chef_server_url = "https://chefserver/" }
74
80
  it { is_expected.to eq "https://chefserver/" }
75
81
  end
@@ -85,7 +91,8 @@ module Berkshelf
85
91
  end
86
92
 
87
93
  context "with a hash argument and disconnected options" do
88
- let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" }, { key: "value" }] }
94
+ let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" } ] }
95
+ let(:kwargs) { { key: "value" } }
89
96
  it { is_expected.to eq "https://example.com/api/chef/chef-virtual" }
90
97
  end
91
98
 
@@ -96,7 +103,7 @@ module Berkshelf
96
103
 
97
104
  context "with a chef_repo source" do
98
105
  let(:arguments) { [{ chef_repo: "." }] }
99
- it { is_expected.to eq(windows? ? "file://C/test" : "file:///test") }
106
+ it { is_expected.to eq(windows? ? "file://D/test" : "file:///test") }
100
107
  end
101
108
  end
102
109
 
@@ -119,7 +126,8 @@ module Berkshelf
119
126
  end
120
127
 
121
128
  context "with a string argument and options" do
122
- let(:arguments) { ["https://example.com", { key: "value" }] }
129
+ let(:arguments) { ["https://example.com"] }
130
+ let(:kwargs) { { key: "value" } }
123
131
  its([:key]) { is_expected.to eq "value" }
124
132
  end
125
133
 
@@ -129,7 +137,8 @@ module Berkshelf
129
137
  end
130
138
 
131
139
  context "with a symbol argument and options" do
132
- let(:arguments) { [:chef_server, { key: "value" }] }
140
+ let(:arguments) { [:chef_server] }
141
+ let(:kwargs) { { key: "value" } }
133
142
  its([:key]) { is_expected.to eq "value" }
134
143
  end
135
144
 
@@ -144,7 +153,8 @@ module Berkshelf
144
153
  end
145
154
 
146
155
  context "with a hash argument and disconnected options" do
147
- let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" }, { key: "value" }] }
156
+ let(:arguments) { [{ artifactory: "https://example.com/api/chef/chef-virtual" } ] }
157
+ let(:kwargs) { { key: "value" } }
148
158
  its([:key]) { is_expected.to eq "value" }
149
159
  end
150
160
 
@@ -156,7 +166,7 @@ module Berkshelf
156
166
 
157
167
  context "with a chef_repo source" do
158
168
  let(:arguments) { [{ chef_repo: "." }] }
159
- its([:path]) { is_expected.to eq(windows? ? "C:/test" : "/test") }
169
+ its([:path]) { is_expected.to eq(windows? ? "D:/test" : "/test") }
160
170
  end
161
171
  end
162
172
 
@@ -73,7 +73,6 @@ describe Berkshelf::SSLPolicy do
73
73
  before do
74
74
  allow(chef_config).to receive_messages(trusted_certs_dir: self_signed_crt_path_windows_backslashes)
75
75
  allow(File).to receive(:exist?).with(self_signed_crt_path_windows_forwardslashes).and_return(true)
76
- allow(Dir).to receive(:chdir).with(self_signed_crt_path_windows_forwardslashes)
77
76
  end
78
77
 
79
78
  it "replaces the backslashes in trusted_certs_dir from Berkshelf config with forwardslashes" do
@@ -4,10 +4,6 @@ describe Berkshelf::Validator do
4
4
  describe "#validate_files" do
5
5
  let(:cookbook) { double("cookbook", cookbook_name: "cookbook", path: "path") }
6
6
 
7
- before do
8
- allow(Dir).to receive(:chdir) { |&block| block.call }
9
- end
10
-
11
7
  it "raises an error when the cookbook has spaces in the files" do
12
8
  allow(Dir).to receive(:glob).and_return(["/there are/spaces/in this/recipes/default.rb"])
13
9
  expect do
@@ -21,14 +17,5 @@ describe Berkshelf::Validator do
21
17
  subject.validate_files(cookbook)
22
18
  end.to_not raise_error
23
19
  end
24
-
25
- it "does not raise an exception with spaces in the path" do
26
- allow(Dir).to receive(:glob).and_return(["/there are/spaces/in this/recipes/default.rb"])
27
- allow_any_instance_of(Pathname).to receive(:dirname).and_return("/there are/spaces/in this")
28
-
29
- expect do
30
- subject.validate_files(cookbook)
31
- end.to_not raise_error
32
- end
33
20
  end
34
21
  end
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: 7.0.9
4
+ version: 7.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Winsor
@@ -9,10 +9,10 @@ authors:
9
9
  - Michael Ivey
10
10
  - Justin Campbell
11
11
  - Seth Vargo
12
- autorequire:
12
+ autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2020-01-27 00:00:00.000000000 Z
15
+ date: 2021-06-16 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: mixlib-shellout
@@ -130,7 +130,7 @@ dependencies:
130
130
  requirements:
131
131
  - - ">="
132
132
  - !ruby/object:Gem::Version
133
- version: '0.4'
133
+ version: 1.1.4
134
134
  - - "<"
135
135
  - !ruby/object:Gem::Version
136
136
  version: '2.0'
@@ -140,7 +140,7 @@ dependencies:
140
140
  requirements:
141
141
  - - ">="
142
142
  - !ruby/object:Gem::Version
143
- version: '0.4'
143
+ version: 1.1.4
144
144
  - - "<"
145
145
  - !ruby/object:Gem::Version
146
146
  version: '2.0'
@@ -164,14 +164,14 @@ dependencies:
164
164
  requirements:
165
165
  - - ">="
166
166
  - !ruby/object:Gem::Version
167
- version: 13.6.52
167
+ version: 15.7.32
168
168
  type: :runtime
169
169
  prerelease: false
170
170
  version_requirements: !ruby/object:Gem::Requirement
171
171
  requirements:
172
172
  - - ">="
173
173
  - !ruby/object:Gem::Version
174
- version: 13.6.52
174
+ version: 15.7.32
175
175
  - !ruby/object:Gem::Dependency
176
176
  name: chef-config
177
177
  requirement: !ruby/object:Gem::Requirement
@@ -315,6 +315,7 @@ files:
315
315
  - spec/support/path_helpers.rb
316
316
  - spec/support/shared_examples/formatter.rb
317
317
  - spec/unit/berkshelf/berksfile_spec.rb
318
+ - spec/unit/berkshelf/berkshelf/api_client/chef_server_connection_spec.rb
318
319
  - spec/unit/berkshelf/berkshelf/api_client/connection_spec.rb
319
320
  - spec/unit/berkshelf/berkshelf/api_client/remote_cookbook_spec.rb
320
321
  - spec/unit/berkshelf/berkshelf/api_client_spec.rb
@@ -359,7 +360,7 @@ homepage: https://docs.chef.io/berkshelf.html
359
360
  licenses:
360
361
  - Apache-2.0
361
362
  metadata: {}
362
- post_install_message:
363
+ post_install_message:
363
364
  rdoc_options: []
364
365
  require_paths:
365
366
  - lib
@@ -374,8 +375,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
374
375
  - !ruby/object:Gem::Version
375
376
  version: 2.0.0
376
377
  requirements: []
377
- rubygems_version: 3.0.3
378
- signing_key:
378
+ rubygems_version: 3.2.15
379
+ signing_key:
379
380
  specification_version: 4
380
381
  summary: Manages a Chef cookbook's dependencies
381
382
  test_files: []