chef-config 12.22.1 → 12.22.3

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,366 +1,366 @@
1
- #
2
- # Author:: Daniel DeLeo (<dan@chef.io>)
3
- # Copyright:: Copyright 2014-2016, Chef Software, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require "spec_helper"
20
- require "tempfile"
21
-
22
- require "chef-config/exceptions"
23
- require "chef-config/windows"
24
- require "chef-config/workstation_config_loader"
25
-
26
- RSpec.describe ChefConfig::WorkstationConfigLoader do
27
-
28
- let(:explicit_config_location) { nil }
29
-
30
- let(:env) { {} }
31
-
32
- let(:config_loader) do
33
- described_class.new(explicit_config_location).tap do |c|
34
- allow(c).to receive(:env).and_return(env)
35
- end
36
- end
37
-
38
- before do
39
- # We set this to nil so that a dev workstation will
40
- # not interfere with the tests.
41
- ChefConfig::Config[:config_d_dir] = nil
42
- end
43
-
44
- # Test methods that do I/O or reference external state which are stubbed out
45
- # elsewhere.
46
- describe "external dependencies" do
47
- let(:config_loader) { described_class.new(nil) }
48
-
49
- it "delegates to ENV for env" do
50
- expect(config_loader.env).to equal(ENV)
51
- end
52
-
53
- it "tests a path's existence" do
54
- expect(config_loader.path_exists?("/nope/nope/nope/nope/frab/jab/nab")).to be(false)
55
- expect(config_loader.path_exists?(__FILE__)).to be(true)
56
- end
57
-
58
- end
59
-
60
- describe "locating the config file" do
61
- context "without an explicit config" do
62
-
63
- before do
64
- allow(config_loader).to receive(:path_exists?).with(an_instance_of(String)).and_return(false)
65
- end
66
-
67
- it "has no config if HOME is not set" do
68
- expect(config_loader.config_location).to be(nil)
69
- expect(config_loader.no_config_found?).to be(true)
70
- end
71
-
72
- context "when HOME is set and contains a knife.rb" do
73
-
74
- let(:home) { "/Users/example.user" }
75
-
76
- before do
77
- allow(ChefConfig::PathHelper).to receive(:home).with(".chef").and_yield(File.join(home, ".chef"))
78
- allow(config_loader).to receive(:path_exists?).with("#{home}/.chef/knife.rb").and_return(true)
79
- end
80
-
81
- it "uses the config in HOME/.chef/knife.rb" do
82
- expect(config_loader.config_location).to eq("#{home}/.chef/knife.rb")
83
- end
84
-
85
- context "and has a config.rb" do
86
-
87
- before do
88
- allow(config_loader).to receive(:path_exists?).with("#{home}/.chef/config.rb").and_return(true)
89
- end
90
-
91
- it "uses the config in HOME/.chef/config.rb" do
92
- expect(config_loader.config_location).to eq("#{home}/.chef/config.rb")
93
- end
94
-
95
- context "and/or a parent dir contains a .chef dir" do
96
-
97
- let(:env_pwd) { "/path/to/cwd" }
98
-
99
- before do
100
- if ChefConfig.windows?
101
- env["CD"] = env_pwd
102
- else
103
- env["PWD"] = env_pwd
104
- end
105
-
106
- allow(config_loader).to receive(:path_exists?).with("#{env_pwd}/.chef/knife.rb").and_return(true)
107
- allow(File).to receive(:exist?).with("#{env_pwd}/.chef").and_return(true)
108
- allow(File).to receive(:directory?).with("#{env_pwd}/.chef").and_return(true)
109
- end
110
-
111
- it "prefers the config from parent_dir/.chef" do
112
- expect(config_loader.config_location).to eq("#{env_pwd}/.chef/knife.rb")
113
- end
114
-
115
- context "and the parent dir's .chef dir has a config.rb" do
116
-
117
- before do
118
- allow(config_loader).to receive(:path_exists?).with("#{env_pwd}/.chef/config.rb").and_return(true)
119
- end
120
-
121
- it "prefers the config from parent_dir/.chef" do
122
- expect(config_loader.config_location).to eq("#{env_pwd}/.chef/config.rb")
123
- end
124
-
125
- context "and/or the current working directory contains a .chef dir" do
126
-
127
- let(:cwd) { Dir.pwd }
128
-
129
- before do
130
- allow(config_loader).to receive(:path_exists?).with("#{cwd}/knife.rb").and_return(true)
131
- end
132
-
133
- it "prefers a knife.rb located in the cwd" do
134
- expect(config_loader.config_location).to eq("#{cwd}/knife.rb")
135
- end
136
-
137
- context "and the CWD's .chef dir has a config.rb" do
138
-
139
- before do
140
- allow(config_loader).to receive(:path_exists?).with("#{cwd}/config.rb").and_return(true)
141
- end
142
-
143
- it "prefers a config located in the cwd" do
144
- expect(config_loader.config_location).to eq("#{cwd}/config.rb")
145
- end
146
-
147
- context "and/or KNIFE_HOME is set" do
148
-
149
- let(:knife_home) { "/path/to/knife/home" }
150
-
151
- before do
152
- env["KNIFE_HOME"] = knife_home
153
- allow(config_loader).to receive(:path_exists?).with("#{knife_home}/knife.rb").and_return(true)
154
- end
155
-
156
- it "prefers a knife located in KNIFE_HOME" do
157
- expect(config_loader.config_location).to eq("/path/to/knife/home/knife.rb")
158
- end
159
-
160
- context "and KNIFE_HOME contains a config.rb" do
161
-
162
- before do
163
- env["KNIFE_HOME"] = knife_home
164
- allow(config_loader).to receive(:path_exists?).with("#{knife_home}/config.rb").and_return(true)
165
- end
166
-
167
- it "prefers a config.rb located in KNIFE_HOME" do
168
- expect(config_loader.config_location).to eq("/path/to/knife/home/config.rb")
169
- end
170
-
171
- end
172
-
173
- end
174
- end
175
- end
176
- end
177
- end
178
- end
179
- end
180
-
181
- context "when the current working dir is inside a symlinked directory" do
182
- before do
183
- # pwd according to your shell is /home/someuser/prod/chef-repo, but
184
- # chef-repo is a symlink to /home/someuser/codes/chef-repo
185
- env["CD"] = "/home/someuser/prod/chef-repo" # windows
186
- env["PWD"] = "/home/someuser/prod/chef-repo" # unix
187
-
188
- allow(Dir).to receive(:pwd).and_return("/home/someuser/codes/chef-repo")
189
- end
190
-
191
- it "loads the config from the non-dereferenced directory path" do
192
- expect(File).to receive(:exist?).with("/home/someuser/prod/chef-repo/.chef").and_return(false)
193
- expect(File).to receive(:exist?).with("/home/someuser/prod/.chef").and_return(true)
194
- expect(File).to receive(:directory?).with("/home/someuser/prod/.chef").and_return(true)
195
-
196
- expect(config_loader).to receive(:path_exists?).with("/home/someuser/prod/.chef/knife.rb").and_return(true)
197
-
198
- expect(config_loader.config_location).to eq("/home/someuser/prod/.chef/knife.rb")
199
- end
200
- end
201
- end
202
-
203
- context "when given an explicit config to load" do
204
-
205
- let(:explicit_config_location) { "/path/to/explicit/config.rb" }
206
-
207
- it "prefers the explicit config" do
208
- expect(config_loader.config_location).to eq(explicit_config_location)
209
- end
210
-
211
- end
212
- end
213
-
214
- describe "loading the config file" do
215
-
216
- context "when no explicit config is specifed and no implicit config is found" do
217
-
218
- before do
219
- allow(config_loader).to receive(:path_exists?).with(an_instance_of(String)).and_return(false)
220
- end
221
-
222
- it "skips loading" do
223
- expect(config_loader.config_location).to be(nil)
224
- expect(config_loader).not_to receive(:apply_config)
225
- config_loader.load
226
- end
227
-
228
- end
229
-
230
- context "when an explicit config is given but it doesn't exist" do
231
-
232
- let(:explicit_config_location) { "/nope/nope/nope/frab/jab/nab" }
233
-
234
- it "raises a configuration error" do
235
- expect { config_loader.load }.to raise_error(ChefConfig::ConfigurationError)
236
- end
237
-
238
- end
239
-
240
- context "when the config file exists" do
241
-
242
- let(:config_content) { "" }
243
-
244
- # We need to keep a reference to the tempfile because while #close does
245
- # not unlink the file, the object being GC'd will.
246
- let(:tempfile) do
247
- Tempfile.new("Chef-WorkstationConfigLoader-rspec-test").tap do |t|
248
- t.print(config_content)
249
- t.close
250
- end
251
- end
252
-
253
- let(:explicit_config_location) do
254
- tempfile.path
255
- end
256
-
257
- after { File.unlink(explicit_config_location) if File.exist?(explicit_config_location) }
258
-
259
- context "and is valid" do
260
-
261
- let(:config_content) { "config_file_evaluated(true)" }
262
-
263
- it "loads the config" do
264
- expect(config_loader).to receive(:apply_config).and_call_original
265
- config_loader.load
266
- expect(ChefConfig::Config.config_file_evaluated).to be(true)
267
- end
268
-
269
- it "sets ChefConfig::Config.config_file" do
270
- config_loader.load
271
- expect(ChefConfig::Config.config_file).to eq(explicit_config_location)
272
- end
273
- end
274
-
275
- context "and has a syntax error" do
276
-
277
- let(:config_content) { "{{{{{:{{" }
278
-
279
- it "raises a ConfigurationError" do
280
- expect { config_loader.load }.to raise_error(ChefConfig::ConfigurationError)
281
- end
282
- end
283
-
284
- context "and raises a ruby exception during evaluation" do
285
-
286
- let(:config_content) { ":foo\n:bar\nraise 'oops'\n:baz\n" }
287
-
288
- it "raises a ConfigurationError" do
289
- expect { config_loader.load }.to raise_error(ChefConfig::ConfigurationError)
290
- end
291
- end
292
-
293
- end
294
-
295
- end
296
-
297
- describe "when loading config.d" do
298
- context "when the conf.d directory exists" do
299
- let(:config_content) { "" }
300
-
301
- let(:tempdir) { Dir.mktmpdir("chef-workstation-test") }
302
-
303
- let!(:confd_file) do
304
- Tempfile.new(["Chef-WorkstationConfigLoader-rspec-test", ".rb"], tempdir).tap do |t|
305
- t.print(config_content)
306
- t.close
307
- end
308
- end
309
-
310
- before do
311
- ChefConfig::Config[:config_d_dir] = tempdir
312
- allow(config_loader).to receive(:path_exists?).with(
313
- an_instance_of(String)).and_return(false)
314
- end
315
-
316
- after do
317
- FileUtils.remove_entry_secure tempdir
318
- end
319
-
320
- context "and is valid" do
321
- let(:config_content) { "config_d_file_evaluated(true)" }
322
-
323
- it "loads the config" do
324
- expect(config_loader).to receive(:apply_config).and_call_original
325
- config_loader.load
326
- expect(ChefConfig::Config.config_d_file_evaluated).to be(true)
327
- end
328
- end
329
-
330
- context "and has a syntax error" do
331
- let(:config_content) { "{{{{{:{{" }
332
-
333
- it "raises a ConfigurationError" do
334
- expect { config_loader.load }.to raise_error(ChefConfig::ConfigurationError)
335
- end
336
- end
337
-
338
- context "has a non rb file" do
339
- let(:sytax_error_content) { "{{{{{:{{" }
340
- let(:config_content) { "config_d_file_evaluated(true)" }
341
-
342
- let!(:not_confd_file) do
343
- Tempfile.new(["Chef-WorkstationConfigLoader-rspec-test", ".foorb"], tempdir).tap do |t|
344
- t.print(sytax_error_content)
345
- t.close
346
- end
347
- end
348
-
349
- it "does not load the non rb file" do
350
- expect { config_loader.load }.not_to raise_error
351
- expect(ChefConfig::Config.config_d_file_evaluated).to be(true)
352
- end
353
- end
354
- end
355
-
356
- context "when the conf.d directory does not exist" do
357
- before do
358
- ChefConfig::Config[:config_d_dir] = "/nope/nope/nope/nope/notdoingit"
359
- end
360
-
361
- it "does not load anything" do
362
- expect(config_loader).not_to receive(:apply_config)
363
- end
364
- end
365
- end
366
- end
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@chef.io>)
3
+ # Copyright:: Copyright 2014-2016, Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require "spec_helper"
20
+ require "tempfile"
21
+
22
+ require "chef-config/exceptions"
23
+ require "chef-config/windows"
24
+ require "chef-config/workstation_config_loader"
25
+
26
+ RSpec.describe ChefConfig::WorkstationConfigLoader do
27
+
28
+ let(:explicit_config_location) { nil }
29
+
30
+ let(:env) { {} }
31
+
32
+ let(:config_loader) do
33
+ described_class.new(explicit_config_location).tap do |c|
34
+ allow(c).to receive(:env).and_return(env)
35
+ end
36
+ end
37
+
38
+ before do
39
+ # We set this to nil so that a dev workstation will
40
+ # not interfere with the tests.
41
+ ChefConfig::Config[:config_d_dir] = nil
42
+ end
43
+
44
+ # Test methods that do I/O or reference external state which are stubbed out
45
+ # elsewhere.
46
+ describe "external dependencies" do
47
+ let(:config_loader) { described_class.new(nil) }
48
+
49
+ it "delegates to ENV for env" do
50
+ expect(config_loader.env).to equal(ENV)
51
+ end
52
+
53
+ it "tests a path's existence" do
54
+ expect(config_loader.path_exists?("/nope/nope/nope/nope/frab/jab/nab")).to be(false)
55
+ expect(config_loader.path_exists?(__FILE__)).to be(true)
56
+ end
57
+
58
+ end
59
+
60
+ describe "locating the config file" do
61
+ context "without an explicit config" do
62
+
63
+ before do
64
+ allow(config_loader).to receive(:path_exists?).with(an_instance_of(String)).and_return(false)
65
+ end
66
+
67
+ it "has no config if HOME is not set" do
68
+ expect(config_loader.config_location).to be(nil)
69
+ expect(config_loader.no_config_found?).to be(true)
70
+ end
71
+
72
+ context "when HOME is set and contains a knife.rb" do
73
+
74
+ let(:home) { "/Users/example.user" }
75
+
76
+ before do
77
+ allow(ChefConfig::PathHelper).to receive(:home).with(".chef").and_yield(File.join(home, ".chef"))
78
+ allow(config_loader).to receive(:path_exists?).with("#{home}/.chef/knife.rb").and_return(true)
79
+ end
80
+
81
+ it "uses the config in HOME/.chef/knife.rb" do
82
+ expect(config_loader.config_location).to eq("#{home}/.chef/knife.rb")
83
+ end
84
+
85
+ context "and has a config.rb" do
86
+
87
+ before do
88
+ allow(config_loader).to receive(:path_exists?).with("#{home}/.chef/config.rb").and_return(true)
89
+ end
90
+
91
+ it "uses the config in HOME/.chef/config.rb" do
92
+ expect(config_loader.config_location).to eq("#{home}/.chef/config.rb")
93
+ end
94
+
95
+ context "and/or a parent dir contains a .chef dir" do
96
+
97
+ let(:env_pwd) { "/path/to/cwd" }
98
+
99
+ before do
100
+ if ChefConfig.windows?
101
+ env["CD"] = env_pwd
102
+ else
103
+ env["PWD"] = env_pwd
104
+ end
105
+
106
+ allow(config_loader).to receive(:path_exists?).with("#{env_pwd}/.chef/knife.rb").and_return(true)
107
+ allow(File).to receive(:exist?).with("#{env_pwd}/.chef").and_return(true)
108
+ allow(File).to receive(:directory?).with("#{env_pwd}/.chef").and_return(true)
109
+ end
110
+
111
+ it "prefers the config from parent_dir/.chef" do
112
+ expect(config_loader.config_location).to eq("#{env_pwd}/.chef/knife.rb")
113
+ end
114
+
115
+ context "and the parent dir's .chef dir has a config.rb" do
116
+
117
+ before do
118
+ allow(config_loader).to receive(:path_exists?).with("#{env_pwd}/.chef/config.rb").and_return(true)
119
+ end
120
+
121
+ it "prefers the config from parent_dir/.chef" do
122
+ expect(config_loader.config_location).to eq("#{env_pwd}/.chef/config.rb")
123
+ end
124
+
125
+ context "and/or the current working directory contains a .chef dir" do
126
+
127
+ let(:cwd) { Dir.pwd }
128
+
129
+ before do
130
+ allow(config_loader).to receive(:path_exists?).with("#{cwd}/knife.rb").and_return(true)
131
+ end
132
+
133
+ it "prefers a knife.rb located in the cwd" do
134
+ expect(config_loader.config_location).to eq("#{cwd}/knife.rb")
135
+ end
136
+
137
+ context "and the CWD's .chef dir has a config.rb" do
138
+
139
+ before do
140
+ allow(config_loader).to receive(:path_exists?).with("#{cwd}/config.rb").and_return(true)
141
+ end
142
+
143
+ it "prefers a config located in the cwd" do
144
+ expect(config_loader.config_location).to eq("#{cwd}/config.rb")
145
+ end
146
+
147
+ context "and/or KNIFE_HOME is set" do
148
+
149
+ let(:knife_home) { "/path/to/knife/home" }
150
+
151
+ before do
152
+ env["KNIFE_HOME"] = knife_home
153
+ allow(config_loader).to receive(:path_exists?).with("#{knife_home}/knife.rb").and_return(true)
154
+ end
155
+
156
+ it "prefers a knife located in KNIFE_HOME" do
157
+ expect(config_loader.config_location).to eq("/path/to/knife/home/knife.rb")
158
+ end
159
+
160
+ context "and KNIFE_HOME contains a config.rb" do
161
+
162
+ before do
163
+ env["KNIFE_HOME"] = knife_home
164
+ allow(config_loader).to receive(:path_exists?).with("#{knife_home}/config.rb").and_return(true)
165
+ end
166
+
167
+ it "prefers a config.rb located in KNIFE_HOME" do
168
+ expect(config_loader.config_location).to eq("/path/to/knife/home/config.rb")
169
+ end
170
+
171
+ end
172
+
173
+ end
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
179
+ end
180
+
181
+ context "when the current working dir is inside a symlinked directory" do
182
+ before do
183
+ # pwd according to your shell is /home/someuser/prod/chef-repo, but
184
+ # chef-repo is a symlink to /home/someuser/codes/chef-repo
185
+ env["CD"] = "/home/someuser/prod/chef-repo" # windows
186
+ env["PWD"] = "/home/someuser/prod/chef-repo" # unix
187
+
188
+ allow(Dir).to receive(:pwd).and_return("/home/someuser/codes/chef-repo")
189
+ end
190
+
191
+ it "loads the config from the non-dereferenced directory path" do
192
+ expect(File).to receive(:exist?).with("/home/someuser/prod/chef-repo/.chef").and_return(false)
193
+ expect(File).to receive(:exist?).with("/home/someuser/prod/.chef").and_return(true)
194
+ expect(File).to receive(:directory?).with("/home/someuser/prod/.chef").and_return(true)
195
+
196
+ expect(config_loader).to receive(:path_exists?).with("/home/someuser/prod/.chef/knife.rb").and_return(true)
197
+
198
+ expect(config_loader.config_location).to eq("/home/someuser/prod/.chef/knife.rb")
199
+ end
200
+ end
201
+ end
202
+
203
+ context "when given an explicit config to load" do
204
+
205
+ let(:explicit_config_location) { "/path/to/explicit/config.rb" }
206
+
207
+ it "prefers the explicit config" do
208
+ expect(config_loader.config_location).to eq(explicit_config_location)
209
+ end
210
+
211
+ end
212
+ end
213
+
214
+ describe "loading the config file" do
215
+
216
+ context "when no explicit config is specifed and no implicit config is found" do
217
+
218
+ before do
219
+ allow(config_loader).to receive(:path_exists?).with(an_instance_of(String)).and_return(false)
220
+ end
221
+
222
+ it "skips loading" do
223
+ expect(config_loader.config_location).to be(nil)
224
+ expect(config_loader).not_to receive(:apply_config)
225
+ config_loader.load
226
+ end
227
+
228
+ end
229
+
230
+ context "when an explicit config is given but it doesn't exist" do
231
+
232
+ let(:explicit_config_location) { "/nope/nope/nope/frab/jab/nab" }
233
+
234
+ it "raises a configuration error" do
235
+ expect { config_loader.load }.to raise_error(ChefConfig::ConfigurationError)
236
+ end
237
+
238
+ end
239
+
240
+ context "when the config file exists" do
241
+
242
+ let(:config_content) { "" }
243
+
244
+ # We need to keep a reference to the tempfile because while #close does
245
+ # not unlink the file, the object being GC'd will.
246
+ let(:tempfile) do
247
+ Tempfile.new("Chef-WorkstationConfigLoader-rspec-test").tap do |t|
248
+ t.print(config_content)
249
+ t.close
250
+ end
251
+ end
252
+
253
+ let(:explicit_config_location) do
254
+ tempfile.path
255
+ end
256
+
257
+ after { File.unlink(explicit_config_location) if File.exist?(explicit_config_location) }
258
+
259
+ context "and is valid" do
260
+
261
+ let(:config_content) { "config_file_evaluated(true)" }
262
+
263
+ it "loads the config" do
264
+ expect(config_loader).to receive(:apply_config).and_call_original
265
+ config_loader.load
266
+ expect(ChefConfig::Config.config_file_evaluated).to be(true)
267
+ end
268
+
269
+ it "sets ChefConfig::Config.config_file" do
270
+ config_loader.load
271
+ expect(ChefConfig::Config.config_file).to eq(explicit_config_location)
272
+ end
273
+ end
274
+
275
+ context "and has a syntax error" do
276
+
277
+ let(:config_content) { "{{{{{:{{" }
278
+
279
+ it "raises a ConfigurationError" do
280
+ expect { config_loader.load }.to raise_error(ChefConfig::ConfigurationError)
281
+ end
282
+ end
283
+
284
+ context "and raises a ruby exception during evaluation" do
285
+
286
+ let(:config_content) { ":foo\n:bar\nraise 'oops'\n:baz\n" }
287
+
288
+ it "raises a ConfigurationError" do
289
+ expect { config_loader.load }.to raise_error(ChefConfig::ConfigurationError)
290
+ end
291
+ end
292
+
293
+ end
294
+
295
+ end
296
+
297
+ describe "when loading config.d" do
298
+ context "when the conf.d directory exists" do
299
+ let(:config_content) { "" }
300
+
301
+ let(:tempdir) { Dir.mktmpdir("chef-workstation-test") }
302
+
303
+ let!(:confd_file) do
304
+ Tempfile.new(["Chef-WorkstationConfigLoader-rspec-test", ".rb"], tempdir).tap do |t|
305
+ t.print(config_content)
306
+ t.close
307
+ end
308
+ end
309
+
310
+ before do
311
+ ChefConfig::Config[:config_d_dir] = tempdir
312
+ allow(config_loader).to receive(:path_exists?).with(
313
+ an_instance_of(String)).and_return(false)
314
+ end
315
+
316
+ after do
317
+ FileUtils.remove_entry_secure tempdir
318
+ end
319
+
320
+ context "and is valid" do
321
+ let(:config_content) { "config_d_file_evaluated(true)" }
322
+
323
+ it "loads the config" do
324
+ expect(config_loader).to receive(:apply_config).and_call_original
325
+ config_loader.load
326
+ expect(ChefConfig::Config.config_d_file_evaluated).to be(true)
327
+ end
328
+ end
329
+
330
+ context "and has a syntax error" do
331
+ let(:config_content) { "{{{{{:{{" }
332
+
333
+ it "raises a ConfigurationError" do
334
+ expect { config_loader.load }.to raise_error(ChefConfig::ConfigurationError)
335
+ end
336
+ end
337
+
338
+ context "has a non rb file" do
339
+ let(:sytax_error_content) { "{{{{{:{{" }
340
+ let(:config_content) { "config_d_file_evaluated(true)" }
341
+
342
+ let!(:not_confd_file) do
343
+ Tempfile.new(["Chef-WorkstationConfigLoader-rspec-test", ".foorb"], tempdir).tap do |t|
344
+ t.print(sytax_error_content)
345
+ t.close
346
+ end
347
+ end
348
+
349
+ it "does not load the non rb file" do
350
+ expect { config_loader.load }.not_to raise_error
351
+ expect(ChefConfig::Config.config_d_file_evaluated).to be(true)
352
+ end
353
+ end
354
+ end
355
+
356
+ context "when the conf.d directory does not exist" do
357
+ before do
358
+ ChefConfig::Config[:config_d_dir] = "/nope/nope/nope/nope/notdoingit"
359
+ end
360
+
361
+ it "does not load anything" do
362
+ expect(config_loader).not_to receive(:apply_config)
363
+ end
364
+ end
365
+ end
366
+ end