diff options
-rw-r--r-- | lib/chef/cookbook_uploader.rb | 7 | ||||
-rw-r--r-- | spec/unit/cookbook_uploader_spec.rb | 32 |
2 files changed, 37 insertions, 2 deletions
diff --git a/lib/chef/cookbook_uploader.rb b/lib/chef/cookbook_uploader.rb index d294684d78..f24ce2cd56 100644 --- a/lib/chef/cookbook_uploader.rb +++ b/lib/chef/cookbook_uploader.rb @@ -41,6 +41,7 @@ class Chef @cookbooks = Array(cookbooks) @rest = opts[:rest] || Chef::REST.new(Chef::Config[:chef_server_url]) @concurrency = opts[:concurrency] || 10 + @policy_mode = opts[:policy_mode] || false end def upload_cookbooks @@ -94,7 +95,7 @@ class Chef # files are uploaded, so save the manifest cookbooks.each do |cb| - manifest = Chef::CookbookManifest.new(cb) + manifest = Chef::CookbookManifest.new(cb, policy_mode: policy_mode?) save_url = opts[:force] ? manifest.force_save_url : manifest.save_url begin @@ -147,5 +148,9 @@ class Chef end end + def policy_mode? + @policy_mode + end + end end diff --git a/spec/unit/cookbook_uploader_spec.rb b/spec/unit/cookbook_uploader_spec.rb index deb0536487..152e5373f0 100644 --- a/spec/unit/cookbook_uploader_spec.rb +++ b/spec/unit/cookbook_uploader_spec.rb @@ -45,7 +45,13 @@ describe Chef::CookbookUploader do let(:sandbox_commit_uri) { "https://chef.example.org/sandboxes/abc123" } - let(:uploader) { described_class.new(cookbooks_to_upload, :rest => http_client) } + let(:policy_mode) { false } + + let(:uploader) { described_class.new(cookbooks_to_upload, rest: http_client, policy_mode: policy_mode) } + + it "defaults to not enabling policy mode" do + expect(described_class.new(cookbooks_to_upload, rest: http_client).policy_mode?).to be(false) + end it "has a list of cookbooks to upload" do expect(uploader.cookbooks).to eq(cookbooks_to_upload) @@ -159,6 +165,30 @@ describe Chef::CookbookUploader do end end + + context "when policy_mode is specified" do + + let(:cksums_not_on_remote) do + checksums_of_cookbook_files.keys + end + + let(:policy_mode) { true } + + def expected_save_url(cookbook) + "cookbook_artifacts/#{cookbook.name}/#{cookbook.version}" + end + + it "uploads all files in a sandbox transaction, then creates cookbooks on the server using cookbook_artifacts API" do + expect_sandbox_create + expect_checksum_upload + expect_sandbox_commit + expect_cookbook_create + + uploader.upload_cookbooks + end + + + end end end |