chef 15.6.10 → 15.7.30
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.
- checksums.yaml +4 -4
 - data/Gemfile +1 -1
 - data/README.md +2 -2
 - data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +22 -5
 - data/lib/chef/cookbook/cookbook_version_loader.rb +12 -6
 - data/lib/chef/cookbook_loader.rb +55 -2
 - data/lib/chef/cookbook_uploader.rb +2 -0
 - data/lib/chef/cookbook_version.rb +17 -0
 - data/lib/chef/dist.rb +3 -3
 - data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
 - data/lib/chef/knife/bootstrap.rb +5 -0
 - data/lib/chef/knife/bootstrap/templates/chef-full.erb +11 -11
 - data/lib/chef/knife/cookbook_upload.rb +75 -45
 - data/lib/chef/knife/core/bootstrap_context.rb +5 -5
 - data/lib/chef/knife/core/windows_bootstrap_context.rb +1 -1
 - data/lib/chef/knife/supermarket_install.rb +1 -1
 - data/lib/chef/log/winevt.rb +1 -1
 - data/lib/chef/mixin/openssl_helper.rb +21 -0
 - data/lib/chef/monkey_patches/net_http.rb +0 -38
 - data/lib/chef/provider/cron.rb +54 -9
 - data/lib/chef/provider/cron/aix.rb +9 -2
 - data/lib/chef/provider/launchd.rb +1 -1
 - data/lib/chef/provider/user/aix.rb +1 -1
 - data/lib/chef/provider/user/mac.rb +17 -22
 - data/lib/chef/provider/windows_task.rb +2 -2
 - data/lib/chef/resource/archive_file.rb +5 -2
 - data/lib/chef/resource/cron.rb +29 -0
 - data/lib/chef/resource/cron_d.rb +29 -0
 - data/lib/chef/resource/openssl_x509_certificate.rb +32 -21
 - data/lib/chef/resource/sudo.rb +13 -4
 - data/lib/chef/version.rb +2 -2
 - data/lib/chef/version_string.rb +3 -126
 - data/spec/data/cookbooks/apache2/metadata.json +33 -0
 - data/spec/data/cookbooks/java/metadata.json +33 -0
 - data/spec/functional/event_loggers/windows_eventlog_spec.rb +5 -5
 - data/spec/integration/knife/chef_fs_data_store_spec.rb +7 -2
 - data/spec/integration/knife/cookbook_upload_spec.rb +10 -0
 - data/spec/integration/knife/deps_spec.rb +11 -0
 - data/spec/integration/knife/upload_spec.rb +115 -14
 - data/spec/unit/cookbook/cookbook_version_loader_spec.rb +7 -4
 - data/spec/unit/knife/cookbook_upload_spec.rb +79 -18
 - data/spec/unit/mixin/openssl_helper_spec.rb +42 -0
 - data/spec/unit/provider/cron_spec.rb +127 -0
 - data/spec/unit/provider/user/aix_spec.rb +2 -2
 - metadata +8 -6
 
| 
         @@ -197,6 +197,7 @@ describe "knife upload", :workstation do 
     | 
|
| 
       197 
197 
     | 
    
         
             
                      end
         
     | 
| 
       198 
198 
     | 
    
         | 
| 
       199 
199 
     | 
    
         
             
                      it "knife upload adds the new files" do
         
     | 
| 
      
 200 
     | 
    
         
            +
                        expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       200 
201 
     | 
    
         
             
                        knife("upload /").should_succeed <<~EOM
         
     | 
| 
       201 
202 
     | 
    
         
             
                          Created /clients/y.json
         
     | 
| 
       202 
203 
     | 
    
         
             
                          Updated /cookbooks/x
         
     | 
| 
         @@ -209,10 +210,14 @@ describe "knife upload", :workstation do 
     | 
|
| 
       209 
210 
     | 
    
         
             
                          Created /roles/y.json
         
     | 
| 
       210 
211 
     | 
    
         
             
                          Created /users/y.json
         
     | 
| 
       211 
212 
     | 
    
         
             
                        EOM
         
     | 
| 
       212 
     | 
    
         
            -
                        knife("diff /").should_succeed  
     | 
| 
      
 213 
     | 
    
         
            +
                        knife("diff --name-status /").should_succeed <<~EOM
         
     | 
| 
      
 214 
     | 
    
         
            +
                          D\t/cookbooks/x/metadata.json
         
     | 
| 
      
 215 
     | 
    
         
            +
                          D\t/cookbooks/y/metadata.json
         
     | 
| 
      
 216 
     | 
    
         
            +
                        EOM
         
     | 
| 
       213 
217 
     | 
    
         
             
                      end
         
     | 
| 
       214 
218 
     | 
    
         | 
| 
       215 
219 
     | 
    
         
             
                      it "knife upload --no-diff adds the new files" do
         
     | 
| 
      
 220 
     | 
    
         
            +
                        expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       216 
221 
     | 
    
         
             
                        knife("upload --no-diff /").should_succeed <<~EOM
         
     | 
| 
       217 
222 
     | 
    
         
             
                          Created /clients/y.json
         
     | 
| 
       218 
223 
     | 
    
         
             
                          Updated /cookbooks/x
         
     | 
| 
         @@ -225,7 +230,10 @@ describe "knife upload", :workstation do 
     | 
|
| 
       225 
230 
     | 
    
         
             
                          Created /roles/y.json
         
     | 
| 
       226 
231 
     | 
    
         
             
                          Created /users/y.json
         
     | 
| 
       227 
232 
     | 
    
         
             
                        EOM
         
     | 
| 
       228 
     | 
    
         
            -
                        knife("diff --name-status /").should_succeed  
     | 
| 
      
 233 
     | 
    
         
            +
                        knife("diff --name-status /").should_succeed <<~EOM
         
     | 
| 
      
 234 
     | 
    
         
            +
                          D\t/cookbooks/x/metadata.json
         
     | 
| 
      
 235 
     | 
    
         
            +
                          D\t/cookbooks/y/metadata.json
         
     | 
| 
      
 236 
     | 
    
         
            +
                        EOM
         
     | 
| 
       229 
237 
     | 
    
         
             
                      end
         
     | 
| 
       230 
238 
     | 
    
         
             
                    end
         
     | 
| 
       231 
239 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -289,8 +297,8 @@ describe "knife upload", :workstation do 
     | 
|
| 
       289 
297 
     | 
    
         
             
                        Created /data_bags/x
         
     | 
| 
       290 
298 
     | 
    
         
             
                        Created /data_bags/x/y.json
         
     | 
| 
       291 
299 
     | 
    
         
             
                      EOM
         
     | 
| 
       292 
     | 
    
         
            -
                      knife("diff --name-status /data_bags").should_succeed  
     | 
| 
       293 
     | 
    
         
            -
            EOM
         
     | 
| 
      
 300 
     | 
    
         
            +
                      knife("diff --name-status /data_bags").should_succeed <<~EOM
         
     | 
| 
      
 301 
     | 
    
         
            +
                      EOM
         
     | 
| 
       294 
302 
     | 
    
         
             
                      expect(Chef::JSONCompat.parse(knife("raw /data/x/y").stdout, create_additions: false).keys.sort).to eq(%w{foo id})
         
     | 
| 
       295 
303 
     | 
    
         
             
                    end
         
     | 
| 
       296 
304 
     | 
    
         | 
| 
         @@ -446,11 +454,30 @@ EOM 
     | 
|
| 
       446 
454 
     | 
    
         
             
                # upload of a file is designed not to work at present.  Make sure that is the
         
     | 
| 
       447 
455 
     | 
    
         
             
                # case.
         
     | 
| 
       448 
456 
     | 
    
         
             
                when_the_chef_server "has a cookbook" do
         
     | 
| 
       449 
     | 
    
         
            -
             
     | 
| 
       450 
457 
     | 
    
         
             
                  before do
         
     | 
| 
       451 
458 
     | 
    
         
             
                    cookbook "x", "1.0.0", { "z.rb" => "" }
         
     | 
| 
       452 
459 
     | 
    
         
             
                  end
         
     | 
| 
       453 
460 
     | 
    
         | 
| 
      
 461 
     | 
    
         
            +
                  when_the_repository "does not have metadata file" do
         
     | 
| 
      
 462 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 463 
     | 
    
         
            +
                      file "cookbooks/x/y.rb", "hi"
         
     | 
| 
      
 464 
     | 
    
         
            +
                    end
         
     | 
| 
      
 465 
     | 
    
         
            +
             
     | 
| 
      
 466 
     | 
    
         
            +
                    it "raises MetadataNotFound exception" do
         
     | 
| 
      
 467 
     | 
    
         
            +
                      expect { knife("upload /cookbooks/x") }.to raise_error(Chef::Exceptions::MetadataNotFound)
         
     | 
| 
      
 468 
     | 
    
         
            +
                    end
         
     | 
| 
      
 469 
     | 
    
         
            +
                  end
         
     | 
| 
      
 470 
     | 
    
         
            +
             
     | 
| 
      
 471 
     | 
    
         
            +
                  when_the_repository "does not have valid metadata" do
         
     | 
| 
      
 472 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 473 
     | 
    
         
            +
                      file "cookbooks/x/metadata.rb", cb_metadata(nil, "1.0.0")
         
     | 
| 
      
 474 
     | 
    
         
            +
                    end
         
     | 
| 
      
 475 
     | 
    
         
            +
             
     | 
| 
      
 476 
     | 
    
         
            +
                    it "raises exception for invalid metadata" do
         
     | 
| 
      
 477 
     | 
    
         
            +
                      expect { knife("upload /cookbooks/x") }.to raise_error(Chef::Exceptions::MetadataNotValid)
         
     | 
| 
      
 478 
     | 
    
         
            +
                    end
         
     | 
| 
      
 479 
     | 
    
         
            +
                  end
         
     | 
| 
      
 480 
     | 
    
         
            +
             
     | 
| 
       454 
481 
     | 
    
         
             
                  when_the_repository "has a modified, extra and missing file for the cookbook" do
         
     | 
| 
       455 
482 
     | 
    
         
             
                    before do
         
     | 
| 
       456 
483 
     | 
    
         
             
                      file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0", "#modified")
         
     | 
| 
         @@ -462,20 +489,28 @@ EOM 
     | 
|
| 
       462 
489 
     | 
    
         
             
                      knife("upload /cookbooks/x/y.rb").should_fail "ERROR: /cookbooks/x cannot have a child created under it.\n"
         
     | 
| 
       463 
490 
     | 
    
         
             
                      knife("upload --purge /cookbooks/x/z.rb").should_fail "ERROR: /cookbooks/x/z.rb cannot be deleted.\n"
         
     | 
| 
       464 
491 
     | 
    
         
             
                    end
         
     | 
| 
      
 492 
     | 
    
         
            +
             
     | 
| 
       465 
493 
     | 
    
         
             
                    # TODO this is a bit of an inconsistency: if we didn't specify --purge,
         
     | 
| 
       466 
494 
     | 
    
         
             
                    # technically we shouldn't have deleted missing files.  But ... cookbooks
         
     | 
| 
       467 
495 
     | 
    
         
             
                    # are a special case.
         
     | 
| 
       468 
496 
     | 
    
         
             
                    it "knife upload of the cookbook itself succeeds" do
         
     | 
| 
      
 497 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       469 
498 
     | 
    
         
             
                      knife("upload /cookbooks/x").should_succeed <<~EOM
         
     | 
| 
       470 
499 
     | 
    
         
             
                        Updated /cookbooks/x
         
     | 
| 
       471 
500 
     | 
    
         
             
                      EOM
         
     | 
| 
       472 
     | 
    
         
            -
                      knife("diff --name-status /cookbooks").should_succeed  
     | 
| 
      
 501 
     | 
    
         
            +
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
      
 502 
     | 
    
         
            +
                        D\t/cookbooks/x/metadata.json
         
     | 
| 
      
 503 
     | 
    
         
            +
                      EOM
         
     | 
| 
       473 
504 
     | 
    
         
             
                    end
         
     | 
| 
      
 505 
     | 
    
         
            +
             
     | 
| 
       474 
506 
     | 
    
         
             
                    it "knife upload --purge of the cookbook itself succeeds" do
         
     | 
| 
      
 507 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       475 
508 
     | 
    
         
             
                      knife("upload /cookbooks/x").should_succeed <<~EOM
         
     | 
| 
       476 
509 
     | 
    
         
             
                        Updated /cookbooks/x
         
     | 
| 
       477 
510 
     | 
    
         
             
                      EOM
         
     | 
| 
       478 
     | 
    
         
            -
                      knife("diff --name-status /cookbooks").should_succeed  
     | 
| 
      
 511 
     | 
    
         
            +
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
      
 512 
     | 
    
         
            +
                        D\t/cookbooks/x/metadata.json
         
     | 
| 
      
 513 
     | 
    
         
            +
                      EOM
         
     | 
| 
       479 
514 
     | 
    
         
             
                    end
         
     | 
| 
       480 
515 
     | 
    
         
             
                  end
         
     | 
| 
       481 
516 
     | 
    
         
             
                  when_the_repository "has a missing file for the cookbook" do
         
     | 
| 
         @@ -485,10 +520,13 @@ EOM 
     | 
|
| 
       485 
520 
     | 
    
         
             
                    end
         
     | 
| 
       486 
521 
     | 
    
         | 
| 
       487 
522 
     | 
    
         
             
                    it "knife upload of the cookbook succeeds" do
         
     | 
| 
      
 523 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       488 
524 
     | 
    
         
             
                      knife("upload /cookbooks/x").should_succeed <<~EOM
         
     | 
| 
       489 
525 
     | 
    
         
             
                        Updated /cookbooks/x
         
     | 
| 
       490 
526 
     | 
    
         
             
                      EOM
         
     | 
| 
       491 
     | 
    
         
            -
                      knife("diff --name-status /cookbooks").should_succeed  
     | 
| 
      
 527 
     | 
    
         
            +
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
      
 528 
     | 
    
         
            +
                        D\t/cookbooks/x/metadata.json
         
     | 
| 
      
 529 
     | 
    
         
            +
                      EOM
         
     | 
| 
       492 
530 
     | 
    
         
             
                    end
         
     | 
| 
       493 
531 
     | 
    
         
             
                  end
         
     | 
| 
       494 
532 
     | 
    
         
             
                  when_the_repository "has an extra file for the cookbook" do
         
     | 
| 
         @@ -500,10 +538,13 @@ EOM 
     | 
|
| 
       500 
538 
     | 
    
         
             
                    end
         
     | 
| 
       501 
539 
     | 
    
         | 
| 
       502 
540 
     | 
    
         
             
                    it "knife upload of the cookbook succeeds" do
         
     | 
| 
      
 541 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       503 
542 
     | 
    
         
             
                      knife("upload /cookbooks/x").should_succeed <<~EOM
         
     | 
| 
       504 
543 
     | 
    
         
             
                        Updated /cookbooks/x
         
     | 
| 
       505 
544 
     | 
    
         
             
                      EOM
         
     | 
| 
       506 
     | 
    
         
            -
                      knife("diff --name-status /cookbooks").should_succeed  
     | 
| 
      
 545 
     | 
    
         
            +
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
      
 546 
     | 
    
         
            +
                        D\t/cookbooks/x/metadata.json
         
     | 
| 
      
 547 
     | 
    
         
            +
                      EOM
         
     | 
| 
       507 
548 
     | 
    
         
             
                    end
         
     | 
| 
       508 
549 
     | 
    
         
             
                  end
         
     | 
| 
       509 
550 
     | 
    
         | 
| 
         @@ -513,6 +554,7 @@ EOM 
     | 
|
| 
       513 
554 
     | 
    
         
             
                    end
         
     | 
| 
       514 
555 
     | 
    
         | 
| 
       515 
556 
     | 
    
         
             
                    it "knife upload --freeze freezes the cookbook" do
         
     | 
| 
      
 557 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       516 
558 
     | 
    
         
             
                      knife("upload --freeze /cookbooks/x").should_succeed <<~EOM
         
     | 
| 
       517 
559 
     | 
    
         
             
                        Updated /cookbooks/x
         
     | 
| 
       518 
560 
     | 
    
         
             
                      EOM
         
     | 
| 
         @@ -535,9 +577,11 @@ EOM 
     | 
|
| 
       535 
577 
     | 
    
         
             
                    end
         
     | 
| 
       536 
578 
     | 
    
         | 
| 
       537 
579 
     | 
    
         
             
                    it "knife upload fails to upload the frozen cookbook" do
         
     | 
| 
      
 580 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       538 
581 
     | 
    
         
             
                      knife("upload /cookbooks/frozencook").should_fail "ERROR: /cookbooks failed to write: Cookbook frozencook is frozen\n"
         
     | 
| 
       539 
582 
     | 
    
         
             
                    end
         
     | 
| 
       540 
583 
     | 
    
         
             
                    it "knife upload --force uploads the frozen cookbook" do
         
     | 
| 
      
 584 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       541 
585 
     | 
    
         
             
                      knife("upload --force /cookbooks/frozencook").should_succeed <<~EOM
         
     | 
| 
       542 
586 
     | 
    
         
             
                        Updated /cookbooks/frozencook
         
     | 
| 
       543 
587 
     | 
    
         
             
                      EOM
         
     | 
| 
         @@ -548,6 +592,7 @@ EOM 
     | 
|
| 
       548 
592 
     | 
    
         
             
                when_the_repository "has a cookbook" do
         
     | 
| 
       549 
593 
     | 
    
         
             
                  before do
         
     | 
| 
       550 
594 
     | 
    
         
             
                    file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
         
     | 
| 
      
 595 
     | 
    
         
            +
                    file "cookbooks/x/metadata.json", { name: "x", version: "1.0.0" }
         
     | 
| 
       551 
596 
     | 
    
         
             
                    file "cookbooks/x/onlyin1.0.0.rb", "old_text"
         
     | 
| 
       552 
597 
     | 
    
         
             
                  end
         
     | 
| 
       553 
598 
     | 
    
         | 
| 
         @@ -558,14 +603,48 @@ EOM 
     | 
|
| 
       558 
603 
     | 
    
         
             
                    end
         
     | 
| 
       559 
604 
     | 
    
         | 
| 
       560 
605 
     | 
    
         
             
                    it "knife upload /cookbooks/x uploads the local version" do
         
     | 
| 
      
 606 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       561 
607 
     | 
    
         
             
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
       562 
608 
     | 
    
         
             
                        M\t/cookbooks/x/metadata.rb
         
     | 
| 
       563 
609 
     | 
    
         
             
                        D\t/cookbooks/x/onlyin1.0.1.rb
         
     | 
| 
      
 610 
     | 
    
         
            +
                        A\t/cookbooks/x/metadata.json
         
     | 
| 
       564 
611 
     | 
    
         
             
                        A\t/cookbooks/x/onlyin1.0.0.rb
         
     | 
| 
       565 
612 
     | 
    
         
             
                      EOM
         
     | 
| 
       566 
613 
     | 
    
         
             
                      knife("upload --purge /cookbooks/x").should_succeed <<~EOM
         
     | 
| 
       567 
614 
     | 
    
         
             
                        Updated /cookbooks/x
         
     | 
| 
       568 
615 
     | 
    
         
             
                      EOM
         
     | 
| 
      
 616 
     | 
    
         
            +
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
      
 617 
     | 
    
         
            +
                        M\t/cookbooks/x/metadata.rb
         
     | 
| 
      
 618 
     | 
    
         
            +
                        D\t/cookbooks/x/onlyin1.0.1.rb
         
     | 
| 
      
 619 
     | 
    
         
            +
                        A\t/cookbooks/x/metadata.json
         
     | 
| 
      
 620 
     | 
    
         
            +
                        A\t/cookbooks/x/onlyin1.0.0.rb
         
     | 
| 
      
 621 
     | 
    
         
            +
                      EOM
         
     | 
| 
      
 622 
     | 
    
         
            +
                    end
         
     | 
| 
      
 623 
     | 
    
         
            +
                  end
         
     | 
| 
      
 624 
     | 
    
         
            +
                end
         
     | 
| 
      
 625 
     | 
    
         
            +
             
     | 
| 
      
 626 
     | 
    
         
            +
                when_the_repository "has a cookbook" do
         
     | 
| 
      
 627 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 628 
     | 
    
         
            +
                    file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0")
         
     | 
| 
      
 629 
     | 
    
         
            +
                    file "cookbooks/x/onlyin1.0.0.rb", "old_text"
         
     | 
| 
      
 630 
     | 
    
         
            +
                  end
         
     | 
| 
      
 631 
     | 
    
         
            +
             
     | 
| 
      
 632 
     | 
    
         
            +
                  when_the_chef_server "has a later version for the cookbook" do
         
     | 
| 
      
 633 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 634 
     | 
    
         
            +
                      cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
         
     | 
| 
      
 635 
     | 
    
         
            +
                      cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
         
     | 
| 
      
 636 
     | 
    
         
            +
                    end
         
     | 
| 
      
 637 
     | 
    
         
            +
             
     | 
| 
      
 638 
     | 
    
         
            +
                    it "knife upload /cookbooks/x uploads the local version and generates metadata.json from metadata.rb and uploads it." do
         
     | 
| 
      
 639 
     | 
    
         
            +
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
      
 640 
     | 
    
         
            +
                        M\t/cookbooks/x/metadata.rb
         
     | 
| 
      
 641 
     | 
    
         
            +
                        D\t/cookbooks/x/onlyin1.0.1.rb
         
     | 
| 
      
 642 
     | 
    
         
            +
                        A\t/cookbooks/x/onlyin1.0.0.rb
         
     | 
| 
      
 643 
     | 
    
         
            +
                      EOM
         
     | 
| 
      
 644 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
      
 645 
     | 
    
         
            +
                      knife("upload --purge /cookbooks/x").should_succeed <<~EOM
         
     | 
| 
      
 646 
     | 
    
         
            +
                        Updated /cookbooks/x
         
     | 
| 
      
 647 
     | 
    
         
            +
                      EOM
         
     | 
| 
       569 
648 
     | 
    
         
             
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
       570 
649 
     | 
    
         
             
                        M\t/cookbooks/x/metadata.rb
         
     | 
| 
       571 
650 
     | 
    
         
             
                        D\t/cookbooks/x/onlyin1.0.1.rb
         
     | 
| 
         @@ -580,11 +659,14 @@ EOM 
     | 
|
| 
       580 
659 
     | 
    
         
             
                      cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
         
     | 
| 
       581 
660 
     | 
    
         
             
                    end
         
     | 
| 
       582 
661 
     | 
    
         | 
| 
       583 
     | 
    
         
            -
                    it "knife upload /cookbooks/x uploads the local version" do
         
     | 
| 
      
 662 
     | 
    
         
            +
                    it "knife upload /cookbooks/x uploads the local version generates metadata.json and uploads it." do
         
     | 
| 
      
 663 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       584 
664 
     | 
    
         
             
                      knife("upload --purge /cookbooks/x").should_succeed <<~EOM
         
     | 
| 
       585 
665 
     | 
    
         
             
                        Updated /cookbooks/x
         
     | 
| 
       586 
666 
     | 
    
         
             
                      EOM
         
     | 
| 
       587 
     | 
    
         
            -
                      knife("diff --name-status /cookbooks").should_succeed  
     | 
| 
      
 667 
     | 
    
         
            +
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
      
 668 
     | 
    
         
            +
                        D\t/cookbooks/x/metadata.json
         
     | 
| 
      
 669 
     | 
    
         
            +
                      EOM
         
     | 
| 
       588 
670 
     | 
    
         
             
                    end
         
     | 
| 
       589 
671 
     | 
    
         
             
                  end
         
     | 
| 
       590 
672 
     | 
    
         | 
| 
         @@ -593,7 +675,8 @@ EOM 
     | 
|
| 
       593 
675 
     | 
    
         
             
                      cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
         
     | 
| 
       594 
676 
     | 
    
         
             
                    end
         
     | 
| 
       595 
677 
     | 
    
         | 
| 
       596 
     | 
    
         
            -
                    it "knife upload /cookbooks/x uploads the local version" do
         
     | 
| 
      
 678 
     | 
    
         
            +
                    it "knife upload /cookbooks/x uploads the local version and generates metadata.json before upload and uploads it." do
         
     | 
| 
      
 679 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       597 
680 
     | 
    
         
             
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
       598 
681 
     | 
    
         
             
                        M\t/cookbooks/x/metadata.rb
         
     | 
| 
       599 
682 
     | 
    
         
             
                        D\t/cookbooks/x/onlyin1.0.1.rb
         
     | 
| 
         @@ -616,10 +699,13 @@ EOM 
     | 
|
| 
       616 
699 
     | 
    
         
             
                    end
         
     | 
| 
       617 
700 
     | 
    
         | 
| 
       618 
701 
     | 
    
         
             
                    it "knife upload /cookbooks/x uploads the new version" do
         
     | 
| 
      
 702 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       619 
703 
     | 
    
         
             
                      knife("upload --purge /cookbooks/x").should_succeed <<~EOM
         
     | 
| 
       620 
704 
     | 
    
         
             
                        Updated /cookbooks/x
         
     | 
| 
       621 
705 
     | 
    
         
             
                      EOM
         
     | 
| 
       622 
     | 
    
         
            -
                      knife("diff --name-status /cookbooks").should_succeed  
     | 
| 
      
 706 
     | 
    
         
            +
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
      
 707 
     | 
    
         
            +
                        D\t/cookbooks/x/metadata.json
         
     | 
| 
      
 708 
     | 
    
         
            +
                      EOM
         
     | 
| 
       623 
709 
     | 
    
         
             
                    end
         
     | 
| 
       624 
710 
     | 
    
         
             
                  end
         
     | 
| 
       625 
711 
     | 
    
         
             
                end
         
     | 
| 
         @@ -716,10 +802,13 @@ EOM 
     | 
|
| 
       716 
802 
     | 
    
         
             
                      file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0", "\nchef_version '~> 999.0'")
         
     | 
| 
       717 
803 
     | 
    
         
             
                    end
         
     | 
| 
       718 
804 
     | 
    
         
             
                    it "knife upload succeeds" do
         
     | 
| 
      
 805 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       719 
806 
     | 
    
         
             
                      knife("upload /cookbooks/x").should_succeed <<~EOM
         
     | 
| 
       720 
807 
     | 
    
         
             
                        Created /cookbooks/x
         
     | 
| 
       721 
808 
     | 
    
         
             
                      EOM
         
     | 
| 
       722 
     | 
    
         
            -
                      knife("diff --name-status /cookbooks").should_succeed  
     | 
| 
      
 809 
     | 
    
         
            +
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
      
 810 
     | 
    
         
            +
                        D\t/cookbooks/x/metadata.json
         
     | 
| 
      
 811 
     | 
    
         
            +
                      EOM
         
     | 
| 
       723 
812 
     | 
    
         
             
                    end
         
     | 
| 
       724 
813 
     | 
    
         
             
                  end
         
     | 
| 
       725 
814 
     | 
    
         
             
                end
         
     | 
| 
         @@ -864,6 +953,7 @@ EOM 
     | 
|
| 
       864 
953 
     | 
    
         
             
                      end
         
     | 
| 
       865 
954 
     | 
    
         | 
| 
       866 
955 
     | 
    
         
             
                      it "knife upload adds the new files" do
         
     | 
| 
      
 956 
     | 
    
         
            +
                        expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(3).times
         
     | 
| 
       867 
957 
     | 
    
         
             
                        knife("upload /").should_succeed <<~EOM
         
     | 
| 
       868 
958 
     | 
    
         
             
                          Created /clients/y.json
         
     | 
| 
       869 
959 
     | 
    
         
             
                          Updated /cookbooks/x-1.0.0
         
     | 
| 
         @@ -1070,6 +1160,7 @@ EOM 
     | 
|
| 
       1070 
1160 
     | 
    
         
             
                    # technically we shouldn't have deleted missing files.  But ... cookbooks
         
     | 
| 
       1071 
1161 
     | 
    
         
             
                    # are a special case.
         
     | 
| 
       1072 
1162 
     | 
    
         
             
                    it "knife upload of the cookbook itself succeeds" do
         
     | 
| 
      
 1163 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
         
     | 
| 
       1073 
1164 
     | 
    
         
             
                      knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
         
     | 
| 
       1074 
1165 
     | 
    
         
             
                        Updated /cookbooks/x-1.0.0
         
     | 
| 
       1075 
1166 
     | 
    
         
             
                      EOM
         
     | 
| 
         @@ -1077,6 +1168,7 @@ EOM 
     | 
|
| 
       1077 
1168 
     | 
    
         
             
                    end
         
     | 
| 
       1078 
1169 
     | 
    
         | 
| 
       1079 
1170 
     | 
    
         
             
                    it "knife upload --purge of the cookbook itself succeeds" do
         
     | 
| 
      
 1171 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
         
     | 
| 
       1080 
1172 
     | 
    
         
             
                      knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
         
     | 
| 
       1081 
1173 
     | 
    
         
             
                        Updated /cookbooks/x-1.0.0
         
     | 
| 
       1082 
1174 
     | 
    
         
             
                      EOM
         
     | 
| 
         @@ -1090,6 +1182,7 @@ EOM 
     | 
|
| 
       1090 
1182 
     | 
    
         
             
                    end
         
     | 
| 
       1091 
1183 
     | 
    
         | 
| 
       1092 
1184 
     | 
    
         
             
                    it "knife upload of the cookbook succeeds" do
         
     | 
| 
      
 1185 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
         
     | 
| 
       1093 
1186 
     | 
    
         
             
                      knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
         
     | 
| 
       1094 
1187 
     | 
    
         
             
                        Updated /cookbooks/x-1.0.0
         
     | 
| 
       1095 
1188 
     | 
    
         
             
                      EOM
         
     | 
| 
         @@ -1105,6 +1198,7 @@ EOM 
     | 
|
| 
       1105 
1198 
     | 
    
         
             
                    end
         
     | 
| 
       1106 
1199 
     | 
    
         | 
| 
       1107 
1200 
     | 
    
         
             
                    it "knife upload of the cookbook succeeds" do
         
     | 
| 
      
 1201 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
         
     | 
| 
       1108 
1202 
     | 
    
         
             
                      knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
         
     | 
| 
       1109 
1203 
     | 
    
         
             
                        Updated /cookbooks/x-1.0.0
         
     | 
| 
       1110 
1204 
     | 
    
         
             
                      EOM
         
     | 
| 
         @@ -1126,6 +1220,7 @@ EOM 
     | 
|
| 
       1126 
1220 
     | 
    
         
             
                    end
         
     | 
| 
       1127 
1221 
     | 
    
         | 
| 
       1128 
1222 
     | 
    
         
             
                    it "knife upload /cookbooks uploads the local version" do
         
     | 
| 
      
 1223 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
         
     | 
| 
       1129 
1224 
     | 
    
         
             
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
       1130 
1225 
     | 
    
         
             
                        M\t/cookbooks/x-1.0.0/onlyin1.0.0.rb
         
     | 
| 
       1131 
1226 
     | 
    
         
             
                        D\t/cookbooks/x-1.0.1
         
     | 
| 
         @@ -1144,6 +1239,7 @@ EOM 
     | 
|
| 
       1144 
1239 
     | 
    
         
             
                      cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
         
     | 
| 
       1145 
1240 
     | 
    
         
             
                    end
         
     | 
| 
       1146 
1241 
     | 
    
         
             
                    it "knife upload /cookbooks uploads the local version" do
         
     | 
| 
      
 1242 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
         
     | 
| 
       1147 
1243 
     | 
    
         
             
                      knife("upload --purge /cookbooks").should_succeed <<~EOM
         
     | 
| 
       1148 
1244 
     | 
    
         
             
                        Updated /cookbooks/x-1.0.0
         
     | 
| 
       1149 
1245 
     | 
    
         
             
                        Deleted extra entry /cookbooks/x-0.9.9 (purge is on)
         
     | 
| 
         @@ -1158,6 +1254,7 @@ EOM 
     | 
|
| 
       1158 
1254 
     | 
    
         
             
                    end
         
     | 
| 
       1159 
1255 
     | 
    
         | 
| 
       1160 
1256 
     | 
    
         
             
                    it "knife upload /cookbooks/x uploads the local version" do
         
     | 
| 
      
 1257 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
         
     | 
| 
       1161 
1258 
     | 
    
         
             
                      knife("diff --name-status /cookbooks").should_succeed <<~EOM
         
     | 
| 
       1162 
1259 
     | 
    
         
             
                        D\t/cookbooks/x-1.0.1
         
     | 
| 
       1163 
1260 
     | 
    
         
             
                        A\t/cookbooks/x-1.0.0
         
     | 
| 
         @@ -1176,6 +1273,7 @@ EOM 
     | 
|
| 
       1176 
1273 
     | 
    
         
             
                    end
         
     | 
| 
       1177 
1274 
     | 
    
         | 
| 
       1178 
1275 
     | 
    
         
             
                    it "knife upload /cookbooks/x uploads the new version" do
         
     | 
| 
      
 1276 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
         
     | 
| 
       1179 
1277 
     | 
    
         
             
                      knife("upload --purge /cookbooks").should_succeed <<~EOM
         
     | 
| 
       1180 
1278 
     | 
    
         
             
                        Created /cookbooks/x-1.0.0
         
     | 
| 
       1181 
1279 
     | 
    
         
             
                        Deleted extra entry /cookbooks/x-0.9.9 (purge is on)
         
     | 
| 
         @@ -1250,6 +1348,7 @@ EOM 
     | 
|
| 
       1250 
1348 
     | 
    
         
             
                      file "cookbooks/x-1.0.0/metadata.rb", cb_metadata("x", "1.0.0", "\nchef_version '~> 999.0'")
         
     | 
| 
       1251 
1349 
     | 
    
         
             
                    end
         
     | 
| 
       1252 
1350 
     | 
    
         
             
                    it "knife upload succeeds" do
         
     | 
| 
      
 1351 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
         
     | 
| 
       1253 
1352 
     | 
    
         
             
                      knife("upload /cookbooks/x-1.0.0").should_succeed <<~EOM
         
     | 
| 
       1254 
1353 
     | 
    
         
             
                        Created /cookbooks/x-1.0.0
         
     | 
| 
       1255 
1354 
     | 
    
         
             
                      EOM
         
     | 
| 
         @@ -1313,6 +1412,7 @@ EOM 
     | 
|
| 
       1313 
1412 
     | 
    
         
             
                    end
         
     | 
| 
       1314 
1413 
     | 
    
         | 
| 
       1315 
1414 
     | 
    
         
             
                    it "knife upload / uploads everything" do
         
     | 
| 
      
 1415 
     | 
    
         
            +
                      expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       1316 
1416 
     | 
    
         
             
                      knife("upload /").should_succeed <<~EOM
         
     | 
| 
       1317 
1417 
     | 
    
         
             
                        Updated /acls/groups/blah.json
         
     | 
| 
       1318 
1418 
     | 
    
         
             
                        Created /clients/x.json
         
     | 
| 
         @@ -1420,6 +1520,7 @@ EOM 
     | 
|
| 
       1420 
1520 
     | 
    
         
             
                      end
         
     | 
| 
       1421 
1521 
     | 
    
         | 
| 
       1422 
1522 
     | 
    
         
             
                      it "knife upload updates everything" do
         
     | 
| 
      
 1523 
     | 
    
         
            +
                        expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(2).times
         
     | 
| 
       1423 
1524 
     | 
    
         
             
                        knife("upload /").should_succeed <<~EOM
         
     | 
| 
       1424 
1525 
     | 
    
         
             
                          Updated /acls/groups/blah.json
         
     | 
| 
       1425 
1526 
     | 
    
         
             
                          Updated /clients/x.json
         
     | 
| 
         @@ -124,8 +124,9 @@ describe Chef::Cookbook::CookbookVersionLoader do 
     | 
|
| 
       124 
124 
     | 
    
         
             
                    expect { cookbook_loader.load! }.to raise_error(Chef::Exceptions::CookbookNotFoundInRepo)
         
     | 
| 
       125 
125 
     | 
    
         
             
                  end
         
     | 
| 
       126 
126 
     | 
    
         | 
| 
       127 
     | 
    
         
            -
                  it " 
     | 
| 
       128 
     | 
    
         
            -
                    expect  
     | 
| 
      
 127 
     | 
    
         
            +
                  it "gives deprecation warning called with #load and raise error for Cookbook not found" do
         
     | 
| 
      
 128 
     | 
    
         
            +
                    expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/)
         
     | 
| 
      
 129 
     | 
    
         
            +
                    expect { cookbook_loader.load }.to raise_error(Chef::Exceptions::CookbookNotFoundInRepo)
         
     | 
| 
       129 
130 
     | 
    
         
             
                  end
         
     | 
| 
       130 
131 
     | 
    
         | 
| 
       131 
132 
     | 
    
         
             
                end
         
     | 
| 
         @@ -148,7 +149,8 @@ describe Chef::Cookbook::CookbookVersionLoader do 
     | 
|
| 
       148 
149 
     | 
    
         
             
                    expect { cookbook_loader.load! }.to raise_error("THIS METADATA HAS A BUG")
         
     | 
| 
       149 
150 
     | 
    
         
             
                  end
         
     | 
| 
       150 
151 
     | 
    
         | 
| 
       151 
     | 
    
         
            -
                  it " 
     | 
| 
      
 152 
     | 
    
         
            +
                  it "gives deprecation warning to us load!  when called with #load and raises error" do
         
     | 
| 
      
 153 
     | 
    
         
            +
                    expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/)
         
     | 
| 
       152 
154 
     | 
    
         
             
                    expect { cookbook_loader.load }.to raise_error("THIS METADATA HAS A BUG")
         
     | 
| 
       153 
155 
     | 
    
         
             
                  end
         
     | 
| 
       154 
156 
     | 
    
         | 
| 
         @@ -180,7 +182,8 @@ describe Chef::Cookbook::CookbookVersionLoader do 
     | 
|
| 
       180 
182 
     | 
    
         
             
                    expect { cookbook_loader.load! }.to raise_error(Chef::Exceptions::MetadataNotValid, error_message)
         
     | 
| 
       181 
183 
     | 
    
         
             
                  end
         
     | 
| 
       182 
184 
     | 
    
         | 
| 
       183 
     | 
    
         
            -
                  it " 
     | 
| 
      
 185 
     | 
    
         
            +
                  it "gives deprecation warning to use load! method when called with #load and raises error for invalid metadata" do
         
     | 
| 
      
 186 
     | 
    
         
            +
                    expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/)
         
     | 
| 
       184 
187 
     | 
    
         
             
                    expect { cookbook_loader.load }.to raise_error(Chef::Exceptions::MetadataNotValid, error_message)
         
     | 
| 
       185 
188 
     | 
    
         
             
                  end
         
     | 
| 
       186 
189 
     | 
    
         | 
| 
         @@ -23,7 +23,12 @@ require "chef/cookbook_uploader" 
     | 
|
| 
       23 
23 
     | 
    
         
             
            require "timeout"
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
            describe Chef::Knife::CookbookUpload do
         
     | 
| 
       26 
     | 
    
         
            -
              let(:cookbook)  
     | 
| 
      
 26 
     | 
    
         
            +
              let(:cookbook) do
         
     | 
| 
      
 27 
     | 
    
         
            +
                cookbook = Chef::CookbookVersion.new("test_cookbook", "/tmp/blah")
         
     | 
| 
      
 28 
     | 
    
         
            +
                allow(cookbook).to receive(:has_metadata_file?).and_return(true)
         
     | 
| 
      
 29 
     | 
    
         
            +
                allow(cookbook.metadata).to receive(:name).and_return(cookbook.name)
         
     | 
| 
      
 30 
     | 
    
         
            +
                cookbook
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
       27 
32 
     | 
    
         | 
| 
       28 
33 
     | 
    
         
             
              let(:cookbooks_by_name) do
         
     | 
| 
       29 
34 
     | 
    
         
             
                { cookbook.name => cookbook }
         
     | 
| 
         @@ -33,6 +38,9 @@ describe Chef::Knife::CookbookUpload do 
     | 
|
| 
       33 
38 
     | 
    
         
             
                cookbook_loader = cookbooks_by_name.dup
         
     | 
| 
       34 
39 
     | 
    
         
             
                allow(cookbook_loader).to receive(:merged_cookbooks).and_return([])
         
     | 
| 
       35 
40 
     | 
    
         
             
                allow(cookbook_loader).to receive(:load_cookbooks).and_return(cookbook_loader)
         
     | 
| 
      
 41 
     | 
    
         
            +
                allow(cookbook_loader).to receive(:compile_metadata).and_return(nil)
         
     | 
| 
      
 42 
     | 
    
         
            +
                allow(cookbook_loader).to receive(:freeze_versions).and_return(nil)
         
     | 
| 
      
 43 
     | 
    
         
            +
                allow(cookbook_loader).to receive(:unlink!).and_return(nil)
         
     | 
| 
       36 
44 
     | 
    
         
             
                cookbook_loader
         
     | 
| 
       37 
45 
     | 
    
         
             
              end
         
     | 
| 
       38 
46 
     | 
    
         | 
| 
         @@ -52,6 +60,7 @@ describe Chef::Knife::CookbookUpload do 
     | 
|
| 
       52 
60 
     | 
    
         | 
| 
       53 
61 
     | 
    
         
             
              before(:each) do
         
     | 
| 
       54 
62 
     | 
    
         
             
                allow(Chef::CookbookLoader).to receive(:new).and_return(cookbook_loader)
         
     | 
| 
      
 63 
     | 
    
         
            +
                allow(Chef::CookbookLoader).to receive(:copy_to_tmp_dir_from_array).and_return(cookbook_loader)
         
     | 
| 
       55 
64 
     | 
    
         
             
              end
         
     | 
| 
       56 
65 
     | 
    
         | 
| 
       57 
66 
     | 
    
         
             
              describe "with --concurrency" do
         
     | 
| 
         @@ -61,6 +70,7 @@ describe Chef::Knife::CookbookUpload do 
     | 
|
| 
       61 
70 
     | 
    
         
             
                  test_cookbook = Chef::CookbookVersion.new("test_cookbook", "/tmp/blah")
         
     | 
| 
       62 
71 
     | 
    
         
             
                  allow(cookbook_loader).to receive(:each).and_yield("test_cookbook", test_cookbook)
         
     | 
| 
       63 
72 
     | 
    
         
             
                  allow(cookbook_loader).to receive(:cookbook_names).and_return(["test_cookbook"])
         
     | 
| 
      
 73 
     | 
    
         
            +
                  allow(cookbook_loader).to receive(:tmp_working_dir_path).and_return("/tmp/blah")
         
     | 
| 
       64 
74 
     | 
    
         
             
                  expect(Chef::CookbookUploader).to receive(:new)
         
     | 
| 
       65 
75 
     | 
    
         
             
                    .with( kind_of(Array), { force: nil, concurrency: 3 })
         
     | 
| 
       66 
76 
     | 
    
         
             
                    .and_return(double("Chef::CookbookUploader", upload_cookbooks: true))
         
     | 
| 
         @@ -81,6 +91,34 @@ describe Chef::Knife::CookbookUpload do 
     | 
|
| 
       81 
91 
     | 
    
         
             
                  expect { knife.run }.to raise_error(SystemExit)
         
     | 
| 
       82 
92 
     | 
    
         
             
                end
         
     | 
| 
       83 
93 
     | 
    
         | 
| 
      
 94 
     | 
    
         
            +
                describe "when specifying cookbook without metadata.rb or metadata.json" do
         
     | 
| 
      
 95 
     | 
    
         
            +
                  let(:name_args) { ["test_cookbook1"] }
         
     | 
| 
      
 96 
     | 
    
         
            +
                  let(:cookbook) do
         
     | 
| 
      
 97 
     | 
    
         
            +
                    cookbook = Chef::CookbookVersion.new("test_cookbook1", "/tmp/blah")
         
     | 
| 
      
 98 
     | 
    
         
            +
                    allow(cookbook).to receive(:has_metadata_file?).and_return(false)
         
     | 
| 
      
 99 
     | 
    
         
            +
                    cookbook
         
     | 
| 
      
 100 
     | 
    
         
            +
                  end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                  it "should upload the cookbook" do
         
     | 
| 
      
 103 
     | 
    
         
            +
                    expect { knife.run }.to raise_error(Chef::Exceptions::MetadataNotFound)
         
     | 
| 
      
 104 
     | 
    
         
            +
                  end
         
     | 
| 
      
 105 
     | 
    
         
            +
                end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                describe "when name attribute in metadata not set" do
         
     | 
| 
      
 108 
     | 
    
         
            +
                  let(:name_args) { ["test_cookbook1"] }
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                  let(:cookbook) do
         
     | 
| 
      
 111 
     | 
    
         
            +
                    cookbook = Chef::CookbookVersion.new("test_cookbook1", "/tmp/blah")
         
     | 
| 
      
 112 
     | 
    
         
            +
                    allow(cookbook).to receive(:has_metadata_file?).and_return(true)
         
     | 
| 
      
 113 
     | 
    
         
            +
                    allow(cookbook.metadata).to receive(:name).and_return(nil)
         
     | 
| 
      
 114 
     | 
    
         
            +
                    cookbook
         
     | 
| 
      
 115 
     | 
    
         
            +
                  end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                  it "should upload the cookbook" do
         
     | 
| 
      
 118 
     | 
    
         
            +
                    expect { knife.run }.to raise_error(Chef::Exceptions::MetadataNotValid)
         
     | 
| 
      
 119 
     | 
    
         
            +
                  end
         
     | 
| 
      
 120 
     | 
    
         
            +
                end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
       84 
122 
     | 
    
         
             
                describe "when specifying a cookbook name" do
         
     | 
| 
       85 
123 
     | 
    
         
             
                  it "should upload the cookbook" do
         
     | 
| 
       86 
124 
     | 
    
         
             
                    expect(knife).to receive(:upload).once
         
     | 
| 
         @@ -105,12 +143,15 @@ describe Chef::Knife::CookbookUpload do 
     | 
|
| 
       105 
143 
     | 
    
         
             
                describe "when specifying a cookbook name among many" do
         
     | 
| 
       106 
144 
     | 
    
         
             
                  let(:name_args) { ["test_cookbook1"] }
         
     | 
| 
       107 
145 
     | 
    
         | 
| 
      
 146 
     | 
    
         
            +
                  let(:cookbook) do
         
     | 
| 
      
 147 
     | 
    
         
            +
                    cookbook = Chef::CookbookVersion.new("test_cookbook1", "/tmp/blah")
         
     | 
| 
      
 148 
     | 
    
         
            +
                    allow(cookbook).to receive(:has_metadata_file?).and_return(true)
         
     | 
| 
      
 149 
     | 
    
         
            +
                    allow(cookbook.metadata).to receive(:name).and_return(cookbook.name)
         
     | 
| 
      
 150 
     | 
    
         
            +
                    cookbook
         
     | 
| 
      
 151 
     | 
    
         
            +
                  end
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
       108 
153 
     | 
    
         
             
                  let(:cookbooks_by_name) do
         
     | 
| 
       109 
     | 
    
         
            -
                    {
         
     | 
| 
       110 
     | 
    
         
            -
                      "test_cookbook1" => Chef::CookbookVersion.new("test_cookbook1", "/tmp/blah"),
         
     | 
| 
       111 
     | 
    
         
            -
                      "test_cookbook2" => Chef::CookbookVersion.new("test_cookbook2", "/tmp/blah"),
         
     | 
| 
       112 
     | 
    
         
            -
                      "test_cookbook3" => Chef::CookbookVersion.new("test_cookbook3", "/tmp/blah"),
         
     | 
| 
       113 
     | 
    
         
            -
                    }
         
     | 
| 
      
 154 
     | 
    
         
            +
                    { cookbook.name => cookbook }
         
     | 
| 
       114 
155 
     | 
    
         
             
                  end
         
     | 
| 
       115 
156 
     | 
    
         | 
| 
       116 
157 
     | 
    
         
             
                  it "should read only one cookbook" do
         
     | 
| 
         @@ -119,7 +160,7 @@ describe Chef::Knife::CookbookUpload do 
     | 
|
| 
       119 
160 
     | 
    
         
             
                  end
         
     | 
| 
       120 
161 
     | 
    
         | 
| 
       121 
162 
     | 
    
         
             
                  it "should not read all cookbooks" do
         
     | 
| 
       122 
     | 
    
         
            -
                    expect(cookbook_loader). 
     | 
| 
      
 163 
     | 
    
         
            +
                    expect(cookbook_loader).to receive(:load_cookbooks)
         
     | 
| 
       123 
164 
     | 
    
         
             
                    knife.run
         
     | 
| 
       124 
165 
     | 
    
         
             
                  end
         
     | 
| 
       125 
166 
     | 
    
         | 
| 
         @@ -133,17 +174,18 @@ describe Chef::Knife::CookbookUpload do 
     | 
|
| 
       133 
174 
     | 
    
         
             
                describe "when specifying a cookbook name with dependencies" do
         
     | 
| 
       134 
175 
     | 
    
         
             
                  let(:name_args) { ["test_cookbook2"] }
         
     | 
| 
       135 
176 
     | 
    
         | 
| 
       136 
     | 
    
         
            -
                  let(: 
     | 
| 
       137 
     | 
    
         
            -
                     
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
      
 177 
     | 
    
         
            +
                  let(:test_cookbook1) do
         
     | 
| 
      
 178 
     | 
    
         
            +
                    cookbook = Chef::CookbookVersion.new("test_cookbook1", "/tmp/blah")
         
     | 
| 
      
 179 
     | 
    
         
            +
                    allow(cookbook).to receive(:has_metadata_file?).and_return(true)
         
     | 
| 
      
 180 
     | 
    
         
            +
                    allow(cookbook.metadata).to receive(:name).and_return(cookbook.name)
         
     | 
| 
      
 181 
     | 
    
         
            +
                    cookbook
         
     | 
| 
       140 
182 
     | 
    
         
             
                  end
         
     | 
| 
       141 
183 
     | 
    
         | 
| 
       142 
     | 
    
         
            -
                  let(:test_cookbook1) { Chef::CookbookVersion.new("test_cookbook1", "/tmp/blah") }
         
     | 
| 
       143 
     | 
    
         
            -
             
     | 
| 
       144 
184 
     | 
    
         
             
                  let(:test_cookbook2) do
         
     | 
| 
       145 
185 
     | 
    
         
             
                    c = Chef::CookbookVersion.new("test_cookbook2")
         
     | 
| 
       146 
186 
     | 
    
         
             
                    c.metadata.depends("test_cookbook3")
         
     | 
| 
      
 187 
     | 
    
         
            +
                    allow(c).to receive(:has_metadata_file?).and_return(true)
         
     | 
| 
      
 188 
     | 
    
         
            +
                    allow(c.metadata).to receive(:name).and_return(c.name)
         
     | 
| 
       147 
189 
     | 
    
         
             
                    c
         
     | 
| 
       148 
190 
     | 
    
         
             
                  end
         
     | 
| 
       149 
191 
     | 
    
         | 
| 
         @@ -151,9 +193,17 @@ describe Chef::Knife::CookbookUpload do 
     | 
|
| 
       151 
193 
     | 
    
         
             
                    c = Chef::CookbookVersion.new("test_cookbook3")
         
     | 
| 
       152 
194 
     | 
    
         
             
                    c.metadata.depends("test_cookbook1")
         
     | 
| 
       153 
195 
     | 
    
         
             
                    c.metadata.depends("test_cookbook2")
         
     | 
| 
      
 196 
     | 
    
         
            +
                    allow(c).to receive(:has_metadata_file?).and_return(true)
         
     | 
| 
      
 197 
     | 
    
         
            +
                    allow(c.metadata).to receive(:name).and_return(c.name)
         
     | 
| 
       154 
198 
     | 
    
         
             
                    c
         
     | 
| 
       155 
199 
     | 
    
         
             
                  end
         
     | 
| 
       156 
200 
     | 
    
         | 
| 
      
 201 
     | 
    
         
            +
                  let(:cookbooks_by_name) do
         
     | 
| 
      
 202 
     | 
    
         
            +
                    { "test_cookbook1" => test_cookbook1,
         
     | 
| 
      
 203 
     | 
    
         
            +
                      "test_cookbook2" => test_cookbook2,
         
     | 
| 
      
 204 
     | 
    
         
            +
                      "test_cookbook3" => test_cookbook3 }
         
     | 
| 
      
 205 
     | 
    
         
            +
                  end
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
       157 
207 
     | 
    
         
             
                  it "should upload all dependencies once" do
         
     | 
| 
       158 
208 
     | 
    
         
             
                    knife.config[:depends] = true
         
     | 
| 
       159 
209 
     | 
    
         
             
                    allow(knife).to receive(:cookbook_names).and_return(%w{test_cookbook1 test_cookbook2 test_cookbook3})
         
     | 
| 
         @@ -182,7 +232,6 @@ describe Chef::Knife::CookbookUpload do 
     | 
|
| 
       182 
232 
     | 
    
         | 
| 
       183 
233 
     | 
    
         
             
                  it "should exit and not upload the cookbook" do
         
     | 
| 
       184 
234 
     | 
    
         
             
                    expect(cookbook_loader).to receive(:[]).once.with("test_cookbook")
         
     | 
| 
       185 
     | 
    
         
            -
                    expect(cookbook_loader).not_to receive(:load_cookbooks)
         
     | 
| 
       186 
235 
     | 
    
         
             
                    expect(cookbook_uploader).not_to receive(:upload_cookbooks)
         
     | 
| 
       187 
236 
     | 
    
         
             
                    expect { knife.run }.to raise_error(SystemExit)
         
     | 
| 
       188 
237 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -214,7 +263,7 @@ describe Chef::Knife::CookbookUpload do 
     | 
|
| 
       214 
263 
     | 
    
         | 
| 
       215 
264 
     | 
    
         
             
                it "should freeze the version of the cookbooks if --freeze is specified" do
         
     | 
| 
       216 
265 
     | 
    
         
             
                  knife.config[:freeze] = true
         
     | 
| 
       217 
     | 
    
         
            -
                  expect( 
     | 
| 
      
 266 
     | 
    
         
            +
                  expect(cookbook_loader).to receive(:freeze_versions).once
         
     | 
| 
       218 
267 
     | 
    
         
             
                  knife.run
         
     | 
| 
       219 
268 
     | 
    
         
             
                end
         
     | 
| 
       220 
269 
     | 
    
         | 
| 
         @@ -224,10 +273,22 @@ describe Chef::Knife::CookbookUpload do 
     | 
|
| 
       224 
273 
     | 
    
         
             
                  end
         
     | 
| 
       225 
274 
     | 
    
         | 
| 
       226 
275 
     | 
    
         
             
                  context "when cookbooks exist in the cookbook path" do
         
     | 
| 
      
 276 
     | 
    
         
            +
                    let(:test_cookbook1) do
         
     | 
| 
      
 277 
     | 
    
         
            +
                      cookbook = Chef::CookbookVersion.new("test_cookbook1", "/tmp/blah")
         
     | 
| 
      
 278 
     | 
    
         
            +
                      allow(cookbook).to receive(:has_metadata_file?).and_return(true)
         
     | 
| 
      
 279 
     | 
    
         
            +
                      allow(cookbook.metadata).to receive(:name).and_return(cookbook.name)
         
     | 
| 
      
 280 
     | 
    
         
            +
                      cookbook
         
     | 
| 
      
 281 
     | 
    
         
            +
                    end
         
     | 
| 
      
 282 
     | 
    
         
            +
             
     | 
| 
      
 283 
     | 
    
         
            +
                    let(:test_cookbook2) do
         
     | 
| 
      
 284 
     | 
    
         
            +
                      cookbook = Chef::CookbookVersion.new("test_cookbook2", "/tmp/blah")
         
     | 
| 
      
 285 
     | 
    
         
            +
                      allow(cookbook).to receive(:has_metadata_file?).and_return(true)
         
     | 
| 
      
 286 
     | 
    
         
            +
                      allow(cookbook.metadata).to receive(:name).and_return(cookbook.name)
         
     | 
| 
      
 287 
     | 
    
         
            +
                      cookbook
         
     | 
| 
      
 288 
     | 
    
         
            +
                    end
         
     | 
| 
      
 289 
     | 
    
         
            +
             
     | 
| 
       227 
290 
     | 
    
         
             
                    before(:each) do
         
     | 
| 
       228 
     | 
    
         
            -
                       
     | 
| 
       229 
     | 
    
         
            -
                      @test_cookbook2 = Chef::CookbookVersion.new("test_cookbook2", "/tmp/blah")
         
     | 
| 
       230 
     | 
    
         
            -
                      allow(cookbook_loader).to receive(:each).and_yield("test_cookbook1", @test_cookbook1).and_yield("test_cookbook2", @test_cookbook2)
         
     | 
| 
      
 291 
     | 
    
         
            +
                      allow(cookbook_loader).to receive(:each).and_yield("test_cookbook1", test_cookbook1).and_yield("test_cookbook2", test_cookbook2)
         
     | 
| 
       231 
292 
     | 
    
         
             
                      allow(cookbook_loader).to receive(:cookbook_names).and_return(%w{test_cookbook1 test_cookbook2})
         
     | 
| 
       232 
293 
     | 
    
         
             
                    end
         
     | 
| 
       233 
294 
     | 
    
         |