chef-cli 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +32 -0
- data/LICENSE +201 -0
- data/Rakefile +70 -0
- data/bin/chef +25 -0
- data/chef-cli.gemspec +53 -0
- data/lib/chef-cli.rb +19 -0
- data/lib/chef-cli/authenticated_http.rb +22 -0
- data/lib/chef-cli/builtin_commands.rb +62 -0
- data/lib/chef-cli/chef_runner.rb +114 -0
- data/lib/chef-cli/chef_server_api_multi.rb +73 -0
- data/lib/chef-cli/cli.rb +206 -0
- data/lib/chef-cli/command/base.rb +89 -0
- data/lib/chef-cli/command/clean_policy_cookbooks.rb +115 -0
- data/lib/chef-cli/command/clean_policy_revisions.rb +112 -0
- data/lib/chef-cli/command/delete_policy.rb +121 -0
- data/lib/chef-cli/command/delete_policy_group.rb +121 -0
- data/lib/chef-cli/command/describe_cookbook.rb +98 -0
- data/lib/chef-cli/command/diff.rb +316 -0
- data/lib/chef-cli/command/env.rb +99 -0
- data/lib/chef-cli/command/exec.rb +45 -0
- data/lib/chef-cli/command/export.rb +156 -0
- data/lib/chef-cli/command/gem.rb +48 -0
- data/lib/chef-cli/command/generate.rb +123 -0
- data/lib/chef-cli/command/generator_commands.rb +83 -0
- data/lib/chef-cli/command/generator_commands/attribute.rb +37 -0
- data/lib/chef-cli/command/generator_commands/base.rb +157 -0
- data/lib/chef-cli/command/generator_commands/build_cookbook.rb +126 -0
- data/lib/chef-cli/command/generator_commands/chef_exts/generator_desc_resource.rb +40 -0
- data/lib/chef-cli/command/generator_commands/chef_exts/quieter_doc_formatter.rb +38 -0
- data/lib/chef-cli/command/generator_commands/chef_exts/recipe_dsl_ext.rb +39 -0
- data/lib/chef-cli/command/generator_commands/cookbook.rb +251 -0
- data/lib/chef-cli/command/generator_commands/cookbook_code_file.rb +100 -0
- data/lib/chef-cli/command/generator_commands/cookbook_file.rb +46 -0
- data/lib/chef-cli/command/generator_commands/generator_generator.rb +175 -0
- data/lib/chef-cli/command/generator_commands/helpers.rb +37 -0
- data/lib/chef-cli/command/generator_commands/policyfile.rb +125 -0
- data/lib/chef-cli/command/generator_commands/recipe.rb +37 -0
- data/lib/chef-cli/command/generator_commands/repo.rb +140 -0
- data/lib/chef-cli/command/generator_commands/resource.rb +37 -0
- data/lib/chef-cli/command/generator_commands/template.rb +47 -0
- data/lib/chef-cli/command/install.rb +121 -0
- data/lib/chef-cli/command/provision.rb +38 -0
- data/lib/chef-cli/command/push.rb +118 -0
- data/lib/chef-cli/command/push_archive.rb +126 -0
- data/lib/chef-cli/command/shell_init.rb +185 -0
- data/lib/chef-cli/command/show_policy.rb +164 -0
- data/lib/chef-cli/command/undelete.rb +155 -0
- data/lib/chef-cli/command/update.rb +140 -0
- data/lib/chef-cli/command/verify.rb +548 -0
- data/lib/chef-cli/commands_map.rb +113 -0
- data/lib/chef-cli/completions/bash.sh.erb +5 -0
- data/lib/chef-cli/completions/chef.fish.erb +10 -0
- data/lib/chef-cli/completions/zsh.zsh.erb +21 -0
- data/lib/chef-cli/component_test.rb +226 -0
- data/lib/chef-cli/configurable.rb +88 -0
- data/lib/chef-cli/cookbook_metadata.rb +45 -0
- data/lib/chef-cli/cookbook_omnifetch.rb +32 -0
- data/lib/chef-cli/cookbook_profiler/git.rb +152 -0
- data/lib/chef-cli/cookbook_profiler/identifiers.rb +72 -0
- data/lib/chef-cli/cookbook_profiler/null_scm.rb +31 -0
- data/lib/chef-cli/dist.rb +31 -0
- data/lib/chef-cli/exceptions.rb +153 -0
- data/lib/chef-cli/generator.rb +165 -0
- data/lib/chef-cli/helpers.rb +170 -0
- data/lib/chef-cli/pager.rb +104 -0
- data/lib/chef-cli/policyfile/artifactory_cookbook_source.rb +102 -0
- data/lib/chef-cli/policyfile/attribute_merge_checker.rb +110 -0
- data/lib/chef-cli/policyfile/chef_repo_cookbook_source.rb +138 -0
- data/lib/chef-cli/policyfile/chef_server_cookbook_source.rb +99 -0
- data/lib/chef-cli/policyfile/chef_server_lock_fetcher.rb +167 -0
- data/lib/chef-cli/policyfile/community_cookbook_source.rb +95 -0
- data/lib/chef-cli/policyfile/comparison_base.rb +123 -0
- data/lib/chef-cli/policyfile/cookbook_location_specification.rb +154 -0
- data/lib/chef-cli/policyfile/cookbook_locks.rb +466 -0
- data/lib/chef-cli/policyfile/cookbook_sources.rb +23 -0
- data/lib/chef-cli/policyfile/delivery_supermarket_source.rb +89 -0
- data/lib/chef-cli/policyfile/differ.rb +263 -0
- data/lib/chef-cli/policyfile/dsl.rb +288 -0
- data/lib/chef-cli/policyfile/git_lock_fetcher.rb +265 -0
- data/lib/chef-cli/policyfile/included_policies_cookbook_source.rb +156 -0
- data/lib/chef-cli/policyfile/lister.rb +229 -0
- data/lib/chef-cli/policyfile/local_lock_fetcher.rb +132 -0
- data/lib/chef-cli/policyfile/lock_applier.rb +80 -0
- data/lib/chef-cli/policyfile/lock_fetcher_mixin.rb +37 -0
- data/lib/chef-cli/policyfile/null_cookbook_source.rb +49 -0
- data/lib/chef-cli/policyfile/policyfile_location_specification.rb +128 -0
- data/lib/chef-cli/policyfile/read_cookbook_for_compat_mode_upload.rb +124 -0
- data/lib/chef-cli/policyfile/remote_lock_fetcher.rb +108 -0
- data/lib/chef-cli/policyfile/reports/install.rb +69 -0
- data/lib/chef-cli/policyfile/reports/table_printer.rb +57 -0
- data/lib/chef-cli/policyfile/reports/upload.rb +70 -0
- data/lib/chef-cli/policyfile/solution_dependencies.rb +311 -0
- data/lib/chef-cli/policyfile/source_uri.rb +57 -0
- data/lib/chef-cli/policyfile/storage_config.rb +112 -0
- data/lib/chef-cli/policyfile/undo_record.rb +139 -0
- data/lib/chef-cli/policyfile/undo_stack.rb +128 -0
- data/lib/chef-cli/policyfile/uploader.rb +222 -0
- data/lib/chef-cli/policyfile_compiler.rb +528 -0
- data/lib/chef-cli/policyfile_lock.rb +581 -0
- data/lib/chef-cli/policyfile_services/clean_policies.rb +95 -0
- data/lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb +123 -0
- data/lib/chef-cli/policyfile_services/export_repo.rb +419 -0
- data/lib/chef-cli/policyfile_services/install.rb +167 -0
- data/lib/chef-cli/policyfile_services/push.rb +112 -0
- data/lib/chef-cli/policyfile_services/push_archive.rb +164 -0
- data/lib/chef-cli/policyfile_services/rm_policy.rb +141 -0
- data/lib/chef-cli/policyfile_services/rm_policy_group.rb +85 -0
- data/lib/chef-cli/policyfile_services/show_policy.rb +234 -0
- data/lib/chef-cli/policyfile_services/undelete.rb +108 -0
- data/lib/chef-cli/policyfile_services/update_attributes.rb +110 -0
- data/lib/chef-cli/service_exception_inspectors.rb +24 -0
- data/lib/chef-cli/service_exception_inspectors/base.rb +39 -0
- data/lib/chef-cli/service_exception_inspectors/http.rb +119 -0
- data/lib/chef-cli/service_exceptions.rb +142 -0
- data/lib/chef-cli/shell_out.rb +36 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/Berksfile +3 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/build_cookbook/README.md +146 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/build_cookbook/kitchen.yml +21 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/build_cookbook/test-fixture-recipe.rb +8 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/chefignore +110 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/cookbook_readmes/README.md +66 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/delivery-config.json +17 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/delivery-project.toml +34 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/gitignore +22 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/README.md +20 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +7 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +6 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +8 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/data_bags/README.md +56 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +4 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/environments/README.md +9 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/environments/example.json +13 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/policyfiles/README.md +24 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/roles/README.md +9 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/roles/example.json +13 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/spec_helper.rb +2 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/spec_helper_policyfile.rb +2 -0
- data/lib/chef-cli/skeletons/code_generator/metadata.rb +8 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/attribute.rb +11 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/build_cookbook.rb +175 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/cookbook.rb +167 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/cookbook_file.rb +23 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/helpers.rb +19 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/policyfile.rb +7 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/recipe.rb +50 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/repo.rb +71 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/resource.rb +12 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/template.rb +31 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/CHANGELOG.md.erb +11 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.apachev2.erb +201 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/Policyfile.rb.erb +25 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/README.md.erb +4 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/attribute.rb.erb +0 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/build_cookbook/Berksfile.erb +7 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/build_cookbook/metadata.rb.erb +10 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/build_cookbook/recipe.rb.erb +9 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/cookbook_file.erb +0 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/helpers.rb.erb +39 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/inspec_default_test.rb.erb +16 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/kitchen.yml.erb +38 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/kitchen_dokken.yml.erb +36 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +32 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/metadata.rb.erb +20 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/recipe.rb.erb +5 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/recipe_spec.rb.erb +29 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/repo/gitignore.erb +128 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/resource.rb.erb +1 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/template.erb +0 -0
- data/lib/chef-cli/ui.rb +57 -0
- data/lib/chef-cli/version.rb +20 -0
- data/lib/kitchen/provisioner/policyfile_zero.rb +195 -0
- data/spec/shared/a_file_generator.rb +125 -0
- data/spec/shared/a_generated_file.rb +12 -0
- data/spec/shared/command_with_ui_object.rb +11 -0
- data/spec/shared/custom_generator_cookbook.rb +136 -0
- data/spec/shared/fixture_cookbook_checksums.rb +46 -0
- data/spec/shared/setup_git_committer_config.rb +54 -0
- data/spec/shared/setup_git_cookbooks.rb +53 -0
- data/spec/spec_helper.rb +51 -0
- data/spec/test_helpers.rb +84 -0
- data/spec/unit/chef_runner_spec.rb +139 -0
- data/spec/unit/chef_server_api_multi_spec.rb +120 -0
- data/spec/unit/cli_spec.rb +375 -0
- data/spec/unit/command/base_spec.rb +195 -0
- data/spec/unit/command/clean_policy_cookbooks_spec.rb +180 -0
- data/spec/unit/command/clean_policy_revisions_spec.rb +180 -0
- data/spec/unit/command/delete_policy_group_spec.rb +206 -0
- data/spec/unit/command/delete_policy_spec.rb +206 -0
- data/spec/unit/command/diff_spec.rb +311 -0
- data/spec/unit/command/env_spec.rb +86 -0
- data/spec/unit/command/exec_spec.rb +178 -0
- data/spec/unit/command/export_spec.rb +199 -0
- data/spec/unit/command/generate_spec.rb +142 -0
- data/spec/unit/command/generator_commands/attribute_spec.rb +31 -0
- data/spec/unit/command/generator_commands/base_spec.rb +180 -0
- data/spec/unit/command/generator_commands/build_cookbook_spec.rb +377 -0
- data/spec/unit/command/generator_commands/chef_exts/generator_desc_resource_spec.rb +77 -0
- data/spec/unit/command/generator_commands/chef_exts/recipe_dsl_ext_spec.rb +111 -0
- data/spec/unit/command/generator_commands/cookbook_file_spec.rb +31 -0
- data/spec/unit/command/generator_commands/cookbook_spec.rb +769 -0
- data/spec/unit/command/generator_commands/generator_generator_spec.rb +227 -0
- data/spec/unit/command/generator_commands/helpers_spec.rb +31 -0
- data/spec/unit/command/generator_commands/policyfile_spec.rb +223 -0
- data/spec/unit/command/generator_commands/recipe_spec.rb +37 -0
- data/spec/unit/command/generator_commands/repo_spec.rb +374 -0
- data/spec/unit/command/generator_commands/resource_spec.rb +31 -0
- data/spec/unit/command/generator_commands/template_spec.rb +31 -0
- data/spec/unit/command/install_spec.rb +179 -0
- data/spec/unit/command/push_archive_spec.rb +153 -0
- data/spec/unit/command/push_spec.rb +198 -0
- data/spec/unit/command/shell_init_spec.rb +339 -0
- data/spec/unit/command/show_policy_spec.rb +234 -0
- data/spec/unit/command/undelete_spec.rb +244 -0
- data/spec/unit/command/update_spec.rb +283 -0
- data/spec/unit/command/verify_spec.rb +341 -0
- data/spec/unit/commands_map_spec.rb +57 -0
- data/spec/unit/component_test_spec.rb +128 -0
- data/spec/unit/configurable_spec.rb +68 -0
- data/spec/unit/cookbook_metadata_spec.rb +96 -0
- data/spec/unit/cookbook_profiler/git_spec.rb +176 -0
- data/spec/unit/cookbook_profiler/identifiers_spec.rb +81 -0
- data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_one.rb +9 -0
- data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_two.rb +9 -0
- data/spec/unit/fixtures/command/cli_test_command.rb +26 -0
- data/spec/unit/fixtures/command/explicit_path_example.rb +7 -0
- data/spec/unit/fixtures/configurable/test_config_loader.rb +5 -0
- data/spec/unit/fixtures/configurable/test_configurable.rb +10 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/Berksfile +3 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/chefignore +96 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/.kitchen.yml +16 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/Berksfile +3 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/README.md +4 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/chefignore +96 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/metadata.rb +8 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/recipes/default.rb +8 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/Berksfile +3 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/README.md +4 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/chefignore +96 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/kitchen.yml +16 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/metadata.rb +8 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/recipes/default.rb +8 -0
- data/spec/unit/fixtures/cookbooks_api/chef_server_universe.json +56 -0
- data/spec/unit/fixtures/cookbooks_api/pruned_chef_server_universe.json +30 -0
- data/spec/unit/fixtures/cookbooks_api/pruned_small_universe.json +1322 -0
- data/spec/unit/fixtures/cookbooks_api/small_universe.json +2987 -0
- data/spec/unit/fixtures/cookbooks_api/universe.json +1 -0
- data/spec/unit/fixtures/cookbooks_api/update_fixtures.rb +33 -0
- data/spec/unit/fixtures/dev_cookbooks/README.md +16 -0
- data/spec/unit/fixtures/dev_cookbooks/bar-cookbook.gitbundle +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_apps/bin/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_apps/embedded/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_apps/embedded/bin/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_component/bin/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_component/embedded/apps/berkshelf/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_component/embedded/apps/test-kitchen/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_component/embedded/bin/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/bin/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/integration_test +2 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/verify_me +5 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/chef-dk/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/chef/verify_me +3 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/test-kitchen/verify_me +2 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/bin/.keep +0 -0
- data/spec/unit/fixtures/example_app/Policyfile.rb +0 -0
- data/spec/unit/fixtures/example_cookbook/.gitignore +17 -0
- data/spec/unit/fixtures/example_cookbook/.kitchen.yml +16 -0
- data/spec/unit/fixtures/example_cookbook/Berksfile +3 -0
- data/spec/unit/fixtures/example_cookbook/README.md +4 -0
- data/spec/unit/fixtures/example_cookbook/chefignore +96 -0
- data/spec/unit/fixtures/example_cookbook/metadata.rb +8 -0
- data/spec/unit/fixtures/example_cookbook/recipes/default.rb +8 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/.gitignore +17 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/.kitchen.yml +16 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/Berksfile +3 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/README.md +4 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/chefignore +96 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/metadata.json +5 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/recipes/default.rb +8 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/.gitignore +17 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/.kitchen.yml +16 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/Berksfile +3 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/README.md +4 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/chefignore +96 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/recipes/default.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/README.md +4 -0
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/chefignore +96 -0
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/metadata.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/recipes/default.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/Berksfile +3 -0
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/README.md +4 -0
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/chefignore +96 -0
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/metadata.rb +9 -0
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/recipes/default.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/.kitchen.yml +16 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/Berksfile +3 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/README.md +4 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/chefignore +96 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/extra/extra_file.txt +0 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/metadata.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/recipes/default.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/metadata-missing/README.md +2 -0
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -0
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -0
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -0
- data/spec/unit/generator_spec.rb +119 -0
- data/spec/unit/pager_spec.rb +117 -0
- data/spec/unit/policyfile/artifactory_cookbook_source_spec.rb +59 -0
- data/spec/unit/policyfile/attribute_merge_checker_spec.rb +80 -0
- data/spec/unit/policyfile/chef_repo_cookbook_source_spec.rb +93 -0
- data/spec/unit/policyfile/chef_server_cookbook_source_spec.rb +55 -0
- data/spec/unit/policyfile/chef_server_lock_fetcher_spec.rb +161 -0
- data/spec/unit/policyfile/community_cookbook_source_spec.rb +83 -0
- data/spec/unit/policyfile/comparison_base_spec.rb +340 -0
- data/spec/unit/policyfile/cookbook_location_specification_spec.rb +347 -0
- data/spec/unit/policyfile/cookbook_locks_spec.rb +527 -0
- data/spec/unit/policyfile/delivery_supermarket_source_spec.rb +129 -0
- data/spec/unit/policyfile/differ_spec.rb +686 -0
- data/spec/unit/policyfile/git_lock_fetcher_spec.rb +155 -0
- data/spec/unit/policyfile/included_policies_cookbook_source_spec.rb +242 -0
- data/spec/unit/policyfile/lister_spec.rb +268 -0
- data/spec/unit/policyfile/local_lock_fetcher_spec.rb +199 -0
- data/spec/unit/policyfile/lock_applier_spec.rb +100 -0
- data/spec/unit/policyfile/lock_fetcher_mixin_spec.rb +60 -0
- data/spec/unit/policyfile/null_cookbook_source_spec.rb +34 -0
- data/spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb +92 -0
- data/spec/unit/policyfile/remote_lock_fetcher_spec.rb +129 -0
- data/spec/unit/policyfile/reports/install_spec.rb +114 -0
- data/spec/unit/policyfile/reports/upload_spec.rb +94 -0
- data/spec/unit/policyfile/solution_dependencies_spec.rb +170 -0
- data/spec/unit/policyfile/source_uri_spec.rb +36 -0
- data/spec/unit/policyfile/storage_config_spec.rb +180 -0
- data/spec/unit/policyfile/undo_record_spec.rb +258 -0
- data/spec/unit/policyfile/undo_stack_spec.rb +265 -0
- data/spec/unit/policyfile/uploader_spec.rb +410 -0
- data/spec/unit/policyfile_demands_spec.rb +1197 -0
- data/spec/unit/policyfile_evaluation_spec.rb +628 -0
- data/spec/unit/policyfile_includes_dsl_spec.rb +220 -0
- data/spec/unit/policyfile_includes_spec.rb +720 -0
- data/spec/unit/policyfile_install_with_includes_spec.rb +232 -0
- data/spec/unit/policyfile_lock_build_spec.rb +1065 -0
- data/spec/unit/policyfile_lock_install_spec.rb +137 -0
- data/spec/unit/policyfile_lock_serialization_spec.rb +424 -0
- data/spec/unit/policyfile_lock_validation_spec.rb +608 -0
- data/spec/unit/policyfile_services/clean_policies_spec.rb +236 -0
- data/spec/unit/policyfile_services/clean_policy_cookbooks_spec.rb +272 -0
- data/spec/unit/policyfile_services/export_repo_spec.rb +473 -0
- data/spec/unit/policyfile_services/install_spec.rb +209 -0
- data/spec/unit/policyfile_services/push_archive_spec.rb +359 -0
- data/spec/unit/policyfile_services/push_spec.rb +249 -0
- data/spec/unit/policyfile_services/rm_policy_group_spec.rb +237 -0
- data/spec/unit/policyfile_services/rm_policy_spec.rb +263 -0
- data/spec/unit/policyfile_services/show_policy_spec.rb +887 -0
- data/spec/unit/policyfile_services/undelete_spec.rb +302 -0
- data/spec/unit/policyfile_services/update_attributes_spec.rb +229 -0
- data/spec/unit/policyfile_services/update_spec.rb +162 -0
- data/spec/unit/service_exception_inspectors/base_spec.rb +41 -0
- data/spec/unit/service_exception_inspectors/http_spec.rb +138 -0
- data/spec/unit/shell_out_spec.rb +34 -0
- metadata +796 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014-2018 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 "chef-cli/command/verify"
|
|
20
|
+
|
|
21
|
+
module Gem
|
|
22
|
+
|
|
23
|
+
# We stub Gem.ruby because `verify` uses it to locate the omnibus directory,
|
|
24
|
+
# but we also use it in some of the "test commands" in these tests.
|
|
25
|
+
class << self
|
|
26
|
+
alias :real_ruby :ruby
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe ChefCLI::Command::Verify do
|
|
31
|
+
|
|
32
|
+
let(:command_instance) { ChefCLI::Command::Verify.new() }
|
|
33
|
+
|
|
34
|
+
let(:command_options) { [] }
|
|
35
|
+
|
|
36
|
+
let(:components) { {} }
|
|
37
|
+
|
|
38
|
+
let(:default_components) do
|
|
39
|
+
[
|
|
40
|
+
"berkshelf",
|
|
41
|
+
"test-kitchen",
|
|
42
|
+
"tk-policyfile-provisioner",
|
|
43
|
+
"chef-client",
|
|
44
|
+
"chef-cli",
|
|
45
|
+
"chef-apply",
|
|
46
|
+
"chefspec",
|
|
47
|
+
"generated-cookbooks-pass-chefspec",
|
|
48
|
+
"fauxhai",
|
|
49
|
+
"knife-spork",
|
|
50
|
+
"kitchen-vagrant",
|
|
51
|
+
"package installation",
|
|
52
|
+
"openssl",
|
|
53
|
+
"inspec",
|
|
54
|
+
"chef-sugar",
|
|
55
|
+
"opscode-pushy-client",
|
|
56
|
+
"git",
|
|
57
|
+
"delivery-cli",
|
|
58
|
+
]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def run_command(expected_exit_code)
|
|
62
|
+
expect(command_instance.run(command_options)).to eq(expected_exit_code)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "defines berks, tk, chef and chef-cli components by default" do
|
|
66
|
+
expected_components = default_components
|
|
67
|
+
expect(command_instance.components).not_to be_empty
|
|
68
|
+
expect(command_instance.components.map(&:name)).to match_array(expected_components)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "has a usage banner" do
|
|
72
|
+
expect(command_instance.banner).to eq("Usage: chef verify [component, ...] [options]")
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
describe "when locating omnibus directory from the ruby path" do
|
|
76
|
+
it "should find omnibus root directory from ruby path" do
|
|
77
|
+
allow(Gem).to receive(:ruby).and_return(File.join(fixtures_path, "eg_omnibus_dir/valid/embedded/bin/ruby"))
|
|
78
|
+
expect(command_instance.omnibus_root).to end_with("eg_omnibus_dir/valid")
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should raise OmnibusInstallNotFound if directory is not looking like omnibus" do
|
|
82
|
+
allow(Gem).to receive(:ruby).and_return(File.join(fixtures_path, ".rbenv/versions/2.1.1/bin/ruby"))
|
|
83
|
+
expect { command_instance.omnibus_bin_dir }.to raise_error(ChefCLI::OmnibusInstallNotFound)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "raises OmnibusInstallNotFound if omnibus directory doesn't exist" do
|
|
87
|
+
allow(Gem).to receive(:ruby).and_return(File.join(fixtures_path, "eg_omnibus_dir/invalid/embedded/bin/ruby"))
|
|
88
|
+
expect { command_instance.omnibus_bin_dir }.to raise_error(ChefCLI::OmnibusInstallNotFound)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
context "and a component's gem is not installed" do
|
|
92
|
+
before do
|
|
93
|
+
component_map = ChefCLI::Command::Verify.component_map.dup
|
|
94
|
+
component_map["cucumber"] = ChefCLI::ComponentTest.new("cucumber")
|
|
95
|
+
component_map["cucumber"].gem_base_dir = "cucumber"
|
|
96
|
+
allow(ChefCLI::Command::Verify).to receive(:component_map).and_return(component_map)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "raises MissingComponentError when a component doesn't exist" do
|
|
100
|
+
allow(Gem).to receive(:ruby).and_return(File.join(fixtures_path, "eg_omnibus_dir/missing_component/embedded/bin/ruby"))
|
|
101
|
+
expect { command_instance.validate_components! }.to raise_error(ChefCLI::MissingComponentError)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
describe "when running verify command" do
|
|
107
|
+
let(:stdout_io) { StringIO.new }
|
|
108
|
+
let(:stderr_io) { StringIO.new }
|
|
109
|
+
let(:ruby_path) { File.join(fixtures_path, "eg_omnibus_dir/valid/embedded/bin/ruby") }
|
|
110
|
+
|
|
111
|
+
def run_unit_test
|
|
112
|
+
# Set rubyopt to empty to prevent bundler from infecting the ruby
|
|
113
|
+
# subcommands (and loading a bunch of extra gems).
|
|
114
|
+
lambda { |_self| sh("#{Gem.real_ruby} verify_me", env: { "RUBYOPT" => "" }) }
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def run_integration_test
|
|
118
|
+
lambda { |_self| sh("#{Gem.real_ruby} integration_test", env: { "RUBYOPT" => "" }) }
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
let(:all_tests_ok) do
|
|
122
|
+
ChefCLI::ComponentTest.new("successful_comp").tap do |c|
|
|
123
|
+
c.base_dir = "embedded/apps/berkshelf"
|
|
124
|
+
c.unit_test(&run_unit_test)
|
|
125
|
+
c.integration_test(&run_integration_test)
|
|
126
|
+
c.smoke_test { sh("exit 0") }
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
let(:all_tests_ok_2) do
|
|
131
|
+
ChefCLI::ComponentTest.new("successful_comp_2").tap do |c|
|
|
132
|
+
c.base_dir = "embedded/apps/test-kitchen"
|
|
133
|
+
c.unit_test(&run_unit_test)
|
|
134
|
+
c.smoke_test { sh("exit 0") }
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
let(:failing_unit_test) do
|
|
139
|
+
ChefCLI::ComponentTest.new("failing_comp").tap do |c|
|
|
140
|
+
c.base_dir = "embedded/apps/chef"
|
|
141
|
+
c.unit_test(&run_unit_test)
|
|
142
|
+
c.smoke_test { sh("exit 0") }
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
let(:passing_smoke_test_only) do
|
|
147
|
+
component = failing_unit_test.dup
|
|
148
|
+
component.smoke_test { sh("exit 0") }
|
|
149
|
+
component
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
let(:failing_smoke_test_only) do
|
|
153
|
+
component = all_tests_ok.dup
|
|
154
|
+
component.smoke_test { sh("exit 1") }
|
|
155
|
+
component
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
let(:component_without_integration_tests) do
|
|
159
|
+
ChefCLI::ComponentTest.new("successful_comp").tap do |c|
|
|
160
|
+
c.base_dir = "embedded/apps/berkshelf"
|
|
161
|
+
c.unit_test { sh("./verify_me") }
|
|
162
|
+
c.smoke_test { sh("exit 0") }
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def stdout
|
|
167
|
+
stdout_io.string
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
before do
|
|
171
|
+
allow(Gem).to receive(:ruby).and_return(ruby_path)
|
|
172
|
+
allow(command_instance).to receive(:stdout).and_return(stdout_io)
|
|
173
|
+
allow(command_instance).to receive(:stderr).and_return(stderr_io)
|
|
174
|
+
allow(command_instance).to receive(:components).and_return(components)
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
context "when running smoke tests only" do
|
|
178
|
+
describe "with single command with success" do
|
|
179
|
+
let(:components) do
|
|
180
|
+
[ passing_smoke_test_only ]
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
before do
|
|
184
|
+
run_command(0)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it "should report the success of the command" do
|
|
188
|
+
expect(stdout).to include("Verification of component 'failing_comp' succeeded.")
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
describe "with single command with failure" do
|
|
194
|
+
let(:components) do
|
|
195
|
+
[ failing_smoke_test_only ]
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
before do
|
|
199
|
+
run_command(1)
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
it "should report the failure of the command" do
|
|
203
|
+
expect(stdout).to include("Verification of component 'successful_comp' failed.")
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
context "when running unit tests" do
|
|
210
|
+
|
|
211
|
+
let(:command_options) { %w{--unit --verbose} }
|
|
212
|
+
|
|
213
|
+
let(:components) do
|
|
214
|
+
[ all_tests_ok ]
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
describe "with single command with success" do
|
|
218
|
+
before do
|
|
219
|
+
run_command(0)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
it "should have embedded/bin on the PATH" do
|
|
223
|
+
expect(stdout).to include(File.join(fixtures_path, "eg_omnibus_dir/valid/embedded/bin"))
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it "should report the success of the command" do
|
|
227
|
+
expect(stdout).to include("Verification of component 'successful_comp' succeeded.")
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
it "reports the component test output" do
|
|
231
|
+
expect(stdout).to include("you are good to go...")
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
context "and --verbose is not enabled" do
|
|
235
|
+
|
|
236
|
+
let(:command_options) { %w{--unit} }
|
|
237
|
+
|
|
238
|
+
it "omits the component test output" do
|
|
239
|
+
expect(stdout).to_not include("you are good to go...")
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
context "and --integration flag is given" do
|
|
244
|
+
|
|
245
|
+
let(:command_options) { %w{--integration --verbose} }
|
|
246
|
+
|
|
247
|
+
it "should run the integration command also" do
|
|
248
|
+
expect(stdout).to include("integration tests OK")
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
context "and no integration test command is specifed for the component" do
|
|
252
|
+
|
|
253
|
+
let(:components) do
|
|
254
|
+
[ component_without_integration_tests ]
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
it "skips the integration test and succeeds" do
|
|
258
|
+
expect(stdout).to include("Verification of component 'successful_comp' succeeded.")
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
describe "with single command with failure" do
|
|
268
|
+
let(:components) do
|
|
269
|
+
[ failing_unit_test ]
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
before do
|
|
273
|
+
run_command(1)
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
it "should report the failure of the command" do
|
|
277
|
+
expect(stdout).to include("Verification of component 'failing_comp' failed.")
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
it "reports the component test output" do
|
|
281
|
+
expect(stdout).to include("i'm not feeling good today...")
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
describe "with multiple commands with success" do
|
|
286
|
+
let(:components) do
|
|
287
|
+
[ all_tests_ok, all_tests_ok_2 ]
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
before do
|
|
291
|
+
run_command(0)
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
it "should report the success of the command" do
|
|
295
|
+
expect(stdout).to include("Verification of component 'successful_comp' succeeded.")
|
|
296
|
+
expect(stdout).to include("Verification of component 'successful_comp_2' succeeded.")
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
it "reports the component test outputs" do
|
|
300
|
+
expect(stdout).to include("you are good to go...")
|
|
301
|
+
expect(stdout).to include("my friend everything is good...")
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
context "and components are filtered by CLI args" do
|
|
305
|
+
|
|
306
|
+
let(:command_options) { [ "successful_comp_2" ] }
|
|
307
|
+
|
|
308
|
+
it "verifies only the desired component" do
|
|
309
|
+
expect(stdout).to_not include("Verification of component 'successful_comp_1' succeeded.")
|
|
310
|
+
expect(stdout).to include("Verification of component 'successful_comp_2' succeeded.")
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
describe "with multiple commands with failures" do
|
|
317
|
+
let(:components) do
|
|
318
|
+
[ all_tests_ok, all_tests_ok_2, failing_unit_test ]
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
before do
|
|
322
|
+
run_command(1)
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
it "should report the success and failure of the commands" do
|
|
326
|
+
expect(stdout).to include("Verification of component 'successful_comp' succeeded.")
|
|
327
|
+
expect(stdout).to include("Verification of component 'successful_comp_2' succeeded.")
|
|
328
|
+
expect(stdout).to include("Verification of component 'failing_comp' failed.")
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
it "reports the component test outputs" do
|
|
332
|
+
expect(stdout).to include("you are good to go...")
|
|
333
|
+
expect(stdout).to include("my friend everything is good...")
|
|
334
|
+
expect(stdout).to include("i'm not feeling good today...")
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014-2018 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 "chef-cli/commands_map"
|
|
20
|
+
require "stringio"
|
|
21
|
+
|
|
22
|
+
describe ChefCLI::CommandsMap do
|
|
23
|
+
|
|
24
|
+
subject(:mapping) { ChefCLI::CommandsMap.new }
|
|
25
|
+
|
|
26
|
+
before do
|
|
27
|
+
mapping.builtin("example", :Example)
|
|
28
|
+
mapping.builtin("hypenated-example", :HyphenatedExample)
|
|
29
|
+
mapping.builtin("explicit-path-example", :ExplicitPathExample, require_path: "unit/fixtures/command/explicit_path_example")
|
|
30
|
+
mapping.builtin("documented-example", :DocumentedExample, desc: "I have documentation")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "defines a subcommand mapping" do
|
|
34
|
+
expect(mapping.have_command?("example")).to be true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "infers a non-hypenated command's require path" do
|
|
38
|
+
expect(mapping.spec_for("example").require_path).to eq("chef-cli/command/example")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "infers a hyphenated command's require path" do
|
|
42
|
+
expect(mapping.spec_for("hypenated-example").require_path).to eq("chef-cli/command/hypenated_example")
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "lists the available commands" do
|
|
46
|
+
expect(mapping.command_names).to match_array(%w{example hypenated-example explicit-path-example documented-example})
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "keeps the docstring of a command" do
|
|
50
|
+
expect(mapping.spec_for("documented-example").description).to eq("I have documentation")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "creates an instance of a command" do
|
|
54
|
+
expect(mapping.instantiate("explicit-path-example")).to be_an_instance_of(ChefCLI::Command::ExplicitPathExample)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014-2018 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 "chef-cli/component_test"
|
|
20
|
+
require "pathname"
|
|
21
|
+
|
|
22
|
+
describe ChefCLI::ComponentTest do
|
|
23
|
+
|
|
24
|
+
let(:component) do
|
|
25
|
+
ChefCLI::ComponentTest.new("berkshelf").tap do |c|
|
|
26
|
+
c.base_dir = "berkshelf"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "defines the component" do
|
|
31
|
+
expect(component.name).to eq("berkshelf")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "sets the component base directory" do
|
|
35
|
+
expect(component.base_dir).to eq("berkshelf")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "defines a default unit test" do
|
|
39
|
+
expect(component.run_unit_test.exitstatus).to eq(0)
|
|
40
|
+
expect(component.run_unit_test.stdout).to eq("")
|
|
41
|
+
expect(component.run_unit_test.stderr).to eq("")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "defines a default integration test" do
|
|
45
|
+
expect(component.run_integration_test.exitstatus).to eq(0)
|
|
46
|
+
expect(component.run_integration_test.stdout).to eq("")
|
|
47
|
+
expect(component.run_integration_test.stderr).to eq("")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "defines a default smoke test" do
|
|
51
|
+
expect(component.run_smoke_test.exitstatus).to eq(0)
|
|
52
|
+
expect(component.run_smoke_test.stdout).to eq("")
|
|
53
|
+
expect(component.run_smoke_test.stderr).to eq("")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context "with basic tests defined" do
|
|
57
|
+
|
|
58
|
+
let(:result) { {} }
|
|
59
|
+
|
|
60
|
+
before do
|
|
61
|
+
# capture a reference to results hash so we can use it in tests.
|
|
62
|
+
result_hash = result
|
|
63
|
+
component.tap do |c|
|
|
64
|
+
c.unit_test { result_hash[:unit_test] = true }
|
|
65
|
+
c.integration_test { result_hash[:integration_test] = true }
|
|
66
|
+
c.smoke_test { result_hash[:smoke_test] = true }
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "defines a unit test block" do
|
|
71
|
+
component.run_unit_test
|
|
72
|
+
expect(result[:unit_test]).to be true
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "defines an integration test block" do
|
|
76
|
+
component.run_integration_test
|
|
77
|
+
expect(result[:integration_test]).to be true
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "defines a smoke test block" do
|
|
81
|
+
component.run_smoke_test
|
|
82
|
+
expect(result[:smoke_test]).to be true
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
context "with tests that shell out to commands" do
|
|
88
|
+
|
|
89
|
+
let(:omnibus_root) { File.join(fixtures_path, "eg_omnibus_dir/valid/") }
|
|
90
|
+
|
|
91
|
+
before do
|
|
92
|
+
component.tap do |c|
|
|
93
|
+
# Have to set omnibus dir so command can run with correct cwd
|
|
94
|
+
c.omnibus_root = omnibus_root
|
|
95
|
+
|
|
96
|
+
c.base_dir = "embedded/apps/berkshelf"
|
|
97
|
+
|
|
98
|
+
c.unit_test { sh("true") }
|
|
99
|
+
|
|
100
|
+
c.integration_test { sh("ruby -e 'puts Dir.pwd'", env: { "RUBYOPT" => "" }) }
|
|
101
|
+
|
|
102
|
+
c.smoke_test { run_in_tmpdir("ruby -e 'puts Dir.pwd'", env: { "RUBYOPT" => "" }) }
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "shells out and returns the shell out object" do
|
|
107
|
+
expect(component.run_unit_test.exitstatus).to eq(0)
|
|
108
|
+
expect(component.run_unit_test.stdout).to eq("")
|
|
109
|
+
expect(component.run_unit_test.stderr).to eq("")
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "runs the command in the app's root" do
|
|
113
|
+
result = component.run_integration_test
|
|
114
|
+
expected_path = Pathname.new(File.join(omnibus_root, "embedded/apps/berkshelf")).realpath
|
|
115
|
+
expect(Pathname.new(result.stdout.strip).realpath).to eq(expected_path)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it "runs commands in a temporary directory when specified" do
|
|
119
|
+
result = component.run_smoke_test
|
|
120
|
+
|
|
121
|
+
parent_of_cwd = Pathname.new(result.stdout.strip).parent.realpath
|
|
122
|
+
tempdir = Pathname.new(Dir.tmpdir).realpath
|
|
123
|
+
expect(parent_of_cwd).to eq(tempdir)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
end
|