chef-dk 2.3.4 → 2.4.17

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 +22 -18
  3. data/Gemfile.lock +184 -254
  4. data/README.md +1 -1
  5. data/Rakefile +1 -1
  6. data/acceptance/Gemfile.lock +27 -32
  7. data/lib/chef-dk/chef_server_api_multi.rb +73 -0
  8. data/lib/chef-dk/command/update.rb +5 -12
  9. data/lib/chef-dk/configurable.rb +19 -0
  10. data/lib/chef-dk/cookbook_omnifetch.rb +1 -0
  11. data/lib/chef-dk/exceptions.rb +11 -0
  12. data/lib/chef-dk/generator.rb +1 -1
  13. data/lib/chef-dk/policyfile/attribute_merge_checker.rb +110 -0
  14. data/lib/chef-dk/policyfile/chef_server_cookbook_source.rb +5 -4
  15. data/lib/chef-dk/policyfile/chef_server_lock_fetcher.rb +164 -0
  16. data/lib/chef-dk/policyfile/cookbook_location_specification.rb +3 -3
  17. data/lib/chef-dk/policyfile/dsl.rb +16 -0
  18. data/lib/chef-dk/policyfile/included_policies_cookbook_source.rb +156 -0
  19. data/lib/chef-dk/policyfile/local_lock_fetcher.rb +122 -0
  20. data/lib/chef-dk/policyfile/lock_applier.rb +80 -0
  21. data/lib/chef-dk/policyfile/null_cookbook_source.rb +4 -0
  22. data/lib/chef-dk/policyfile/policyfile_location_specification.rb +122 -0
  23. data/lib/chef-dk/policyfile_compiler.rb +129 -16
  24. data/lib/chef-dk/policyfile_lock.rb +30 -0
  25. data/lib/chef-dk/policyfile_services/install.rb +7 -1
  26. data/lib/chef-dk/policyfile_services/update_attributes.rb +10 -2
  27. data/lib/chef-dk/skeletons/code_generator/templates/default/recipe_spec.rb.erb +14 -1
  28. data/lib/chef-dk/version.rb +1 -1
  29. data/omnibus_overrides.rb +6 -6
  30. data/spec/unit/chef_server_api_multi_spec.rb +120 -0
  31. data/spec/unit/command/update_spec.rb +3 -3
  32. data/spec/unit/configurable_spec.rb +27 -0
  33. data/spec/unit/policyfile/attribute_merge_checker_spec.rb +80 -0
  34. data/spec/unit/policyfile/chef_server_lock_fetcher_spec.rb +161 -0
  35. data/spec/unit/policyfile/cookbook_location_specification_spec.rb +48 -0
  36. data/spec/unit/policyfile/included_policies_cookbook_source_spec.rb +242 -0
  37. data/spec/unit/policyfile/local_lock_fetcher_spec.rb +161 -0
  38. data/spec/unit/policyfile/lock_applier_spec.rb +100 -0
  39. data/spec/unit/policyfile_demands_spec.rb +1 -1
  40. data/spec/unit/policyfile_includes_dsl_spec.rb +159 -0
  41. data/spec/unit/policyfile_includes_spec.rb +720 -0
  42. data/spec/unit/policyfile_install_with_includes_spec.rb +232 -0
  43. data/spec/unit/policyfile_lock_build_spec.rb +11 -2
  44. data/spec/unit/policyfile_services/update_attributes_spec.rb +13 -0
  45. metadata +28 -3
@@ -0,0 +1,232 @@
1
+ # -*- coding: UTF-8 -*-
2
+ #
3
+ # Copyright:: Copyright (c) 2017 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 "chef-dk/policyfile_compiler"
21
+ require "chef-dk/policyfile_lock.rb"
22
+
23
+ describe ChefDK::PolicyfileLock, "installing cookbooks from included policies" do
24
+
25
+ let(:run_list) { ["local::default"] }
26
+
27
+ let(:default_source) { [:community] }
28
+
29
+ let(:external_cookbook_universe) do
30
+ {
31
+ "cookbookA" => {
32
+ "1.0.0" => [ ],
33
+ "2.0.0" => [ ["cookbookB", "= 2.0.0" ]],
34
+ },
35
+ "cookbookB" => {
36
+ "1.0.0" => [ ],
37
+ "2.0.0" => [ ],
38
+ },
39
+ "cookbookC" => {
40
+ "1.0.0" => [ ],
41
+ "2.0.0" => [ ],
42
+ },
43
+ "local" => {
44
+ "1.0.0" => [ ["cookbookC", "= 1.0.0" ] ],
45
+ },
46
+ "local_easy" => {
47
+ "1.0.0" => [ ["cookbookC", "= 2.0.0" ] ],
48
+ },
49
+ }
50
+ end
51
+
52
+ let(:included_policy_cookbook_universe) { external_cookbook_universe }
53
+
54
+ let(:included_policy_default_attributes) { {} }
55
+ let(:included_policy_override_attributes) { {} }
56
+ let(:included_policy_expanded_named_runlist) { nil }
57
+ let(:included_policy_expanded_runlist) { ["recipe[cookbookA::default]"] }
58
+ let(:included_policy_cookbooks) do
59
+ [
60
+ {
61
+ name: "cookbookA",
62
+ version: "2.0.0",
63
+ },
64
+ # We need to manually specify the dependencies of cookbookA
65
+ {
66
+ name: "cookbookB",
67
+ version: "2.0.0",
68
+ },
69
+ ]
70
+ end
71
+
72
+ let(:included_policy_source_options) do
73
+ {
74
+ "cookbookA" => {
75
+ "2.0.0" => { artifactserver: "https://supermarket.example/c/cookbookA/2.0.0/download", version: "2.0.0", from_included_policy: "withavalue" },
76
+ },
77
+ "cookbookB" => {
78
+ "2.0.0" => { artifactserver: "https://supermarket.example/c/cookbookB/2.0.0/download", version: "2.0.0", from_included_policy: "withavalue" },
79
+ },
80
+ }
81
+ end
82
+
83
+ let(:included_policy_lock_data) do
84
+ cookbook_locks = included_policy_cookbooks.inject({}) do |acc, cookbook_info|
85
+ acc[cookbook_info[:name]] = {
86
+ "version" => cookbook_info[:version],
87
+ "identifier" => "identifier",
88
+ "dotted_decimal_identifier" => "dotted_decimal_identifier",
89
+ "cache_key" => "#{cookbook_info[:name]}-#{cookbook_info[:version]}",
90
+ "origin" => "uri",
91
+ "source_options" => included_policy_source_options[cookbook_info[:name]][cookbook_info[:version]],
92
+ }
93
+ acc
94
+ end
95
+
96
+ solution_dependencies_lock = included_policy_cookbooks.map do |cookbook_info|
97
+ [cookbook_info[:name], cookbook_info[:version]]
98
+ end
99
+
100
+ solution_dependencies_cookbooks = included_policy_cookbooks.inject({}) do |acc, cookbook_info|
101
+ acc["#{cookbook_info[:name]} (#{cookbook_info[:version]})"] = included_policy_cookbook_universe[cookbook_info[:name]][cookbook_info[:version]]
102
+ acc
103
+ end
104
+
105
+ {
106
+ "name" => "included_policyfile",
107
+ "revision_id" => "myrevisionid",
108
+ "run_list" => included_policy_expanded_runlist,
109
+ "cookbook_locks" => cookbook_locks,
110
+ "default_attributes" => included_policy_default_attributes,
111
+ "override_attributes" => included_policy_override_attributes,
112
+ "solution_dependencies" => {
113
+ "Policyfile" => solution_dependencies_lock,
114
+ "dependencies" => solution_dependencies_cookbooks,
115
+ },
116
+ }.tap do |core|
117
+ core["named_run_lists"] = included_policy_expanded_named_runlist if included_policy_expanded_named_runlist
118
+ end
119
+ end
120
+
121
+ let(:lock_source_options) { { :path => "somelocation" } }
122
+
123
+ let(:included_policy_lock_name) { "included" }
124
+
125
+ let(:included_policy_fetcher) do
126
+ instance_double("ChefDK::Policyfile::LocalLockFetcher").tap do |double|
127
+ allow(double).to receive(:lock_data).and_return(included_policy_lock_data)
128
+ allow(double).to receive(:valid?).and_return(true)
129
+ allow(double).to receive(:errors).and_return([])
130
+ end
131
+ end
132
+
133
+ let(:default_source_obj) do
134
+ instance_double("ChefDK::Policyfile::CommunityCookbookSource")
135
+ end
136
+
137
+ let(:policyfile) do
138
+ policyfile = ChefDK::PolicyfileCompiler.new.build do |p|
139
+ p.run_list(*run_list)
140
+ end
141
+
142
+ allow(policyfile.dsl).to receive(:default_source).and_return([default_source_obj])
143
+
144
+ allow(default_source_obj).to receive(:universe_graph).
145
+ and_return(external_cookbook_universe)
146
+
147
+ allow(default_source_obj).to receive(:null?).and_return(false)
148
+ allow(default_source_obj).to receive(:preferred_cookbooks).and_return([])
149
+
150
+ allow(policyfile).to receive(:included_policies).and_return([included_policy_lock_spec])
151
+
152
+ policyfile
153
+ end
154
+
155
+ before do
156
+
157
+ allow(default_source_obj).to receive(:preferred_source_for?).and_return(false)
158
+
159
+ allow(default_source_obj).to receive(:source_options_for) do |cookbook_name, version|
160
+ { artifactserver: "https://supermarket.example/c/#{cookbook_name}/#{version}/download", version: version }
161
+ end
162
+
163
+ allow(ChefDK::Policyfile::CookbookLocationSpecification).to receive(:new) do |cookbook_name, version_constraint, source_opts, storage_config|
164
+ double = instance_double("ChefDK::Policyfile::CookbookLocationSpecification",
165
+ name: cookbook_name,
166
+ version_constraint: Semverse::Constraint.new(version_constraint),
167
+ ensure_cached: nil,
168
+ to_s: "#{cookbook_name} #{version_constraint}")
169
+ allow(double).to receive(:cookbook_has_recipe?).and_return(true)
170
+ allow(double).to receive(:installed?).and_return(true)
171
+ allow(double).to receive(:mirrors_canonical_upstream?).and_return(true)
172
+ allow(double).to receive(:cache_key).and_return("#{cookbook_name}-#{version_constraint}-#{source_opts}")
173
+ allow(double).to receive(:uri).and_return("uri://#{cookbook_name}-#{version_constraint}-#{source_opts}")
174
+ allow(double).to receive(:source_options_for_lock).and_return(source_opts)
175
+ double
176
+ end
177
+ end
178
+
179
+ context "when a policy is included" do
180
+ let(:included_policy_lock_spec) do
181
+ ChefDK::Policyfile::PolicyfileLocationSpecification.new(included_policy_lock_name, lock_source_options, nil).tap do |spec|
182
+ allow(spec).to receive(:valid?).and_return(true)
183
+ allow(spec).to receive(:fetcher).and_return(included_policy_fetcher)
184
+ allow(spec).to receive(:source_options_for_lock).and_return(lock_source_options)
185
+ end
186
+ end
187
+
188
+ before do
189
+ policyfile.install
190
+ end
191
+
192
+ it "maintains the correct source locations for cookbooks from the included policy" do
193
+ expect(policyfile.lock.cookbook_locks["cookbookA"].source_options).to eq(included_policy_source_options["cookbookA"]["2.0.0"])
194
+ expect(policyfile.lock.cookbook_locks["cookbookB"].source_options).to eq(included_policy_source_options["cookbookB"]["2.0.0"])
195
+ end
196
+
197
+ it "maintains the correct source locations for cookbooks from the current policy" do
198
+ expect(policyfile.lock.cookbook_locks["local"].source_options).to eq(default_source_obj.source_options_for("local", "1.0.0"))
199
+ expect(policyfile.lock.cookbook_locks["cookbookC"].source_options).to eq(default_source_obj.source_options_for("cookbookC", "1.0.0"))
200
+ end
201
+
202
+ it "maintains identifiers for remote cookbooks" do
203
+ allow(ChefDK::Policyfile::CachedCookbook).to receive(:new) do |name, storage_config|
204
+ mock = ChefDK::Policyfile::CachedCookbook.allocate
205
+ mock.send(:initialize, name, storage_config)
206
+ allow(mock).to receive(:installed?).and_return(true)
207
+ allow(mock).to receive(:validate!)
208
+ allow(mock).to receive(:cookbook_version) do
209
+ instance_double("Chef::CookbookVersion",
210
+ version: mock.source_options[:version],
211
+ manifest_records_by_path: [])
212
+ end
213
+ mock
214
+ end
215
+ expect(policyfile.lock.to_lock["cookbook_locks"]["cookbookA"]["source_options"]).to eq(included_policy_source_options["cookbookA"]["2.0.0"])
216
+ expect(policyfile.lock.to_lock["cookbook_locks"]["cookbookB"]["source_options"]).to eq(included_policy_source_options["cookbookB"]["2.0.0"])
217
+ end
218
+
219
+ it "emits the included policy in the lock file" do
220
+ lock = policyfile.lock
221
+ allow(lock).to receive(:cookbook_locks_for_lockfile).and_return({})
222
+ expect(lock.to_lock["included_policy_locks"]).to eq(
223
+ [
224
+ {
225
+ "name" => included_policy_lock_name,
226
+ "revision_id" => "myrevisionid",
227
+ "source_options" => lock_source_options,
228
+ },
229
+ ])
230
+ end
231
+ end
232
+ end
@@ -238,6 +238,7 @@ REVISION_STRING
238
238
  "override_attributes" => {},
239
239
 
240
240
  "solution_dependencies" => { "Policyfile" => [], "dependencies" => {} },
241
+ "included_policy_locks" => [],
241
242
  }
242
243
  end
243
244
 
@@ -334,6 +335,7 @@ REVISION_STRING
334
335
  "override_attributes" => { "foo2" => "baz" },
335
336
 
336
337
  "solution_dependencies" => { "Policyfile" => [], "dependencies" => {} },
338
+ "included_policy_locks" => [],
337
339
  }
338
340
  end
339
341
 
@@ -425,6 +427,7 @@ REVISION_STRING
425
427
  "override_attributes" => {},
426
428
 
427
429
  "solution_dependencies" => { "Policyfile" => [], "dependencies" => {} },
430
+ "included_policy_locks" => [],
428
431
  }
429
432
  end
430
433
 
@@ -535,6 +538,7 @@ REVISION_STRING
535
538
  "override_attributes" => {},
536
539
 
537
540
  "solution_dependencies" => { "Policyfile" => [], "dependencies" => {} },
541
+ "included_policy_locks" => [],
538
542
  }
539
543
  end
540
544
 
@@ -680,7 +684,7 @@ REVISION_STRING
680
684
  "override_attributes" => {},
681
685
 
682
686
  "solution_dependencies" => { "Policyfile" => [], "dependencies" => {} },
683
-
687
+ "included_policy_locks" => [],
684
688
  }
685
689
  end
686
690
 
@@ -772,6 +776,7 @@ REVISION_STRING
772
776
  "Policyfile" => [],
773
777
  "dependencies" => { "foo (1.0.0)" => [] },
774
778
  },
779
+ "included_policy_locks" => [],
775
780
  }
776
781
  end
777
782
 
@@ -841,6 +846,7 @@ REVISION_STRING
841
846
  "override_attributes" => {},
842
847
 
843
848
  "solution_dependencies" => { "Policyfile" => [], "dependencies" => {} },
849
+ "included_policy_locks" => [],
844
850
  }
845
851
  end
846
852
 
@@ -933,7 +939,9 @@ REVISION_STRING
933
939
  all_cookbook_location_specs: { "foo" => cached_location_spec, "bar" => local_location_spec },
934
940
  solution_dependencies: policyfile_solution_dependencies,
935
941
  default_attributes: policyfile_default_attrs,
936
- override_attributes: policyfile_override_attrs )
942
+ override_attributes: policyfile_override_attrs,
943
+ included_policies: []
944
+ )
937
945
  end
938
946
 
939
947
  let(:policyfile_lock) do
@@ -1019,6 +1027,7 @@ REVISION_STRING
1019
1027
  "Policyfile" => [ [ "foo", "~> 1.0" ] ],
1020
1028
  "dependencies" => { "foo (1.0.0)" => [], "bar (0.1.0)" => [] },
1021
1029
  },
1030
+ "included_policy_locks" => [],
1022
1031
  }
1023
1032
  end
1024
1033
 
@@ -134,6 +134,7 @@ E
134
134
  "Policyfile" => [["local-cookbook", ">= 0.0.0"]],
135
135
  "dependencies" => { "local-cookbook (2.3.4)" => [] },
136
136
  },
137
+ "included_policy_locks" => [],
137
138
  }
138
139
  end
139
140
 
@@ -168,6 +169,18 @@ E
168
169
  expect(ui.output).to include(message)
169
170
  end
170
171
 
172
+ context "when a policyfile is included" do
173
+ let(:lock_applier) { instance_double("ChefDK::Policyfile::LockApplier") }
174
+
175
+ it "locks the included policyfile" do
176
+ expect(ChefDK::Policyfile::LockApplier).to receive(:new).with(
177
+ update_attrs_service.policyfile_lock, update_attrs_service.policyfile_compiler).and_return(lock_applier)
178
+ expect(lock_applier).not_to receive(:with_unlocked_policies)
179
+ expect(lock_applier).to receive(:apply!)
180
+
181
+ update_attrs_service.run
182
+ end
183
+ end
171
184
  end
172
185
 
173
186
  context "when the Policyfile.rb has different attributes than the lockfile" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-dk
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.4
4
+ version: 2.4.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel DeLeo
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-09-22 00:00:00.000000000 Z
13
+ date: 2017-11-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: mixlib-cli
@@ -262,6 +262,7 @@ files:
262
262
  - lib/chef-dk/authenticated_http.rb
263
263
  - lib/chef-dk/builtin_commands.rb
264
264
  - lib/chef-dk/chef_runner.rb
265
+ - lib/chef-dk/chef_server_api_multi.rb
265
266
  - lib/chef-dk/cli.rb
266
267
  - lib/chef-dk/command/base.rb
267
268
  - lib/chef-dk/command/clean_policy_cookbooks.rb
@@ -317,8 +318,10 @@ files:
317
318
  - lib/chef-dk/helpers.rb
318
319
  - lib/chef-dk/pager.rb
319
320
  - lib/chef-dk/policyfile/artifactory_cookbook_source.rb
321
+ - lib/chef-dk/policyfile/attribute_merge_checker.rb
320
322
  - lib/chef-dk/policyfile/chef_repo_cookbook_source.rb
321
323
  - lib/chef-dk/policyfile/chef_server_cookbook_source.rb
324
+ - lib/chef-dk/policyfile/chef_server_lock_fetcher.rb
322
325
  - lib/chef-dk/policyfile/community_cookbook_source.rb
323
326
  - lib/chef-dk/policyfile/comparison_base.rb
324
327
  - lib/chef-dk/policyfile/cookbook_location_specification.rb
@@ -327,8 +330,12 @@ files:
327
330
  - lib/chef-dk/policyfile/delivery_supermarket_source.rb
328
331
  - lib/chef-dk/policyfile/differ.rb
329
332
  - lib/chef-dk/policyfile/dsl.rb
333
+ - lib/chef-dk/policyfile/included_policies_cookbook_source.rb
330
334
  - lib/chef-dk/policyfile/lister.rb
335
+ - lib/chef-dk/policyfile/local_lock_fetcher.rb
336
+ - lib/chef-dk/policyfile/lock_applier.rb
331
337
  - lib/chef-dk/policyfile/null_cookbook_source.rb
338
+ - lib/chef-dk/policyfile/policyfile_location_specification.rb
332
339
  - lib/chef-dk/policyfile/read_cookbook_for_compat_mode_upload.rb
333
340
  - lib/chef-dk/policyfile/reports/install.rb
334
341
  - lib/chef-dk/policyfile/reports/table_printer.rb
@@ -430,6 +437,7 @@ files:
430
437
  - spec/spec_helper.rb
431
438
  - spec/test_helpers.rb
432
439
  - spec/unit/chef_runner_spec.rb
440
+ - spec/unit/chef_server_api_multi_spec.rb
433
441
  - spec/unit/cli_spec.rb
434
442
  - spec/unit/command/base_spec.rb
435
443
  - spec/unit/command/clean_policy_cookbooks_spec.rb
@@ -562,15 +570,20 @@ files:
562
570
  - spec/unit/generator_spec.rb
563
571
  - spec/unit/pager_spec.rb
564
572
  - spec/unit/policyfile/artifactory_cookbook_source_spec.rb
573
+ - spec/unit/policyfile/attribute_merge_checker_spec.rb
565
574
  - spec/unit/policyfile/chef_repo_cookbook_source_spec.rb
566
575
  - spec/unit/policyfile/chef_server_cookbook_source_spec.rb
576
+ - spec/unit/policyfile/chef_server_lock_fetcher_spec.rb
567
577
  - spec/unit/policyfile/community_cookbook_source_spec.rb
568
578
  - spec/unit/policyfile/comparison_base_spec.rb
569
579
  - spec/unit/policyfile/cookbook_location_specification_spec.rb
570
580
  - spec/unit/policyfile/cookbook_locks_spec.rb
571
581
  - spec/unit/policyfile/delivery_supermarket_source_spec.rb
572
582
  - spec/unit/policyfile/differ_spec.rb
583
+ - spec/unit/policyfile/included_policies_cookbook_source_spec.rb
573
584
  - spec/unit/policyfile/lister_spec.rb
585
+ - spec/unit/policyfile/local_lock_fetcher_spec.rb
586
+ - spec/unit/policyfile/lock_applier_spec.rb
574
587
  - spec/unit/policyfile/null_cookbook_source_spec.rb
575
588
  - spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb
576
589
  - spec/unit/policyfile/reports/install_spec.rb
@@ -583,6 +596,9 @@ files:
583
596
  - spec/unit/policyfile/uploader_spec.rb
584
597
  - spec/unit/policyfile_demands_spec.rb
585
598
  - spec/unit/policyfile_evaluation_spec.rb
599
+ - spec/unit/policyfile_includes_dsl_spec.rb
600
+ - spec/unit/policyfile_includes_spec.rb
601
+ - spec/unit/policyfile_install_with_includes_spec.rb
586
602
  - spec/unit/policyfile_lock_build_spec.rb
587
603
  - spec/unit/policyfile_lock_install_spec.rb
588
604
  - spec/unit/policyfile_lock_serialization_spec.rb
@@ -636,7 +652,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
636
652
  version: '0'
637
653
  requirements: []
638
654
  rubyforge_project:
639
- rubygems_version: 2.6.13
655
+ rubygems_version: 2.6.14
640
656
  signing_key:
641
657
  specification_version: 4
642
658
  summary: A streamlined development and deployment workflow for Chef platform.
@@ -651,6 +667,7 @@ test_files:
651
667
  - spec/spec_helper.rb
652
668
  - spec/test_helpers.rb
653
669
  - spec/unit/chef_runner_spec.rb
670
+ - spec/unit/chef_server_api_multi_spec.rb
654
671
  - spec/unit/cli_spec.rb
655
672
  - spec/unit/command/base_spec.rb
656
673
  - spec/unit/command/clean_policy_cookbooks_spec.rb
@@ -783,15 +800,20 @@ test_files:
783
800
  - spec/unit/generator_spec.rb
784
801
  - spec/unit/pager_spec.rb
785
802
  - spec/unit/policyfile/artifactory_cookbook_source_spec.rb
803
+ - spec/unit/policyfile/attribute_merge_checker_spec.rb
786
804
  - spec/unit/policyfile/chef_repo_cookbook_source_spec.rb
787
805
  - spec/unit/policyfile/chef_server_cookbook_source_spec.rb
806
+ - spec/unit/policyfile/chef_server_lock_fetcher_spec.rb
788
807
  - spec/unit/policyfile/community_cookbook_source_spec.rb
789
808
  - spec/unit/policyfile/comparison_base_spec.rb
790
809
  - spec/unit/policyfile/cookbook_location_specification_spec.rb
791
810
  - spec/unit/policyfile/cookbook_locks_spec.rb
792
811
  - spec/unit/policyfile/delivery_supermarket_source_spec.rb
793
812
  - spec/unit/policyfile/differ_spec.rb
813
+ - spec/unit/policyfile/included_policies_cookbook_source_spec.rb
794
814
  - spec/unit/policyfile/lister_spec.rb
815
+ - spec/unit/policyfile/local_lock_fetcher_spec.rb
816
+ - spec/unit/policyfile/lock_applier_spec.rb
795
817
  - spec/unit/policyfile/null_cookbook_source_spec.rb
796
818
  - spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb
797
819
  - spec/unit/policyfile/reports/install_spec.rb
@@ -804,6 +826,9 @@ test_files:
804
826
  - spec/unit/policyfile/uploader_spec.rb
805
827
  - spec/unit/policyfile_demands_spec.rb
806
828
  - spec/unit/policyfile_evaluation_spec.rb
829
+ - spec/unit/policyfile_includes_dsl_spec.rb
830
+ - spec/unit/policyfile_includes_spec.rb
831
+ - spec/unit/policyfile_install_with_includes_spec.rb
807
832
  - spec/unit/policyfile_lock_build_spec.rb
808
833
  - spec/unit/policyfile_lock_install_spec.rb
809
834
  - spec/unit/policyfile_lock_serialization_spec.rb