chef-dk 2.6.2 → 3.0.36
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 +126 -121
- data/Gemfile.lock +812 -807
- data/LICENSE +201 -201
- data/README.md +333 -333
- data/Rakefile +74 -74
- data/acceptance/.shared/kitchen_acceptance/.kitchen.digitalocean.yml +27 -27
- data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +287 -287
- data/acceptance/.shared/kitchen_acceptance/.kitchen.vagrant.yml +52 -52
- data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +51 -51
- data/acceptance/.shared/kitchen_acceptance/metadata.rb +1 -1
- data/acceptance/Gemfile +21 -21
- data/acceptance/Gemfile.lock +334 -334
- data/acceptance/README.md +132 -132
- data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -2
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/trivial/.kitchen.yml +7 -7
- data/acceptance/trivial/test/integration/chefdk-current-install/inspec/chef_client_spec.rb +5 -5
- data/bin/chef +25 -25
- data/chef-dk.gemspec +60 -60
- data/lib/chef-dk.rb +19 -19
- data/lib/chef-dk/authenticated_http.rb +22 -22
- data/lib/chef-dk/builtin_commands.rb +59 -59
- data/lib/chef-dk/chef_runner.rb +114 -114
- data/lib/chef-dk/chef_server_api_multi.rb +73 -73
- data/lib/chef-dk/cli.rb +201 -201
- data/lib/chef-dk/command/base.rb +79 -79
- data/lib/chef-dk/command/clean_policy_cookbooks.rb +114 -114
- data/lib/chef-dk/command/clean_policy_revisions.rb +111 -111
- data/lib/chef-dk/command/delete_policy.rb +120 -120
- data/lib/chef-dk/command/delete_policy_group.rb +120 -120
- data/lib/chef-dk/command/diff.rb +315 -315
- data/lib/chef-dk/command/env.rb +89 -89
- data/lib/chef-dk/command/exec.rb +44 -44
- data/lib/chef-dk/command/export.rb +155 -155
- data/lib/chef-dk/command/gem.rb +47 -47
- data/lib/chef-dk/command/generate.rb +125 -125
- data/lib/chef-dk/command/generator_commands.rb +83 -83
- data/lib/chef-dk/command/generator_commands/app.rb +106 -106
- data/lib/chef-dk/command/generator_commands/attribute.rb +36 -36
- data/lib/chef-dk/command/generator_commands/base.rb +157 -157
- data/lib/chef-dk/command/generator_commands/build_cookbook.rb +125 -125
- data/lib/chef-dk/command/generator_commands/chef_exts/generator_desc_resource.rb +85 -85
- data/lib/chef-dk/command/generator_commands/chef_exts/quieter_doc_formatter.rb +38 -38
- data/lib/chef-dk/command/generator_commands/chef_exts/recipe_dsl_ext.rb +39 -39
- data/lib/chef-dk/command/generator_commands/cookbook.rb +241 -241
- data/lib/chef-dk/command/generator_commands/cookbook_code_file.rb +100 -100
- data/lib/chef-dk/command/generator_commands/cookbook_file.rb +45 -45
- data/lib/chef-dk/command/generator_commands/generator_generator.rb +174 -174
- data/lib/chef-dk/command/generator_commands/helpers.rb +36 -36
- data/lib/chef-dk/command/generator_commands/policyfile.rb +124 -126
- data/lib/chef-dk/command/generator_commands/recipe.rb +36 -36
- data/lib/chef-dk/command/generator_commands/repo.rb +123 -123
- data/lib/chef-dk/command/generator_commands/resource.rb +36 -36
- data/lib/chef-dk/command/generator_commands/template.rb +46 -46
- data/lib/chef-dk/command/install.rb +120 -120
- data/lib/chef-dk/command/provision.rb +436 -436
- data/lib/chef-dk/command/push.rb +117 -117
- data/lib/chef-dk/command/push_archive.rb +125 -125
- data/lib/chef-dk/command/shell_init.rb +179 -179
- data/lib/chef-dk/command/show_policy.rb +163 -163
- data/lib/chef-dk/command/undelete.rb +154 -154
- data/lib/chef-dk/command/update.rb +133 -133
- data/lib/chef-dk/command/verify.rb +629 -629
- data/lib/chef-dk/commands_map.rb +113 -113
- data/lib/chef-dk/completions/bash.sh.erb +5 -5
- data/lib/chef-dk/completions/chef.fish.erb +10 -10
- data/lib/chef-dk/completions/zsh.zsh.erb +21 -21
- data/lib/chef-dk/component_test.rb +227 -227
- data/lib/chef-dk/configurable.rb +88 -88
- data/lib/chef-dk/cookbook_metadata.rb +45 -45
- data/lib/chef-dk/cookbook_omnifetch.rb +32 -32
- data/lib/chef-dk/cookbook_profiler/git.rb +152 -151
- data/lib/chef-dk/cookbook_profiler/identifiers.rb +72 -72
- data/lib/chef-dk/cookbook_profiler/null_scm.rb +31 -31
- data/lib/chef-dk/exceptions.rb +151 -150
- data/lib/chef-dk/generator.rb +165 -165
- data/lib/chef-dk/helpers.rb +176 -176
- data/lib/chef-dk/pager.rb +104 -105
- data/lib/chef-dk/policyfile/artifactory_cookbook_source.rb +102 -102
- data/lib/chef-dk/policyfile/attribute_merge_checker.rb +110 -110
- data/lib/chef-dk/policyfile/chef_repo_cookbook_source.rb +138 -138
- data/lib/chef-dk/policyfile/chef_server_cookbook_source.rb +99 -99
- data/lib/chef-dk/policyfile/chef_server_lock_fetcher.rb +167 -164
- data/lib/chef-dk/policyfile/community_cookbook_source.rb +95 -95
- data/lib/chef-dk/policyfile/comparison_base.rb +123 -123
- data/lib/chef-dk/policyfile/cookbook_location_specification.rb +154 -154
- data/lib/chef-dk/policyfile/cookbook_locks.rb +466 -466
- data/lib/chef-dk/policyfile/cookbook_sources.rb +23 -23
- data/lib/chef-dk/policyfile/delivery_supermarket_source.rb +89 -89
- data/lib/chef-dk/policyfile/differ.rb +263 -263
- data/lib/chef-dk/policyfile/dsl.rb +288 -288
- data/lib/chef-dk/policyfile/git_lock_fetcher.rb +265 -0
- data/lib/chef-dk/policyfile/included_policies_cookbook_source.rb +156 -156
- data/lib/chef-dk/policyfile/lister.rb +229 -229
- data/lib/chef-dk/policyfile/local_lock_fetcher.rb +129 -123
- data/lib/chef-dk/policyfile/lock_applier.rb +80 -80
- data/lib/chef-dk/policyfile/null_cookbook_source.rb +49 -49
- data/lib/chef-dk/policyfile/policyfile_location_specification.rb +125 -122
- data/lib/chef-dk/policyfile/read_cookbook_for_compat_mode_upload.rb +124 -124
- data/lib/chef-dk/policyfile/reports/install.rb +69 -69
- data/lib/chef-dk/policyfile/reports/table_printer.rb +57 -57
- data/lib/chef-dk/policyfile/reports/upload.rb +70 -70
- data/lib/chef-dk/policyfile/solution_dependencies.rb +311 -312
- data/lib/chef-dk/policyfile/source_uri.rb +57 -57
- data/lib/chef-dk/policyfile/storage_config.rb +112 -102
- data/lib/chef-dk/policyfile/undo_record.rb +139 -139
- data/lib/chef-dk/policyfile/undo_stack.rb +128 -128
- data/lib/chef-dk/policyfile/uploader.rb +213 -213
- data/lib/chef-dk/policyfile_compiler.rb +528 -528
- data/lib/chef-dk/policyfile_lock.rb +581 -581
- data/lib/chef-dk/policyfile_services/clean_policies.rb +95 -95
- data/lib/chef-dk/policyfile_services/clean_policy_cookbooks.rb +123 -123
- data/lib/chef-dk/policyfile_services/export_repo.rb +419 -420
- data/lib/chef-dk/policyfile_services/install.rb +162 -162
- data/lib/chef-dk/policyfile_services/push.rb +112 -112
- data/lib/chef-dk/policyfile_services/push_archive.rb +164 -200
- data/lib/chef-dk/policyfile_services/rm_policy.rb +141 -141
- data/lib/chef-dk/policyfile_services/rm_policy_group.rb +85 -85
- data/lib/chef-dk/policyfile_services/show_policy.rb +234 -236
- data/lib/chef-dk/policyfile_services/undelete.rb +108 -108
- data/lib/chef-dk/policyfile_services/update_attributes.rb +110 -110
- data/lib/chef-dk/service_exception_inspectors.rb +24 -24
- data/lib/chef-dk/service_exception_inspectors/base.rb +39 -39
- data/lib/chef-dk/service_exception_inspectors/http.rb +119 -119
- data/lib/chef-dk/service_exceptions.rb +142 -142
- data/lib/chef-dk/shell_out.rb +36 -36
- data/lib/chef-dk/skeletons/code_generator/files/default/Berksfile +4 -4
- data/lib/chef-dk/skeletons/code_generator/files/default/build_cookbook/.kitchen.yml +21 -21
- data/lib/chef-dk/skeletons/code_generator/files/default/build_cookbook/README.md +146 -146
- data/lib/chef-dk/skeletons/code_generator/files/default/build_cookbook/test-fixture-recipe.rb +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/chefignore +104 -107
- data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README.md +66 -54
- data/lib/chef-dk/skeletons/code_generator/files/default/delivery-config.json +17 -17
- data/lib/chef-dk/skeletons/code_generator/files/default/delivery-project.toml +36 -36
- data/lib/chef-dk/skeletons/code_generator/files/default/gitignore +22 -22
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/README.md +24 -24
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -27
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +8 -8
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +7 -7
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/README.md +56 -56
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +3 -3
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -6
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/README.md +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/example.json +12 -12
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/policies/README.md +24 -24
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/README.md +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/example.json +12 -12
- data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper.rb +3 -3
- data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper_policyfile.rb +3 -3
- data/lib/chef-dk/skeletons/code_generator/metadata.rb +8 -8
- data/lib/chef-dk/skeletons/code_generator/recipes/app.rb +89 -89
- data/lib/chef-dk/skeletons/code_generator/recipes/attribute.rb +13 -13
- data/lib/chef-dk/skeletons/code_generator/recipes/build_cookbook.rb +177 -177
- data/lib/chef-dk/skeletons/code_generator/recipes/cookbook.rb +158 -152
- data/lib/chef-dk/skeletons/code_generator/recipes/cookbook_file.rb +25 -25
- data/lib/chef-dk/skeletons/code_generator/recipes/helpers.rb +21 -21
- data/lib/chef-dk/skeletons/code_generator/recipes/policyfile.rb +9 -9
- data/lib/chef-dk/skeletons/code_generator/recipes/recipe.rb +52 -52
- data/lib/chef-dk/skeletons/code_generator/recipes/repo.rb +68 -68
- data/lib/chef-dk/skeletons/code_generator/recipes/resource.rb +13 -13
- data/lib/chef-dk/skeletons/code_generator/recipes/template.rb +32 -32
- data/lib/chef-dk/skeletons/code_generator/templates/default/CHANGELOG.md.erb +11 -0
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -3
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.apachev2.erb +201 -201
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -339
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -674
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -21
- data/lib/chef-dk/skeletons/code_generator/templates/default/Policyfile.rb.erb +25 -25
- data/lib/chef-dk/skeletons/code_generator/templates/default/README.md.erb +4 -4
- data/lib/chef-dk/skeletons/code_generator/templates/default/build_cookbook/Berksfile.erb +7 -7
- data/lib/chef-dk/skeletons/code_generator/templates/default/build_cookbook/metadata.rb.erb +10 -10
- data/lib/chef-dk/skeletons/code_generator/templates/default/build_cookbook/recipe.rb.erb +8 -8
- data/lib/chef-dk/skeletons/code_generator/templates/default/helpers.rb.erb +39 -39
- data/lib/chef-dk/skeletons/code_generator/templates/default/inspec_default_test.rb.erb +18 -18
- data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen.yml.erb +26 -26
- data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +33 -33
- data/lib/chef-dk/skeletons/code_generator/templates/default/metadata.rb.erb +20 -20
- data/lib/chef-dk/skeletons/code_generator/templates/default/recipe.rb.erb +5 -5
- data/lib/chef-dk/skeletons/code_generator/templates/default/recipe_spec.rb.erb +35 -35
- data/lib/chef-dk/skeletons/code_generator/templates/default/repo/gitignore.erb +128 -128
- data/lib/chef-dk/skeletons/code_generator/templates/default/resource.rb.erb +1 -1
- data/lib/chef-dk/ui.rb +57 -57
- data/lib/chef-dk/version.rb +20 -20
- data/lib/kitchen/provisioner/policyfile_zero.rb +195 -195
- data/omnibus_overrides.rb +25 -25
- data/spec/shared/a_file_generator.rb +125 -125
- data/spec/shared/a_generated_file.rb +12 -12
- data/spec/shared/command_with_ui_object.rb +11 -11
- data/spec/shared/custom_generator_cookbook.rb +136 -136
- data/spec/shared/fixture_cookbook_checksums.rb +46 -46
- data/spec/shared/setup_git_committer_config.rb +54 -54
- data/spec/shared/setup_git_cookbooks.rb +53 -53
- data/spec/spec_helper.rb +51 -51
- data/spec/test_helpers.rb +84 -84
- data/spec/unit/chef_runner_spec.rb +139 -139
- data/spec/unit/chef_server_api_multi_spec.rb +120 -120
- data/spec/unit/cli_spec.rb +377 -377
- data/spec/unit/command/base_spec.rb +172 -172
- data/spec/unit/command/clean_policy_cookbooks_spec.rb +180 -180
- data/spec/unit/command/clean_policy_revisions_spec.rb +180 -180
- data/spec/unit/command/delete_policy_group_spec.rb +206 -206
- data/spec/unit/command/delete_policy_spec.rb +206 -206
- data/spec/unit/command/diff_spec.rb +311 -311
- data/spec/unit/command/env_spec.rb +52 -52
- data/spec/unit/command/exec_spec.rb +178 -178
- data/spec/unit/command/export_spec.rb +199 -199
- data/spec/unit/command/generate_spec.rb +142 -142
- data/spec/unit/command/generator_commands/app_spec.rb +166 -166
- data/spec/unit/command/generator_commands/attribute_spec.rb +31 -31
- data/spec/unit/command/generator_commands/base_spec.rb +181 -181
- data/spec/unit/command/generator_commands/build_cookbook_spec.rb +377 -377
- data/spec/unit/command/generator_commands/chef_exts/generator_desc_resource_spec.rb +97 -97
- data/spec/unit/command/generator_commands/chef_exts/recipe_dsl_ext_spec.rb +111 -111
- data/spec/unit/command/generator_commands/cookbook_file_spec.rb +31 -31
- data/spec/unit/command/generator_commands/cookbook_spec.rb +765 -756
- data/spec/unit/command/generator_commands/generator_generator_spec.rb +227 -227
- data/spec/unit/command/generator_commands/helpers_spec.rb +31 -31
- data/spec/unit/command/generator_commands/policyfile_spec.rb +223 -223
- data/spec/unit/command/generator_commands/recipe_spec.rb +37 -37
- data/spec/unit/command/generator_commands/repo_spec.rb +374 -374
- data/spec/unit/command/generator_commands/resource_spec.rb +31 -31
- data/spec/unit/command/generator_commands/template_spec.rb +31 -31
- data/spec/unit/command/install_spec.rb +179 -179
- data/spec/unit/command/provision_spec.rb +589 -589
- data/spec/unit/command/push_archive_spec.rb +153 -153
- data/spec/unit/command/push_spec.rb +198 -198
- data/spec/unit/command/shell_init_spec.rb +339 -339
- data/spec/unit/command/show_policy_spec.rb +234 -234
- data/spec/unit/command/undelete_spec.rb +244 -244
- data/spec/unit/command/update_spec.rb +283 -283
- data/spec/unit/command/verify_spec.rb +341 -341
- data/spec/unit/commands_map_spec.rb +57 -57
- data/spec/unit/component_test_spec.rb +128 -128
- data/spec/unit/configurable_spec.rb +68 -68
- data/spec/unit/cookbook_metadata_spec.rb +96 -96
- data/spec/unit/cookbook_profiler/git_spec.rb +176 -176
- data/spec/unit/cookbook_profiler/identifiers_spec.rb +81 -81
- data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_one.rb +9 -9
- data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_two.rb +9 -9
- data/spec/unit/fixtures/command/cli_test_command.rb +26 -26
- data/spec/unit/fixtures/command/explicit_path_example.rb +7 -7
- data/spec/unit/fixtures/configurable/test_config_loader.rb +5 -5
- data/spec/unit/fixtures/configurable/test_configurable.rb +10 -10
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -16
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/Berksfile +3 -3
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -4
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/chefignore +96 -96
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/.kitchen.yml +16 -16
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/Berksfile +3 -3
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/README.md +4 -4
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/chefignore +96 -96
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/metadata.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/recipes/default.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/.kitchen.yml +16 -16
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/Berksfile +3 -3
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/README.md +4 -4
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/chefignore +96 -96
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/metadata.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/recipes/default.rb +8 -8
- data/spec/unit/fixtures/cookbooks_api/chef_server_universe.json +56 -56
- data/spec/unit/fixtures/cookbooks_api/pruned_chef_server_universe.json +30 -30
- data/spec/unit/fixtures/cookbooks_api/pruned_small_universe.json +1321 -1321
- data/spec/unit/fixtures/cookbooks_api/small_universe.json +2987 -2987
- data/spec/unit/fixtures/cookbooks_api/universe.json +1 -1
- data/spec/unit/fixtures/cookbooks_api/update_fixtures.rb +33 -33
- data/spec/unit/fixtures/dev_cookbooks/README.md +16 -16
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/integration_test +2 -2
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/verify_me +5 -5
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/chef/verify_me +3 -3
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/test-kitchen/verify_me +2 -2
- data/spec/unit/fixtures/example_cookbook/.gitignore +17 -17
- data/spec/unit/fixtures/example_cookbook/.kitchen.yml +16 -16
- data/spec/unit/fixtures/example_cookbook/Berksfile +3 -3
- data/spec/unit/fixtures/example_cookbook/README.md +4 -4
- data/spec/unit/fixtures/example_cookbook/chefignore +96 -96
- data/spec/unit/fixtures/example_cookbook/metadata.rb +8 -8
- data/spec/unit/fixtures/example_cookbook/recipes/default.rb +8 -8
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/.gitignore +17 -17
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/.kitchen.yml +16 -16
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/Berksfile +3 -3
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/README.md +4 -4
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/chefignore +96 -96
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/metadata.json +5 -5
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/recipes/default.rb +8 -8
- data/spec/unit/fixtures/example_cookbook_no_metadata/.gitignore +17 -17
- data/spec/unit/fixtures/example_cookbook_no_metadata/.kitchen.yml +16 -16
- data/spec/unit/fixtures/example_cookbook_no_metadata/Berksfile +3 -3
- data/spec/unit/fixtures/example_cookbook_no_metadata/README.md +4 -4
- data/spec/unit/fixtures/example_cookbook_no_metadata/chefignore +96 -96
- data/spec/unit/fixtures/example_cookbook_no_metadata/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/chefignore +96 -96
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/metadata.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/Berksfile +3 -3
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/chefignore +96 -96
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/metadata.rb +9 -9
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/.kitchen.yml +16 -16
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/Berksfile +3 -3
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/chefignore +96 -96
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/metadata.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/metadata-missing/README.md +2 -2
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -16
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -8
- data/spec/unit/generator_spec.rb +119 -119
- data/spec/unit/pager_spec.rb +117 -117
- data/spec/unit/policyfile/artifactory_cookbook_source_spec.rb +59 -59
- data/spec/unit/policyfile/attribute_merge_checker_spec.rb +80 -80
- data/spec/unit/policyfile/chef_repo_cookbook_source_spec.rb +93 -93
- data/spec/unit/policyfile/chef_server_cookbook_source_spec.rb +55 -55
- data/spec/unit/policyfile/chef_server_lock_fetcher_spec.rb +161 -161
- data/spec/unit/policyfile/community_cookbook_source_spec.rb +83 -83
- data/spec/unit/policyfile/comparison_base_spec.rb +340 -340
- data/spec/unit/policyfile/cookbook_location_specification_spec.rb +347 -347
- data/spec/unit/policyfile/cookbook_locks_spec.rb +527 -527
- data/spec/unit/policyfile/delivery_supermarket_source_spec.rb +129 -129
- data/spec/unit/policyfile/differ_spec.rb +686 -686
- data/spec/unit/policyfile/git_lock_fetcher_spec.rb +155 -0
- data/spec/unit/policyfile/included_policies_cookbook_source_spec.rb +242 -242
- data/spec/unit/policyfile/lister_spec.rb +268 -268
- data/spec/unit/policyfile/local_lock_fetcher_spec.rb +173 -173
- data/spec/unit/policyfile/lock_applier_spec.rb +100 -100
- data/spec/unit/policyfile/null_cookbook_source_spec.rb +34 -34
- data/spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb +92 -92
- data/spec/unit/policyfile/reports/install_spec.rb +114 -114
- data/spec/unit/policyfile/reports/upload_spec.rb +94 -94
- data/spec/unit/policyfile/solution_dependencies_spec.rb +170 -170
- data/spec/unit/policyfile/source_uri_spec.rb +36 -36
- data/spec/unit/policyfile/storage_config_spec.rb +180 -180
- data/spec/unit/policyfile/undo_record_spec.rb +258 -258
- data/spec/unit/policyfile/undo_stack_spec.rb +265 -265
- data/spec/unit/policyfile/uploader_spec.rb +409 -409
- data/spec/unit/policyfile_demands_spec.rb +1197 -1197
- data/spec/unit/policyfile_evaluation_spec.rb +628 -638
- data/spec/unit/policyfile_includes_dsl_spec.rb +159 -159
- data/spec/unit/policyfile_includes_spec.rb +720 -720
- data/spec/unit/policyfile_install_with_includes_spec.rb +232 -232
- data/spec/unit/policyfile_lock_build_spec.rb +1065 -1065
- data/spec/unit/policyfile_lock_install_spec.rb +137 -137
- data/spec/unit/policyfile_lock_serialization_spec.rb +424 -424
- data/spec/unit/policyfile_lock_validation_spec.rb +608 -608
- data/spec/unit/policyfile_services/clean_policies_spec.rb +236 -236
- data/spec/unit/policyfile_services/clean_policy_cookbooks_spec.rb +272 -272
- data/spec/unit/policyfile_services/export_repo_spec.rb +473 -478
- data/spec/unit/policyfile_services/install_spec.rb +209 -209
- data/spec/unit/policyfile_services/push_archive_spec.rb +359 -374
- data/spec/unit/policyfile_services/push_spec.rb +249 -249
- data/spec/unit/policyfile_services/rm_policy_group_spec.rb +237 -237
- data/spec/unit/policyfile_services/rm_policy_spec.rb +263 -263
- data/spec/unit/policyfile_services/show_policy_spec.rb +887 -887
- data/spec/unit/policyfile_services/undelete_spec.rb +302 -302
- data/spec/unit/policyfile_services/update_attributes_spec.rb +229 -229
- data/spec/unit/policyfile_services/update_spec.rb +140 -140
- data/spec/unit/service_exception_inspectors/base_spec.rb +41 -41
- data/spec/unit/service_exception_inspectors/http_spec.rb +138 -138
- data/spec/unit/shell_out_spec.rb +34 -34
- data/tasks/announce.rb +57 -57
- data/tasks/bin/bundle-platform.bat +2 -2
- data/tasks/dependencies.rb +89 -89
- data/tasks/templates/prerelease.md.erb +35 -35
- data/tasks/templates/release.md.erb +34 -34
- data/warning.txt +9 -9
- metadata +9 -5
|
@@ -1,206 +1,206 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright:: Copyright (c) 2015 Chef Software Inc.
|
|
3
|
-
# License:: Apache License, Version 2.0
|
|
4
|
-
#
|
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
# See the License for the specific language governing permissions and
|
|
15
|
-
# limitations under the License.
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
require "spec_helper"
|
|
19
|
-
require "shared/command_with_ui_object"
|
|
20
|
-
require "chef-dk/command/delete_policy"
|
|
21
|
-
|
|
22
|
-
describe ChefDK::Command::DeletePolicy do
|
|
23
|
-
|
|
24
|
-
it_behaves_like "a command with a UI object"
|
|
25
|
-
|
|
26
|
-
subject(:command) do
|
|
27
|
-
described_class.new
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
let(:chef_config_loader) { instance_double("Chef::WorkstationConfigLoader") }
|
|
31
|
-
|
|
32
|
-
let(:chef_config) { double("Chef::Config") }
|
|
33
|
-
|
|
34
|
-
# nil means the config loader will do the default path lookup
|
|
35
|
-
let(:config_arg) { nil }
|
|
36
|
-
|
|
37
|
-
before do
|
|
38
|
-
stub_const("Chef::Config", chef_config)
|
|
39
|
-
allow(Chef::WorkstationConfigLoader).to receive(:new).with(config_arg).and_return(chef_config_loader)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
describe "parsing args and options" do
|
|
43
|
-
|
|
44
|
-
let(:base_params) { ["example-policy"] }
|
|
45
|
-
|
|
46
|
-
before do
|
|
47
|
-
command.apply_params!(params)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
context "when given just the policy name" do
|
|
51
|
-
|
|
52
|
-
let(:params) { base_params }
|
|
53
|
-
|
|
54
|
-
it "sets the policy name" do
|
|
55
|
-
expect(command.policy_name).to eq("example-policy")
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "configures the rm_policy service" do
|
|
59
|
-
expect(chef_config_loader).to receive(:load)
|
|
60
|
-
service = command.rm_policy_service
|
|
61
|
-
expect(service).to be_a(ChefDK::PolicyfileServices::RmPolicy)
|
|
62
|
-
expect(service.chef_config).to eq(chef_config)
|
|
63
|
-
expect(service.ui).to eq(command.ui)
|
|
64
|
-
expect(service.policy_name).to eq("example-policy")
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
context "when given a path to the config" do
|
|
69
|
-
|
|
70
|
-
let(:params) { base_params + %w{ -c ~/otherstuff/config.rb } }
|
|
71
|
-
|
|
72
|
-
let(:config_arg) { "~/otherstuff/config.rb" }
|
|
73
|
-
|
|
74
|
-
before do
|
|
75
|
-
expect(chef_config_loader).to receive(:load)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "reads the chef/knife config" do
|
|
79
|
-
expect(Chef::WorkstationConfigLoader).to receive(:new).with(config_arg).and_return(chef_config_loader)
|
|
80
|
-
expect(command.chef_config).to eq(chef_config)
|
|
81
|
-
expect(command.rm_policy_service.chef_config).to eq(chef_config)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
describe "settings that require loading chef config" do
|
|
87
|
-
|
|
88
|
-
before do
|
|
89
|
-
allow(chef_config_loader).to receive(:load)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
context "with no params" do
|
|
93
|
-
|
|
94
|
-
let(:params) { base_params }
|
|
95
|
-
|
|
96
|
-
it "disables debug by default" do
|
|
97
|
-
expect(command.debug?).to be(false)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
context "when debug mode is set" do
|
|
103
|
-
|
|
104
|
-
let(:params) { base_params + [ "-D" ] }
|
|
105
|
-
|
|
106
|
-
it "enables debug" do
|
|
107
|
-
expect(command.debug?).to be(true)
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
describe "running the command" do
|
|
115
|
-
|
|
116
|
-
let(:ui) { TestHelpers::TestUI.new }
|
|
117
|
-
|
|
118
|
-
before do
|
|
119
|
-
allow(chef_config_loader).to receive(:load)
|
|
120
|
-
command.ui = ui
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
context "when given too few arguments" do
|
|
124
|
-
|
|
125
|
-
let(:params) { %w{ } }
|
|
126
|
-
|
|
127
|
-
it "shows usage and exits" do
|
|
128
|
-
expect(command.run(params)).to eq(1)
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
context "when given too many arguments" do
|
|
134
|
-
|
|
135
|
-
let(:params) { %w{ a-policy-name wut-is-this } }
|
|
136
|
-
|
|
137
|
-
it "shows usage and exits" do
|
|
138
|
-
expect(command.run(params)).to eq(1)
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
context "when the rm_policy service raises an exception" do
|
|
144
|
-
|
|
145
|
-
let(:backtrace) { caller[0...3] }
|
|
146
|
-
|
|
147
|
-
let(:cause) do
|
|
148
|
-
e = StandardError.new("some operation failed")
|
|
149
|
-
e.set_backtrace(backtrace)
|
|
150
|
-
e
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
let(:exception) do
|
|
154
|
-
ChefDK::DeletePolicyError.new("Failed to delete policy.", cause)
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
before do
|
|
158
|
-
allow(command.rm_policy_service).to receive(:run).and_raise(exception)
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
it "prints a debugging message and exits non-zero" do
|
|
162
|
-
expect(command.run(%w{example-policy})).to eq(1)
|
|
163
|
-
|
|
164
|
-
expected_output = <<-E
|
|
165
|
-
Error: Failed to delete policy.
|
|
166
|
-
Reason: (StandardError) some operation failed
|
|
167
|
-
|
|
168
|
-
E
|
|
169
|
-
|
|
170
|
-
expect(ui.output).to eq(expected_output)
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
context "when debug is enabled" do
|
|
174
|
-
|
|
175
|
-
it "includes the backtrace in the error" do
|
|
176
|
-
command.run(%w{ example-policy -D })
|
|
177
|
-
|
|
178
|
-
expected_output = <<-E
|
|
179
|
-
Error: Failed to delete policy.
|
|
180
|
-
Reason: (StandardError) some operation failed
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
E
|
|
184
|
-
expected_output << backtrace.join("\n") << "\n"
|
|
185
|
-
|
|
186
|
-
expect(ui.output).to eq(expected_output)
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
context "when the rm_policy service executes successfully" do
|
|
194
|
-
|
|
195
|
-
before do
|
|
196
|
-
expect(command.rm_policy_service).to receive(:run)
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
it "exits 0" do
|
|
200
|
-
expect(command.run(%w{example-policy})).to eq(0)
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
end
|
|
206
|
-
end
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2015 Chef Software Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
require "spec_helper"
|
|
19
|
+
require "shared/command_with_ui_object"
|
|
20
|
+
require "chef-dk/command/delete_policy"
|
|
21
|
+
|
|
22
|
+
describe ChefDK::Command::DeletePolicy do
|
|
23
|
+
|
|
24
|
+
it_behaves_like "a command with a UI object"
|
|
25
|
+
|
|
26
|
+
subject(:command) do
|
|
27
|
+
described_class.new
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
let(:chef_config_loader) { instance_double("Chef::WorkstationConfigLoader") }
|
|
31
|
+
|
|
32
|
+
let(:chef_config) { double("Chef::Config") }
|
|
33
|
+
|
|
34
|
+
# nil means the config loader will do the default path lookup
|
|
35
|
+
let(:config_arg) { nil }
|
|
36
|
+
|
|
37
|
+
before do
|
|
38
|
+
stub_const("Chef::Config", chef_config)
|
|
39
|
+
allow(Chef::WorkstationConfigLoader).to receive(:new).with(config_arg).and_return(chef_config_loader)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe "parsing args and options" do
|
|
43
|
+
|
|
44
|
+
let(:base_params) { ["example-policy"] }
|
|
45
|
+
|
|
46
|
+
before do
|
|
47
|
+
command.apply_params!(params)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
context "when given just the policy name" do
|
|
51
|
+
|
|
52
|
+
let(:params) { base_params }
|
|
53
|
+
|
|
54
|
+
it "sets the policy name" do
|
|
55
|
+
expect(command.policy_name).to eq("example-policy")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "configures the rm_policy service" do
|
|
59
|
+
expect(chef_config_loader).to receive(:load)
|
|
60
|
+
service = command.rm_policy_service
|
|
61
|
+
expect(service).to be_a(ChefDK::PolicyfileServices::RmPolicy)
|
|
62
|
+
expect(service.chef_config).to eq(chef_config)
|
|
63
|
+
expect(service.ui).to eq(command.ui)
|
|
64
|
+
expect(service.policy_name).to eq("example-policy")
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
context "when given a path to the config" do
|
|
69
|
+
|
|
70
|
+
let(:params) { base_params + %w{ -c ~/otherstuff/config.rb } }
|
|
71
|
+
|
|
72
|
+
let(:config_arg) { "~/otherstuff/config.rb" }
|
|
73
|
+
|
|
74
|
+
before do
|
|
75
|
+
expect(chef_config_loader).to receive(:load)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "reads the chef/knife config" do
|
|
79
|
+
expect(Chef::WorkstationConfigLoader).to receive(:new).with(config_arg).and_return(chef_config_loader)
|
|
80
|
+
expect(command.chef_config).to eq(chef_config)
|
|
81
|
+
expect(command.rm_policy_service.chef_config).to eq(chef_config)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe "settings that require loading chef config" do
|
|
87
|
+
|
|
88
|
+
before do
|
|
89
|
+
allow(chef_config_loader).to receive(:load)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
context "with no params" do
|
|
93
|
+
|
|
94
|
+
let(:params) { base_params }
|
|
95
|
+
|
|
96
|
+
it "disables debug by default" do
|
|
97
|
+
expect(command.debug?).to be(false)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
context "when debug mode is set" do
|
|
103
|
+
|
|
104
|
+
let(:params) { base_params + [ "-D" ] }
|
|
105
|
+
|
|
106
|
+
it "enables debug" do
|
|
107
|
+
expect(command.debug?).to be(true)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
describe "running the command" do
|
|
115
|
+
|
|
116
|
+
let(:ui) { TestHelpers::TestUI.new }
|
|
117
|
+
|
|
118
|
+
before do
|
|
119
|
+
allow(chef_config_loader).to receive(:load)
|
|
120
|
+
command.ui = ui
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
context "when given too few arguments" do
|
|
124
|
+
|
|
125
|
+
let(:params) { %w{ } }
|
|
126
|
+
|
|
127
|
+
it "shows usage and exits" do
|
|
128
|
+
expect(command.run(params)).to eq(1)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
context "when given too many arguments" do
|
|
134
|
+
|
|
135
|
+
let(:params) { %w{ a-policy-name wut-is-this } }
|
|
136
|
+
|
|
137
|
+
it "shows usage and exits" do
|
|
138
|
+
expect(command.run(params)).to eq(1)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
context "when the rm_policy service raises an exception" do
|
|
144
|
+
|
|
145
|
+
let(:backtrace) { caller[0...3] }
|
|
146
|
+
|
|
147
|
+
let(:cause) do
|
|
148
|
+
e = StandardError.new("some operation failed")
|
|
149
|
+
e.set_backtrace(backtrace)
|
|
150
|
+
e
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
let(:exception) do
|
|
154
|
+
ChefDK::DeletePolicyError.new("Failed to delete policy.", cause)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
before do
|
|
158
|
+
allow(command.rm_policy_service).to receive(:run).and_raise(exception)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "prints a debugging message and exits non-zero" do
|
|
162
|
+
expect(command.run(%w{example-policy})).to eq(1)
|
|
163
|
+
|
|
164
|
+
expected_output = <<-E
|
|
165
|
+
Error: Failed to delete policy.
|
|
166
|
+
Reason: (StandardError) some operation failed
|
|
167
|
+
|
|
168
|
+
E
|
|
169
|
+
|
|
170
|
+
expect(ui.output).to eq(expected_output)
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
context "when debug is enabled" do
|
|
174
|
+
|
|
175
|
+
it "includes the backtrace in the error" do
|
|
176
|
+
command.run(%w{ example-policy -D })
|
|
177
|
+
|
|
178
|
+
expected_output = <<-E
|
|
179
|
+
Error: Failed to delete policy.
|
|
180
|
+
Reason: (StandardError) some operation failed
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
E
|
|
184
|
+
expected_output << backtrace.join("\n") << "\n"
|
|
185
|
+
|
|
186
|
+
expect(ui.output).to eq(expected_output)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
context "when the rm_policy service executes successfully" do
|
|
194
|
+
|
|
195
|
+
before do
|
|
196
|
+
expect(command.rm_policy_service).to receive(:run)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
it "exits 0" do
|
|
200
|
+
expect(command.run(%w{example-policy})).to eq(0)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
end
|
|
206
|
+
end
|
|
@@ -1,311 +1,311 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright:: Copyright (c) 2015 Chef Software Inc.
|
|
3
|
-
# License:: Apache License, Version 2.0
|
|
4
|
-
#
|
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
# See the License for the specific language governing permissions and
|
|
15
|
-
# limitations under the License.
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
require "spec_helper"
|
|
19
|
-
require "shared/command_with_ui_object"
|
|
20
|
-
require "chef-dk/command/diff"
|
|
21
|
-
require "chef-dk/service_exceptions"
|
|
22
|
-
|
|
23
|
-
describe ChefDK::Command::Diff do
|
|
24
|
-
|
|
25
|
-
it_behaves_like "a command with a UI object"
|
|
26
|
-
|
|
27
|
-
let(:params) { [] }
|
|
28
|
-
|
|
29
|
-
let(:command) do
|
|
30
|
-
described_class.new
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
let(:chef_config_loader) { instance_double("Chef::WorkstationConfigLoader") }
|
|
34
|
-
|
|
35
|
-
let(:chef_config) { double("Chef::Config") }
|
|
36
|
-
|
|
37
|
-
let(:config_arg) { nil }
|
|
38
|
-
|
|
39
|
-
before do
|
|
40
|
-
stub_const("Chef::Config", chef_config)
|
|
41
|
-
allow(Chef::WorkstationConfigLoader).to receive(:new).with(config_arg).and_return(chef_config_loader)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
describe "selecting comparison bases" do
|
|
45
|
-
|
|
46
|
-
let(:ui) { TestHelpers::TestUI.new }
|
|
47
|
-
|
|
48
|
-
let(:http_client) { instance_double("Chef::ServerAPI") }
|
|
49
|
-
|
|
50
|
-
let(:differ) { instance_double("ChefDK::Policyfile::Differ", run_report: nil) }
|
|
51
|
-
|
|
52
|
-
let(:pager) { instance_double("ChefDK::Pager", ui: ui) }
|
|
53
|
-
|
|
54
|
-
before do
|
|
55
|
-
allow(ChefDK::Pager).to receive(:new).and_return(pager)
|
|
56
|
-
allow(pager).to receive(:with_pager).and_yield(pager)
|
|
57
|
-
allow(command).to receive(:materialize_locks).and_return(nil)
|
|
58
|
-
allow(command).to receive(:differ).and_return(differ)
|
|
59
|
-
allow(command).to receive(:http_client).and_return(http_client)
|
|
60
|
-
command.ui = ui
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
context "when no base is given" do
|
|
64
|
-
|
|
65
|
-
it "prints an error message and exits" do
|
|
66
|
-
expect(command.run(params)).to eq(1)
|
|
67
|
-
expect(ui.output).to include("No comparison specified")
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
context "when an PolicyfileServiceError is encountered" do
|
|
73
|
-
|
|
74
|
-
let(:params) { %w{ --head } }
|
|
75
|
-
|
|
76
|
-
context "without a reason" do
|
|
77
|
-
|
|
78
|
-
it "prints the exception successfully" do
|
|
79
|
-
expect(command).to receive(:print_diff).and_raise(ChefDK::PolicyfileServiceError)
|
|
80
|
-
expect(command.run(params)).to eq(1)
|
|
81
|
-
expect(ui.output).to include("Error: ChefDK::PolicyfileServiceError")
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
context "with a reason" do
|
|
87
|
-
|
|
88
|
-
let(:err) { ChefDK::PolicyfileNestedException.new("msg", RuntimeError.new) }
|
|
89
|
-
|
|
90
|
-
it "prints the exception and reason successfully" do
|
|
91
|
-
expect(command).to receive(:print_diff).and_raise(err)
|
|
92
|
-
expect(command.run(params)).to eq(1)
|
|
93
|
-
expect(ui.output).to include("Error: msg\nReason: (RuntimeError) RuntimeError")
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
context "when server and git comparison bases are mixed" do
|
|
101
|
-
|
|
102
|
-
let(:params) { %w{ --git gitref policygroup } }
|
|
103
|
-
|
|
104
|
-
it "prints an error message and exits" do
|
|
105
|
-
expect(command.run(params)).to eq(1)
|
|
106
|
-
expect(ui.output).to include("Conflicting arguments and options: git and Policy Group comparisons cannot be mixed")
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
context "when specific git comparison bases are mixed with --head" do
|
|
112
|
-
|
|
113
|
-
let(:params) { %w{ --head --git gitref } }
|
|
114
|
-
|
|
115
|
-
it "prints an error message and exits" do
|
|
116
|
-
expect(command.run(params)).to eq(1)
|
|
117
|
-
expect(ui.output).to include("Conflicting git options: --head and --git are exclusive")
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
describe "selecting git comparison bases" do
|
|
123
|
-
|
|
124
|
-
context "when the Policyfile isn't named" do
|
|
125
|
-
|
|
126
|
-
let(:params) { %w{ --head } }
|
|
127
|
-
|
|
128
|
-
it "uses Policyfile.lock.json as the local lock" do
|
|
129
|
-
expect(command.run(params)).to eq(0)
|
|
130
|
-
expect(command.policyfile_lock_relpath).to eq("Policyfile.lock.json")
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
context "when the Policyfile is named" do
|
|
136
|
-
|
|
137
|
-
context "using the --head option" do
|
|
138
|
-
|
|
139
|
-
let(:params) { %w{ policies/OtherPolicy.rb --head } }
|
|
140
|
-
|
|
141
|
-
it "uses the corresponding lock as the local lock" do
|
|
142
|
-
expect(command.run(params)).to eq(0)
|
|
143
|
-
expect(command.policyfile_lock_relpath).to eq("policies/OtherPolicy.lock.json")
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
context "using the --git option" do
|
|
149
|
-
|
|
150
|
-
let(:params) { %w{ policies/OtherPolicy.rb --git master } }
|
|
151
|
-
|
|
152
|
-
it "uses the corresponding lock as the local lock" do
|
|
153
|
-
expect(command.run(params)).to eq(0)
|
|
154
|
-
expect(command.policyfile_lock_relpath).to eq("policies/OtherPolicy.lock.json")
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
context "when given a single commit-ish" do
|
|
162
|
-
|
|
163
|
-
let(:params) { %w{ --git master } }
|
|
164
|
-
|
|
165
|
-
it "compares the local lock to the commit" do
|
|
166
|
-
expect(command.run(params)).to eq(0)
|
|
167
|
-
expect(command.old_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Git)
|
|
168
|
-
expect(command.old_base.ref).to eq("master")
|
|
169
|
-
expect(command.new_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Local)
|
|
170
|
-
expect(command.new_base.policyfile_lock_relpath).to eq("Policyfile.lock.json")
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
context "when given two commit-ish names" do
|
|
176
|
-
|
|
177
|
-
let(:params) { %w{ --git master...dev-branch } }
|
|
178
|
-
|
|
179
|
-
it "compares the two commits" do
|
|
180
|
-
expect(command.run(params)).to eq(0)
|
|
181
|
-
expect(command.old_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Git)
|
|
182
|
-
expect(command.old_base.ref).to eq("master")
|
|
183
|
-
expect(command.new_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Git)
|
|
184
|
-
expect(command.new_base.ref).to eq("dev-branch")
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
context "when given too many commit-ish names" do
|
|
190
|
-
|
|
191
|
-
let(:params) { %w{ --git too...many...things } }
|
|
192
|
-
|
|
193
|
-
it "prints an error and exits" do
|
|
194
|
-
expect(command.run(params)).to eq(1)
|
|
195
|
-
expect(ui.output).to include("Unable to parse git comparison `too...many...things`. Only 2 references can be specified.")
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
context "when --head is used" do
|
|
201
|
-
|
|
202
|
-
let(:params) { %w{ --head } }
|
|
203
|
-
|
|
204
|
-
it "compares the local lock to git HEAD" do
|
|
205
|
-
expect(command.run(params)).to eq(0)
|
|
206
|
-
expect(command.old_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Git)
|
|
207
|
-
expect(command.old_base.ref).to eq("HEAD")
|
|
208
|
-
expect(command.new_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Local)
|
|
209
|
-
expect(command.new_base.policyfile_lock_relpath).to eq("Policyfile.lock.json")
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
describe "selecting policy group comparison bases" do
|
|
217
|
-
|
|
218
|
-
let(:local_lock_comparison_base) do
|
|
219
|
-
instance_double("ChefDK::Policyfile::ComparisonBase::Local")
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
before do
|
|
223
|
-
allow(command).to receive(:local_lock_comparison_base).and_return(local_lock_comparison_base)
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
context "when the local lockfile cannot be read and parsed" do
|
|
227
|
-
|
|
228
|
-
let(:params) { %w{ dev-group } }
|
|
229
|
-
|
|
230
|
-
before do
|
|
231
|
-
allow(local_lock_comparison_base).to receive(:lock).and_raise(ChefDK::LockfileNotFound)
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
it "prints an error and exits" do
|
|
235
|
-
expect(command.run(params)).to eq(1)
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
context "when the local lockfile can be read and parsed" do
|
|
241
|
-
before do
|
|
242
|
-
allow(local_lock_comparison_base).to receive(:lock).and_return({ "name" => "example-policy" })
|
|
243
|
-
allow(command).to receive(:differ).and_return(differ)
|
|
244
|
-
command.ui = ui
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
context "when the Policyfile isn't named" do
|
|
248
|
-
|
|
249
|
-
let(:params) { %w{ dev-group } }
|
|
250
|
-
|
|
251
|
-
it "uses Policyfile.lock.json as the local lock" do
|
|
252
|
-
expect(command.run(params)).to eq(0)
|
|
253
|
-
expect(command.policyfile_lock_relpath).to eq("Policyfile.lock.json")
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
context "when the Policyfile is named" do
|
|
259
|
-
|
|
260
|
-
let(:params) { %w{ policies/SomePolicy.rb dev-group } }
|
|
261
|
-
|
|
262
|
-
it "uses the corresponding lock as the local lock" do
|
|
263
|
-
expect(command.run(params)).to eq(0)
|
|
264
|
-
expect(command.policyfile_lock_relpath).to eq("policies/SomePolicy.lock.json")
|
|
265
|
-
end
|
|
266
|
-
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
context "when given a single policy group name" do
|
|
270
|
-
|
|
271
|
-
let(:params) { %w{ dev-group } }
|
|
272
|
-
|
|
273
|
-
it "compares the policy group's lock to the local lock" do
|
|
274
|
-
expect(command.run(params)).to eq(0)
|
|
275
|
-
expect(command.old_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::PolicyGroup)
|
|
276
|
-
expect(command.old_base.group).to eq("dev-group")
|
|
277
|
-
expect(command.new_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Local)
|
|
278
|
-
expect(command.new_base.policyfile_lock_relpath).to eq("Policyfile.lock.json")
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
context "when given two policy group names" do
|
|
284
|
-
|
|
285
|
-
let(:params) { %w{ prod-group...stage-group } }
|
|
286
|
-
|
|
287
|
-
it "compares the two locks" do
|
|
288
|
-
expect(command.run(params)).to eq(0)
|
|
289
|
-
expect(command.old_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::PolicyGroup)
|
|
290
|
-
expect(command.old_base.group).to eq("prod-group")
|
|
291
|
-
expect(command.new_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::PolicyGroup)
|
|
292
|
-
expect(command.new_base.group).to eq("stage-group")
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
end
|
|
296
|
-
|
|
297
|
-
context "when given too many policy group names" do
|
|
298
|
-
|
|
299
|
-
let(:params) { %w{ prod...stage...dev } }
|
|
300
|
-
|
|
301
|
-
it "prints an error and exits" do
|
|
302
|
-
expect(command.run(params)).to eq(1)
|
|
303
|
-
expect(ui.output).to include("Unable to parse policy group comparison `prod...stage...dev`. Only 2 references can be specified.")
|
|
304
|
-
end
|
|
305
|
-
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
end
|
|
309
|
-
end
|
|
310
|
-
end
|
|
311
|
-
end
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2015 Chef Software Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
require "spec_helper"
|
|
19
|
+
require "shared/command_with_ui_object"
|
|
20
|
+
require "chef-dk/command/diff"
|
|
21
|
+
require "chef-dk/service_exceptions"
|
|
22
|
+
|
|
23
|
+
describe ChefDK::Command::Diff do
|
|
24
|
+
|
|
25
|
+
it_behaves_like "a command with a UI object"
|
|
26
|
+
|
|
27
|
+
let(:params) { [] }
|
|
28
|
+
|
|
29
|
+
let(:command) do
|
|
30
|
+
described_class.new
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
let(:chef_config_loader) { instance_double("Chef::WorkstationConfigLoader") }
|
|
34
|
+
|
|
35
|
+
let(:chef_config) { double("Chef::Config") }
|
|
36
|
+
|
|
37
|
+
let(:config_arg) { nil }
|
|
38
|
+
|
|
39
|
+
before do
|
|
40
|
+
stub_const("Chef::Config", chef_config)
|
|
41
|
+
allow(Chef::WorkstationConfigLoader).to receive(:new).with(config_arg).and_return(chef_config_loader)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "selecting comparison bases" do
|
|
45
|
+
|
|
46
|
+
let(:ui) { TestHelpers::TestUI.new }
|
|
47
|
+
|
|
48
|
+
let(:http_client) { instance_double("Chef::ServerAPI") }
|
|
49
|
+
|
|
50
|
+
let(:differ) { instance_double("ChefDK::Policyfile::Differ", run_report: nil) }
|
|
51
|
+
|
|
52
|
+
let(:pager) { instance_double("ChefDK::Pager", ui: ui) }
|
|
53
|
+
|
|
54
|
+
before do
|
|
55
|
+
allow(ChefDK::Pager).to receive(:new).and_return(pager)
|
|
56
|
+
allow(pager).to receive(:with_pager).and_yield(pager)
|
|
57
|
+
allow(command).to receive(:materialize_locks).and_return(nil)
|
|
58
|
+
allow(command).to receive(:differ).and_return(differ)
|
|
59
|
+
allow(command).to receive(:http_client).and_return(http_client)
|
|
60
|
+
command.ui = ui
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
context "when no base is given" do
|
|
64
|
+
|
|
65
|
+
it "prints an error message and exits" do
|
|
66
|
+
expect(command.run(params)).to eq(1)
|
|
67
|
+
expect(ui.output).to include("No comparison specified")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
context "when an PolicyfileServiceError is encountered" do
|
|
73
|
+
|
|
74
|
+
let(:params) { %w{ --head } }
|
|
75
|
+
|
|
76
|
+
context "without a reason" do
|
|
77
|
+
|
|
78
|
+
it "prints the exception successfully" do
|
|
79
|
+
expect(command).to receive(:print_diff).and_raise(ChefDK::PolicyfileServiceError)
|
|
80
|
+
expect(command.run(params)).to eq(1)
|
|
81
|
+
expect(ui.output).to include("Error: ChefDK::PolicyfileServiceError")
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
context "with a reason" do
|
|
87
|
+
|
|
88
|
+
let(:err) { ChefDK::PolicyfileNestedException.new("msg", RuntimeError.new) }
|
|
89
|
+
|
|
90
|
+
it "prints the exception and reason successfully" do
|
|
91
|
+
expect(command).to receive(:print_diff).and_raise(err)
|
|
92
|
+
expect(command.run(params)).to eq(1)
|
|
93
|
+
expect(ui.output).to include("Error: msg\nReason: (RuntimeError) RuntimeError")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
context "when server and git comparison bases are mixed" do
|
|
101
|
+
|
|
102
|
+
let(:params) { %w{ --git gitref policygroup } }
|
|
103
|
+
|
|
104
|
+
it "prints an error message and exits" do
|
|
105
|
+
expect(command.run(params)).to eq(1)
|
|
106
|
+
expect(ui.output).to include("Conflicting arguments and options: git and Policy Group comparisons cannot be mixed")
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
context "when specific git comparison bases are mixed with --head" do
|
|
112
|
+
|
|
113
|
+
let(:params) { %w{ --head --git gitref } }
|
|
114
|
+
|
|
115
|
+
it "prints an error message and exits" do
|
|
116
|
+
expect(command.run(params)).to eq(1)
|
|
117
|
+
expect(ui.output).to include("Conflicting git options: --head and --git are exclusive")
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
describe "selecting git comparison bases" do
|
|
123
|
+
|
|
124
|
+
context "when the Policyfile isn't named" do
|
|
125
|
+
|
|
126
|
+
let(:params) { %w{ --head } }
|
|
127
|
+
|
|
128
|
+
it "uses Policyfile.lock.json as the local lock" do
|
|
129
|
+
expect(command.run(params)).to eq(0)
|
|
130
|
+
expect(command.policyfile_lock_relpath).to eq("Policyfile.lock.json")
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
context "when the Policyfile is named" do
|
|
136
|
+
|
|
137
|
+
context "using the --head option" do
|
|
138
|
+
|
|
139
|
+
let(:params) { %w{ policies/OtherPolicy.rb --head } }
|
|
140
|
+
|
|
141
|
+
it "uses the corresponding lock as the local lock" do
|
|
142
|
+
expect(command.run(params)).to eq(0)
|
|
143
|
+
expect(command.policyfile_lock_relpath).to eq("policies/OtherPolicy.lock.json")
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
context "using the --git option" do
|
|
149
|
+
|
|
150
|
+
let(:params) { %w{ policies/OtherPolicy.rb --git master } }
|
|
151
|
+
|
|
152
|
+
it "uses the corresponding lock as the local lock" do
|
|
153
|
+
expect(command.run(params)).to eq(0)
|
|
154
|
+
expect(command.policyfile_lock_relpath).to eq("policies/OtherPolicy.lock.json")
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context "when given a single commit-ish" do
|
|
162
|
+
|
|
163
|
+
let(:params) { %w{ --git master } }
|
|
164
|
+
|
|
165
|
+
it "compares the local lock to the commit" do
|
|
166
|
+
expect(command.run(params)).to eq(0)
|
|
167
|
+
expect(command.old_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Git)
|
|
168
|
+
expect(command.old_base.ref).to eq("master")
|
|
169
|
+
expect(command.new_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Local)
|
|
170
|
+
expect(command.new_base.policyfile_lock_relpath).to eq("Policyfile.lock.json")
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
context "when given two commit-ish names" do
|
|
176
|
+
|
|
177
|
+
let(:params) { %w{ --git master...dev-branch } }
|
|
178
|
+
|
|
179
|
+
it "compares the two commits" do
|
|
180
|
+
expect(command.run(params)).to eq(0)
|
|
181
|
+
expect(command.old_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Git)
|
|
182
|
+
expect(command.old_base.ref).to eq("master")
|
|
183
|
+
expect(command.new_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Git)
|
|
184
|
+
expect(command.new_base.ref).to eq("dev-branch")
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
context "when given too many commit-ish names" do
|
|
190
|
+
|
|
191
|
+
let(:params) { %w{ --git too...many...things } }
|
|
192
|
+
|
|
193
|
+
it "prints an error and exits" do
|
|
194
|
+
expect(command.run(params)).to eq(1)
|
|
195
|
+
expect(ui.output).to include("Unable to parse git comparison `too...many...things`. Only 2 references can be specified.")
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
context "when --head is used" do
|
|
201
|
+
|
|
202
|
+
let(:params) { %w{ --head } }
|
|
203
|
+
|
|
204
|
+
it "compares the local lock to git HEAD" do
|
|
205
|
+
expect(command.run(params)).to eq(0)
|
|
206
|
+
expect(command.old_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Git)
|
|
207
|
+
expect(command.old_base.ref).to eq("HEAD")
|
|
208
|
+
expect(command.new_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Local)
|
|
209
|
+
expect(command.new_base.policyfile_lock_relpath).to eq("Policyfile.lock.json")
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
describe "selecting policy group comparison bases" do
|
|
217
|
+
|
|
218
|
+
let(:local_lock_comparison_base) do
|
|
219
|
+
instance_double("ChefDK::Policyfile::ComparisonBase::Local")
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
before do
|
|
223
|
+
allow(command).to receive(:local_lock_comparison_base).and_return(local_lock_comparison_base)
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
context "when the local lockfile cannot be read and parsed" do
|
|
227
|
+
|
|
228
|
+
let(:params) { %w{ dev-group } }
|
|
229
|
+
|
|
230
|
+
before do
|
|
231
|
+
allow(local_lock_comparison_base).to receive(:lock).and_raise(ChefDK::LockfileNotFound)
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
it "prints an error and exits" do
|
|
235
|
+
expect(command.run(params)).to eq(1)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
context "when the local lockfile can be read and parsed" do
|
|
241
|
+
before do
|
|
242
|
+
allow(local_lock_comparison_base).to receive(:lock).and_return({ "name" => "example-policy" })
|
|
243
|
+
allow(command).to receive(:differ).and_return(differ)
|
|
244
|
+
command.ui = ui
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
context "when the Policyfile isn't named" do
|
|
248
|
+
|
|
249
|
+
let(:params) { %w{ dev-group } }
|
|
250
|
+
|
|
251
|
+
it "uses Policyfile.lock.json as the local lock" do
|
|
252
|
+
expect(command.run(params)).to eq(0)
|
|
253
|
+
expect(command.policyfile_lock_relpath).to eq("Policyfile.lock.json")
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
context "when the Policyfile is named" do
|
|
259
|
+
|
|
260
|
+
let(:params) { %w{ policies/SomePolicy.rb dev-group } }
|
|
261
|
+
|
|
262
|
+
it "uses the corresponding lock as the local lock" do
|
|
263
|
+
expect(command.run(params)).to eq(0)
|
|
264
|
+
expect(command.policyfile_lock_relpath).to eq("policies/SomePolicy.lock.json")
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
context "when given a single policy group name" do
|
|
270
|
+
|
|
271
|
+
let(:params) { %w{ dev-group } }
|
|
272
|
+
|
|
273
|
+
it "compares the policy group's lock to the local lock" do
|
|
274
|
+
expect(command.run(params)).to eq(0)
|
|
275
|
+
expect(command.old_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::PolicyGroup)
|
|
276
|
+
expect(command.old_base.group).to eq("dev-group")
|
|
277
|
+
expect(command.new_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::Local)
|
|
278
|
+
expect(command.new_base.policyfile_lock_relpath).to eq("Policyfile.lock.json")
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
context "when given two policy group names" do
|
|
284
|
+
|
|
285
|
+
let(:params) { %w{ prod-group...stage-group } }
|
|
286
|
+
|
|
287
|
+
it "compares the two locks" do
|
|
288
|
+
expect(command.run(params)).to eq(0)
|
|
289
|
+
expect(command.old_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::PolicyGroup)
|
|
290
|
+
expect(command.old_base.group).to eq("prod-group")
|
|
291
|
+
expect(command.new_base).to be_a_kind_of(ChefDK::Policyfile::ComparisonBase::PolicyGroup)
|
|
292
|
+
expect(command.new_base.group).to eq("stage-group")
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
context "when given too many policy group names" do
|
|
298
|
+
|
|
299
|
+
let(:params) { %w{ prod...stage...dev } }
|
|
300
|
+
|
|
301
|
+
it "prints an error and exits" do
|
|
302
|
+
expect(command.run(params)).to eq(1)
|
|
303
|
+
expect(ui.output).to include("Unable to parse policy group comparison `prod...stage...dev`. Only 2 references can be specified.")
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
end
|