summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc A. Paradise <marc.paradise@gmail.com>2021-04-29 15:21:51 -0400
committerMarc A. Paradise <marc.paradise@gmail.com>2021-04-30 13:21:02 -0400
commit5e9d7cfa7c093f5c9208eab3f81bedb042b4e90c (patch)
tree56350ae65748d4d257c736020b3a3c15ff209c7d
parent15624a8560b6939a5211900a118bdfff65736391 (diff)
downloadchef-5e9d7cfa7c093f5c9208eab3f81bedb042b4e90c.tar.gz
Move knife spec files into the knife gem
That's where they belong, now that we've split the gem out. Signed-off-by: Marc A. Paradise <marc.paradise@gmail.com>
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.0/debian/changelog5
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.0/debian/compat1
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.0/debian/control13
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.0/debian/copyright34
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.0/debian/files1
-rwxr-xr-xknife/spec/data/apt/chef-integration-test-1.0/debian/rules13
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.0/debian/source/format1
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.1/debian/changelog11
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.1/debian/compat1
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.1/debian/control13
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.1/debian/copyright34
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.1/debian/files1
-rwxr-xr-xknife/spec/data/apt/chef-integration-test-1.1/debian/rules13
-rw-r--r--knife/spec/data/apt/chef-integration-test-1.1/debian/source/format1
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/changelog5
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log45
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars1
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles1
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control10
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums1
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/compat1
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/conffiles1
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/control13
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/copyright34
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/files1
-rwxr-xr-xknife/spec/data/apt/chef-integration-test2-1.0/debian/rules13
-rw-r--r--knife/spec/data/apt/chef-integration-test2-1.0/debian/source/format1
-rw-r--r--knife/spec/data/apt/chef-integration-test2_1.0-1.debian.tar.gzbin0 -> 1369 bytes
-rw-r--r--knife/spec/data/apt/chef-integration-test2_1.0-1.dsc18
-rw-r--r--knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.build91
-rw-r--r--knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes31
-rw-r--r--knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.debbin0 -> 1694 bytes
-rw-r--r--knife/spec/data/apt/chef-integration-test2_1.0.orig.tar.gzbin0 -> 248 bytes
-rw-r--r--knife/spec/data/apt/chef-integration-test_1.0-1_amd64.changes22
-rw-r--r--knife/spec/data/apt/chef-integration-test_1.0-1_amd64.debbin0 -> 1680 bytes
-rw-r--r--knife/spec/data/apt/chef-integration-test_1.0.orig.tar.gzbin0 -> 237 bytes
-rw-r--r--knife/spec/data/apt/chef-integration-test_1.1-1_amd64.changes22
-rw-r--r--knife/spec/data/apt/chef-integration-test_1.1-1_amd64.debbin0 -> 1722 bytes
-rw-r--r--knife/spec/data/apt/chef-integration-test_1.1.orig.tar.gzbin0 -> 237 bytes
-rw-r--r--knife/spec/data/apt/var/www/apt/conf/distributions7
-rw-r--r--knife/spec/data/apt/var/www/apt/conf/incoming4
-rw-r--r--knife/spec/data/apt/var/www/apt/conf/pulls3
-rw-r--r--knife/spec/data/apt/var/www/apt/db/checksums.dbbin0 -> 16384 bytes
-rw-r--r--knife/spec/data/apt/var/www/apt/db/contents.cache.dbbin0 -> 16384 bytes
-rw-r--r--knife/spec/data/apt/var/www/apt/db/packages.dbbin0 -> 16384 bytes
-rw-r--r--knife/spec/data/apt/var/www/apt/db/references.dbbin0 -> 16384 bytes
-rw-r--r--knife/spec/data/apt/var/www/apt/db/release.caches.dbbin0 -> 20480 bytes
-rw-r--r--knife/spec/data/apt/var/www/apt/db/version4
-rw-r--r--knife/spec/data/apt/var/www/apt/dists/sid/Release19
-rw-r--r--knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages16
-rw-r--r--knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gzbin0 -> 394 bytes
-rw-r--r--knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release5
-rw-r--r--knife/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages0
-rw-r--r--knife/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.debbin0 -> 1680 bytes
-rw-r--r--knife/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.debbin0 -> 1722 bytes
-rw-r--r--knife/spec/data/bad-config.rb1
-rw-r--r--knife/spec/data/bootstrap/encrypted_data_bag_secret1
-rw-r--r--knife/spec/data/bootstrap/no_proxy.erb2
-rw-r--r--knife/spec/data/bootstrap/secret.erb9
-rw-r--r--knife/spec/data/bootstrap/test-hints.erb12
-rw-r--r--knife/spec/data/bootstrap/test.erb1
-rw-r--r--knife/spec/data/cb_version_cookbooks/cookbook2/files/test.txt0
-rw-r--r--knife/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb0
-rw-r--r--knife/spec/data/cb_version_cookbooks/tatft/README.rdoc3
-rw-r--r--knife/spec/data/cb_version_cookbooks/tatft/attributes/default.rb1
-rw-r--r--knife/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb1
-rw-r--r--knife/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz1
-rw-r--r--knife/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb1
-rw-r--r--knife/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb1
-rw-r--r--knife/spec/data/cb_version_cookbooks/tatft/recipes/default.rb1
-rw-r--r--knife/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb1
-rw-r--r--knife/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb0
-rw-r--r--knife/spec/data/checksum/random.txt1
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-00
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-01
-rw-r--r--knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-01
-rw-r--r--knife/spec/data/client.d_00/00-foo.rb2
-rw-r--r--knife/spec/data/client.d_00/01-bar.rb1
-rw-r--r--knife/spec/data/client.d_00/02-strings.rb2
-rw-r--r--knife/spec/data/client.d_00/bar1
-rw-r--r--knife/spec/data/client.d_01/foo/bar.rb1
-rw-r--r--knife/spec/data/client.d_02/foo.rb/foo.txt1
-rw-r--r--knife/spec/data/config.rb6
-rw-r--r--knife/spec/data/cookbooks/angrybash/metadata.rb2
-rw-r--r--knife/spec/data/cookbooks/angrybash/recipes/default.rb8
-rw-r--r--knife/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl2
-rw-r--r--knife/spec/data/cookbooks/apache2/metadata.json33
-rw-r--r--knife/spec/data/cookbooks/apache2/metadata.rb2
-rw-r--r--knife/spec/data/cookbooks/apache2/recipes/default.rb3
-rw-r--r--knife/spec/data/cookbooks/borken/metadata.rb2
-rw-r--r--knife/spec/data/cookbooks/borken/recipes/default.rb2
-rw-r--r--knife/spec/data/cookbooks/borken/templates/default/borken.erb2
-rw-r--r--knife/spec/data/cookbooks/chefignore8
-rw-r--r--knife/spec/data/cookbooks/ignorken/files/default/not_me.rb2
-rw-r--r--knife/spec/data/cookbooks/ignorken/metadata.rb2
-rw-r--r--knife/spec/data/cookbooks/ignorken/recipes/default.rb1
-rw-r--r--knife/spec/data/cookbooks/ignorken/recipes/ignoreme.rb2
-rw-r--r--knife/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb2
-rw-r--r--knife/spec/data/cookbooks/irssi/files/default/irssi.response2
-rw-r--r--knife/spec/data/cookbooks/java/files/default/java.response2
-rw-r--r--knife/spec/data/cookbooks/java/metadata.json33
-rw-r--r--knife/spec/data/cookbooks/java/metadata.rb2
-rw-r--r--knife/spec/data/cookbooks/name-mismatch-versionnumber/README.md4
-rw-r--r--knife/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb8
-rw-r--r--knife/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb8
-rw-r--r--knife/spec/data/cookbooks/openldap/.root_dotfile0
-rw-r--r--knife/spec/data/cookbooks/openldap/attributes/default.rb16
-rw-r--r--knife/spec/data/cookbooks/openldap/attributes/smokey.rb1
-rw-r--r--knife/spec/data/cookbooks/openldap/definitions/client.rb5
-rw-r--r--knife/spec/data/cookbooks/openldap/definitions/server.rb5
-rw-r--r--knife/spec/data/cookbooks/openldap/files/default/.dotfile1
-rw-r--r--knife/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa1
-rw-r--r--knife/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir1
-rw-r--r--knife/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb2
-rw-r--r--knife/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt3
-rw-r--r--knife/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt3
-rw-r--r--knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile1
-rw-r--r--knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt3
-rw-r--r--knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt3
-rw-r--r--knife/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt3
-rw-r--r--knife/spec/data/cookbooks/openldap/libraries/openldap.rb4
-rw-r--r--knife/spec/data/cookbooks/openldap/libraries/openldap/version.rb3
-rw-r--r--knife/spec/data/cookbooks/openldap/metadata.rb8
-rw-r--r--knife/spec/data/cookbooks/openldap/recipes/default.rb4
-rw-r--r--knife/spec/data/cookbooks/openldap/recipes/gigantor.rb3
-rw-r--r--knife/spec/data/cookbooks/openldap/recipes/one.rb15
-rw-r--r--knife/spec/data/cookbooks/openldap/recipes/return.rb2
-rw-r--r--knife/spec/data/cookbooks/openldap/spec/spec_helper.rb0
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb4
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/helper_test.erb1
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/helpers.erb14
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb1
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb1
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/nested_partial.erb1
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb4
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb1
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb1
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb1
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb4
-rw-r--r--knife/spec/data/cookbooks/openldap/templates/default/test.erb1
-rw-r--r--knife/spec/data/cookbooks/preseed/files/default/preseed-file.seed1
-rw-r--r--knife/spec/data/cookbooks/preseed/files/default/preseed-template.seed4
-rw-r--r--knife/spec/data/cookbooks/preseed/metadata.rb2
-rw-r--r--knife/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed1
-rw-r--r--knife/spec/data/cookbooks/preseed/templates/default/preseed-template.seed1
-rw-r--r--knife/spec/data/cookbooks/starter/chefignore8
-rw-r--r--knife/spec/data/cookbooks/starter/files/sample.txt1
-rw-r--r--knife/spec/data/cookbooks/starter/metadata.rb2
-rw-r--r--knife/spec/data/cookbooks/starter/recipes/default.rb4
-rw-r--r--knife/spec/data/cookbooks/supports-platform-constraints/metadata.rb5
-rw-r--r--knife/spec/data/cookbooks/wget/files/default/wget.response2
-rw-r--r--knife/spec/data/definitions/test.rb5
-rw-r--r--knife/spec/data/dsc_lcm.pfxbin0 -> 2597 bytes
-rw-r--r--knife/spec/data/environment-config.rb5
-rw-r--r--knife/spec/data/file-providers-method-snapshot-chef-11-4.json127
-rw-r--r--knife/spec/data/fileedit/blank0
-rw-r--r--knife/spec/data/fileedit/hosts4
-rw-r--r--knife/spec/data/gems/chef-integration-test-0.1.0.gembin0 -> 7680 bytes
-rw-r--r--knife/spec/data/git_bundles/example-repo.gitbundlebin0 -> 1214 bytes
-rw-r--r--knife/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundlebin0 -> 3527 bytes
-rw-r--r--knife/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundlebin0 -> 2330 bytes
-rw-r--r--knife/spec/data/git_bundles/sinatra-test-app.gitbundlebin0 -> 2053 bytes
-rw-r--r--knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md4
-rw-r--r--knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb13
-rw-r--r--knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb8
-rw-r--r--knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md4
-rw-r--r--knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb9
-rw-r--r--knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb8
-rw-r--r--knife/spec/data/kitchen/chefignore6
-rw-r--r--knife/spec/data/kitchen/openldap/attributes/default.rb3
-rw-r--r--knife/spec/data/kitchen/openldap/attributes/robinson.rb3
-rw-r--r--knife/spec/data/kitchen/openldap/definitions/client.rb3
-rw-r--r--knife/spec/data/kitchen/openldap/definitions/drewbarrymore.rb3
-rw-r--r--knife/spec/data/kitchen/openldap/recipes/gigantor.rb3
-rw-r--r--knife/spec/data/kitchen/openldap/recipes/ignoreme.rb3
-rw-r--r--knife/spec/data/kitchen/openldap/recipes/woot.rb3
-rw-r--r--knife/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb0
-rw-r--r--knife/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb0
-rw-r--r--knife/spec/data/knife_subcommand/test_explicit_category.rb7
-rw-r--r--knife/spec/data/knife_subcommand/test_name_mapping.rb4
-rw-r--r--knife/spec/data/knife_subcommand/test_yourself.rb21
-rw-r--r--knife/spec/data/lwrp/providers/buck_passer.rb28
-rw-r--r--knife/spec/data/lwrp/providers/buck_passer_2.rb26
-rw-r--r--knife/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb28
-rw-r--r--knife/spec/data/lwrp/providers/inline_compiler.rb24
-rw-r--r--knife/spec/data/lwrp/providers/monkey_name_printer.rb5
-rw-r--r--knife/spec/data/lwrp/providers/paint_drying_watcher.rb7
-rw-r--r--knife/spec/data/lwrp/providers/thumb_twiddler.rb7
-rw-r--r--knife/spec/data/lwrp/resources/bar.rb4
-rw-r--r--knife/spec/data/lwrp/resources/buck_passer.rb6
-rw-r--r--knife/spec/data/lwrp/resources/buck_passer_2.rb4
-rw-r--r--knife/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb4
-rw-r--r--knife/spec/data/lwrp/resources/foo.rb6
-rw-r--r--knife/spec/data/lwrp/resources/inline_compiler.rb4
-rw-r--r--knife/spec/data/lwrp/resources/monkey_name_printer.rb6
-rw-r--r--knife/spec/data/lwrp/resources/paint_drying_watcher.rb4
-rw-r--r--knife/spec/data/lwrp/resources/thumb_twiddler.rb4
-rw-r--r--knife/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb3
-rw-r--r--knife/spec/data/lwrp_const_scoping/resources/conflict.rb1
-rw-r--r--knife/spec/data/lwrp_override/providers/buck_passer.rb5
-rw-r--r--knife/spec/data/lwrp_override/resources/foo.rb11
-rw-r--r--knife/spec/data/mac_users/10.9.plist.xml560
-rw-r--r--knife/spec/data/mac_users/10.9.shadow.xml21
-rw-r--r--knife/spec/data/metadata/quick_start/metadata.rb14
-rw-r--r--knife/spec/data/mixin/invalid_data.rb3
-rw-r--r--knife/spec/data/mixin/real_data.rb2
-rw-r--r--knife/spec/data/nested.json2
-rw-r--r--knife/spec/data/nodes/default.rb15
-rw-r--r--knife/spec/data/nodes/test.example.com.rb17
-rw-r--r--knife/spec/data/nodes/test.rb15
-rw-r--r--knife/spec/data/null_config.rb1
-rw-r--r--knife/spec/data/object_loader/environments/test.json7
-rw-r--r--knife/spec/data/object_loader/environments/test.rb2
-rw-r--r--knife/spec/data/object_loader/environments/test_json_class.json8
-rw-r--r--knife/spec/data/object_loader/nodes/test.json7
-rw-r--r--knife/spec/data/object_loader/nodes/test.rb2
-rw-r--r--knife/spec/data/object_loader/nodes/test_json_class.json8
-rw-r--r--knife/spec/data/object_loader/roles/test.json7
-rw-r--r--knife/spec/data/object_loader/roles/test.rb2
-rw-r--r--knife/spec/data/object_loader/roles/test_json_class.json8
-rw-r--r--knife/spec/data/old_home_dir/my-dot-emacs0
-rw-r--r--knife/spec/data/old_home_dir/my-dot-vim0
-rw-r--r--knife/spec/data/partial_one.erb1
-rw-r--r--knife/spec/data/prefer_metadata_json/metadata.json51
-rw-r--r--knife/spec/data/prefer_metadata_json/metadata.rb6
-rw-r--r--knife/spec/data/prefer_metadata_json/recipes/default.rb0
-rw-r--r--knife/spec/data/recipes.tgzbin0 -> 293 bytes
-rw-r--r--knife/spec/data/recipes/test.rb7
-rw-r--r--knife/spec/data/remote_directory_data/remote_dir_file.txt1
-rw-r--r--knife/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt1
-rw-r--r--knife/spec/data/remote_file/nyan_cat.pngbin0 -> 15202 bytes
-rw-r--r--knife/spec/data/remote_file/nyan_cat.png.gzbin0 -> 14944 bytes
-rw-r--r--knife/spec/data/root_alias_cookbooks/dup_attr/attributes.rb1
-rw-r--r--knife/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb1
-rw-r--r--knife/spec/data/root_alias_cookbooks/dup_attr/metadata.rb2
-rw-r--r--knife/spec/data/root_alias_cookbooks/dup_attr/recipe.rb3
-rw-r--r--knife/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb1
-rw-r--r--knife/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb2
-rw-r--r--knife/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb3
-rw-r--r--knife/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb3
-rw-r--r--knife/spec/data/root_alias_cookbooks/simple/attributes.rb1
-rw-r--r--knife/spec/data/root_alias_cookbooks/simple/metadata.rb2
-rw-r--r--knife/spec/data/root_alias_cookbooks/simple/recipe.rb3
-rw-r--r--knife/spec/data/rubygems.org/latest_specs.4.8.gzbin0 -> 86 bytes
-rw-r--r--knife/spec/data/rubygems.org/nonexistent_gembin0 -> 4 bytes
-rw-r--r--knife/spec/data/rubygems.org/nonexistent_gem-info1
-rw-r--r--knife/spec/data/rubygems.org/sexp_processorbin0 -> 2737 bytes
-rw-r--r--knife/spec/data/rubygems.org/sexp_processor-4.15.1.gemspec.rzbin0 -> 519 bytes
-rw-r--r--knife/spec/data/rubygems.org/sexp_processor-info49
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep1/metadata.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb0
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep2/metadata.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb0
-rw-r--r--knife/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/attributes/default.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/attributes/unparsed_file1
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/definitions/unparsed_file1
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/libraries/unparsed_file1
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/providers/provider.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/providers/unparsed_file1
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/recipes/default.rb0
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/recipes/unparsed_file1
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/resources/resource.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency1/resources/unparsed_file1
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency2/attributes/default.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency2/providers/provider.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency2/recipes/default.rb0
-rw-r--r--knife/spec/data/run_context/cookbooks/dependency2/resources/resource.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/include/recipes/default.rb24
-rw-r--r--knife/spec/data/run_context/cookbooks/include/recipes/includee.rb3
-rw-r--r--knife/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb0
-rw-r--r--knife/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb0
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb3
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-deps/metadata.rb3
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb0
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb0
-rw-r--r--knife/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb2
-rw-r--r--knife/spec/data/run_context/cookbooks/test/attributes/default.rb0
-rw-r--r--knife/spec/data/run_context/cookbooks/test/attributes/george.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/test/definitions/new_animals.rb9
-rw-r--r--knife/spec/data/run_context/cookbooks/test/definitions/new_cat.rb5
-rw-r--r--knife/spec/data/run_context/cookbooks/test/definitions/test_res.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/test/providers/provider.rb1
-rw-r--r--knife/spec/data/run_context/cookbooks/test/recipes/default.rb5
-rw-r--r--knife/spec/data/run_context/cookbooks/test/recipes/one.rb7
-rw-r--r--knife/spec/data/run_context/cookbooks/test/recipes/two.rb7
-rw-r--r--knife/spec/data/run_context/cookbooks/test/resources/resource.rb3
-rw-r--r--knife/spec/data/run_context/nodes/run_context.rb5
-rw-r--r--knife/spec/data/sample_msu1.xml10
-rw-r--r--knife/spec/data/sample_msu2.xml14
-rw-r--r--knife/spec/data/sample_msu3.xml16
-rw-r--r--knife/spec/data/search_queries_to_transform.txt98
-rw-r--r--knife/spec/data/shef-config.rb11
-rw-r--r--knife/spec/data/snap_package/async_result_success.json6
-rw-r--r--knife/spec/data/snap_package/change_id_result.json175
-rw-r--r--knife/spec/data/snap_package/find_result_failure.json10
-rw-r--r--knife/spec/data/snap_package/find_result_success.json70
-rw-r--r--knife/spec/data/snap_package/get_by_name_result_failure.json10
-rw-r--r--knife/spec/data/snap_package/get_by_name_result_success.json38
-rw-r--r--knife/spec/data/snap_package/get_conf_success.json10
-rw-r--r--knife/spec/data/snap_package/result_failure.json9
-rw-r--r--knife/spec/data/ssl/5e707473.018
-rw-r--r--knife/spec/data/ssl/binary/chef-rspec-der.certbin0 -> 1174 bytes
-rw-r--r--knife/spec/data/ssl/binary/chef-rspec-der.keybin0 -> 1191 bytes
-rw-r--r--knife/spec/data/ssl/chef-rspec.cert27
-rw-r--r--knife/spec/data/ssl/chef-rspec.key27
-rw-r--r--knife/spec/data/ssl/key.pem15
-rw-r--r--knife/spec/data/ssl/private_key.pem27
-rw-r--r--knife/spec/data/ssl/private_key_with_whitespace.pem32
-rw-r--r--knife/spec/data/standalone_cookbook/Gemfile1
-rw-r--r--knife/spec/data/standalone_cookbook/chefignore9
-rw-r--r--knife/spec/data/standalone_cookbook/recipes/default.rb3
-rw-r--r--knife/spec/data/standalone_cookbook/vendor/bundle/ruby/2.0.0/gems/multi_json-1.9.0/lib/multi_json.rb1
-rw-r--r--knife/spec/data/templates/chef-seattle20160930-4388-1crv7ef.txt1
-rw-r--r--knife/spec/data/templates/chef-seattle20160930-4388-jjfoae.txt1
-rw-r--r--knife/spec/data/templates/chef-seattle20160930-4388-umeq2c.txt1
-rw-r--r--knife/spec/data/templates/failed.erb5
-rw-r--r--knife/spec/data/templates/seattle.txt1
-rw-r--r--knife/spec/data/trusted_certs/example.crt22
-rw-r--r--knife/spec/data/trusted_certs/example_no_cn.crt36
-rw-r--r--knife/spec/data/trusted_certs/intermediate.pem27
-rw-r--r--knife/spec/data/trusted_certs/opscode.pem57
-rw-r--r--knife/spec/data/trusted_certs/root.pem22
-rw-r--r--knife/spec/data/windows_certificates/base64_test.cer20
-rw-r--r--knife/spec/data/windows_certificates/othertest.cer20
-rw-r--r--knife/spec/data/windows_certificates/test.cer20
-rw-r--r--knife/spec/data/windows_certificates/test.p7bbin0 -> 2619 bytes
-rw-r--r--knife/spec/data/windows_certificates/test.pem20
-rw-r--r--knife/spec/data/windows_certificates/test.pfxbin0 -> 2637 bytes
-rw-r--r--knife/spec/functional/configure_spec.rb (renamed from spec/functional/knife/configure_spec.rb)0
-rw-r--r--knife/spec/functional/cookbook_delete_spec.rb (renamed from spec/functional/knife/cookbook_delete_spec.rb)0
-rw-r--r--knife/spec/functional/exec_spec.rb (renamed from spec/functional/knife/exec_spec.rb)0
-rw-r--r--knife/spec/functional/rehash_spec.rb (renamed from spec/functional/knife/rehash_spec.rb)0
-rw-r--r--knife/spec/functional/smoke_test.rb (renamed from spec/functional/knife/smoke_test.rb)0
-rw-r--r--knife/spec/functional/ssh_spec.rb (renamed from spec/functional/knife/ssh_spec.rb)0
-rw-r--r--knife/spec/functional/version_spec.rb (renamed from spec/functional/knife/version_spec.rb)0
-rw-r--r--knife/spec/integration/chef_fs_data_store_spec.rb (renamed from spec/integration/knife/chef_fs_data_store_spec.rb)0
-rw-r--r--knife/spec/integration/chef_repo_path_spec.rb (renamed from spec/integration/knife/chef_repo_path_spec.rb)0
-rw-r--r--knife/spec/integration/chef_repository_file_system_spec.rb (renamed from spec/integration/knife/chef_repository_file_system_spec.rb)0
-rw-r--r--knife/spec/integration/chefignore_spec.rb (renamed from spec/integration/knife/chefignore_spec.rb)0
-rw-r--r--knife/spec/integration/client_bulk_delete_spec.rb (renamed from spec/integration/knife/client_bulk_delete_spec.rb)0
-rw-r--r--knife/spec/integration/client_create_spec.rb (renamed from spec/integration/knife/client_create_spec.rb)0
-rw-r--r--knife/spec/integration/client_delete_spec.rb (renamed from spec/integration/knife/client_delete_spec.rb)0
-rw-r--r--knife/spec/integration/client_key_create_spec.rb (renamed from spec/integration/knife/client_key_create_spec.rb)0
-rw-r--r--knife/spec/integration/client_key_delete_spec.rb (renamed from spec/integration/knife/client_key_delete_spec.rb)0
-rw-r--r--knife/spec/integration/client_key_list_spec.rb (renamed from spec/integration/knife/client_key_list_spec.rb)0
-rw-r--r--knife/spec/integration/client_key_show_spec.rb (renamed from spec/integration/knife/client_key_show_spec.rb)0
-rw-r--r--knife/spec/integration/client_list_spec.rb (renamed from spec/integration/knife/client_list_spec.rb)0
-rw-r--r--knife/spec/integration/client_show_spec.rb (renamed from spec/integration/knife/client_show_spec.rb)0
-rw-r--r--knife/spec/integration/common_options_spec.rb (renamed from spec/integration/knife/common_options_spec.rb)0
-rw-r--r--knife/spec/integration/config_list_spec.rb (renamed from spec/integration/knife/config_list_spec.rb)0
-rw-r--r--knife/spec/integration/config_show_spec.rb (renamed from spec/integration/knife/config_show_spec.rb)0
-rw-r--r--knife/spec/integration/config_use_spec.rb (renamed from spec/integration/knife/config_use_spec.rb)0
-rw-r--r--knife/spec/integration/cookbook_api_ipv6_spec.rb (renamed from spec/integration/knife/cookbook_api_ipv6_spec.rb)0
-rw-r--r--knife/spec/integration/cookbook_bulk_delete_spec.rb (renamed from spec/integration/knife/cookbook_bulk_delete_spec.rb)0
-rw-r--r--knife/spec/integration/cookbook_download_spec.rb (renamed from spec/integration/knife/cookbook_download_spec.rb)0
-rw-r--r--knife/spec/integration/cookbook_list_spec.rb (renamed from spec/integration/knife/cookbook_list_spec.rb)0
-rw-r--r--knife/spec/integration/cookbook_show_spec.rb (renamed from spec/integration/knife/cookbook_show_spec.rb)0
-rw-r--r--knife/spec/integration/cookbook_upload_spec.rb (renamed from spec/integration/knife/cookbook_upload_spec.rb)0
-rw-r--r--knife/spec/integration/data_bag_create_spec.rb (renamed from spec/integration/knife/data_bag_create_spec.rb)0
-rw-r--r--knife/spec/integration/data_bag_delete_spec.rb (renamed from spec/integration/knife/data_bag_delete_spec.rb)0
-rw-r--r--knife/spec/integration/data_bag_edit_spec.rb (renamed from spec/integration/knife/data_bag_edit_spec.rb)0
-rw-r--r--knife/spec/integration/data_bag_from_file_spec.rb (renamed from spec/integration/knife/data_bag_from_file_spec.rb)0
-rw-r--r--knife/spec/integration/data_bag_list_spec.rb (renamed from spec/integration/knife/data_bag_list_spec.rb)0
-rw-r--r--knife/spec/integration/data_bag_show_spec.rb (renamed from spec/integration/knife/data_bag_show_spec.rb)0
-rw-r--r--knife/spec/integration/delete_spec.rb (renamed from spec/integration/knife/delete_spec.rb)0
-rw-r--r--knife/spec/integration/deps_spec.rb (renamed from spec/integration/knife/deps_spec.rb)0
-rw-r--r--knife/spec/integration/diff_spec.rb (renamed from spec/integration/knife/diff_spec.rb)0
-rw-r--r--knife/spec/integration/download_spec.rb (renamed from spec/integration/knife/download_spec.rb)0
-rw-r--r--knife/spec/integration/environment_compare_spec.rb (renamed from spec/integration/knife/environment_compare_spec.rb)0
-rw-r--r--knife/spec/integration/environment_create_spec.rb (renamed from spec/integration/knife/environment_create_spec.rb)0
-rw-r--r--knife/spec/integration/environment_delete_spec.rb (renamed from spec/integration/knife/environment_delete_spec.rb)0
-rw-r--r--knife/spec/integration/environment_from_file_spec.rb (renamed from spec/integration/knife/environment_from_file_spec.rb)0
-rw-r--r--knife/spec/integration/environment_list_spec.rb (renamed from spec/integration/knife/environment_list_spec.rb)0
-rw-r--r--knife/spec/integration/environment_show_spec.rb (renamed from spec/integration/knife/environment_show_spec.rb)0
-rw-r--r--knife/spec/integration/list_spec.rb (renamed from spec/integration/knife/list_spec.rb)0
-rw-r--r--knife/spec/integration/node_bulk_delete_spec.rb (renamed from spec/integration/knife/node_bulk_delete_spec.rb)0
-rw-r--r--knife/spec/integration/node_create_spec.rb (renamed from spec/integration/knife/node_create_spec.rb)0
-rw-r--r--knife/spec/integration/node_delete_spec.rb (renamed from spec/integration/knife/node_delete_spec.rb)0
-rw-r--r--knife/spec/integration/node_environment_set_spec.rb (renamed from spec/integration/knife/node_environment_set_spec.rb)0
-rw-r--r--knife/spec/integration/node_from_file_spec.rb (renamed from spec/integration/knife/node_from_file_spec.rb)0
-rw-r--r--knife/spec/integration/node_list_spec.rb (renamed from spec/integration/knife/node_list_spec.rb)0
-rw-r--r--knife/spec/integration/node_run_list_add_spec.rb (renamed from spec/integration/knife/node_run_list_add_spec.rb)0
-rw-r--r--knife/spec/integration/node_run_list_remove_spec.rb (renamed from spec/integration/knife/node_run_list_remove_spec.rb)0
-rw-r--r--knife/spec/integration/node_run_list_set_spec.rb (renamed from spec/integration/knife/node_run_list_set_spec.rb)0
-rw-r--r--knife/spec/integration/node_show_spec.rb (renamed from spec/integration/knife/node_show_spec.rb)0
-rw-r--r--knife/spec/integration/raw_spec.rb (renamed from spec/integration/knife/raw_spec.rb)0
-rw-r--r--knife/spec/integration/redirection_spec.rb (renamed from spec/integration/knife/redirection_spec.rb)0
-rw-r--r--knife/spec/integration/role_bulk_delete_spec.rb (renamed from spec/integration/knife/role_bulk_delete_spec.rb)0
-rw-r--r--knife/spec/integration/role_create_spec.rb (renamed from spec/integration/knife/role_create_spec.rb)0
-rw-r--r--knife/spec/integration/role_delete_spec.rb (renamed from spec/integration/knife/role_delete_spec.rb)0
-rw-r--r--knife/spec/integration/role_from_file_spec.rb (renamed from spec/integration/knife/role_from_file_spec.rb)0
-rw-r--r--knife/spec/integration/role_list_spec.rb (renamed from spec/integration/knife/role_list_spec.rb)0
-rw-r--r--knife/spec/integration/role_show_spec.rb (renamed from spec/integration/knife/role_show_spec.rb)0
-rw-r--r--knife/spec/integration/search_node_spec.rb (renamed from spec/integration/knife/search_node_spec.rb)0
-rw-r--r--knife/spec/integration/serve_spec.rb (renamed from spec/integration/knife/serve_spec.rb)0
-rw-r--r--knife/spec/integration/show_spec.rb (renamed from spec/integration/knife/show_spec.rb)0
-rw-r--r--knife/spec/integration/upload_spec.rb (renamed from spec/integration/knife/upload_spec.rb)0
-rw-r--r--knife/spec/knife_spec_helper.rb (renamed from spec/knife_spec_helper.rb)0
-rw-r--r--knife/spec/support/chef_helpers.rb79
-rw-r--r--knife/spec/support/key_helpers.rb102
-rw-r--r--knife/spec/support/platform_helpers.rb251
-rw-r--r--knife/spec/support/platforms/prof/gc.rb51
-rw-r--r--knife/spec/support/platforms/prof/win32.rb45
-rw-r--r--knife/spec/support/platforms/win32/spec_service.rb57
-rw-r--r--knife/spec/support/recipe_dsl_helper.rb83
-rw-r--r--knife/spec/support/shared/context/config.rb18
-rw-r--r--knife/spec/support/shared/functional/knife.rb37
-rw-r--r--knife/spec/support/shared/integration/integration_helper.rb122
-rw-r--r--knife/spec/support/shared/integration/knife_support.rb192
-rw-r--r--knife/spec/support/shared/matchers/exit_with_code.rb32
-rw-r--r--knife/spec/support/shared/matchers/match_environment_variable.rb17
-rw-r--r--knife/spec/support/shared/unit/knife_shared.rb39
-rw-r--r--knife/spec/support/shared/unit/mock_shellout.rb49
-rw-r--r--knife/spec/tiny_server.rb190
-rw-r--r--knife/spec/unit/application/knife_spec.rb (renamed from spec/unit/application/knife_spec.rb)0
-rw-r--r--knife/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb (renamed from spec/unit/knife/bootstrap/chef_vault_handler_spec.rb)0
-rw-r--r--knife/spec/unit/knife/bootstrap/client_builder_spec.rb (renamed from spec/unit/knife/bootstrap/client_builder_spec.rb)0
-rw-r--r--knife/spec/unit/knife/bootstrap/train_connector_spec.rb (renamed from spec/unit/knife/bootstrap/train_connector_spec.rb)0
-rw-r--r--knife/spec/unit/knife/bootstrap_spec.rb (renamed from spec/unit/knife/bootstrap_spec.rb)0
-rw-r--r--knife/spec/unit/knife/client_bulk_delete_spec.rb (renamed from spec/unit/knife/client_bulk_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/client_create_spec.rb (renamed from spec/unit/knife/client_create_spec.rb)0
-rw-r--r--knife/spec/unit/knife/client_delete_spec.rb (renamed from spec/unit/knife/client_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/client_edit_spec.rb (renamed from spec/unit/knife/client_edit_spec.rb)0
-rw-r--r--knife/spec/unit/knife/client_list_spec.rb (renamed from spec/unit/knife/client_list_spec.rb)0
-rw-r--r--knife/spec/unit/knife/client_reregister_spec.rb (renamed from spec/unit/knife/client_reregister_spec.rb)0
-rw-r--r--knife/spec/unit/knife/client_show_spec.rb (renamed from spec/unit/knife/client_show_spec.rb)0
-rw-r--r--knife/spec/unit/knife/configure_client_spec.rb (renamed from spec/unit/knife/configure_client_spec.rb)0
-rw-r--r--knife/spec/unit/knife/configure_spec.rb (renamed from spec/unit/knife/configure_spec.rb)0
-rw-r--r--knife/spec/unit/knife/cookbook_bulk_delete_spec.rb (renamed from spec/unit/knife/cookbook_bulk_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/cookbook_delete_spec.rb (renamed from spec/unit/knife/cookbook_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/cookbook_download_spec.rb (renamed from spec/unit/knife/cookbook_download_spec.rb)0
-rw-r--r--knife/spec/unit/knife/cookbook_list_spec.rb (renamed from spec/unit/knife/cookbook_list_spec.rb)0
-rw-r--r--knife/spec/unit/knife/cookbook_metadata_from_file_spec.rb (renamed from spec/unit/knife/cookbook_metadata_from_file_spec.rb)0
-rw-r--r--knife/spec/unit/knife/cookbook_metadata_spec.rb (renamed from spec/unit/knife/cookbook_metadata_spec.rb)0
-rw-r--r--knife/spec/unit/knife/cookbook_show_spec.rb (renamed from spec/unit/knife/cookbook_show_spec.rb)0
-rw-r--r--knife/spec/unit/knife/cookbook_upload_spec.rb (renamed from spec/unit/knife/cookbook_upload_spec.rb)0
-rw-r--r--knife/spec/unit/knife/core/bootstrap_context_spec.rb (renamed from spec/unit/knife/core/bootstrap_context_spec.rb)0
-rw-r--r--knife/spec/unit/knife/core/cookbook_scm_repo_spec.rb (renamed from spec/unit/knife/core/cookbook_scm_repo_spec.rb)0
-rw-r--r--knife/spec/unit/knife/core/cookbook_site_streaming_uploader_spec.rb (renamed from spec/unit/knife/core/cookbook_site_streaming_uploader_spec.rb)0
-rw-r--r--knife/spec/unit/knife/core/gem_glob_loader_spec.rb (renamed from spec/unit/knife/core/gem_glob_loader_spec.rb)0
-rw-r--r--knife/spec/unit/knife/core/hashed_command_loader_spec.rb (renamed from spec/unit/knife/core/hashed_command_loader_spec.rb)0
-rw-r--r--knife/spec/unit/knife/core/node_editor_spec.rb (renamed from spec/unit/knife/core/node_editor_spec.rb)0
-rw-r--r--knife/spec/unit/knife/core/object_loader_spec.rb (renamed from spec/unit/knife/core/object_loader_spec.rb)0
-rw-r--r--knife/spec/unit/knife/core/status_presenter_spec.rb (renamed from spec/unit/knife/core/status_presenter_spec.rb)0
-rw-r--r--knife/spec/unit/knife/core/subcommand_loader_spec.rb (renamed from spec/unit/knife/core/subcommand_loader_spec.rb)0
-rw-r--r--knife/spec/unit/knife/core/ui_spec.rb (renamed from spec/unit/knife/core/ui_spec.rb)0
-rw-r--r--knife/spec/unit/knife/core/windows_bootstrap_context_spec.rb (renamed from spec/unit/knife/core/windows_bootstrap_context_spec.rb)0
-rw-r--r--knife/spec/unit/knife/data_bag_create_spec.rb (renamed from spec/unit/knife/data_bag_create_spec.rb)0
-rw-r--r--knife/spec/unit/knife/data_bag_edit_spec.rb (renamed from spec/unit/knife/data_bag_edit_spec.rb)0
-rw-r--r--knife/spec/unit/knife/data_bag_from_file_spec.rb (renamed from spec/unit/knife/data_bag_from_file_spec.rb)0
-rw-r--r--knife/spec/unit/knife/data_bag_secret_options_spec.rb (renamed from spec/unit/knife/data_bag_secret_options_spec.rb)0
-rw-r--r--knife/spec/unit/knife/data_bag_show_spec.rb (renamed from spec/unit/knife/data_bag_show_spec.rb)0
-rw-r--r--knife/spec/unit/knife/environment_compare_spec.rb (renamed from spec/unit/knife/environment_compare_spec.rb)0
-rw-r--r--knife/spec/unit/knife/environment_create_spec.rb (renamed from spec/unit/knife/environment_create_spec.rb)0
-rw-r--r--knife/spec/unit/knife/environment_delete_spec.rb (renamed from spec/unit/knife/environment_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/environment_edit_spec.rb (renamed from spec/unit/knife/environment_edit_spec.rb)0
-rw-r--r--knife/spec/unit/knife/environment_from_file_spec.rb (renamed from spec/unit/knife/environment_from_file_spec.rb)0
-rw-r--r--knife/spec/unit/knife/environment_list_spec.rb (renamed from spec/unit/knife/environment_list_spec.rb)0
-rw-r--r--knife/spec/unit/knife/environment_show_spec.rb (renamed from spec/unit/knife/environment_show_spec.rb)0
-rw-r--r--knife/spec/unit/knife/key_create_spec.rb (renamed from spec/unit/knife/key_create_spec.rb)0
-rw-r--r--knife/spec/unit/knife/key_delete_spec.rb (renamed from spec/unit/knife/key_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/key_edit_spec.rb (renamed from spec/unit/knife/key_edit_spec.rb)0
-rw-r--r--knife/spec/unit/knife/key_helper.rb (renamed from spec/unit/knife/key_helper.rb)0
-rw-r--r--knife/spec/unit/knife/key_list_spec.rb (renamed from spec/unit/knife/key_list_spec.rb)0
-rw-r--r--knife/spec/unit/knife/key_show_spec.rb (renamed from spec/unit/knife/key_show_spec.rb)0
-rw-r--r--knife/spec/unit/knife/node_bulk_delete_spec.rb (renamed from spec/unit/knife/node_bulk_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/node_delete_spec.rb (renamed from spec/unit/knife/node_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/node_edit_spec.rb (renamed from spec/unit/knife/node_edit_spec.rb)0
-rw-r--r--knife/spec/unit/knife/node_environment_set_spec.rb (renamed from spec/unit/knife/node_environment_set_spec.rb)0
-rw-r--r--knife/spec/unit/knife/node_from_file_spec.rb (renamed from spec/unit/knife/node_from_file_spec.rb)0
-rw-r--r--knife/spec/unit/knife/node_list_spec.rb (renamed from spec/unit/knife/node_list_spec.rb)0
-rw-r--r--knife/spec/unit/knife/node_policy_set_spec.rb (renamed from spec/unit/knife/node_policy_set_spec.rb)0
-rw-r--r--knife/spec/unit/knife/node_run_list_add_spec.rb (renamed from spec/unit/knife/node_run_list_add_spec.rb)0
-rw-r--r--knife/spec/unit/knife/node_run_list_remove_spec.rb (renamed from spec/unit/knife/node_run_list_remove_spec.rb)0
-rw-r--r--knife/spec/unit/knife/node_run_list_set_spec.rb (renamed from spec/unit/knife/node_run_list_set_spec.rb)0
-rw-r--r--knife/spec/unit/knife/node_show_spec.rb (renamed from spec/unit/knife/node_show_spec.rb)0
-rw-r--r--knife/spec/unit/knife/org_create_spec.rb (renamed from spec/unit/knife/org_create_spec.rb)0
-rw-r--r--knife/spec/unit/knife/org_delete_spec.rb (renamed from spec/unit/knife/org_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/org_edit_spec.rb (renamed from spec/unit/knife/org_edit_spec.rb)0
-rw-r--r--knife/spec/unit/knife/org_list_spec.rb (renamed from spec/unit/knife/org_list_spec.rb)0
-rw-r--r--knife/spec/unit/knife/org_show_spec.rb (renamed from spec/unit/knife/org_show_spec.rb)0
-rw-r--r--knife/spec/unit/knife/org_user_add_spec.rb (renamed from spec/unit/knife/org_user_add_spec.rb)0
-rw-r--r--knife/spec/unit/knife/raw_spec.rb (renamed from spec/unit/knife/raw_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_bulk_delete_spec.rb (renamed from spec/unit/knife/role_bulk_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_create_spec.rb (renamed from spec/unit/knife/role_create_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_delete_spec.rb (renamed from spec/unit/knife/role_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_edit_spec.rb (renamed from spec/unit/knife/role_edit_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_env_run_list_add_spec.rb (renamed from spec/unit/knife/role_env_run_list_add_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_env_run_list_clear_spec.rb (renamed from spec/unit/knife/role_env_run_list_clear_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_env_run_list_remove_spec.rb (renamed from spec/unit/knife/role_env_run_list_remove_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_env_run_list_replace_spec.rb (renamed from spec/unit/knife/role_env_run_list_replace_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_env_run_list_set_spec.rb (renamed from spec/unit/knife/role_env_run_list_set_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_from_file_spec.rb (renamed from spec/unit/knife/role_from_file_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_list_spec.rb (renamed from spec/unit/knife/role_list_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_run_list_add_spec.rb (renamed from spec/unit/knife/role_run_list_add_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_run_list_clear_spec.rb (renamed from spec/unit/knife/role_run_list_clear_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_run_list_remove_spec.rb (renamed from spec/unit/knife/role_run_list_remove_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_run_list_replace_spec.rb (renamed from spec/unit/knife/role_run_list_replace_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_run_list_set_spec.rb (renamed from spec/unit/knife/role_run_list_set_spec.rb)0
-rw-r--r--knife/spec/unit/knife/role_show_spec.rb (renamed from spec/unit/knife/role_show_spec.rb)0
-rw-r--r--knife/spec/unit/knife/ssh_spec.rb (renamed from spec/unit/knife/ssh_spec.rb)0
-rw-r--r--knife/spec/unit/knife/ssl_check_spec.rb (renamed from spec/unit/knife/ssl_check_spec.rb)0
-rw-r--r--knife/spec/unit/knife/ssl_fetch_spec.rb (renamed from spec/unit/knife/ssl_fetch_spec.rb)0
-rw-r--r--knife/spec/unit/knife/status_spec.rb (renamed from spec/unit/knife/status_spec.rb)0
-rw-r--r--knife/spec/unit/knife/supermarket_download_spec.rb (renamed from spec/unit/knife/supermarket_download_spec.rb)0
-rw-r--r--knife/spec/unit/knife/supermarket_install_spec.rb (renamed from spec/unit/knife/supermarket_install_spec.rb)0
-rw-r--r--knife/spec/unit/knife/supermarket_list_spec.rb (renamed from spec/unit/knife/supermarket_list_spec.rb)0
-rw-r--r--knife/spec/unit/knife/supermarket_search_spec.rb (renamed from spec/unit/knife/supermarket_search_spec.rb)0
-rw-r--r--knife/spec/unit/knife/supermarket_share_spec.rb (renamed from spec/unit/knife/supermarket_share_spec.rb)0
-rw-r--r--knife/spec/unit/knife/supermarket_unshare_spec.rb (renamed from spec/unit/knife/supermarket_unshare_spec.rb)0
-rw-r--r--knife/spec/unit/knife/tag_create_spec.rb (renamed from spec/unit/knife/tag_create_spec.rb)0
-rw-r--r--knife/spec/unit/knife/tag_delete_spec.rb (renamed from spec/unit/knife/tag_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/tag_list_spec.rb (renamed from spec/unit/knife/tag_list_spec.rb)0
-rw-r--r--knife/spec/unit/knife/user_create_spec.rb (renamed from spec/unit/knife/user_create_spec.rb)0
-rw-r--r--knife/spec/unit/knife/user_delete_spec.rb (renamed from spec/unit/knife/user_delete_spec.rb)0
-rw-r--r--knife/spec/unit/knife/user_edit_spec.rb (renamed from spec/unit/knife/user_edit_spec.rb)0
-rw-r--r--knife/spec/unit/knife/user_list_spec.rb (renamed from spec/unit/knife/user_list_spec.rb)0
-rw-r--r--knife/spec/unit/knife/user_password_spec.rb (renamed from spec/unit/knife/user_password_spec.rb)0
-rw-r--r--knife/spec/unit/knife/user_reregister_spec.rb (renamed from spec/unit/knife/user_reregister_spec.rb)0
-rw-r--r--knife/spec/unit/knife/user_show_spec.rb (renamed from spec/unit/knife/user_show_spec.rb)0
-rw-r--r--knife/spec/unit/knife_spec.rb (renamed from spec/unit/knife_spec.rb)0
564 files changed, 4533 insertions, 0 deletions
diff --git a/knife/spec/data/apt/chef-integration-test-1.0/debian/changelog b/knife/spec/data/apt/chef-integration-test-1.0/debian/changelog
new file mode 100644
index 0000000000..bb34505e65
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.0/debian/changelog
@@ -0,0 +1,5 @@
+chef-integration-test (1.0-1) unstable; urgency=low
+
+ * Initial release (Closes: #CHEF-1718)
+
+ -- Joshua Timberman <joshua@opscode.com> Thu, 30 Sep 2010 09:53:45 -0600
diff --git a/knife/spec/data/apt/chef-integration-test-1.0/debian/compat b/knife/spec/data/apt/chef-integration-test-1.0/debian/compat
new file mode 100644
index 0000000000..7f8f011eb7
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.0/debian/compat
@@ -0,0 +1 @@
+7
diff --git a/knife/spec/data/apt/chef-integration-test-1.0/debian/control b/knife/spec/data/apt/chef-integration-test-1.0/debian/control
new file mode 100644
index 0000000000..e77b01b1d2
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.0/debian/control
@@ -0,0 +1,13 @@
+Source: chef-integration-test
+Section: ruby
+Priority: extra
+Maintainer: Joshua Timberman <Joshua Timberman <joshua@opscode.com>>
+Build-Depends: debhelper (>= 7.0.50~)
+Standards-Version: 3.8.4
+Homepage: http://tickets.opscode.com
+
+Package: chef-integration-test
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Chef integration tests for APT in Cucumber
+ This package is used for cucumber integration testing in Chef.
diff --git a/knife/spec/data/apt/chef-integration-test-1.0/debian/copyright b/knife/spec/data/apt/chef-integration-test-1.0/debian/copyright
new file mode 100644
index 0000000000..e840a11cca
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.0/debian/copyright
@@ -0,0 +1,34 @@
+This work was packaged by:
+
+ Joshua Timberman <Joshua Timberman <joshua@opscode.com>> on Thu, 30 Sep 2010 09:53:45 -0600
+
+Upstream Author(s):
+
+ Opscode, Inc.
+
+Copyright:
+
+ Copyright 2010-2016, Chef Software Inc.
+
+License:
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+The Debian packaging is:
+
+ Copyright 2010-2016, Chef Software Inc. (<legal@chef.io>)
+
+
+and is licensed under the Apache 2.0 license.
+
+See "/usr/share/common-licenses/Apache-2.0"
diff --git a/knife/spec/data/apt/chef-integration-test-1.0/debian/files b/knife/spec/data/apt/chef-integration-test-1.0/debian/files
new file mode 100644
index 0000000000..536f4beabc
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.0/debian/files
@@ -0,0 +1 @@
+chef-integration-test_1.0-1_amd64.deb ruby extra
diff --git a/knife/spec/data/apt/chef-integration-test-1.0/debian/rules b/knife/spec/data/apt/chef-integration-test-1.0/debian/rules
new file mode 100755
index 0000000000..b760bee7f4
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.0/debian/rules
@@ -0,0 +1,13 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+%:
+ dh $@
diff --git a/knife/spec/data/apt/chef-integration-test-1.0/debian/source/format b/knife/spec/data/apt/chef-integration-test-1.0/debian/source/format
new file mode 100644
index 0000000000..163aaf8d82
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.0/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/knife/spec/data/apt/chef-integration-test-1.1/debian/changelog b/knife/spec/data/apt/chef-integration-test-1.1/debian/changelog
new file mode 100644
index 0000000000..fc693c1ec8
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.1/debian/changelog
@@ -0,0 +1,11 @@
+chef-integration-test (1.1-1) unstable; urgency=low
+
+ * New upstream release (1.1)
+
+ -- Joshua Timberman <joshua@opscode.com> Thu, 30 Sep 2010 10:09:34 -0600
+
+chef-integration-test (1.0-1) unstable; urgency=low
+
+ * Initial release (Closes: #CHEF-1718)
+
+ -- Joshua Timberman <joshua@opscode.com> Thu, 30 Sep 2010 09:53:45 -0600
diff --git a/knife/spec/data/apt/chef-integration-test-1.1/debian/compat b/knife/spec/data/apt/chef-integration-test-1.1/debian/compat
new file mode 100644
index 0000000000..7f8f011eb7
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.1/debian/compat
@@ -0,0 +1 @@
+7
diff --git a/knife/spec/data/apt/chef-integration-test-1.1/debian/control b/knife/spec/data/apt/chef-integration-test-1.1/debian/control
new file mode 100644
index 0000000000..e77b01b1d2
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.1/debian/control
@@ -0,0 +1,13 @@
+Source: chef-integration-test
+Section: ruby
+Priority: extra
+Maintainer: Joshua Timberman <Joshua Timberman <joshua@opscode.com>>
+Build-Depends: debhelper (>= 7.0.50~)
+Standards-Version: 3.8.4
+Homepage: http://tickets.opscode.com
+
+Package: chef-integration-test
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Chef integration tests for APT in Cucumber
+ This package is used for cucumber integration testing in Chef.
diff --git a/knife/spec/data/apt/chef-integration-test-1.1/debian/copyright b/knife/spec/data/apt/chef-integration-test-1.1/debian/copyright
new file mode 100644
index 0000000000..e840a11cca
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.1/debian/copyright
@@ -0,0 +1,34 @@
+This work was packaged by:
+
+ Joshua Timberman <Joshua Timberman <joshua@opscode.com>> on Thu, 30 Sep 2010 09:53:45 -0600
+
+Upstream Author(s):
+
+ Opscode, Inc.
+
+Copyright:
+
+ Copyright 2010-2016, Chef Software Inc.
+
+License:
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+The Debian packaging is:
+
+ Copyright 2010-2016, Chef Software Inc. (<legal@chef.io>)
+
+
+and is licensed under the Apache 2.0 license.
+
+See "/usr/share/common-licenses/Apache-2.0"
diff --git a/knife/spec/data/apt/chef-integration-test-1.1/debian/files b/knife/spec/data/apt/chef-integration-test-1.1/debian/files
new file mode 100644
index 0000000000..d72553c027
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.1/debian/files
@@ -0,0 +1 @@
+chef-integration-test_1.1-1_amd64.deb ruby extra
diff --git a/knife/spec/data/apt/chef-integration-test-1.1/debian/rules b/knife/spec/data/apt/chef-integration-test-1.1/debian/rules
new file mode 100755
index 0000000000..b760bee7f4
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.1/debian/rules
@@ -0,0 +1,13 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+%:
+ dh $@
diff --git a/knife/spec/data/apt/chef-integration-test-1.1/debian/source/format b/knife/spec/data/apt/chef-integration-test-1.1/debian/source/format
new file mode 100644
index 0000000000..163aaf8d82
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test-1.1/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/changelog b/knife/spec/data/apt/chef-integration-test2-1.0/debian/changelog
new file mode 100644
index 0000000000..1b846f8f4d
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/changelog
@@ -0,0 +1,5 @@
+chef-integration-test2 (1.0-1) unstable; urgency=low
+
+ * Initial release (Closes: #CHEF-1718)
+
+ -- Joshua Timberman <joshua@opscode.com> Thu, 30 Sep 2010 09:53:45 -0600
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log b/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log
new file mode 100644
index 0000000000..2d06fcdad9
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log
@@ -0,0 +1,45 @@
+dh_auto_configure
+dh_auto_build
+dh_auto_test
+dh_prep
+dh_installdirs
+dh_auto_install
+dh_install
+dh_installdocs
+dh_installchangelogs
+dh_installexamples
+dh_installman
+dh_installcatalogs
+dh_installcron
+dh_installdebconf
+dh_installemacsen
+dh_installifupdown
+dh_installinfo
+dh_pysupport
+dh_installinit
+dh_installmenu
+dh_installmime
+dh_installmodules
+dh_installlogcheck
+dh_installlogrotate
+dh_installpam
+dh_installppp
+dh_installudev
+dh_installwm
+dh_installxfonts
+dh_bugfiles
+dh_lintian
+dh_gconf
+dh_icons
+dh_perl
+dh_usrlocal
+dh_link
+dh_compress
+dh_fixperms
+dh_strip
+dh_makeshlibs
+dh_shlibdeps
+dh_installdeb
+dh_gencontrol
+dh_md5sums
+dh_builddeb
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars b/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars
new file mode 100644
index 0000000000..abd3ebebc3
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars
@@ -0,0 +1 @@
+misc:Depends=
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles b/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles
new file mode 100644
index 0000000000..ac4307eadf
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles
@@ -0,0 +1 @@
+/usr/share/doc/chef-integration-test2/copyright
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control b/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control
new file mode 100644
index 0000000000..27d53d9750
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control
@@ -0,0 +1,10 @@
+Package: chef-integration-test2
+Version: 1.0-1
+Architecture: amd64
+Maintainer: Joshua Timberman <Joshua Timberman <joshua@opscode.com>>
+Installed-Size: 36
+Section: ruby
+Priority: extra
+Homepage: http://tickets.opscode.com
+Description: Chef integration tests for APT in Cucumber
+ This package is used for cucumber integration testing in Chef.
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums b/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums
new file mode 100644
index 0000000000..144b7931de
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums
@@ -0,0 +1 @@
+8b3b9ff6cdfe7d7b2b8b8d4f7b9e381f usr/share/doc/chef-integration-test2/changelog.Debian.gz
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/compat b/knife/spec/data/apt/chef-integration-test2-1.0/debian/compat
new file mode 100644
index 0000000000..7f8f011eb7
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/compat
@@ -0,0 +1 @@
+7
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/conffiles b/knife/spec/data/apt/chef-integration-test2-1.0/debian/conffiles
new file mode 100644
index 0000000000..ac4307eadf
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/conffiles
@@ -0,0 +1 @@
+/usr/share/doc/chef-integration-test2/copyright
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/control b/knife/spec/data/apt/chef-integration-test2-1.0/debian/control
new file mode 100644
index 0000000000..f2731a6848
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/control
@@ -0,0 +1,13 @@
+Source: chef-integration-test2
+Section: ruby
+Priority: extra
+Maintainer: Joshua Timberman <Joshua Timberman <joshua@opscode.com>>
+Build-Depends: debhelper (>= 7.0.50~)
+Standards-Version: 3.8.4
+Homepage: http://tickets.opscode.com
+
+Package: chef-integration-test2
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Chef integration tests for APT in Cucumber
+ This package is used for cucumber integration testing in Chef.
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/copyright b/knife/spec/data/apt/chef-integration-test2-1.0/debian/copyright
new file mode 100644
index 0000000000..e840a11cca
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/copyright
@@ -0,0 +1,34 @@
+This work was packaged by:
+
+ Joshua Timberman <Joshua Timberman <joshua@opscode.com>> on Thu, 30 Sep 2010 09:53:45 -0600
+
+Upstream Author(s):
+
+ Opscode, Inc.
+
+Copyright:
+
+ Copyright 2010-2016, Chef Software Inc.
+
+License:
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+The Debian packaging is:
+
+ Copyright 2010-2016, Chef Software Inc. (<legal@chef.io>)
+
+
+and is licensed under the Apache 2.0 license.
+
+See "/usr/share/common-licenses/Apache-2.0"
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/files b/knife/spec/data/apt/chef-integration-test2-1.0/debian/files
new file mode 100644
index 0000000000..640e4c6414
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/files
@@ -0,0 +1 @@
+chef-integration-test2_1.0-1_amd64.deb ruby extra
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/rules b/knife/spec/data/apt/chef-integration-test2-1.0/debian/rules
new file mode 100755
index 0000000000..b760bee7f4
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/rules
@@ -0,0 +1,13 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+%:
+ dh $@
diff --git a/knife/spec/data/apt/chef-integration-test2-1.0/debian/source/format b/knife/spec/data/apt/chef-integration-test2-1.0/debian/source/format
new file mode 100644
index 0000000000..163aaf8d82
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2-1.0/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/knife/spec/data/apt/chef-integration-test2_1.0-1.debian.tar.gz b/knife/spec/data/apt/chef-integration-test2_1.0-1.debian.tar.gz
new file mode 100644
index 0000000000..6c002a7420
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2_1.0-1.debian.tar.gz
Binary files differ
diff --git a/knife/spec/data/apt/chef-integration-test2_1.0-1.dsc b/knife/spec/data/apt/chef-integration-test2_1.0-1.dsc
new file mode 100644
index 0000000000..b247f49346
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2_1.0-1.dsc
@@ -0,0 +1,18 @@
+Format: 3.0 (quilt)
+Source: chef-integration-test2
+Binary: chef-integration-test2
+Architecture: any
+Version: 1.0-1
+Maintainer: Joshua Timberman <Joshua Timberman <joshua@opscode.com>>
+Homepage: http://tickets.opscode.com
+Standards-Version: 3.8.4
+Build-Depends: debhelper (>= 7.0.50~)
+Checksums-Sha1:
+ 755c304197c6559128aed206ea70643fec2bb90d 248 chef-integration-test2_1.0.orig.tar.gz
+ 8b7df49a9e2c57b4460c2738852db1156a21a089 1369 chef-integration-test2_1.0-1.debian.tar.gz
+Checksums-Sha256:
+ 8b206a7b3d422290bc8d82bd700cb89f1c6e3962b96be6a3955c7a0159f9031c 248 chef-integration-test2_1.0.orig.tar.gz
+ 77a7956e222c35afcddc4a5a8d338ca6e36dc1fbd720af255ce2412885f82702 1369 chef-integration-test2_1.0-1.debian.tar.gz
+Files:
+ f1f7d7bbe63ad631d25d707f564a8d33 248 chef-integration-test2_1.0.orig.tar.gz
+ 4fab5c1cd9a7b47c4f319af776f48a1d 1369 chef-integration-test2_1.0-1.debian.tar.gz
diff --git a/knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.build b/knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.build
new file mode 100644
index 0000000000..8ef31d3ccf
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.build
@@ -0,0 +1,91 @@
+ dpkg-buildpackage -rfakeroot -D -us -uc
+dpkg-buildpackage: warning: using a gain-root-command while being root
+dpkg-buildpackage: set CFLAGS to default value: -g -O2
+dpkg-buildpackage: set CPPFLAGS to default value:
+dpkg-buildpackage: set LDFLAGS to default value: -Wl,-Bsymbolic-functions
+dpkg-buildpackage: set FFLAGS to default value: -g -O2
+dpkg-buildpackage: set CXXFLAGS to default value: -g -O2
+dpkg-buildpackage: source package chef-integration-test2
+dpkg-buildpackage: source version 1.0-1
+dpkg-buildpackage: source changed by Joshua Timberman <joshua@opscode.com>
+dpkg-buildpackage: host architecture amd64
+ fakeroot debian/rules clean
+dh clean
+ dh_testdir
+ dh_auto_clean
+ dh_clean
+ dpkg-source -b chef-integration-test2-1.0
+dpkg-source: info: using source format `3.0 (quilt)'
+dpkg-source: info: building chef-integration-test2 using existing ./chef-integration-test2_1.0.orig.tar.gz
+dpkg-source: warning: ignoring deletion of directory cache
+dpkg-source: warning: ignoring deletion of directory cache/chef-integration-test2
+dpkg-source: warning: ignoring deletion of file cache/chef-integration-test2/contents
+dpkg-source: info: building chef-integration-test2 in chef-integration-test2_1.0-1.debian.tar.gz
+dpkg-source: info: building chef-integration-test2 in chef-integration-test2_1.0-1.dsc
+ debian/rules build
+dh build
+ dh_testdir
+ dh_auto_configure
+ dh_auto_build
+ dh_auto_test
+ fakeroot debian/rules binary
+dh binary
+ dh_testroot
+ dh_prep
+ dh_installdirs
+ dh_auto_install
+ dh_install
+ dh_installdocs
+ dh_installchangelogs
+ dh_installexamples
+ dh_installman
+ dh_installcatalogs
+ dh_installcron
+ dh_installdebconf
+ dh_installemacsen
+ dh_installifupdown
+ dh_installinfo
+ dh_pysupport
+ dh_installinit
+ dh_installmenu
+ dh_installmime
+ dh_installmodules
+ dh_installlogcheck
+ dh_installlogrotate
+ dh_installpam
+ dh_installppp
+ dh_installudev
+ dh_installwm
+ dh_installxfonts
+ dh_bugfiles
+ dh_lintian
+ dh_gconf
+ dh_icons
+ dh_perl
+ dh_usrlocal
+ dh_link
+ dh_compress
+ dh_fixperms
+ dh_strip
+ dh_makeshlibs
+ dh_shlibdeps
+ dh_installdeb
+ dh_gencontrol
+dpkg-gencontrol: warning: unknown substitution variable ${shlibs:Depends}
+ dh_md5sums
+ dh_builddeb
+dpkg-deb: building package `chef-integration-test2' in `../chef-integration-test2_1.0-1_amd64.deb'.
+ dpkg-genchanges >../chef-integration-test2_1.0-1_amd64.changes
+dpkg-genchanges: including full source code in upload
+dpkg-buildpackage: full upload (original source is included)
+Now running lintian...
+warning: lintian's authors do not recommend running it with root privileges!
+E: chef-integration-test2 source: maintainer-address-malformed Joshua Timberman <Joshua Timberman <joshua@opscode.com>>
+W: chef-integration-test2 source: changelog-should-mention-nmu
+W: chef-integration-test2 source: source-nmu-has-incorrect-version-number 1.0-1
+W: chef-integration-test2: new-package-should-close-itp-bug
+W: chef-integration-test2: wrong-bug-number-in-closes l3:#CHEF
+E: chef-integration-test2: file-in-usr-marked-as-conffile /usr/share/doc/chef-integration-test2/copyright
+E: chef-integration-test2: maintainer-address-malformed Joshua Timberman <Joshua Timberman <joshua@opscode.com>>
+W: chef-integration-test2: empty-binary-package
+Finished running lintian.
diff --git a/knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes b/knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes
new file mode 100644
index 0000000000..be3cd45343
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes
@@ -0,0 +1,31 @@
+Format: 1.8
+Date: Thu, 30 Sep 2010 09:53:45 -0600
+Source: chef-integration-test2
+Binary: chef-integration-test2
+Architecture: source amd64
+Version: 1.0-1
+Distribution: unstable
+Urgency: low
+Maintainer: Joshua Timberman <Joshua Timberman <joshua@opscode.com>>
+Changed-By: Joshua Timberman <joshua@opscode.com>
+Description:
+ chef-integration-test2 - Chef integration tests for APT in Cucumber
+Changes:
+ chef-integration-test2 (1.0-1) unstable; urgency=low
+ .
+ * Initial release (Closes: #CHEF-1718)
+Checksums-Sha1:
+ 7e065fdf71f4d798312b318a29cec43b7bc1c8e1 885 chef-integration-test2_1.0-1.dsc
+ 755c304197c6559128aed206ea70643fec2bb90d 248 chef-integration-test2_1.0.orig.tar.gz
+ 8b7df49a9e2c57b4460c2738852db1156a21a089 1369 chef-integration-test2_1.0-1.debian.tar.gz
+ f3f89c051bce36d40ef1be12d231c44b2d5be05b 1694 chef-integration-test2_1.0-1_amd64.deb
+Checksums-Sha256:
+ 80d314349e1d978f242d05482ca81c9361739047daa4adcecc9e5e622fdc6fb4 885 chef-integration-test2_1.0-1.dsc
+ 8b206a7b3d422290bc8d82bd700cb89f1c6e3962b96be6a3955c7a0159f9031c 248 chef-integration-test2_1.0.orig.tar.gz
+ 77a7956e222c35afcddc4a5a8d338ca6e36dc1fbd720af255ce2412885f82702 1369 chef-integration-test2_1.0-1.debian.tar.gz
+ 19a767db0a947a350fb1c8492699e8a808fbe1838d4a582001106cfbe520ad8f 1694 chef-integration-test2_1.0-1_amd64.deb
+Files:
+ 9f927b32d95b5406c696b5b0b23177e8 885 ruby extra chef-integration-test2_1.0-1.dsc
+ f1f7d7bbe63ad631d25d707f564a8d33 248 ruby extra chef-integration-test2_1.0.orig.tar.gz
+ 4fab5c1cd9a7b47c4f319af776f48a1d 1369 ruby extra chef-integration-test2_1.0-1.debian.tar.gz
+ 9914e6152e278b6828bcade3b3f5580c 1694 ruby extra chef-integration-test2_1.0-1_amd64.deb
diff --git a/knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.deb b/knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.deb
new file mode 100644
index 0000000000..7b9b69d378
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2_1.0-1_amd64.deb
Binary files differ
diff --git a/knife/spec/data/apt/chef-integration-test2_1.0.orig.tar.gz b/knife/spec/data/apt/chef-integration-test2_1.0.orig.tar.gz
new file mode 100644
index 0000000000..18f7aa17d6
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test2_1.0.orig.tar.gz
Binary files differ
diff --git a/knife/spec/data/apt/chef-integration-test_1.0-1_amd64.changes b/knife/spec/data/apt/chef-integration-test_1.0-1_amd64.changes
new file mode 100644
index 0000000000..4746b834e5
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test_1.0-1_amd64.changes
@@ -0,0 +1,22 @@
+Format: 1.8
+Date: Thu, 30 Sep 2010 09:53:45 -0600
+Source: chef-integration-test
+Binary: chef-integration-test
+Architecture: amd64
+Version: 1.0-1
+Distribution: unstable
+Urgency: low
+Maintainer: Joshua Timberman <Joshua Timberman <joshua@opscode.com>>
+Changed-By: Joshua Timberman <joshua@opscode.com>
+Description:
+ chef-integration-test - Chef integration tests for APT in Cucumber
+Changes:
+ chef-integration-test (1.0-1) unstable; urgency=low
+ .
+ * Initial release (Closes: #CHEF-1718)
+Checksums-Sha1:
+ b44685ff59626bc94c67e60665f06c4643fe9767 1680 chef-integration-test_1.0-1_amd64.deb
+Checksums-Sha256:
+ da176f4405fa21fd7207d4785680c6996d395a1ca132f2d5565a61c5479b1116 1680 chef-integration-test_1.0-1_amd64.deb
+Files:
+ 713722480408ecc8e7220aea52bdd76e 1680 ruby extra chef-integration-test_1.0-1_amd64.deb
diff --git a/knife/spec/data/apt/chef-integration-test_1.0-1_amd64.deb b/knife/spec/data/apt/chef-integration-test_1.0-1_amd64.deb
new file mode 100644
index 0000000000..458dd026ff
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test_1.0-1_amd64.deb
Binary files differ
diff --git a/knife/spec/data/apt/chef-integration-test_1.0.orig.tar.gz b/knife/spec/data/apt/chef-integration-test_1.0.orig.tar.gz
new file mode 100644
index 0000000000..3de028d486
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test_1.0.orig.tar.gz
Binary files differ
diff --git a/knife/spec/data/apt/chef-integration-test_1.1-1_amd64.changes b/knife/spec/data/apt/chef-integration-test_1.1-1_amd64.changes
new file mode 100644
index 0000000000..f014de813b
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test_1.1-1_amd64.changes
@@ -0,0 +1,22 @@
+Format: 1.8
+Date: Thu, 30 Sep 2010 10:09:34 -0600
+Source: chef-integration-test
+Binary: chef-integration-test
+Architecture: amd64
+Version: 1.1-1
+Distribution: unstable
+Urgency: low
+Maintainer: Joshua Timberman <Joshua Timberman <joshua@opscode.com>>
+Changed-By: Joshua Timberman <joshua@opscode.com>
+Description:
+ chef-integration-test - Chef integration tests for APT in Cucumber
+Changes:
+ chef-integration-test (1.1-1) unstable; urgency=low
+ .
+ * New upstream release (1.1)
+Checksums-Sha1:
+ 43c5653a9a5b9419849173a4ec3a9855cf0327a3 1722 chef-integration-test_1.1-1_amd64.deb
+Checksums-Sha256:
+ 84e2f087f7e11d1b73743007ecfc6b8b34e03f6917c0993b35c0758ee59702c1 1722 chef-integration-test_1.1-1_amd64.deb
+Files:
+ 4b05bace483dbca54efc21f97ee47e1d 1722 ruby extra chef-integration-test_1.1-1_amd64.deb
diff --git a/knife/spec/data/apt/chef-integration-test_1.1-1_amd64.deb b/knife/spec/data/apt/chef-integration-test_1.1-1_amd64.deb
new file mode 100644
index 0000000000..c4fac10dc1
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test_1.1-1_amd64.deb
Binary files differ
diff --git a/knife/spec/data/apt/chef-integration-test_1.1.orig.tar.gz b/knife/spec/data/apt/chef-integration-test_1.1.orig.tar.gz
new file mode 100644
index 0000000000..5fda119eae
--- /dev/null
+++ b/knife/spec/data/apt/chef-integration-test_1.1.orig.tar.gz
Binary files differ
diff --git a/knife/spec/data/apt/var/www/apt/conf/distributions b/knife/spec/data/apt/var/www/apt/conf/distributions
new file mode 100644
index 0000000000..285c1a88de
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/conf/distributions
@@ -0,0 +1,7 @@
+Origin: localhost
+Label: apt repository
+Codename: sid
+Architectures: amd64
+Components: main
+Description: Apt repository
+Pull: sid
diff --git a/knife/spec/data/apt/var/www/apt/conf/incoming b/knife/spec/data/apt/var/www/apt/conf/incoming
new file mode 100644
index 0000000000..d44e59c51b
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/conf/incoming
@@ -0,0 +1,4 @@
+Name: default
+IncomingDir: /tmp/incoming
+TempDir: /tmp
+Allow: sid unstable>sid
diff --git a/knife/spec/data/apt/var/www/apt/conf/pulls b/knife/spec/data/apt/var/www/apt/conf/pulls
new file mode 100644
index 0000000000..0fc3358279
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/conf/pulls
@@ -0,0 +1,3 @@
+Name: sid
+From: sid
+Components: main
diff --git a/knife/spec/data/apt/var/www/apt/db/checksums.db b/knife/spec/data/apt/var/www/apt/db/checksums.db
new file mode 100644
index 0000000000..e36ade2079
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/db/checksums.db
Binary files differ
diff --git a/knife/spec/data/apt/var/www/apt/db/contents.cache.db b/knife/spec/data/apt/var/www/apt/db/contents.cache.db
new file mode 100644
index 0000000000..04a0c4aed5
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/db/contents.cache.db
Binary files differ
diff --git a/knife/spec/data/apt/var/www/apt/db/packages.db b/knife/spec/data/apt/var/www/apt/db/packages.db
new file mode 100644
index 0000000000..43c70b0de3
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/db/packages.db
Binary files differ
diff --git a/knife/spec/data/apt/var/www/apt/db/references.db b/knife/spec/data/apt/var/www/apt/db/references.db
new file mode 100644
index 0000000000..47c99fe152
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/db/references.db
Binary files differ
diff --git a/knife/spec/data/apt/var/www/apt/db/release.caches.db b/knife/spec/data/apt/var/www/apt/db/release.caches.db
new file mode 100644
index 0000000000..0e251c5496
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/db/release.caches.db
Binary files differ
diff --git a/knife/spec/data/apt/var/www/apt/db/version b/knife/spec/data/apt/var/www/apt/db/version
new file mode 100644
index 0000000000..a6908690d9
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/db/version
@@ -0,0 +1,4 @@
+4.2.0
+3.3.0
+bdb4.8.30
+bdb4.8.0
diff --git a/knife/spec/data/apt/var/www/apt/dists/sid/Release b/knife/spec/data/apt/var/www/apt/dists/sid/Release
new file mode 100644
index 0000000000..44ccd079bf
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/dists/sid/Release
@@ -0,0 +1,19 @@
+Origin: localhost
+Label: apt repository
+Codename: sid
+Date: Thu, 30 Sep 2010 16:33:01 UTC
+Architectures: amd64
+Components: main
+Description: Apt repository
+MD5Sum:
+ 92ed2cc14e37e9ab23466b27857d29ac 596 main/binary-amd64/Packages
+ c7726773341137b71cc971d44ddec4f5 394 main/binary-amd64/Packages.gz
+ 46cd71c965ce0813c94ef78c836cc7d3 104 main/binary-amd64/Release
+SHA1:
+ cde25071c5fcee59cee8dcd773ca419dcb40d946 596 main/binary-amd64/Packages
+ ce04daff75d4b27371d691d645282b198045544a 394 main/binary-amd64/Packages.gz
+ 91ca9531e3afa7a540cabdc6030c6f75d315fec7 104 main/binary-amd64/Release
+SHA256:
+ af601ce143f33405425746462973adc0fda3aceb381d1c739851b95ee0814ca3 596 main/binary-amd64/Packages
+ 15e98119705a08018d4583caabc91d36ba12e6f1c8af0f799a3ec8ca5bfaa80d 394 main/binary-amd64/Packages.gz
+ 098c599ac5b0a98785336afb2bc9c47002570ffa07dd62321c6f70b9fdb74325 104 main/binary-amd64/Release
diff --git a/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages b/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages
new file mode 100644
index 0000000000..209c23cd42
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages
@@ -0,0 +1,16 @@
+Package: chef-integration-test
+Version: 1.1-1
+Architecture: amd64
+Maintainer: Joshua Timberman <Joshua Timberman <joshua@opscode.com>>
+Installed-Size: 32
+Homepage: http://tickets.opscode.com
+Priority: extra
+Section: ruby
+Filename: pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb
+Size: 1722
+SHA256: 84e2f087f7e11d1b73743007ecfc6b8b34e03f6917c0993b35c0758ee59702c1
+SHA1: 43c5653a9a5b9419849173a4ec3a9855cf0327a3
+MD5sum: 4b05bace483dbca54efc21f97ee47e1d
+Description: Chef integration tests for APT in Cucumber
+ This package is used for cucumber integration testing in Chef.
+
diff --git a/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz b/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz
new file mode 100644
index 0000000000..8a2c1e8980
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz
Binary files differ
diff --git a/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release b/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release
new file mode 100644
index 0000000000..e913d702a1
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release
@@ -0,0 +1,5 @@
+Component: main
+Origin: localhost
+Label: apt repository
+Architecture: amd64
+Description: Apt repository
diff --git a/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages b/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages
diff --git a/knife/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb b/knife/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb
new file mode 100644
index 0000000000..458dd026ff
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb
Binary files differ
diff --git a/knife/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb b/knife/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb
new file mode 100644
index 0000000000..c4fac10dc1
--- /dev/null
+++ b/knife/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb
Binary files differ
diff --git a/knife/spec/data/bad-config.rb b/knife/spec/data/bad-config.rb
new file mode 100644
index 0000000000..5477a69366
--- /dev/null
+++ b/knife/spec/data/bad-config.rb
@@ -0,0 +1 @@
+monkey_soup("tastes nice") \ No newline at end of file
diff --git a/knife/spec/data/bootstrap/encrypted_data_bag_secret b/knife/spec/data/bootstrap/encrypted_data_bag_secret
new file mode 100644
index 0000000000..ac88558a1a
--- /dev/null
+++ b/knife/spec/data/bootstrap/encrypted_data_bag_secret
@@ -0,0 +1 @@
+supersekret_from_file
diff --git a/knife/spec/data/bootstrap/no_proxy.erb b/knife/spec/data/bootstrap/no_proxy.erb
new file mode 100644
index 0000000000..6945704386
--- /dev/null
+++ b/knife/spec/data/bootstrap/no_proxy.erb
@@ -0,0 +1,2 @@
+bash -c '
+<%= config_content %>'
diff --git a/knife/spec/data/bootstrap/secret.erb b/knife/spec/data/bootstrap/secret.erb
new file mode 100644
index 0000000000..e0ad41576d
--- /dev/null
+++ b/knife/spec/data/bootstrap/secret.erb
@@ -0,0 +1,9 @@
+bash -c '
+<% if encrypted_data_bag_secret -%>
+awk NF > /etc/chef/encrypted_data_bag_secret <<'EOP'
+<%= encrypted_data_bag_secret %>
+EOP
+chmod 0600 /etc/chef/encrypted_data_bag_secret
+<% end -%>
+
+<%= config_content %>'
diff --git a/knife/spec/data/bootstrap/test-hints.erb b/knife/spec/data/bootstrap/test-hints.erb
new file mode 100644
index 0000000000..7693fdc7c9
--- /dev/null
+++ b/knife/spec/data/bootstrap/test-hints.erb
@@ -0,0 +1,12 @@
+<%# Generate Ohai Hints -%>
+<% unless @chef_config[:knife][:hints].nil? || @chef_config[:knife][:hints].empty? -%>
+mkdir -p /etc/chef/ohai/hints
+<% end -%>
+
+<% @chef_config[:knife][:hints].each do |name, hash| -%>
+(
+cat <<'EOP'
+<%= Chef::JSONCompat.to_json(hash) %>
+EOP
+) > /etc/chef/ohai/hints/<%= name %>.json
+<% end -%>
diff --git a/knife/spec/data/bootstrap/test.erb b/knife/spec/data/bootstrap/test.erb
new file mode 100644
index 0000000000..3a383b47d0
--- /dev/null
+++ b/knife/spec/data/bootstrap/test.erb
@@ -0,0 +1 @@
+<%= Chef::JSONCompat.to_json(first_boot) %>
diff --git a/knife/spec/data/cb_version_cookbooks/cookbook2/files/test.txt b/knife/spec/data/cb_version_cookbooks/cookbook2/files/test.txt
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/cb_version_cookbooks/cookbook2/files/test.txt
diff --git a/knife/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb b/knife/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb
diff --git a/knife/spec/data/cb_version_cookbooks/tatft/README.rdoc b/knife/spec/data/cb_version_cookbooks/tatft/README.rdoc
new file mode 100644
index 0000000000..460d96b40d
--- /dev/null
+++ b/knife/spec/data/cb_version_cookbooks/tatft/README.rdoc
@@ -0,0 +1,3 @@
+= THIS RECIPE
+* is for testing CookbookLoader/CookbookVersion
+* has at least one of every kind of file that cookbooks can have \ No newline at end of file
diff --git a/knife/spec/data/cb_version_cookbooks/tatft/attributes/default.rb b/knife/spec/data/cb_version_cookbooks/tatft/attributes/default.rb
new file mode 100644
index 0000000000..47774459c2
--- /dev/null
+++ b/knife/spec/data/cb_version_cookbooks/tatft/attributes/default.rb
@@ -0,0 +1 @@
+#one_of_each default attributes
diff --git a/knife/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb b/knife/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb
new file mode 100644
index 0000000000..3912b37365
--- /dev/null
+++ b/knife/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb
@@ -0,0 +1 @@
+# IRL the runit_service is a definition to set up runit services \ No newline at end of file
diff --git a/knife/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz b/knife/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz
new file mode 100644
index 0000000000..3e7496601e
--- /dev/null
+++ b/knife/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz
@@ -0,0 +1 @@
+# not really a giant blob # \ No newline at end of file
diff --git a/knife/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb b/knife/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb
new file mode 100644
index 0000000000..fea05ba67b
--- /dev/null
+++ b/knife/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb
@@ -0,0 +1 @@
+# 0wnage \ No newline at end of file
diff --git a/knife/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb b/knife/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb
new file mode 100644
index 0000000000..977ad19192
--- /dev/null
+++ b/knife/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb
@@ -0,0 +1 @@
+# a LWP \ No newline at end of file
diff --git a/knife/spec/data/cb_version_cookbooks/tatft/recipes/default.rb b/knife/spec/data/cb_version_cookbooks/tatft/recipes/default.rb
new file mode 100644
index 0000000000..48eacf848b
--- /dev/null
+++ b/knife/spec/data/cb_version_cookbooks/tatft/recipes/default.rb
@@ -0,0 +1 @@
+# the default recipe \ No newline at end of file
diff --git a/knife/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb b/knife/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb
new file mode 100644
index 0000000000..987114f4ca
--- /dev/null
+++ b/knife/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb
@@ -0,0 +1 @@
+# a LWR # \ No newline at end of file
diff --git a/knife/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb b/knife/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb
diff --git a/knife/spec/data/checksum/random.txt b/knife/spec/data/checksum/random.txt
new file mode 100644
index 0000000000..9570fff833
--- /dev/null
+++ b/knife/spec/data/checksum/random.txt
@@ -0,0 +1 @@
+e4010abcac515ef3b78e92ee1f848a0d3bc3a526fcb826e7b4d39a6d516aa0487085c9b1be35e8d909617b250dca36dd4a55f01b7cdd310826bfd748cb27e0e43dd52b22968383c8086b06ee2d16e13574f98c058ce2bc3475b92ecf9c16e504022d60b132643986a8e7908d067526e20b4bafe1eb75349f27a4d3de02b077e76a2f59b73c14413f11e7208ae0bf6a408d51a97d490530e23476960ab8780ad86349947d82f1c9e57c85f86d71f80a6709b58be5f993a6a6df80c5a0857627d4a01e71484f6a6e983985089c00fe538e947230813c3a3e19baf6dae6db7082d07392a239ec1be385646356db3e3d76571488a6c72f0b96997f6191beea9846fc99f82a828f05af95cfc234cf681002f830915b1f3d35b2178b54a861c05d2694c5f6cfeb613a4a3670d849180461cdedf2c3cbb022608d8b19c86179d2d6da6b9acefccfc34b59663ef1282fec262bef79b2fbdd9b6669c90d6817b3762164dc309616469b33b83b1ded3420ae9177bc8f456d83939ff3c91b0a3683f3157401ceadf679c9f876da2aa413e081ee4c41d4b04f49e0c254d0082fd9bf2cb8eb8b966285be2cdcaab0ab70ea970737244b6683283598c30bdc206a05df72048b342eb40c2cd750c815d5fa944167b103ec40d60a99c49941a9e76d874149524f35ca294d081cf221757df77e027640556d983978be6b4b51aff26cd74a2f300d71 \ No newline at end of file
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0
new file mode 100644
index 0000000000..81836588d5
--- /dev/null
+++ b/knife/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0
@@ -0,0 +1 @@
+checksum data here
diff --git a/knife/spec/data/client.d_00/00-foo.rb b/knife/spec/data/client.d_00/00-foo.rb
new file mode 100644
index 0000000000..44a763aca1
--- /dev/null
+++ b/knife/spec/data/client.d_00/00-foo.rb
@@ -0,0 +1,2 @@
+# 00-foo.rb
+# d6f9b976-289c-4149-baf7-81e6ffecf228
diff --git a/knife/spec/data/client.d_00/01-bar.rb b/knife/spec/data/client.d_00/01-bar.rb
new file mode 100644
index 0000000000..73f91386bc
--- /dev/null
+++ b/knife/spec/data/client.d_00/01-bar.rb
@@ -0,0 +1 @@
+# 01-bar.rb
diff --git a/knife/spec/data/client.d_00/02-strings.rb b/knife/spec/data/client.d_00/02-strings.rb
new file mode 100644
index 0000000000..7d9a49268c
--- /dev/null
+++ b/knife/spec/data/client.d_00/02-strings.rb
@@ -0,0 +1,2 @@
+# 02-strings.rb
+something '/foo/bar'
diff --git a/knife/spec/data/client.d_00/bar b/knife/spec/data/client.d_00/bar
new file mode 100644
index 0000000000..72dca4d5e4
--- /dev/null
+++ b/knife/spec/data/client.d_00/bar
@@ -0,0 +1 @@
+1 / 0
diff --git a/knife/spec/data/client.d_01/foo/bar.rb b/knife/spec/data/client.d_01/foo/bar.rb
new file mode 100644
index 0000000000..72dca4d5e4
--- /dev/null
+++ b/knife/spec/data/client.d_01/foo/bar.rb
@@ -0,0 +1 @@
+1 / 0
diff --git a/knife/spec/data/client.d_02/foo.rb/foo.txt b/knife/spec/data/client.d_02/foo.rb/foo.txt
new file mode 100644
index 0000000000..d724c93bef
--- /dev/null
+++ b/knife/spec/data/client.d_02/foo.rb/foo.txt
@@ -0,0 +1 @@
+# foo.txt
diff --git a/knife/spec/data/config.rb b/knife/spec/data/config.rb
new file mode 100644
index 0000000000..0b3340ce57
--- /dev/null
+++ b/knife/spec/data/config.rb
@@ -0,0 +1,6 @@
+#
+# Sample Chef Config File
+#
+
+cookbook_path "/etc/chef/cookbook", "/etc/chef/site-cookbook"
+
diff --git a/knife/spec/data/cookbooks/angrybash/metadata.rb b/knife/spec/data/cookbooks/angrybash/metadata.rb
new file mode 100644
index 0000000000..720b8085be
--- /dev/null
+++ b/knife/spec/data/cookbooks/angrybash/metadata.rb
@@ -0,0 +1,2 @@
+name "angrybash"
+version "1.0.0"
diff --git a/knife/spec/data/cookbooks/angrybash/recipes/default.rb b/knife/spec/data/cookbooks/angrybash/recipes/default.rb
new file mode 100644
index 0000000000..458a29103e
--- /dev/null
+++ b/knife/spec/data/cookbooks/angrybash/recipes/default.rb
@@ -0,0 +1,8 @@
+bash "go off the rails" do
+ code <<-END
+ for i in localhost 127.0.0.1 #{Socket.gethostname()}
+ do
+ echo "grant all on *.* to root@'$i' identified by 'a_password'; flush privileges;" | mysql -u root -h 127.0.0.1
+ done
+ END
+end
diff --git a/knife/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl b/knife/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl
new file mode 100644
index 0000000000..6cce6229c4
--- /dev/null
+++ b/knife/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl
@@ -0,0 +1,2 @@
+# apache2_module_conf_generate.pl
+# this is just here for show.
diff --git a/knife/spec/data/cookbooks/apache2/metadata.json b/knife/spec/data/cookbooks/apache2/metadata.json
new file mode 100644
index 0000000000..18f5e50bb3
--- /dev/null
+++ b/knife/spec/data/cookbooks/apache2/metadata.json
@@ -0,0 +1,33 @@
+{
+ "name": "apache2",
+ "description": "",
+ "long_description": "",
+ "maintainer": "",
+ "maintainer_email": "",
+ "license": "All rights reserved",
+ "platforms": {
+
+ },
+ "dependencies": {
+
+ },
+ "providing": {
+
+ },
+ "recipes": {
+
+ },
+ "version": "0.0.1",
+ "source_url": "",
+ "issues_url": "",
+ "privacy": false,
+ "chef_versions": [
+
+ ],
+ "ohai_versions": [
+
+ ],
+ "gems": [
+
+ ]
+}
diff --git a/knife/spec/data/cookbooks/apache2/metadata.rb b/knife/spec/data/cookbooks/apache2/metadata.rb
new file mode 100644
index 0000000000..1273d20d79
--- /dev/null
+++ b/knife/spec/data/cookbooks/apache2/metadata.rb
@@ -0,0 +1,2 @@
+name "apache2"
+version "0.0.1"
diff --git a/knife/spec/data/cookbooks/apache2/recipes/default.rb b/knife/spec/data/cookbooks/apache2/recipes/default.rb
new file mode 100644
index 0000000000..c2fa53be32
--- /dev/null
+++ b/knife/spec/data/cookbooks/apache2/recipes/default.rb
@@ -0,0 +1,3 @@
+#
+# Nothing ot see here
+# \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/borken/metadata.rb b/knife/spec/data/cookbooks/borken/metadata.rb
new file mode 100644
index 0000000000..58700b2d8e
--- /dev/null
+++ b/knife/spec/data/cookbooks/borken/metadata.rb
@@ -0,0 +1,2 @@
+name "borken"
+version "1.0.0"
diff --git a/knife/spec/data/cookbooks/borken/recipes/default.rb b/knife/spec/data/cookbooks/borken/recipes/default.rb
new file mode 100644
index 0000000000..caf40b3974
--- /dev/null
+++ b/knife/spec/data/cookbooks/borken/recipes/default.rb
@@ -0,0 +1,2 @@
+a cat walked on the keyboard one day...
+(*&(*&(*&(*&(*^%$%^%#^^&(*)(*{}}}}}}}}+++++===)))))) \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/borken/templates/default/borken.erb b/knife/spec/data/cookbooks/borken/templates/default/borken.erb
new file mode 100644
index 0000000000..cbb32c1cd7
--- /dev/null
+++ b/knife/spec/data/cookbooks/borken/templates/default/borken.erb
@@ -0,0 +1,2 @@
+a cat walked on the keyboard one day...
+<%= (*&)(*^^^^*******++_+_--- }}}}]]]end)%> \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/chefignore b/knife/spec/data/cookbooks/chefignore
new file mode 100644
index 0000000000..84b4f1e99f
--- /dev/null
+++ b/knife/spec/data/cookbooks/chefignore
@@ -0,0 +1,8 @@
+#
+# The ignore file allows you to skip files in cookbooks with the same name that appear
+# later in the search path.
+#
+
+recipes/ignoreme.rb
+ # comments can be indented
+ignored
diff --git a/knife/spec/data/cookbooks/ignorken/files/default/not_me.rb b/knife/spec/data/cookbooks/ignorken/files/default/not_me.rb
new file mode 100644
index 0000000000..8063e32a95
--- /dev/null
+++ b/knife/spec/data/cookbooks/ignorken/files/default/not_me.rb
@@ -0,0 +1,2 @@
+a cat walked on the keyboard one day...
+(*&(*&(*&(*&(*^%$%^%#^^&(*)(*{}}}}}}}}+++++===))))))
diff --git a/knife/spec/data/cookbooks/ignorken/metadata.rb b/knife/spec/data/cookbooks/ignorken/metadata.rb
new file mode 100644
index 0000000000..f91d92de32
--- /dev/null
+++ b/knife/spec/data/cookbooks/ignorken/metadata.rb
@@ -0,0 +1,2 @@
+name "ignorken"
+version "1.0.0"
diff --git a/knife/spec/data/cookbooks/ignorken/recipes/default.rb b/knife/spec/data/cookbooks/ignorken/recipes/default.rb
new file mode 100644
index 0000000000..0f3b3a5d8d
--- /dev/null
+++ b/knife/spec/data/cookbooks/ignorken/recipes/default.rb
@@ -0,0 +1 @@
+# This is fine! \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/ignorken/recipes/ignoreme.rb b/knife/spec/data/cookbooks/ignorken/recipes/ignoreme.rb
new file mode 100644
index 0000000000..caf40b3974
--- /dev/null
+++ b/knife/spec/data/cookbooks/ignorken/recipes/ignoreme.rb
@@ -0,0 +1,2 @@
+a cat walked on the keyboard one day...
+(*&(*&(*&(*&(*^%$%^%#^^&(*)(*{}}}}}}}}+++++===)))))) \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb b/knife/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb
new file mode 100644
index 0000000000..8063e32a95
--- /dev/null
+++ b/knife/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb
@@ -0,0 +1,2 @@
+a cat walked on the keyboard one day...
+(*&(*&(*&(*&(*^%$%^%#^^&(*)(*{}}}}}}}}+++++===))))))
diff --git a/knife/spec/data/cookbooks/irssi/files/default/irssi.response b/knife/spec/data/cookbooks/irssi/files/default/irssi.response
new file mode 100644
index 0000000000..6b67a12758
--- /dev/null
+++ b/knife/spec/data/cookbooks/irssi/files/default/irssi.response
@@ -0,0 +1,2 @@
+# Hi, I'm pretending to be the preseed file for installing the irssi on debian
+# or Ubuntu
diff --git a/knife/spec/data/cookbooks/java/files/default/java.response b/knife/spec/data/cookbooks/java/files/default/java.response
new file mode 100644
index 0000000000..eb4aa3c124
--- /dev/null
+++ b/knife/spec/data/cookbooks/java/files/default/java.response
@@ -0,0 +1,2 @@
+# Hi, I'm pretending to be the preseed file for installing the Sun JDK on debian
+# or Ubuntu \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/java/metadata.json b/knife/spec/data/cookbooks/java/metadata.json
new file mode 100644
index 0000000000..9d46842f3c
--- /dev/null
+++ b/knife/spec/data/cookbooks/java/metadata.json
@@ -0,0 +1,33 @@
+{
+ "name": "java",
+ "description": "",
+ "long_description": "",
+ "maintainer": "",
+ "maintainer_email": "",
+ "license": "All rights reserved",
+ "platforms": {
+
+ },
+ "dependencies": {
+
+ },
+ "providing": {
+
+ },
+ "recipes": {
+
+ },
+ "version": "0.0.1",
+ "source_url": "",
+ "issues_url": "",
+ "privacy": false,
+ "chef_versions": [
+
+ ],
+ "ohai_versions": [
+
+ ],
+ "gems": [
+
+ ]
+}
diff --git a/knife/spec/data/cookbooks/java/metadata.rb b/knife/spec/data/cookbooks/java/metadata.rb
new file mode 100644
index 0000000000..7c5585304c
--- /dev/null
+++ b/knife/spec/data/cookbooks/java/metadata.rb
@@ -0,0 +1,2 @@
+name "java"
+version "0.0.1"
diff --git a/knife/spec/data/cookbooks/name-mismatch-versionnumber/README.md b/knife/spec/data/cookbooks/name-mismatch-versionnumber/README.md
new file mode 100644
index 0000000000..a61dc9a390
--- /dev/null
+++ b/knife/spec/data/cookbooks/name-mismatch-versionnumber/README.md
@@ -0,0 +1,4 @@
+# name-mismatch
+
+TODO: Enter the cookbook description here.
+
diff --git a/knife/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb b/knife/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb
new file mode 100644
index 0000000000..81775bdcc8
--- /dev/null
+++ b/knife/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb
@@ -0,0 +1,8 @@
+name 'name-mismatch'
+maintainer ''
+maintainer_email ''
+license ''
+description 'Installs/Configures name-mismatch'
+long_description 'Installs/Configures name-mismatch'
+version '0.1.0'
+
diff --git a/knife/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb b/knife/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb
new file mode 100644
index 0000000000..0bb34e78e1
--- /dev/null
+++ b/knife/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb
@@ -0,0 +1,8 @@
+#
+# Cookbook Name:: name-mismatch
+# Recipe:: default
+#
+# Copyright 2014-2016,
+#
+#
+#
diff --git a/knife/spec/data/cookbooks/openldap/.root_dotfile b/knife/spec/data/cookbooks/openldap/.root_dotfile
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/.root_dotfile
diff --git a/knife/spec/data/cookbooks/openldap/attributes/default.rb b/knife/spec/data/cookbooks/openldap/attributes/default.rb
new file mode 100644
index 0000000000..d0756f17e3
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/attributes/default.rb
@@ -0,0 +1,16 @@
+chef_env ||= nil
+case chef_env
+when "prod"
+ default[:ldap_server] = "ops1prod"
+ default[:ldap_basedn] = "dc=hjksolutions,dc=com"
+ default[:ldap_replication_password] = "yes"
+when "corp"
+ default[:ldap_server] = "ops1prod"
+ default[:ldap_basedn] = "dc=hjksolutions,dc=com"
+ default[:ldap_replication_password] = "yougotit"
+else
+
+ default[:ldap_server] = "ops1prod"
+ default[:ldap_basedn] = "dc=hjksolutions,dc=com"
+ default[:ldap_replication_password] = "forsure"
+end
diff --git a/knife/spec/data/cookbooks/openldap/attributes/smokey.rb b/knife/spec/data/cookbooks/openldap/attributes/smokey.rb
new file mode 100644
index 0000000000..4489c6a7ac
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/attributes/smokey.rb
@@ -0,0 +1 @@
+default[:smokey] = "robinson"
diff --git a/knife/spec/data/cookbooks/openldap/definitions/client.rb b/knife/spec/data/cookbooks/openldap/definitions/client.rb
new file mode 100644
index 0000000000..ac81831d11
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/definitions/client.rb
@@ -0,0 +1,5 @@
+define :openldap_client, :mothra => "a big monster" do
+ cat "#{params[:name]}" do
+ pretty_kitty true
+ end
+end
diff --git a/knife/spec/data/cookbooks/openldap/definitions/server.rb b/knife/spec/data/cookbooks/openldap/definitions/server.rb
new file mode 100644
index 0000000000..2df437aa84
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/definitions/server.rb
@@ -0,0 +1,5 @@
+define :openldap_server, :mothra => "a big monster" do
+ cat "#{params[:name]}" do
+ pretty_kitty true
+ end
+end
diff --git a/knife/spec/data/cookbooks/openldap/files/default/.dotfile b/knife/spec/data/cookbooks/openldap/files/default/.dotfile
new file mode 100644
index 0000000000..35ae928f91
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/files/default/.dotfile
@@ -0,0 +1 @@
+I am here to test .dotfiles work in file directories.
diff --git a/knife/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa b/knife/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa
new file mode 100644
index 0000000000..20a3ea410a
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa
@@ -0,0 +1 @@
+FAKE KEY \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir b/knife/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir
new file mode 100644
index 0000000000..f44a956c15
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir
@@ -0,0 +1 @@
+this is a dotfile in a dotdir
diff --git a/knife/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb b/knife/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb
new file mode 100644
index 0000000000..fc68ce83a1
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb
@@ -0,0 +1,2 @@
+# This file is not a chef template despite being and erb.
+# It should not be included in a cookbook syntax check
diff --git a/knife/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt b/knife/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt
new file mode 100644
index 0000000000..7632730912
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt
@@ -0,0 +1,3 @@
+# remote directory
+# file specificity: default
+# relpath: remotedir/remote_dir_file1.txt \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt b/knife/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt
new file mode 100644
index 0000000000..fab0433922
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt
@@ -0,0 +1,3 @@
+# remote directory
+# file specificity: default
+# relpath: remotedir/remote_dir_file2.txt \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile b/knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile
new file mode 100644
index 0000000000..9a2b2a4b5f
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile
@@ -0,0 +1 @@
+this is a file with a name beginning with a . dot
diff --git a/knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt b/knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt
new file mode 100644
index 0000000000..611294cb81
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt
@@ -0,0 +1,3 @@
+# remote directory
+# file specificity: default
+# relpath: remotedir/remotesubdir/remote_dir_file1.txt \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt b/knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt
new file mode 100644
index 0000000000..e0396542a4
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt
@@ -0,0 +1,3 @@
+# remote directory
+# file specificity: default
+# relpath: remotedir/remotesubdir/remote_dir_file2.txt \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt b/knife/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt
new file mode 100644
index 0000000000..bc47369aad
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt
@@ -0,0 +1,3 @@
+# remote directory
+# file specificity: default
+# relpath: remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt
diff --git a/knife/spec/data/cookbooks/openldap/libraries/openldap.rb b/knife/spec/data/cookbooks/openldap/libraries/openldap.rb
new file mode 100644
index 0000000000..0b9389c688
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/libraries/openldap.rb
@@ -0,0 +1,4 @@
+require_relative './openldap/version'
+
+class OpenLDAP
+end
diff --git a/knife/spec/data/cookbooks/openldap/libraries/openldap/version.rb b/knife/spec/data/cookbooks/openldap/libraries/openldap/version.rb
new file mode 100644
index 0000000000..4bff12b01c
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/libraries/openldap/version.rb
@@ -0,0 +1,3 @@
+class OpenLDAP
+ VERSION = '8.9.10'
+end
diff --git a/knife/spec/data/cookbooks/openldap/metadata.rb b/knife/spec/data/cookbooks/openldap/metadata.rb
new file mode 100644
index 0000000000..fc132946f2
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/metadata.rb
@@ -0,0 +1,8 @@
+name "openldap"
+maintainer "Chef Software, Inc."
+maintainer_email "cookbooks@chef.io"
+license "Apache 2.0"
+description "Installs and configures all aspects of openldap using Debian style symlinks with helper definitions"
+long_description "The long description for the openldap cookbook from metadata.rb"
+version "8.9.10"
+recipe "openldap", "Main Open LDAP configuration"
diff --git a/knife/spec/data/cookbooks/openldap/recipes/default.rb b/knife/spec/data/cookbooks/openldap/recipes/default.rb
new file mode 100644
index 0000000000..ba5c9d1507
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/recipes/default.rb
@@ -0,0 +1,4 @@
+
+cat "blanket" do
+ pretty_kitty true
+end
diff --git a/knife/spec/data/cookbooks/openldap/recipes/gigantor.rb b/knife/spec/data/cookbooks/openldap/recipes/gigantor.rb
new file mode 100644
index 0000000000..b450eca7cd
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/recipes/gigantor.rb
@@ -0,0 +1,3 @@
+cat "blanket" do
+ pretty_kitty false
+end
diff --git a/knife/spec/data/cookbooks/openldap/recipes/one.rb b/knife/spec/data/cookbooks/openldap/recipes/one.rb
new file mode 100644
index 0000000000..d2d3cfd409
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/recipes/one.rb
@@ -0,0 +1,15 @@
+##
+# Nodes should have a unique name
+##
+name "test.example.com-default"
+
+##
+# Nodes can set arbitrary arguments
+##
+sunshine "in"
+something "else"
+
+##
+# Nodes should have recipes
+##
+recipes "operations-master", "operations-monitoring"
diff --git a/knife/spec/data/cookbooks/openldap/recipes/return.rb b/knife/spec/data/cookbooks/openldap/recipes/return.rb
new file mode 100644
index 0000000000..79bfb5e441
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/recipes/return.rb
@@ -0,0 +1,2 @@
+# CHEF-5199 regression test.
+return nil
diff --git a/knife/spec/data/cookbooks/openldap/spec/spec_helper.rb b/knife/spec/data/cookbooks/openldap/spec/spec_helper.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/spec/spec_helper.rb
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb b/knife/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb
new file mode 100644
index 0000000000..727db12387
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb
@@ -0,0 +1,4 @@
+Template rendering libraries
+should support
+different line endings
+
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/helper_test.erb b/knife/spec/data/cookbooks/openldap/templates/default/helper_test.erb
new file mode 100644
index 0000000000..92e6fe0427
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/helper_test.erb
@@ -0,0 +1 @@
+<%= helper_method %>
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/helpers.erb b/knife/spec/data/cookbooks/openldap/templates/default/helpers.erb
new file mode 100644
index 0000000000..b973a5287c
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/helpers.erb
@@ -0,0 +1,14 @@
+<%= @cookbook_name %>
+<%= @recipe_name %>
+<%= @recipe_line_string %>
+<%= @recipe_path %>
+<%= @recipe_line %>
+<%= @template_name %>
+<%= @template_path %>
+<%= cookbook_name %>
+<%= recipe_name %>
+<%= recipe_line_string %>
+<%= recipe_path %>
+<%= recipe_line %>
+<%= template_name %>
+<%= template_path %>
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb b/knife/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb
new file mode 100644
index 0000000000..f94b6b5979
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb
@@ -0,0 +1 @@
+<%= render("helper_test.erb").strip %>
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb b/knife/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb
new file mode 100644
index 0000000000..2d356ec21d
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb
@@ -0,0 +1 @@
+before <%= render 'nested_partial.erb', :variables => { :hello => @test } %> after
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/nested_partial.erb b/knife/spec/data/cookbooks/openldap/templates/default/nested_partial.erb
new file mode 100644
index 0000000000..415646ca31
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/nested_partial.erb
@@ -0,0 +1 @@
+{<%= @hello %>}
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb b/knife/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb
new file mode 100644
index 0000000000..e83c03b01a
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb
@@ -0,0 +1,4 @@
+Template rendering libraries
+should support
+different line endings
+
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb b/knife/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb
new file mode 100644
index 0000000000..5ebee33806
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb
@@ -0,0 +1 @@
+super secret is <%= @secret.first["key"] -%>
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb b/knife/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb
new file mode 100644
index 0000000000..af82f1d96c
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb
@@ -0,0 +1 @@
+slappiness is <%= node[:slappiness] -%> \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb b/knife/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb
new file mode 100644
index 0000000000..e0041c9f99
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb
@@ -0,0 +1 @@
+super secret is <%= @secret -%>
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb b/knife/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb
new file mode 100644
index 0000000000..fa25999b6a
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb
@@ -0,0 +1,4 @@
+Template rendering libraries
+should support
+different line endings
+
diff --git a/knife/spec/data/cookbooks/openldap/templates/default/test.erb b/knife/spec/data/cookbooks/openldap/templates/default/test.erb
new file mode 100644
index 0000000000..f39fa7da89
--- /dev/null
+++ b/knife/spec/data/cookbooks/openldap/templates/default/test.erb
@@ -0,0 +1 @@
+We could be diving for pearls!
diff --git a/knife/spec/data/cookbooks/preseed/files/default/preseed-file.seed b/knife/spec/data/cookbooks/preseed/files/default/preseed-file.seed
new file mode 100644
index 0000000000..164da3495d
--- /dev/null
+++ b/knife/spec/data/cookbooks/preseed/files/default/preseed-file.seed
@@ -0,0 +1 @@
+chef-integration-test chef-integration-test/sample-var string "hello world"
diff --git a/knife/spec/data/cookbooks/preseed/files/default/preseed-template.seed b/knife/spec/data/cookbooks/preseed/files/default/preseed-template.seed
new file mode 100644
index 0000000000..011bc40f1b
--- /dev/null
+++ b/knife/spec/data/cookbooks/preseed/files/default/preseed-template.seed
@@ -0,0 +1,4 @@
+# This file should never be executed by the preseeding tests
+# This is here to verify that templates are preferred over cookbook_files when
+# preseeding packages.
+chef-integration-test chef-integration-test/sample-var string "WRONG-cookbook file used instead of template!"
diff --git a/knife/spec/data/cookbooks/preseed/metadata.rb b/knife/spec/data/cookbooks/preseed/metadata.rb
new file mode 100644
index 0000000000..a48deec08b
--- /dev/null
+++ b/knife/spec/data/cookbooks/preseed/metadata.rb
@@ -0,0 +1,2 @@
+name "preseed"
+version "1.0.0"
diff --git a/knife/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed b/knife/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed
new file mode 100644
index 0000000000..0df0015f05
--- /dev/null
+++ b/knife/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed
@@ -0,0 +1 @@
+chef-integration-test chef-integration-test/sample-var string "<%= @template_variable -%>"
diff --git a/knife/spec/data/cookbooks/preseed/templates/default/preseed-template.seed b/knife/spec/data/cookbooks/preseed/templates/default/preseed-template.seed
new file mode 100644
index 0000000000..6229ac83f5
--- /dev/null
+++ b/knife/spec/data/cookbooks/preseed/templates/default/preseed-template.seed
@@ -0,0 +1 @@
+chef-integration-test chef-integration-test/sample-var string "<%= node[:preseed_value] -%>"
diff --git a/knife/spec/data/cookbooks/starter/chefignore b/knife/spec/data/cookbooks/starter/chefignore
new file mode 100644
index 0000000000..b9d6c768c2
--- /dev/null
+++ b/knife/spec/data/cookbooks/starter/chefignore
@@ -0,0 +1,8 @@
+#
+# The ignore file allows you to skip files in cookbooks with the same name that appear
+# later in the search path.
+#
+
+recipes/default.rb
+ # comments can be indented
+ignored
diff --git a/knife/spec/data/cookbooks/starter/files/sample.txt b/knife/spec/data/cookbooks/starter/files/sample.txt
new file mode 100644
index 0000000000..e635a0f018
--- /dev/null
+++ b/knife/spec/data/cookbooks/starter/files/sample.txt
@@ -0,0 +1 @@
+This is a Chef cookbook file. It is used to copy content verbatim on to a server. \ No newline at end of file
diff --git a/knife/spec/data/cookbooks/starter/metadata.rb b/knife/spec/data/cookbooks/starter/metadata.rb
new file mode 100644
index 0000000000..fbd288e9c4
--- /dev/null
+++ b/knife/spec/data/cookbooks/starter/metadata.rb
@@ -0,0 +1,2 @@
+name "starter"
+version "1.0.0"
diff --git a/knife/spec/data/cookbooks/starter/recipes/default.rb b/knife/spec/data/cookbooks/starter/recipes/default.rb
new file mode 100644
index 0000000000..4b5f712879
--- /dev/null
+++ b/knife/spec/data/cookbooks/starter/recipes/default.rb
@@ -0,0 +1,4 @@
+# This is a Chef recipe file. It can be used to specify resources which will
+# apply configuration to a server.
+
+# For more information, see the documentation: https://docs.chef.io/recipes/
diff --git a/knife/spec/data/cookbooks/supports-platform-constraints/metadata.rb b/knife/spec/data/cookbooks/supports-platform-constraints/metadata.rb
new file mode 100644
index 0000000000..3620249d5f
--- /dev/null
+++ b/knife/spec/data/cookbooks/supports-platform-constraints/metadata.rb
@@ -0,0 +1,5 @@
+name 'supports-platform-constraints'
+version '0.1.0'
+
+supports 'centos', '>= 6'
+supports 'freebsd', '> 10.1-fake-p12'
diff --git a/knife/spec/data/cookbooks/wget/files/default/wget.response b/knife/spec/data/cookbooks/wget/files/default/wget.response
new file mode 100644
index 0000000000..b5f22f4d10
--- /dev/null
+++ b/knife/spec/data/cookbooks/wget/files/default/wget.response
@@ -0,0 +1,2 @@
+# Hi, I'm pretending to be the preseed file for installing the wget on debian
+# or Ubuntu
diff --git a/knife/spec/data/definitions/test.rb b/knife/spec/data/definitions/test.rb
new file mode 100644
index 0000000000..b0d0effc27
--- /dev/null
+++ b/knife/spec/data/definitions/test.rb
@@ -0,0 +1,5 @@
+define :rico_suave, :rich => "smooth" do
+ zen_master "test" do
+ something "#{params[:rich]}"
+ end
+end \ No newline at end of file
diff --git a/knife/spec/data/dsc_lcm.pfx b/knife/spec/data/dsc_lcm.pfx
new file mode 100644
index 0000000000..3912ed3753
--- /dev/null
+++ b/knife/spec/data/dsc_lcm.pfx
Binary files differ
diff --git a/knife/spec/data/environment-config.rb b/knife/spec/data/environment-config.rb
new file mode 100644
index 0000000000..a157ecf0ea
--- /dev/null
+++ b/knife/spec/data/environment-config.rb
@@ -0,0 +1,5 @@
+#
+# Sample Chef Config File
+#
+
+environment "production" \ No newline at end of file
diff --git a/knife/spec/data/file-providers-method-snapshot-chef-11-4.json b/knife/spec/data/file-providers-method-snapshot-chef-11-4.json
new file mode 100644
index 0000000000..f6695aacd6
--- /dev/null
+++ b/knife/spec/data/file-providers-method-snapshot-chef-11-4.json
@@ -0,0 +1,127 @@
+{
+ "Chef::Provider::CookbookFile": [
+ "action_create",
+ "file_cache_location",
+ "resource_cookbook",
+ "backup_new_resource",
+ "content_stale?",
+ "diff_current_from_content",
+ "is_binary?",
+ "diff_current",
+ "setup_acl",
+ "compare_content",
+ "set_content",
+ "update_new_file_state",
+ "set_all_access_controls",
+ "action_create_if_missing",
+ "action_delete",
+ "action_touch",
+ "backup",
+ "deploy_tempfile",
+ "shell_out",
+ "shell_out!",
+ "run_command_compatible_options",
+ "checksum",
+ "access_controls",
+ "enforce_ownership_and_permissions"
+ ],
+ "Chef::Provider::RemoteFile": [
+ "action_create",
+ "current_resource_matches_target_checksum?",
+ "matches_current_checksum?",
+ "backup_new_resource",
+ "source_file",
+ "http_client_opts",
+ "diff_current_from_content",
+ "is_binary?",
+ "diff_current",
+ "setup_acl",
+ "compare_content",
+ "set_content",
+ "update_new_file_state",
+ "set_all_access_controls",
+ "action_create_if_missing",
+ "action_delete",
+ "action_touch",
+ "backup",
+ "deploy_tempfile",
+ "shell_out",
+ "shell_out!",
+ "run_command_compatible_options",
+ "checksum",
+ "access_controls",
+ "enforce_ownership_and_permissions"
+ ],
+ "Chef::Provider::Template": [
+ "action_create",
+ "template_finder",
+ "template_location",
+ "resource_cookbook",
+ "rendered",
+ "content_matches?",
+ "render_template",
+ "diff_current_from_content",
+ "is_binary?",
+ "diff_current",
+ "setup_acl",
+ "compare_content",
+ "set_content",
+ "update_new_file_state",
+ "set_all_access_controls",
+ "action_create_if_missing",
+ "action_delete",
+ "action_touch",
+ "backup",
+ "deploy_tempfile",
+ "shell_out",
+ "shell_out!",
+ "run_command_compatible_options",
+ "checksum",
+ "access_controls",
+ "enforce_ownership_and_permissions"
+ ],
+ "Chef::Provider::Directory": [
+ "action_create",
+ "action_delete",
+ "diff_current_from_content",
+ "is_binary?",
+ "diff_current",
+ "setup_acl",
+ "compare_content",
+ "set_content",
+ "update_new_file_state",
+ "set_all_access_controls",
+ "action_create_if_missing",
+ "action_touch",
+ "backup",
+ "deploy_tempfile",
+ "shell_out",
+ "shell_out!",
+ "run_command_compatible_options",
+ "checksum",
+ "access_controls",
+ "enforce_ownership_and_permissions"
+ ],
+ "Chef::Provider::File": [
+ "diff_current_from_content",
+ "is_binary?",
+ "diff_current",
+ "setup_acl",
+ "compare_content",
+ "set_content",
+ "update_new_file_state",
+ "action_create",
+ "set_all_access_controls",
+ "action_create_if_missing",
+ "action_delete",
+ "action_touch",
+ "backup",
+ "deploy_tempfile",
+ "shell_out",
+ "shell_out!",
+ "run_command_compatible_options",
+ "checksum",
+ "access_controls",
+ "enforce_ownership_and_permissions"
+ ]
+}
diff --git a/knife/spec/data/fileedit/blank b/knife/spec/data/fileedit/blank
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/fileedit/blank
diff --git a/knife/spec/data/fileedit/hosts b/knife/spec/data/fileedit/hosts
new file mode 100644
index 0000000000..6fbdc0f59d
--- /dev/null
+++ b/knife/spec/data/fileedit/hosts
@@ -0,0 +1,4 @@
+127.0.0.1 localhost
+255.255.255.255 broadcasthost
+::1 localhost
+fe80::1%lo0 localhost
diff --git a/knife/spec/data/gems/chef-integration-test-0.1.0.gem b/knife/spec/data/gems/chef-integration-test-0.1.0.gem
new file mode 100644
index 0000000000..bcf1c77fe2
--- /dev/null
+++ b/knife/spec/data/gems/chef-integration-test-0.1.0.gem
Binary files differ
diff --git a/knife/spec/data/git_bundles/example-repo.gitbundle b/knife/spec/data/git_bundles/example-repo.gitbundle
new file mode 100644
index 0000000000..de08296dc3
--- /dev/null
+++ b/knife/spec/data/git_bundles/example-repo.gitbundle
Binary files differ
diff --git a/knife/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle b/knife/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle
new file mode 100644
index 0000000000..24e36f7eeb
--- /dev/null
+++ b/knife/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle
Binary files differ
diff --git a/knife/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle b/knife/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle
new file mode 100644
index 0000000000..0a96fbb24f
--- /dev/null
+++ b/knife/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle
Binary files differ
diff --git a/knife/spec/data/git_bundles/sinatra-test-app.gitbundle b/knife/spec/data/git_bundles/sinatra-test-app.gitbundle
new file mode 100644
index 0000000000..43c54eae5c
--- /dev/null
+++ b/knife/spec/data/git_bundles/sinatra-test-app.gitbundle
Binary files differ
diff --git a/knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md b/knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md
new file mode 100644
index 0000000000..3ac2a4f90c
--- /dev/null
+++ b/knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md
@@ -0,0 +1,4 @@
+# incomplete-metadata
+
+TODO: Enter the cookbook description here.
+
diff --git a/knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb b/knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb
new file mode 100644
index 0000000000..50284be3dd
--- /dev/null
+++ b/knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb
@@ -0,0 +1,13 @@
+# ## INCOMPLETE METADATA ##
+# This cookbook is invalid b/c it does not set the `name' of the cookbook.
+
+# Commented out for illustrative purposes
+# name 'incomplete-metadata'
+
+maintainer ''
+maintainer_email ''
+license ''
+description 'Installs/Configures incomplete-metadata'
+long_description 'Installs/Configures incomplete-metadata'
+version '0.1.0'
+
diff --git a/knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb b/knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb
new file mode 100644
index 0000000000..0d8cca1bda
--- /dev/null
+++ b/knife/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb
@@ -0,0 +1,8 @@
+#
+# Cookbook Name:: incomplete-metadata
+# Recipe:: default
+#
+# Copyright 2014-2016,
+#
+#
+#
diff --git a/knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md b/knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md
new file mode 100644
index 0000000000..a41867f17c
--- /dev/null
+++ b/knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md
@@ -0,0 +1,4 @@
+# invalid-metadata
+
+TODO: Enter the cookbook description here.
+
diff --git a/knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb b/knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb
new file mode 100644
index 0000000000..1130ee40e8
--- /dev/null
+++ b/knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb
@@ -0,0 +1,9 @@
+name 'invalid-metadata'
+maintainer ''
+maintainer_email ''
+license ''
+description 'Installs/Configures invalid-metadata'
+long_description 'Installs/Configures invalid-metadata'
+version '0.1.0'
+
+raise "THIS METADATA HAS A BUG"
diff --git a/knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb b/knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb
new file mode 100644
index 0000000000..33ec1144fe
--- /dev/null
+++ b/knife/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb
@@ -0,0 +1,8 @@
+#
+# Cookbook Name:: invalid-metadata
+# Recipe:: default
+#
+# Copyright 2014-2016,
+#
+#
+#
diff --git a/knife/spec/data/kitchen/chefignore b/knife/spec/data/kitchen/chefignore
new file mode 100644
index 0000000000..a90dc15ebe
--- /dev/null
+++ b/knife/spec/data/kitchen/chefignore
@@ -0,0 +1,6 @@
+#
+# The ignore file allows you to skip files in cookbooks with the same name that appear
+# later in the search path.
+#
+
+recipes/ignoreme\.rb
diff --git a/knife/spec/data/kitchen/openldap/attributes/default.rb b/knife/spec/data/kitchen/openldap/attributes/default.rb
new file mode 100644
index 0000000000..d208959475
--- /dev/null
+++ b/knife/spec/data/kitchen/openldap/attributes/default.rb
@@ -0,0 +1,3 @@
+#
+# Nothing to see here, move along
+#
diff --git a/knife/spec/data/kitchen/openldap/attributes/robinson.rb b/knife/spec/data/kitchen/openldap/attributes/robinson.rb
new file mode 100644
index 0000000000..9d6b44d464
--- /dev/null
+++ b/knife/spec/data/kitchen/openldap/attributes/robinson.rb
@@ -0,0 +1,3 @@
+#
+# Smokey lives here
+# \ No newline at end of file
diff --git a/knife/spec/data/kitchen/openldap/definitions/client.rb b/knife/spec/data/kitchen/openldap/definitions/client.rb
new file mode 100644
index 0000000000..d4c2263b54
--- /dev/null
+++ b/knife/spec/data/kitchen/openldap/definitions/client.rb
@@ -0,0 +1,3 @@
+#
+# A sad client
+#
diff --git a/knife/spec/data/kitchen/openldap/definitions/drewbarrymore.rb b/knife/spec/data/kitchen/openldap/definitions/drewbarrymore.rb
new file mode 100644
index 0000000000..510f0c35da
--- /dev/null
+++ b/knife/spec/data/kitchen/openldap/definitions/drewbarrymore.rb
@@ -0,0 +1,3 @@
+#
+# Was in people magazine this month...
+# \ No newline at end of file
diff --git a/knife/spec/data/kitchen/openldap/recipes/gigantor.rb b/knife/spec/data/kitchen/openldap/recipes/gigantor.rb
new file mode 100644
index 0000000000..70a41960eb
--- /dev/null
+++ b/knife/spec/data/kitchen/openldap/recipes/gigantor.rb
@@ -0,0 +1,3 @@
+cat "blanket" do
+ pretty_kitty true
+end \ No newline at end of file
diff --git a/knife/spec/data/kitchen/openldap/recipes/ignoreme.rb b/knife/spec/data/kitchen/openldap/recipes/ignoreme.rb
new file mode 100644
index 0000000000..15095986c6
--- /dev/null
+++ b/knife/spec/data/kitchen/openldap/recipes/ignoreme.rb
@@ -0,0 +1,3 @@
+#
+# this file will never be seen
+# \ No newline at end of file
diff --git a/knife/spec/data/kitchen/openldap/recipes/woot.rb b/knife/spec/data/kitchen/openldap/recipes/woot.rb
new file mode 100644
index 0000000000..44893dae36
--- /dev/null
+++ b/knife/spec/data/kitchen/openldap/recipes/woot.rb
@@ -0,0 +1,3 @@
+#
+# Such a funny word..
+#
diff --git a/knife/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb b/knife/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb
diff --git a/knife/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb b/knife/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb
diff --git a/knife/spec/data/knife_subcommand/test_explicit_category.rb b/knife/spec/data/knife_subcommand/test_explicit_category.rb
new file mode 100644
index 0000000000..96d50691a1
--- /dev/null
+++ b/knife/spec/data/knife_subcommand/test_explicit_category.rb
@@ -0,0 +1,7 @@
+module KnifeSpecs
+ class TestExplicitCategory < Chef::Knife
+ # i.e., the cookbook site commands should be in the cookbook site
+ # category instead of cookbook (which is what would be assumed)
+ category "cookbook site"
+ end
+end \ No newline at end of file
diff --git a/knife/spec/data/knife_subcommand/test_name_mapping.rb b/knife/spec/data/knife_subcommand/test_name_mapping.rb
new file mode 100644
index 0000000000..25c49b0df0
--- /dev/null
+++ b/knife/spec/data/knife_subcommand/test_name_mapping.rb
@@ -0,0 +1,4 @@
+module KnifeSpecs
+ class TestNameMapping < Chef::Knife
+ end
+end
diff --git a/knife/spec/data/knife_subcommand/test_yourself.rb b/knife/spec/data/knife_subcommand/test_yourself.rb
new file mode 100644
index 0000000000..f18f565885
--- /dev/null
+++ b/knife/spec/data/knife_subcommand/test_yourself.rb
@@ -0,0 +1,21 @@
+module KnifeSpecs
+ class TestYourself < Chef::Knife
+
+ class << self
+ attr_reader :test_deps_loaded
+ end
+
+ deps do
+ @test_deps_loaded = true
+ end
+
+ option :scro, :short => '-s SCRO', :long => '--scro SCRO', :description => 'a configurable setting'
+
+ attr_reader :ran
+
+ def run
+ @ran = true
+ self # return self so tests can poke at me
+ end
+ end
+end
diff --git a/knife/spec/data/lwrp/providers/buck_passer.rb b/knife/spec/data/lwrp/providers/buck_passer.rb
new file mode 100644
index 0000000000..9d764277ce
--- /dev/null
+++ b/knife/spec/data/lwrp/providers/buck_passer.rb
@@ -0,0 +1,28 @@
+provides :buck_passer
+
+def without_deprecation_warnings(&block)
+ old_treat_deprecation_warnings_as_errors = Chef::Config[:treat_deprecation_warnings_as_errors]
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
+ begin
+ yield
+ ensure
+ Chef::Config[:treat_deprecation_warnings_as_errors] = old_treat_deprecation_warnings_as_errors
+ end
+end
+
+def action_pass_buck
+ lwrp_foo :prepared_thumbs do
+ action :prepare_thumbs
+ # We know there will be a deprecation error here; head it off
+ without_deprecation_warnings do
+ provider :lwrp_thumb_twiddler
+ end
+ end
+ lwrp_foo :twiddled_thumbs do
+ action :twiddle_thumbs
+ # We know there will be a deprecation error here; head it off
+ without_deprecation_warnings do
+ provider :lwrp_thumb_twiddler
+ end
+ end
+end
diff --git a/knife/spec/data/lwrp/providers/buck_passer_2.rb b/knife/spec/data/lwrp/providers/buck_passer_2.rb
new file mode 100644
index 0000000000..0b8f49f7bd
--- /dev/null
+++ b/knife/spec/data/lwrp/providers/buck_passer_2.rb
@@ -0,0 +1,26 @@
+def without_deprecation_warnings(&block)
+ old_treat_deprecation_warnings_as_errors = Chef::Config[:treat_deprecation_warnings_as_errors]
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
+ begin
+ yield
+ ensure
+ Chef::Config[:treat_deprecation_warnings_as_errors] = old_treat_deprecation_warnings_as_errors
+ end
+end
+
+def action_pass_buck
+ lwrp_bar :prepared_eyes do
+ action :prepare_eyes
+ # We know there will be a deprecation error here; head it off
+ without_deprecation_warnings do
+ provider :lwrp_paint_drying_watcher
+ end
+ end
+ lwrp_bar :dried_paint_watched do
+ action :watch_paint_dry
+ # We know there will be a deprecation error here; head it off
+ without_deprecation_warnings do
+ provider :lwrp_paint_drying_watcher
+ end
+ end
+end
diff --git a/knife/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb b/knife/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb
new file mode 100644
index 0000000000..b86dc860d0
--- /dev/null
+++ b/knife/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb
@@ -0,0 +1,28 @@
+# This action tests that embedded Resources have access to the enclosing Provider's
+# lexical scope (as demonstrated by the call to new_resource) and that all parameters
+# are passed properly (as demonstrated by the call to generate_new_name).
+attr_reader :enclosed_resource
+
+def without_deprecation_warnings(&block)
+ old_treat_deprecation_warnings_as_errors = Chef::Config[:treat_deprecation_warnings_as_errors]
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
+ begin
+ yield
+ ensure
+ Chef::Config[:treat_deprecation_warnings_as_errors] = old_treat_deprecation_warnings_as_errors
+ end
+end
+
+def action_twiddle_thumbs
+ @enclosed_resource = lwrp_foo :foo do
+ monkey generate_new_name(new_resource.monkey){ 'the monkey' }
+ # We know there will be a deprecation error here; head it off
+ without_deprecation_warnings do
+ provider :lwrp_monkey_name_printer
+ end
+ end
+end
+
+def generate_new_name(str, &block)
+ "#{str}, #{block.call}"
+end
diff --git a/knife/spec/data/lwrp/providers/inline_compiler.rb b/knife/spec/data/lwrp/providers/inline_compiler.rb
new file mode 100644
index 0000000000..91a80b32af
--- /dev/null
+++ b/knife/spec/data/lwrp/providers/inline_compiler.rb
@@ -0,0 +1,24 @@
+
+action :test do
+
+ ruby_block "interior-ruby-block-1" do
+ block do
+ # doesn't need to do anything
+ end
+ notifies :run, "ruby_block[interior-ruby-block-2]", :immediately
+ end
+
+ ruby_block "interior-ruby-block-2" do
+ block do
+ $interior_ruby_block_2 = "executed"
+ end
+ action :nothing
+ end
+end
+
+action :no_updates do
+ ruby_block "no-action" do
+ block {}
+ action :nothing
+ end
+end
diff --git a/knife/spec/data/lwrp/providers/monkey_name_printer.rb b/knife/spec/data/lwrp/providers/monkey_name_printer.rb
new file mode 100644
index 0000000000..97ca66c65d
--- /dev/null
+++ b/knife/spec/data/lwrp/providers/monkey_name_printer.rb
@@ -0,0 +1,5 @@
+attr_reader :monkey_name
+
+action :twiddle_thumbs do
+ @monkey_name = "my monkey's name is '#{new_resource.monkey}'"
+end
diff --git a/knife/spec/data/lwrp/providers/paint_drying_watcher.rb b/knife/spec/data/lwrp/providers/paint_drying_watcher.rb
new file mode 100644
index 0000000000..04b4732dcc
--- /dev/null
+++ b/knife/spec/data/lwrp/providers/paint_drying_watcher.rb
@@ -0,0 +1,7 @@
+action :prepare_eyes do
+ "Prepared"
+end
+
+action :watch_paint_dry do
+ "This isn't very interesting"
+end
diff --git a/knife/spec/data/lwrp/providers/thumb_twiddler.rb b/knife/spec/data/lwrp/providers/thumb_twiddler.rb
new file mode 100644
index 0000000000..7f014615db
--- /dev/null
+++ b/knife/spec/data/lwrp/providers/thumb_twiddler.rb
@@ -0,0 +1,7 @@
+action :prepare_thumbs do
+ "Prepared"
+end
+
+action :twiddle_thumbs do
+ "Twiddle twiddle"
+end
diff --git a/knife/spec/data/lwrp/resources/bar.rb b/knife/spec/data/lwrp/resources/bar.rb
new file mode 100644
index 0000000000..d36575917d
--- /dev/null
+++ b/knife/spec/data/lwrp/resources/bar.rb
@@ -0,0 +1,4 @@
+unified_mode true
+
+provides :lwrp_bar # This makes sure that we cover the case of lwrps using provides
+actions :pass_buck, :prepare_eyes, :watch_paint_dry
diff --git a/knife/spec/data/lwrp/resources/buck_passer.rb b/knife/spec/data/lwrp/resources/buck_passer.rb
new file mode 100644
index 0000000000..6f542dc423
--- /dev/null
+++ b/knife/spec/data/lwrp/resources/buck_passer.rb
@@ -0,0 +1,6 @@
+unified_mode true
+
+provides :buck_passer
+
+default_action :pass_buck
+actions :pass_buck
diff --git a/knife/spec/data/lwrp/resources/buck_passer_2.rb b/knife/spec/data/lwrp/resources/buck_passer_2.rb
new file mode 100644
index 0000000000..c0ab7d7885
--- /dev/null
+++ b/knife/spec/data/lwrp/resources/buck_passer_2.rb
@@ -0,0 +1,4 @@
+unified_mode true
+
+default_action :pass_buck
+actions :pass_buck
diff --git a/knife/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb b/knife/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb
new file mode 100644
index 0000000000..faece8b582
--- /dev/null
+++ b/knife/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb
@@ -0,0 +1,4 @@
+unified_mode true
+
+default_action :twiddle_thumbs
+actions :twiddle_thumbs
diff --git a/knife/spec/data/lwrp/resources/foo.rb b/knife/spec/data/lwrp/resources/foo.rb
new file mode 100644
index 0000000000..d4d2155122
--- /dev/null
+++ b/knife/spec/data/lwrp/resources/foo.rb
@@ -0,0 +1,6 @@
+unified_mode true
+
+actions :prepare_thumbs, :twiddle_thumbs
+default_action :pass_buck
+
+attribute :monkey, :kind_of => String
diff --git a/knife/spec/data/lwrp/resources/inline_compiler.rb b/knife/spec/data/lwrp/resources/inline_compiler.rb
new file mode 100644
index 0000000000..0e63e4ce43
--- /dev/null
+++ b/knife/spec/data/lwrp/resources/inline_compiler.rb
@@ -0,0 +1,4 @@
+unified_mode true
+
+default_action :test
+actions :test, :no_updates
diff --git a/knife/spec/data/lwrp/resources/monkey_name_printer.rb b/knife/spec/data/lwrp/resources/monkey_name_printer.rb
new file mode 100644
index 0000000000..60c3203dca
--- /dev/null
+++ b/knife/spec/data/lwrp/resources/monkey_name_printer.rb
@@ -0,0 +1,6 @@
+unified_mode true
+
+property :monkey
+
+default_action :twiddle_thumbs
+actions :twiddle_thumbs
diff --git a/knife/spec/data/lwrp/resources/paint_drying_watcher.rb b/knife/spec/data/lwrp/resources/paint_drying_watcher.rb
new file mode 100644
index 0000000000..1bff7c5b50
--- /dev/null
+++ b/knife/spec/data/lwrp/resources/paint_drying_watcher.rb
@@ -0,0 +1,4 @@
+unified_mode true
+
+default_action :prepare_eyes
+actions :prepare_eyes, :watch_paint_dry
diff --git a/knife/spec/data/lwrp/resources/thumb_twiddler.rb b/knife/spec/data/lwrp/resources/thumb_twiddler.rb
new file mode 100644
index 0000000000..f4ba71cebc
--- /dev/null
+++ b/knife/spec/data/lwrp/resources/thumb_twiddler.rb
@@ -0,0 +1,4 @@
+unified_mode true
+
+default_action :prepare_thumbs
+actions :prepare_thumbs, :twiddle_thumbs
diff --git a/knife/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb b/knife/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb
new file mode 100644
index 0000000000..ef6b694cb2
--- /dev/null
+++ b/knife/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb
@@ -0,0 +1,3 @@
+unified_mode true
+
+attribute :penguin, :kind_of => String, :default => node[:penguin_name]
diff --git a/knife/spec/data/lwrp_const_scoping/resources/conflict.rb b/knife/spec/data/lwrp_const_scoping/resources/conflict.rb
new file mode 100644
index 0000000000..059460afc0
--- /dev/null
+++ b/knife/spec/data/lwrp_const_scoping/resources/conflict.rb
@@ -0,0 +1 @@
+unified_mode true
diff --git a/knife/spec/data/lwrp_override/providers/buck_passer.rb b/knife/spec/data/lwrp_override/providers/buck_passer.rb
new file mode 100644
index 0000000000..2061b391dc
--- /dev/null
+++ b/knife/spec/data/lwrp_override/providers/buck_passer.rb
@@ -0,0 +1,5 @@
+# Starting with Chef 12 reloading an LWRP shouldn't reload the file anymore
+
+action :buck_stops_here do
+ log "This should be overwritten by ../lwrp_override/buck_passer.rb"
+end
diff --git a/knife/spec/data/lwrp_override/resources/foo.rb b/knife/spec/data/lwrp_override/resources/foo.rb
new file mode 100644
index 0000000000..1d6be84e58
--- /dev/null
+++ b/knife/spec/data/lwrp_override/resources/foo.rb
@@ -0,0 +1,11 @@
+# Starting with Chef 12 reloading an LWRP shouldn't reload the file anymore
+unified_mode true
+
+actions :never_execute
+
+attribute :ever, :kind_of => String
+
+class ::Chef
+ def method_created_by_override_lwrp_foo
+ end
+end
diff --git a/knife/spec/data/mac_users/10.9.plist.xml b/knife/spec/data/mac_users/10.9.plist.xml
new file mode 100644
index 0000000000..be3456ea6c
--- /dev/null
+++ b/knife/spec/data/mac_users/10.9.plist.xml
@@ -0,0 +1,560 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>KerberosKeys</key>
+ <array>
+ <data>
+ MIIBVKEDAgEBoIIBSzCCAUcwc6ErMCmgAwIBEqEiBCAJxcIcjX3sMb98++d0
+ YvKqc351+CJJTMpyJO5mwWFMCaJEMEKgAwIBA6E7BDlMS0RDOlNIQTEuNEEy
+ NDA4NDVBMjU0OUZCOEUwRjI4NEU1NkUyODE3NzU2RUU5Q0QyMnZhZ3JhbnQw
+ Y6EbMBmgAwIBEaESBBDzYvuM3CLsLOGCIX4FJ8vdokQwQqADAgEDoTsEOUxL
+ REM6U0hBMS40QTI0MDg0NUEyNTQ5RkI4RTBGMjg0RTU2RTI4MTc3NTZFRTlD
+ RDIydmFncmFudDBroSMwIaADAgEQoRoEGCkvuVvN92vqnm0cy+9GWNBoIEoW
+ XtUNx6JEMEKgAwIBA6E7BDlMS0RDOlNIQTEuNEEyNDA4NDVBMjU0OUZCOEUw
+ RjI4NEU1NkUyODE3NzU2RUU5Q0QyMnZhZ3JhbnQ=
+ </data>
+ </array>
+ <key>ShadowHashData</key>
+ <array>
+ <data>
+ YnBsaXN0MDDRAQJfEBRTQUxURUQtU0hBNTEyLVBCS0RGMtMDBAUGBwhXZW50
+ cm9weVRzYWx0Wml0ZXJhdGlvbnNPEIASYBqQ2xfL+LpICOY4L7DTudimwaGQ
+ R3v2gKshr7YGVGcTblXMIIpvdBVuPa8g+xM2nvS3uvoEfYA1n7RqSKStzNVI
+ 67M4UbCTR8yoQ0Gn+TonFHND+J+4Q/tGwAF9Jkr6SXa6rPlBuRW9HsHKJMML
+ PnWeAkA+AvWf5/9ZOKdjbE8QIO6VS+Ry/cYN34lIR4FDOZNiXwBq9uyBDAj0
+ mn5BOUahEYayCAsiKTE2QcTnAAAAAAAAAQEAAAAAAAAACQAAAAAAAAAAAAAA
+ AAAAAOo=
+ </data>
+ </array>
+ <key>_writers_hint</key>
+ <array>
+ <string>vagrant</string>
+ </array>
+ <key>_writers_jpegphoto</key>
+ <array>
+ <string>vagrant</string>
+ </array>
+ <key>_writers_passwd</key>
+ <array>
+ <string>vagrant</string>
+ </array>
+ <key>_writers_picture</key>
+ <array>
+ <string>vagrant</string>
+ </array>
+ <key>authentication_authority</key>
+ <array>
+ <string>;ShadowHash;HASHLIST:&lt;SALTED-SHA512-PBKDF2&gt;</string>
+ <string>;Kerberosv5;;vagrant@LKDC:SHA1.4A240845A2549FB8E0F284E56E2817756EE9CD22;LKDC:SHA1.4A240845A2549FB8E0F284E56E2817756EE9CD22</string>
+ </array>
+ <key>generateduid</key>
+ <array>
+ <string>11112222-3333-4444-AAAA-BBBBCCCCDDDD</string>
+ </array>
+ <key>gid</key>
+ <array>
+ <string>80</string>
+ </array>
+ <key>home</key>
+ <array>
+ <string>/Users/vagrant</string>
+ </array>
+ <key>jpegphoto</key>
+ <array>
+ <data>
+ /9j/4AAQSkZJRgABAQAAAQABAAD/4ge4SUNDX1BST0ZJTEUAAQEAAAeoYXBw
+ bAIgAABtbnRyUkdCIFhZWiAH2QACABkACwAaAAthY3NwQVBQTAAAAABhcHBs
+ AAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtkZXNjAAABCAAA
+ AG9kc2NtAAABeAAABWxjcHJ0AAAG5AAAADh3dHB0AAAHHAAAABRyWFlaAAAH
+ MAAAABRnWFlaAAAHRAAAABRiWFlaAAAHWAAAABRyVFJDAAAHbAAAAA5jaGFk
+ AAAHfAAAACxiVFJDAAAHbAAAAA5nVFJDAAAHbAAAAA5kZXNjAAAAAAAAABRH
+ ZW5lcmljIFJHQiBQcm9maWxlAAAAAAAAAAAAAAAUR2VuZXJpYyBSR0IgUHJv
+ ZmlsZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAbWx1YwAAAAAAAAAeAAAADHNrU0sAAAAoAAABeGhySFIAAAAo
+ AAABoGNhRVMAAAAkAAAByHB0QlIAAAAmAAAB7HVrVUEAAAAqAAACEmZyRlUA
+ AAAoAAACPHpoVFcAAAAWAAACZGl0SVQAAAAoAAACem5iTk8AAAAmAAAComtv
+ S1IAAAAWAAACyGNzQ1oAAAAiAAAC3mhlSUwAAAAeAAADAGRlREUAAAAsAAAD
+ Hmh1SFUAAAAoAAADSnN2U0UAAAAmAAAConpoQ04AAAAWAAADcmphSlAAAAAa
+ AAADiHJvUk8AAAAkAAADomVsR1IAAAAiAAADxnB0UE8AAAAmAAAD6G5sTkwA
+ AAAoAAAEDmVzRVMAAAAmAAAD6HRoVEgAAAAkAAAENnRyVFIAAAAiAAAEWmZp
+ RkkAAAAoAAAEfHBsUEwAAAAsAAAEpHJ1UlUAAAAiAAAE0GFyRUcAAAAmAAAE
+ 8mVuVVMAAAAmAAAFGGRhREsAAAAuAAAFPgBWAWEAZQBvAGIAZQBjAG4A/QAg
+ AFIARwBCACAAcAByAG8AZgBpAGwARwBlAG4AZQByAGkBDQBrAGkAIABSAEcA
+ QgAgAHAAcgBvAGYAaQBsAFAAZQByAGYAaQBsACAAUgBHAEIAIABnAGUAbgDo
+ AHIAaQBjAFAAZQByAGYAaQBsACAAUgBHAEIAIABHAGUAbgDpAHIAaQBjAG8E
+ FwQwBDMEMAQ7BEwEPQQ4BDkAIAQ/BEAEPgREBDAEOQQ7ACAAUgBHAEIAUABy
+ AG8AZgBpAGwAIABnAOkAbgDpAHIAaQBxAHUAZQAgAFIAVgBCkBp1KAAgAFIA
+ RwBCACCCcl9pY8+P8ABQAHIAbwBmAGkAbABvACAAUgBHAEIAIABnAGUAbgBl
+ AHIAaQBjAG8ARwBlAG4AZQByAGkAcwBrACAAUgBHAEIALQBwAHIAbwBmAGkA
+ bMd8vBgAIABSAEcAQgAg1QS4XNMMx3wATwBiAGUAYwBuAP0AIABSAEcAQgAg
+ AHAAcgBvAGYAaQBsBeQF6AXVBeQF2QXcACAAUgBHAEIAIAXbBdwF3AXZAEEA
+ bABsAGcAZQBtAGUAaQBuAGUAcwAgAFIARwBCAC0AUAByAG8AZgBpAGwAwQBs
+ AHQAYQBsAOEAbgBvAHMAIABSAEcAQgAgAHAAcgBvAGYAaQBsZm6QGgAgAFIA
+ RwBCACBjz4/wZYdO9k4AgiwAIABSAEcAQgAgMNcw7TDVMKEwpDDrAFAAcgBv
+ AGYAaQBsACAAUgBHAEIAIABnAGUAbgBlAHIAaQBjA5MDtQO9A7kDugPMACAD
+ wAPBA78DxgOvA7sAIABSAEcAQgBQAGUAcgBmAGkAbAAgAFIARwBCACAAZwBl
+ AG4A6QByAGkAYwBvAEEAbABnAGUAbQBlAGUAbgAgAFIARwBCAC0AcAByAG8A
+ ZgBpAGUAbA5CDhsOIw5EDh8OJQ5MACAAUgBHAEIAIA4XDjEOSA4nDkQOGwBH
+ AGUAbgBlAGwAIABSAEcAQgAgAFAAcgBvAGYAaQBsAGkAWQBsAGUAaQBuAGUA
+ bgAgAFIARwBCAC0AcAByAG8AZgBpAGkAbABpAFUAbgBpAHcAZQByAHMAYQBs
+ AG4AeQAgAHAAcgBvAGYAaQBsACAAUgBHAEIEHgQxBEkEOAQ5ACAEPwRABD4E
+ RAQ4BDsETAAgAFIARwBCBkUGRAZBACAGKgY5BjEGSgZBACAAUgBHAEIAIAYn
+ BkQGOQYnBkUARwBlAG4AZQByAGkAYwAgAFIARwBCACAAUAByAG8AZgBpAGwA
+ ZQBHAGUAbgBlAHIAZQBsACAAUgBHAEIALQBiAGUAcwBrAHIAaQB2AGUAbABz
+ AGV0ZXh0AAAAAENvcHlyaWdodCAyMDA3IEFwcGxlIEluYy4sIGFsbCByaWdo
+ dHMgcmVzZXJ2ZWQuAFhZWiAAAAAAAADzUgABAAAAARbPWFlaIAAAAAAAAHRN
+ AAA97gAAA9BYWVogAAAAAAAAWnUAAKxzAAAXNFhZWiAAAAAAAAAoGgAAFZ8A
+ ALg2Y3VydgAAAAAAAAABAc0AAHNmMzIAAAAAAAEMQgAABd7///MmAAAHkgAA
+ /ZH///ui///9owAAA9wAAMBs/9sAQwACAgICAgECAgICAgICAwMGBAMDAwMH
+ BQUEBggHCAgIBwgICQoNCwkJDAoICAsPCwwNDg4ODgkLEBEPDhENDg4O/9sA
+ QwECAgIDAwMGBAQGDgkICQ4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4O
+ Dg4ODg4ODg4ODg4ODg4ODg4ODg4O/8AAEQgBMQEuAwEiAAIRAQMRAf/EAB8A
+ AAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE
+ AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYX
+ GBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3
+ eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfI
+ ycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEB
+ AQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR
+ BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJico
+ KSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW
+ 19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/fyiis6/1Wz0
+ 6P8AfyAyY+WJeWP4dvxoA0aw9R1+zsN0at9puR/Ah4H1NcjqHiG9vQ0cZ+yQ
+ H+FD8x+p/wAK5+gDWu9a1C8u1kad4gpyiRkqF/z71u6d4pI2xaiu4dPOQc/i
+ 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
+ By602uefd9PRdPxfmFFFFfJH1oUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU
+ UUAFFFFABRRRQAUUUUAFFFFABRRRQAV5L8Ufgj8O/i7obW/i7RI21JY9ttq9
+ piK9t/TbJj5h/suGX2r1qit8Niq2HqKpSk4yXVaHPisLRxNJ060VKL6PVH4s
+ fGP9kX4ifDIXWsaJHJ448IxksbywhP2m2X/ptCMnAHV13L3O3pXydX9LFfK/
+ xj/ZL+HXxSF1q2mQp4K8Xvlv7R0+EeTct/03h4Dc9WXa3qT0r9a4f8TNqWYL
+ /t9fqv1X3H5HxD4Yb1cvf/bj/R/o/vPxl0H/AJHvRf8Ar9j/AJ19B5YPlSQc
+ 8EVzvjX4FfEb4QfFTR4vFWjPJpLagi22s2OZbOf5uPnx8jH+64VvYjmvrD4b
+ /s1+MPGbQalr6yeE/D74YSXEf+lTr/sRHoCP4mx6gNX3+YZ5gKdCOJlVXI1o
+ 73v6d35HwGW5FmFSvLDKk+dbq1reb7LzPlG4+Hsfi3W4rXRLG5TX7l9sSWMB
+ k89vRo16/VcGvtv4M/si6jB4O0ib4o3S2fkR86Pp8253+Yn95KPujn7q5P8A
+ tA19keB/hp4O+Hmj/ZfDOkx287qFnvpv3lzP/vyHnH+yML6Cu8r8oz3xDxOI
+ TpYT3I938Xy7fi/Q/Wci8OsNh5Kti/fl2Xw/Pv8AgvJmPoegaL4Z8Ow6ToGm
+ Wek6dF9yC2jCrnuT3LHuTknvWxRRX5xOcpycpO7Z+kQhGEVGKskFFFFSUFFF
+ FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
+ AFFFFABRRRQAUUUUAYHib/kUZP8Ar5t//R8db9FFbS/hL1f6GS/iv0X6hRRR
+ WJqFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//2Q==
+ </data>
+ </array>
+ <key>name</key>
+ <array>
+ <string>vagrant</string>
+ </array>
+ <key>passwd</key>
+ <array>
+ <string>********</string>
+ </array>
+ <key>passwordpolicyoptions</key>
+ <array>
+ <data>
+ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NU
+ WVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VO
+ IiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4w
+ LmR0ZCI+CjxwbGlzdCB2ZXJzaW9uPSIxLjAiPgo8ZGljdD4KCTxrZXk+ZmFp
+ bGVkTG9naW5Db3VudDwva2V5PgoJPGludGVnZXI+MDwvaW50ZWdlcj4KCTxr
+ ZXk+ZmFpbGVkTG9naW5UaW1lc3RhbXA8L2tleT4KCTxkYXRlPjIwMDEtMDEt
+ MDFUMDA6MDA6MDBaPC9kYXRlPgoJPGtleT5sYXN0TG9naW5UaW1lc3RhbXA8
+ L2tleT4KCTxkYXRlPjIwMDEtMDEtMDFUMDA6MDA6MDBaPC9kYXRlPgoJPGtl
+ eT5wYXNzd29yZExhc3RTZXRUaW1lPC9rZXk+Cgk8ZGF0ZT4yMDE0LTAzLTA2
+ VDE4OjU0OjQ1WjwvZGF0ZT4KPC9kaWN0Pgo8L3BsaXN0Pgo=
+ </data>
+ </array>
+ <key>realname</key>
+ <array>
+ <string>vagrant</string>
+ </array>
+ <key>shell</key>
+ <array>
+ <string>/bin/bash</string>
+ </array>
+ <key>uid</key>
+ <array>
+ <string>501</string>
+ </array>
+</dict>
+</plist>
diff --git a/knife/spec/data/mac_users/10.9.shadow.xml b/knife/spec/data/mac_users/10.9.shadow.xml
new file mode 100644
index 0000000000..b8359d080a
--- /dev/null
+++ b/knife/spec/data/mac_users/10.9.shadow.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>SALTED-SHA512-PBKDF2</key>
+ <dict>
+ <key>entropy</key>
+ <data>
+ EmAakNsXy/i6SAjmOC+w07nYpsGhkEd79oCrIa+2BlRnE25VzCCKb3QVbj2v
+ IPsTNp70t7r6BH2ANZ+0akikrczVSOuzOFGwk0fMqENBp/k6JxRzQ/ifuEP7
+ RsABfSZK+kl2uqz5QbkVvR7ByiTDCz51ngJAPgL1n+f/WTinY2w=
+ </data>
+ <key>iterations</key>
+ <integer>34482</integer>
+ <key>salt</key>
+ <data>
+ 7pVL5HL9xg3fiUhHgUM5k2JfAGr27IEMCPSafkE5RqE=
+ </data>
+ </dict>
+</dict>
+</plist>
diff --git a/knife/spec/data/metadata/quick_start/metadata.rb b/knife/spec/data/metadata/quick_start/metadata.rb
new file mode 100644
index 0000000000..e7ae9d1749
--- /dev/null
+++ b/knife/spec/data/metadata/quick_start/metadata.rb
@@ -0,0 +1,14 @@
+maintainer "Chef Software, Inc."
+maintainer_email "cookbooks@chef.io"
+license "Apache 2.0"
+description "Example cookbook for quick_start wiki document"
+version "0.7"
+
+%w{
+ redhat fedora centos
+ ubuntu debian
+ macosx freebsd openbsd
+ solaris
+}.each do |os|
+ supports os
+end
diff --git a/knife/spec/data/mixin/invalid_data.rb b/knife/spec/data/mixin/invalid_data.rb
new file mode 100644
index 0000000000..e6f6c3a783
--- /dev/null
+++ b/knife/spec/data/mixin/invalid_data.rb
@@ -0,0 +1,3 @@
+# For spec/functional/mixin/from_file_spec.rb
+a :foo
+c :bar
diff --git a/knife/spec/data/mixin/real_data.rb b/knife/spec/data/mixin/real_data.rb
new file mode 100644
index 0000000000..e15b86fc68
--- /dev/null
+++ b/knife/spec/data/mixin/real_data.rb
@@ -0,0 +1,2 @@
+# For spec/functional/mixin/from_file_spec.rb
+a :foo
diff --git a/knife/spec/data/nested.json b/knife/spec/data/nested.json
new file mode 100644
index 0000000000..775bb21981
--- /dev/null
+++ b/knife/spec/data/nested.json
@@ -0,0 +1,2 @@
+{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":{"key":"test"
+}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
diff --git a/knife/spec/data/nodes/default.rb b/knife/spec/data/nodes/default.rb
new file mode 100644
index 0000000000..1d6291f166
--- /dev/null
+++ b/knife/spec/data/nodes/default.rb
@@ -0,0 +1,15 @@
+##
+# Nodes should have a unique name
+##
+name "test.example.com-default"
+
+##
+# Nodes can set arbitrary arguments
+##
+default[:sunshine] = "in"
+default[:something] = "else"
+
+##
+# Nodes should have recipes
+##
+run_list "operations-master", "operations-monitoring"
diff --git a/knife/spec/data/nodes/test.example.com.rb b/knife/spec/data/nodes/test.example.com.rb
new file mode 100644
index 0000000000..b30e8489e0
--- /dev/null
+++ b/knife/spec/data/nodes/test.example.com.rb
@@ -0,0 +1,17 @@
+##
+# Nodes should have a unique name
+##
+name "test.example.com"
+
+##
+# Nodes can set arbitrary arguments
+##
+normal[:sunshine] = "in"
+normal[:something] = "else"
+
+##
+# Nodes should have recipes
+##
+run_list "operations-master", "operations-monitoring"
+
+chef_environment "dev"
diff --git a/knife/spec/data/nodes/test.rb b/knife/spec/data/nodes/test.rb
new file mode 100644
index 0000000000..e1301130d2
--- /dev/null
+++ b/knife/spec/data/nodes/test.rb
@@ -0,0 +1,15 @@
+##
+# Nodes should have a unique name
+##
+name "test.example.com-short"
+
+##
+# Nodes can set arbitrary arguments
+##
+default[:sunshine] = "in"
+default[:something] = "else"
+
+##
+# Nodes should have recipes
+##
+run_list "operations-master", "operations-monitoring"
diff --git a/knife/spec/data/null_config.rb b/knife/spec/data/null_config.rb
new file mode 100644
index 0000000000..8865745632
--- /dev/null
+++ b/knife/spec/data/null_config.rb
@@ -0,0 +1 @@
+$__KNIFE_INTEGRATION_FAILSAFE_CHECK << " ole"
diff --git a/knife/spec/data/object_loader/environments/test.json b/knife/spec/data/object_loader/environments/test.json
new file mode 100644
index 0000000000..744819c60a
--- /dev/null
+++ b/knife/spec/data/object_loader/environments/test.json
@@ -0,0 +1,7 @@
+{
+ /* testing that we support c-style comments */
+ // testing that we support c++-style comments as well
+ "name": "test",
+ "description": "prod",
+ "run_list": []
+}
diff --git a/knife/spec/data/object_loader/environments/test.rb b/knife/spec/data/object_loader/environments/test.rb
new file mode 100644
index 0000000000..8bf4ee52e0
--- /dev/null
+++ b/knife/spec/data/object_loader/environments/test.rb
@@ -0,0 +1,2 @@
+name "test"
+description "prod"
diff --git a/knife/spec/data/object_loader/environments/test_json_class.json b/knife/spec/data/object_loader/environments/test_json_class.json
new file mode 100644
index 0000000000..f51943f60e
--- /dev/null
+++ b/knife/spec/data/object_loader/environments/test_json_class.json
@@ -0,0 +1,8 @@
+{
+ /* testing that we support c-style comments */
+ // testing that we support c++-style comments as well
+ "name": "test",
+ "json_class": "Chef::Environment",
+ "description": "prod",
+ "run_list": []
+}
diff --git a/knife/spec/data/object_loader/nodes/test.json b/knife/spec/data/object_loader/nodes/test.json
new file mode 100644
index 0000000000..a370d6378d
--- /dev/null
+++ b/knife/spec/data/object_loader/nodes/test.json
@@ -0,0 +1,7 @@
+{
+ /* testing that we support c-style comments */
+ // testing that we support c++-style comments as well
+ "name": "test",
+ "environment": "prod",
+ "run_list": []
+}
diff --git a/knife/spec/data/object_loader/nodes/test.rb b/knife/spec/data/object_loader/nodes/test.rb
new file mode 100644
index 0000000000..9629539859
--- /dev/null
+++ b/knife/spec/data/object_loader/nodes/test.rb
@@ -0,0 +1,2 @@
+name "test"
+environment "prod"
diff --git a/knife/spec/data/object_loader/nodes/test_json_class.json b/knife/spec/data/object_loader/nodes/test_json_class.json
new file mode 100644
index 0000000000..3c5b12ce6c
--- /dev/null
+++ b/knife/spec/data/object_loader/nodes/test_json_class.json
@@ -0,0 +1,8 @@
+{
+ /* testing that we support c-style comments */
+ // testing that we support c++-style comments as well
+ "name": "test",
+ "json_class": "Chef::Node",
+ "environment": "prod",
+ "run_list": []
+}
diff --git a/knife/spec/data/object_loader/roles/test.json b/knife/spec/data/object_loader/roles/test.json
new file mode 100644
index 0000000000..744819c60a
--- /dev/null
+++ b/knife/spec/data/object_loader/roles/test.json
@@ -0,0 +1,7 @@
+{
+ /* testing that we support c-style comments */
+ // testing that we support c++-style comments as well
+ "name": "test",
+ "description": "prod",
+ "run_list": []
+}
diff --git a/knife/spec/data/object_loader/roles/test.rb b/knife/spec/data/object_loader/roles/test.rb
new file mode 100644
index 0000000000..8bf4ee52e0
--- /dev/null
+++ b/knife/spec/data/object_loader/roles/test.rb
@@ -0,0 +1,2 @@
+name "test"
+description "prod"
diff --git a/knife/spec/data/object_loader/roles/test_json_class.json b/knife/spec/data/object_loader/roles/test_json_class.json
new file mode 100644
index 0000000000..f975c8be43
--- /dev/null
+++ b/knife/spec/data/object_loader/roles/test_json_class.json
@@ -0,0 +1,8 @@
+{
+ /* testing that we support c-style comments */
+ // testing that we support c++-style comments as well
+ "name": "test",
+ "json_class": "Chef::Role",
+ "description": "prod",
+ "run_list": []
+}
diff --git a/knife/spec/data/old_home_dir/my-dot-emacs b/knife/spec/data/old_home_dir/my-dot-emacs
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/old_home_dir/my-dot-emacs
diff --git a/knife/spec/data/old_home_dir/my-dot-vim b/knife/spec/data/old_home_dir/my-dot-vim
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/old_home_dir/my-dot-vim
diff --git a/knife/spec/data/partial_one.erb b/knife/spec/data/partial_one.erb
new file mode 100644
index 0000000000..9fd79a0d65
--- /dev/null
+++ b/knife/spec/data/partial_one.erb
@@ -0,0 +1 @@
+partial one <%= render('test.erb', :cookbook => 'openldap').strip %> calling home
diff --git a/knife/spec/data/prefer_metadata_json/metadata.json b/knife/spec/data/prefer_metadata_json/metadata.json
new file mode 100644
index 0000000000..eff8836a3b
--- /dev/null
+++ b/knife/spec/data/prefer_metadata_json/metadata.json
@@ -0,0 +1,51 @@
+{
+ "name": "prefer_metadata_json",
+ "description": "",
+ "long_description": "",
+ "maintainer": null,
+ "maintainer_email": null,
+ "license": "All rights reserved",
+ "platforms": {
+
+ },
+ "dependencies": {
+
+ },
+ "recommendations": {
+
+ },
+ "suggestions": {
+
+ },
+ "conflicting": {
+
+ },
+ "providing": {
+
+ },
+ "replacing": {
+
+ },
+ "attributes": {
+
+ },
+ "groupings": {
+
+ },
+ "recipes": {
+
+ },
+ "version": "1.2.3",
+ "source_url": "",
+ "issues_url": "",
+ "privacy": false,
+ "chef_versions": [
+
+ ],
+ "ohai_versions": [
+
+ ],
+ "gems": [
+
+ ]
+}
diff --git a/knife/spec/data/prefer_metadata_json/metadata.rb b/knife/spec/data/prefer_metadata_json/metadata.rb
new file mode 100644
index 0000000000..a46aa29a5c
--- /dev/null
+++ b/knife/spec/data/prefer_metadata_json/metadata.rb
@@ -0,0 +1,6 @@
+# these deliberately do not match metadata.json
+name "test"
+version "0.0.1"
+
+# this raises hard if anything even tries to parse it
+raise "TEH SADNESS"
diff --git a/knife/spec/data/prefer_metadata_json/recipes/default.rb b/knife/spec/data/prefer_metadata_json/recipes/default.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/prefer_metadata_json/recipes/default.rb
diff --git a/knife/spec/data/recipes.tgz b/knife/spec/data/recipes.tgz
new file mode 100644
index 0000000000..a6c172a001
--- /dev/null
+++ b/knife/spec/data/recipes.tgz
Binary files differ
diff --git a/knife/spec/data/recipes/test.rb b/knife/spec/data/recipes/test.rb
new file mode 100644
index 0000000000..c33d714a2c
--- /dev/null
+++ b/knife/spec/data/recipes/test.rb
@@ -0,0 +1,7 @@
+
+file "/etc/nsswitch.conf" do
+ action :create
+ owner "root"
+ group "root"
+ mode 0644
+end
diff --git a/knife/spec/data/remote_directory_data/remote_dir_file.txt b/knife/spec/data/remote_directory_data/remote_dir_file.txt
new file mode 100644
index 0000000000..17aa3a6838
--- /dev/null
+++ b/knife/spec/data/remote_directory_data/remote_dir_file.txt
@@ -0,0 +1 @@
+I'm a file inside a the root remote_directory source dir. \ No newline at end of file
diff --git a/knife/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt b/knife/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt
new file mode 100644
index 0000000000..a73728a4bb
--- /dev/null
+++ b/knife/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt
@@ -0,0 +1 @@
+I'm a file in a subdirectory inside a remote_directory source \ No newline at end of file
diff --git a/knife/spec/data/remote_file/nyan_cat.png b/knife/spec/data/remote_file/nyan_cat.png
new file mode 100644
index 0000000000..14cd6acf2a
--- /dev/null
+++ b/knife/spec/data/remote_file/nyan_cat.png
Binary files differ
diff --git a/knife/spec/data/remote_file/nyan_cat.png.gz b/knife/spec/data/remote_file/nyan_cat.png.gz
new file mode 100644
index 0000000000..efa9d4427a
--- /dev/null
+++ b/knife/spec/data/remote_file/nyan_cat.png.gz
Binary files differ
diff --git a/knife/spec/data/root_alias_cookbooks/dup_attr/attributes.rb b/knife/spec/data/root_alias_cookbooks/dup_attr/attributes.rb
new file mode 100644
index 0000000000..3a3bab96e1
--- /dev/null
+++ b/knife/spec/data/root_alias_cookbooks/dup_attr/attributes.rb
@@ -0,0 +1 @@
+default["aliased"]["attr"] = "value"
diff --git a/knife/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb b/knife/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb
new file mode 100644
index 0000000000..a6f6c78bb0
--- /dev/null
+++ b/knife/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb
@@ -0,0 +1 @@
+default["aliased"]["attr"] = "other"
diff --git a/knife/spec/data/root_alias_cookbooks/dup_attr/metadata.rb b/knife/spec/data/root_alias_cookbooks/dup_attr/metadata.rb
new file mode 100644
index 0000000000..703a73ab19
--- /dev/null
+++ b/knife/spec/data/root_alias_cookbooks/dup_attr/metadata.rb
@@ -0,0 +1,2 @@
+name "dup_attr"
+version "1.0.0"
diff --git a/knife/spec/data/root_alias_cookbooks/dup_attr/recipe.rb b/knife/spec/data/root_alias_cookbooks/dup_attr/recipe.rb
new file mode 100644
index 0000000000..d82e58fbcd
--- /dev/null
+++ b/knife/spec/data/root_alias_cookbooks/dup_attr/recipe.rb
@@ -0,0 +1,3 @@
+ruby_block "root alias" do
+ block { }
+end
diff --git a/knife/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb b/knife/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb
new file mode 100644
index 0000000000..3a3bab96e1
--- /dev/null
+++ b/knife/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb
@@ -0,0 +1 @@
+default["aliased"]["attr"] = "value"
diff --git a/knife/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb b/knife/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb
new file mode 100644
index 0000000000..62273a64d5
--- /dev/null
+++ b/knife/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb
@@ -0,0 +1,2 @@
+name "dup_recipe"
+version "1.0.0"
diff --git a/knife/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb b/knife/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb
new file mode 100644
index 0000000000..d82e58fbcd
--- /dev/null
+++ b/knife/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb
@@ -0,0 +1,3 @@
+ruby_block "root alias" do
+ block { }
+end
diff --git a/knife/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb b/knife/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb
new file mode 100644
index 0000000000..3eb7c22809
--- /dev/null
+++ b/knife/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb
@@ -0,0 +1,3 @@
+ruby_block "other" do
+ block { }
+end
diff --git a/knife/spec/data/root_alias_cookbooks/simple/attributes.rb b/knife/spec/data/root_alias_cookbooks/simple/attributes.rb
new file mode 100644
index 0000000000..3a3bab96e1
--- /dev/null
+++ b/knife/spec/data/root_alias_cookbooks/simple/attributes.rb
@@ -0,0 +1 @@
+default["aliased"]["attr"] = "value"
diff --git a/knife/spec/data/root_alias_cookbooks/simple/metadata.rb b/knife/spec/data/root_alias_cookbooks/simple/metadata.rb
new file mode 100644
index 0000000000..9147558459
--- /dev/null
+++ b/knife/spec/data/root_alias_cookbooks/simple/metadata.rb
@@ -0,0 +1,2 @@
+name "simple"
+version "1.0.0"
diff --git a/knife/spec/data/root_alias_cookbooks/simple/recipe.rb b/knife/spec/data/root_alias_cookbooks/simple/recipe.rb
new file mode 100644
index 0000000000..d82e58fbcd
--- /dev/null
+++ b/knife/spec/data/root_alias_cookbooks/simple/recipe.rb
@@ -0,0 +1,3 @@
+ruby_block "root alias" do
+ block { }
+end
diff --git a/knife/spec/data/rubygems.org/latest_specs.4.8.gz b/knife/spec/data/rubygems.org/latest_specs.4.8.gz
new file mode 100644
index 0000000000..ab6a175f32
--- /dev/null
+++ b/knife/spec/data/rubygems.org/latest_specs.4.8.gz
Binary files differ
diff --git a/knife/spec/data/rubygems.org/nonexistent_gem b/knife/spec/data/rubygems.org/nonexistent_gem
new file mode 100644
index 0000000000..0ba94359df
--- /dev/null
+++ b/knife/spec/data/rubygems.org/nonexistent_gem
Binary files differ
diff --git a/knife/spec/data/rubygems.org/nonexistent_gem-info b/knife/spec/data/rubygems.org/nonexistent_gem-info
new file mode 100644
index 0000000000..7e88a0e205
--- /dev/null
+++ b/knife/spec/data/rubygems.org/nonexistent_gem-info
@@ -0,0 +1 @@
+This gem could not be found \ No newline at end of file
diff --git a/knife/spec/data/rubygems.org/sexp_processor b/knife/spec/data/rubygems.org/sexp_processor
new file mode 100644
index 0000000000..37c6e97769
--- /dev/null
+++ b/knife/spec/data/rubygems.org/sexp_processor
Binary files differ
diff --git a/knife/spec/data/rubygems.org/sexp_processor-4.15.1.gemspec.rz b/knife/spec/data/rubygems.org/sexp_processor-4.15.1.gemspec.rz
new file mode 100644
index 0000000000..38840f2682
--- /dev/null
+++ b/knife/spec/data/rubygems.org/sexp_processor-4.15.1.gemspec.rz
Binary files differ
diff --git a/knife/spec/data/rubygems.org/sexp_processor-info b/knife/spec/data/rubygems.org/sexp_processor-info
new file mode 100644
index 0000000000..78add7f2fa
--- /dev/null
+++ b/knife/spec/data/rubygems.org/sexp_processor-info
@@ -0,0 +1,49 @@
+---
+3.0.0 |checksum:ff9abf0d904ba57b9654352b396aa28cf6ad5315af99d8bbf664f5ff6efd3a5d
+3.0.1 |checksum:d012a759dc6950dcda667a359051c2e62e4bd19790aeed698a5e47d013ef3ae7
+3.0.2 |checksum:ba85e835493e6099c2f52937b77ce518d65af39409befdd9b43927c0a604ed87
+3.0.3 |checksum:a433b01d821f5e81200fbec77fc26a1ecb186ad7d8e40d19ed34ea295287170a
+3.0.4 |checksum:5f394545863d5abe5c3f53c3b883128f58900cd792504076a765b53c9a49f10a
+3.0.5 |checksum:8e06c84ed3a0159a0f2e6f7b10bbd056954ac2d33548318ccc3088556c8a8891
+3.0.6 |checksum:e6e0f30ff14b73b28f8e5803646aa6d2ed81b3b239e76815fd8160ea4121c650
+3.0.7 |checksum:7647c24bbebea0ef57a892953fc96349091924a399ee5d98f41da5d9db484816
+3.0.8 |checksum:6c8ff89feab635e332e115356451614a16d171485e34b6b30a6dea243caaaed7
+3.0.9 |checksum:b55c35100f5e1e191ff67eac8667aea9433d1492697c9434cdb35550cf6e4dd0
+3.0.10 |checksum:e168db8d4eccfc721685d939654698f1b419f018f45e38d17ab40033102987f4
+3.1.0 |checksum:3d9dd950ba0b235c4901d04e410c7e716feb491148bf0ca7daa0f510838b3bf7
+3.2.0 |checksum:5951f8d33ede2f68686c701142c6cc1004d6f525b0aa8e8279a1bf075542b0f0
+4.0.0 |checksum:36c185f8caecacb178500cabdc3e038862df640536c2e84ab763ae134462896f
+4.0.1 |checksum:efd33857c0f41a413ec3ea20251f43c4826fe8a11b01099335f4a3b6777eb727
+4.1.0 |checksum:d26879b9a0675ea156c82e26971149349a1474aac3da4d0d2a04cc18e6df73a3
+4.1.1 |checksum:15df4e54e0fab19e225862b36dff823d5b87d57ea998f2e47c52ce01de82b3d9
+4.1.2 |checksum:7c2ed2d62d0305f2c33cba2e99b288df0f3f4343c367b8ee8cad8c735abc8568
+4.1.3 |checksum:d02f1465c7f012f77a61abdaa841a5273a2277247bc143bfa11cf139a29dbdf8
+4.1.4 |checksum:f7798b1682dcf750dab5f4f8da548fee36f30864a4e4b0d8a63295d159357c3b
+4.1.5 |checksum:741c7dfe5e392ae39e22399546d25fe00ffdfc7a55e653e6a99b6770b1c0066c
+4.2.0 |checksum:3cde88e3d440f63af3cd48edca88bd98872622403740ecda78b7d27161367486
+4.2.1 |checksum:dfc3eef6ef13c5750c3faab782c4db6c74a7bcc5d03e56e4edeec21aab034185
+4.3.0 |checksum:7accb37900d1599c6f0f40be92bc62a5db4e5a7eb64f33a858cf83e798dd1ddc
+4.4.0 |checksum:71591ddbda99b5e12e4a46d377c87513850ca7aa4b1aa800ae02792cadee6be7
+4.4.1 |checksum:8a10333552216bf3d3846476cfe78dbc9b5724864e3f5016837724622d828f16
+4.4.2 |checksum:adba9d17de5957532223a1bf0e7bdba5ab849d6576e9210439a7d99e0cfa2595
+4.4.3 |checksum:b3eb96da1fe998f1c00665a9c645878518134cca7c35d39c4bb716e866f4cc57
+4.4.4 |checksum:43cab5a67ca409d62411f869ddb7a0a4de0988b489d3f1d610d9b6e521964fd5
+4.4.5 |checksum:af8713761f1b6604865830c54324e57c33e7cc05107ebdbee4e6d458f8f8fe7c
+4.5.0 |checksum:54d94dc52cf98a51548c8f3e77031a3347508b542b8cb066100ed3ac40c03081
+4.5.1 |checksum:1456a9be103bf1de0d34ff6980b77a5a72cf3d4b35bbd2182ac62506981a234c
+4.6.0 |checksum:e2498f90c75bd4c19d1739afadde8c03af26a881c8bd775f71d2f180de65b43f
+4.6.1 |checksum:e2e96c2ee3ea81e1dc7b4b4abee23b6e552e669cfe456ee69126a29a03373cd7
+4.7.0 |checksum:963a1f5b21c95595fb3cf1e8531784bf3d8fe30302cf6f271b08aefdc63e453f
+4.8.0 |checksum:5b9325f28b5be80ba8d43b7660f60ad67c9304fe8181dee89d3a348b13d2fada
+4.9.0 |checksum:333619bc71d563ee60f26fc5f3a7f57bd89ee3191177fdce87a014dcb1b8d3b0
+4.10.0b1 |checksum:8791e2006a2ddbf8dc96cfc19633de01af8cb8687703177a85aeb3f959974d5b,rubygems:> 1.3.1
+4.10.0 |checksum:b67a289ae4a3968d93dab0803d0ef5a262b6f94138ab98072e489d2aa8af4034
+4.10.1 |checksum:63d2297712eb1d6219ab1cb9207d9a239ac9ad20463c0b58ca865f0b46deb5ec
+4.11.0 |checksum:4c90ff17c492789fdd248369fa16ce65ef05576b3d9f593a49c6a0961dbcd5ee
+4.12.0 |checksum:671110574e96377a03b328bfb7f6339540443eca0b62913bf8fe38e9ebcb4470
+4.12.1 |checksum:f87cd92457a343b4e951e1f1ac3e8183f98de4640a32f6ceb44628332d21a088
+4.13.0 |checksum:47e86c22a2d7810897e3eae9669ab9afa220f5e6cea5ac1d47164650a9b857d3
+4.14.0 |checksum:99a20cc5e7b901f6b493a8ca5e13439b73b19671eaaca68a00216c4f66765edc
+4.14.1 |checksum:0fa8731445cf4a0c01570ec29aac4b50a0451ce66b1b31ad768f5035e3af7b90,ruby:~> 2.2
+4.15.0 |checksum:a5ec27d8055ad47444cfb7ce860bad8af2365772a82892f4a8a0d97e8e9e3b34,ruby:~> 2.2
+4.15.1 |checksum:9291a0f2247f50d15068ee6965b67cd7b678b0d273e18adf3c0b2ea4a890125c,ruby:< 3.1&>= 2.1
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb b/knife/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb
new file mode 100644
index 0000000000..e45e7d9f68
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb
@@ -0,0 +1,2 @@
+normal_unless[:attr_load_order] = []
+normal[:attr_load_order] << "circular-dep1::default"
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb b/knife/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb
new file mode 100644
index 0000000000..fa1770b552
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('circular-dep1-definition')
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb b/knife/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb
new file mode 100644
index 0000000000..b20b648789
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb
@@ -0,0 +1,2 @@
+LibraryLoadOrder.record("circular-dep1")
+
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep1/metadata.rb b/knife/spec/data/run_context/cookbooks/circular-dep1/metadata.rb
new file mode 100644
index 0000000000..e990004b56
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep1/metadata.rb
@@ -0,0 +1,2 @@
+name "circular-dep1"
+depends "circular-dep2"
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb b/knife/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb
new file mode 100644
index 0000000000..ee66286da4
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('circular-dep1-provider')
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb b/knife/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb b/knife/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb
new file mode 100644
index 0000000000..eaf68e9058
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb
@@ -0,0 +1,2 @@
+unified_mode true
+LibraryLoadOrder.record('circular-dep1-resource')
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb b/knife/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb
new file mode 100644
index 0000000000..37f396b1f9
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb
@@ -0,0 +1,2 @@
+normal_unless[:attr_load_order] = []
+normal[:attr_load_order] << "circular-dep2::default"
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb b/knife/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb
new file mode 100644
index 0000000000..a23bf8f679
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('circular-dep2-definition')
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb b/knife/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb
new file mode 100644
index 0000000000..ce0acc1231
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb
@@ -0,0 +1,2 @@
+LibraryLoadOrder.record("circular-dep2")
+
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep2/metadata.rb b/knife/spec/data/run_context/cookbooks/circular-dep2/metadata.rb
new file mode 100644
index 0000000000..3df19e03de
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep2/metadata.rb
@@ -0,0 +1,2 @@
+name "circular-dep2"
+depends "circular-dep1"
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb b/knife/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb
new file mode 100644
index 0000000000..139ed59a9e
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('circular-dep2-provider')
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb b/knife/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb
diff --git a/knife/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb b/knife/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb
new file mode 100644
index 0000000000..63eb08d5b5
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb
@@ -0,0 +1,2 @@
+unified_mode true
+LibraryLoadOrder.record('circular-dep2-resource')
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb b/knife/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb
new file mode 100644
index 0000000000..3059494198
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb
@@ -0,0 +1,2 @@
+normal_unless[:attr_load_order] = []
+normal[:attr_load_order] << "dependency1::aa_first"
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/attributes/default.rb b/knife/spec/data/run_context/cookbooks/dependency1/attributes/default.rb
new file mode 100644
index 0000000000..a65a3345bc
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/attributes/default.rb
@@ -0,0 +1,2 @@
+normal_unless[:attr_load_order] = []
+normal[:attr_load_order] << "dependency1::default"
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/attributes/unparsed_file b/knife/spec/data/run_context/cookbooks/dependency1/attributes/unparsed_file
new file mode 100644
index 0000000000..60fee07cc6
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/attributes/unparsed_file
@@ -0,0 +1 @@
+raise "this should not be parsed by the loader"
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb b/knife/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb
new file mode 100644
index 0000000000..94ffb30133
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb
@@ -0,0 +1,2 @@
+normal_unless[:attr_load_order] = []
+normal[:attr_load_order] << "dependency1::zz_last"
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb b/knife/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb
new file mode 100644
index 0000000000..4e4344e41f
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('dependency1-definition')
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/definitions/unparsed_file b/knife/spec/data/run_context/cookbooks/dependency1/definitions/unparsed_file
new file mode 100644
index 0000000000..60fee07cc6
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/definitions/unparsed_file
@@ -0,0 +1 @@
+raise "this should not be parsed by the loader"
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb b/knife/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb
new file mode 100644
index 0000000000..10dbb37a9e
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb
@@ -0,0 +1,2 @@
+LibraryLoadOrder.record("dependency1")
+
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/libraries/unparsed_file b/knife/spec/data/run_context/cookbooks/dependency1/libraries/unparsed_file
new file mode 100644
index 0000000000..60fee07cc6
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/libraries/unparsed_file
@@ -0,0 +1 @@
+raise "this should not be parsed by the loader"
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/providers/provider.rb b/knife/spec/data/run_context/cookbooks/dependency1/providers/provider.rb
new file mode 100644
index 0000000000..f0ca0004b6
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/providers/provider.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('dependency1-provider')
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/providers/unparsed_file b/knife/spec/data/run_context/cookbooks/dependency1/providers/unparsed_file
new file mode 100644
index 0000000000..60fee07cc6
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/providers/unparsed_file
@@ -0,0 +1 @@
+raise "this should not be parsed by the loader"
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/recipes/default.rb b/knife/spec/data/run_context/cookbooks/dependency1/recipes/default.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/recipes/default.rb
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/recipes/unparsed_file b/knife/spec/data/run_context/cookbooks/dependency1/recipes/unparsed_file
new file mode 100644
index 0000000000..60fee07cc6
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/recipes/unparsed_file
@@ -0,0 +1 @@
+raise "this should not be parsed by the loader"
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/resources/resource.rb b/knife/spec/data/run_context/cookbooks/dependency1/resources/resource.rb
new file mode 100644
index 0000000000..d355f7ce48
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/resources/resource.rb
@@ -0,0 +1,2 @@
+unified_mode true
+LibraryLoadOrder.record('dependency1-resource')
diff --git a/knife/spec/data/run_context/cookbooks/dependency1/resources/unparsed_file b/knife/spec/data/run_context/cookbooks/dependency1/resources/unparsed_file
new file mode 100644
index 0000000000..60fee07cc6
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency1/resources/unparsed_file
@@ -0,0 +1 @@
+raise "this should not be parsed by the loader"
diff --git a/knife/spec/data/run_context/cookbooks/dependency2/attributes/default.rb b/knife/spec/data/run_context/cookbooks/dependency2/attributes/default.rb
new file mode 100644
index 0000000000..8917bf9730
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency2/attributes/default.rb
@@ -0,0 +1,2 @@
+normal_unless[:attr_load_order] = []
+normal[:attr_load_order] << "dependency2::default"
diff --git a/knife/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb b/knife/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb
new file mode 100644
index 0000000000..7839278319
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('dependency2-definition')
diff --git a/knife/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb b/knife/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb
new file mode 100644
index 0000000000..27b3be10d1
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb
@@ -0,0 +1,2 @@
+LibraryLoadOrder.record("dependency2")
+
diff --git a/knife/spec/data/run_context/cookbooks/dependency2/providers/provider.rb b/knife/spec/data/run_context/cookbooks/dependency2/providers/provider.rb
new file mode 100644
index 0000000000..6cc6310d54
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency2/providers/provider.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('dependency2-provider')
diff --git a/knife/spec/data/run_context/cookbooks/dependency2/recipes/default.rb b/knife/spec/data/run_context/cookbooks/dependency2/recipes/default.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency2/recipes/default.rb
diff --git a/knife/spec/data/run_context/cookbooks/dependency2/resources/resource.rb b/knife/spec/data/run_context/cookbooks/dependency2/resources/resource.rb
new file mode 100644
index 0000000000..5ec44d4564
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/dependency2/resources/resource.rb
@@ -0,0 +1,2 @@
+unified_mode true
+LibraryLoadOrder.record('dependency2-resource')
diff --git a/knife/spec/data/run_context/cookbooks/include/recipes/default.rb b/knife/spec/data/run_context/cookbooks/include/recipes/default.rb
new file mode 100644
index 0000000000..8d22994252
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/include/recipes/default.rb
@@ -0,0 +1,24 @@
+module ::RanResources
+ def self.resources
+ @resources ||= []
+ end
+end
+class RunContextCustomResource < Chef::Resource
+ action :create do
+ ruby_block '4' do
+ block { RanResources.resources << 4 }
+ end
+ recipe_eval do
+ ruby_block '1' do
+ block { RanResources.resources << 1 }
+ end
+ include_recipe 'include::includee'
+ ruby_block '3' do
+ block { RanResources.resources << 3 }
+ end
+ end
+ ruby_block '5' do
+ block { RanResources.resources << 5 }
+ end
+ end
+end
diff --git a/knife/spec/data/run_context/cookbooks/include/recipes/includee.rb b/knife/spec/data/run_context/cookbooks/include/recipes/includee.rb
new file mode 100644
index 0000000000..87bb7f114e
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/include/recipes/includee.rb
@@ -0,0 +1,3 @@
+ruby_block '2' do
+ block { RanResources.resources << 2 }
+end
diff --git a/knife/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb b/knife/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb
new file mode 100644
index 0000000000..07294665b2
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb
@@ -0,0 +1,2 @@
+normal_unless[:attr_load_order] = []
+normal[:attr_load_order] << "no-default-attr::server"
diff --git a/knife/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb b/knife/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb
new file mode 100644
index 0000000000..cee4344a9c
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('no-default-attr-definition')
diff --git a/knife/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb b/knife/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb
new file mode 100644
index 0000000000..53b8adc934
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('no-default-attr-provider')
diff --git a/knife/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb b/knife/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb
diff --git a/knife/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb b/knife/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb
new file mode 100644
index 0000000000..fd8fa73b5a
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb
@@ -0,0 +1,2 @@
+unified_mode true
+LibraryLoadOrder.record('no-default-attr-resource')
diff --git a/knife/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb
new file mode 100644
index 0000000000..77309462b1
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb
@@ -0,0 +1,2 @@
+normal_unless[:attr_load_order] = []
+normal[:attr_load_order] << "test-with-circular-deps::default"
diff --git a/knife/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb
new file mode 100644
index 0000000000..f0840046b8
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('test-with-circular-deps-definition')
diff --git a/knife/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb
new file mode 100644
index 0000000000..76108f067c
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb
@@ -0,0 +1,2 @@
+LibraryLoadOrder.record("test-with-circular-deps")
+
diff --git a/knife/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb
new file mode 100644
index 0000000000..280c5ae7ce
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb
@@ -0,0 +1,2 @@
+name "test-with-circular-deps"
+depends "circular-dep1"
diff --git a/knife/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb
new file mode 100644
index 0000000000..c25da707f2
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('test-with-circular-deps-provider')
diff --git a/knife/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb
diff --git a/knife/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb
new file mode 100644
index 0000000000..ffe7d099c9
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb
@@ -0,0 +1,3 @@
+unified_mode true
+
+LibraryLoadOrder.record('test-with-circular-deps-resource')
diff --git a/knife/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb b/knife/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb
new file mode 100644
index 0000000000..c4cc8151a4
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb
@@ -0,0 +1,2 @@
+normal_unless[:attr_load_order] = []
+normal[:attr_load_order] << "test-with-deps::default"
diff --git a/knife/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb b/knife/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb
new file mode 100644
index 0000000000..c481734b54
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('test-with-deps-definition')
diff --git a/knife/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb b/knife/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb
new file mode 100644
index 0000000000..7dd942f8b3
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record("test-with-deps")
diff --git a/knife/spec/data/run_context/cookbooks/test-with-deps/metadata.rb b/knife/spec/data/run_context/cookbooks/test-with-deps/metadata.rb
new file mode 100644
index 0000000000..8909f11630
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-deps/metadata.rb
@@ -0,0 +1,3 @@
+name "test-with-deps"
+depends "dependency1"
+depends "dependency2"
diff --git a/knife/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb b/knife/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb
new file mode 100644
index 0000000000..96146c68b7
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('test-with-deps-provider')
diff --git a/knife/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb b/knife/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb
diff --git a/knife/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb b/knife/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb
diff --git a/knife/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb b/knife/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb
new file mode 100644
index 0000000000..203efabec5
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb
@@ -0,0 +1,2 @@
+unified_mode true
+LibraryLoadOrder.record('test-with-deps-resource')
diff --git a/knife/spec/data/run_context/cookbooks/test/attributes/default.rb b/knife/spec/data/run_context/cookbooks/test/attributes/default.rb
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test/attributes/default.rb
diff --git a/knife/spec/data/run_context/cookbooks/test/attributes/george.rb b/knife/spec/data/run_context/cookbooks/test/attributes/george.rb
new file mode 100644
index 0000000000..8ea4454c79
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test/attributes/george.rb
@@ -0,0 +1 @@
+default[:george] = "washington"
diff --git a/knife/spec/data/run_context/cookbooks/test/definitions/new_animals.rb b/knife/spec/data/run_context/cookbooks/test/definitions/new_animals.rb
new file mode 100644
index 0000000000..5b00553cfe
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test/definitions/new_animals.rb
@@ -0,0 +1,9 @@
+define :new_dog, :is_cute => true do
+ dog "#{params[:name]}" do
+ cute params[:is_cute]
+ end
+end
+
+define :new_badger do
+ badger "#{params[:name]}"
+end
diff --git a/knife/spec/data/run_context/cookbooks/test/definitions/new_cat.rb b/knife/spec/data/run_context/cookbooks/test/definitions/new_cat.rb
new file mode 100644
index 0000000000..a49b53348c
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test/definitions/new_cat.rb
@@ -0,0 +1,5 @@
+define :new_cat, :is_pretty => true do
+ cat "#{params[:name]}" do
+ pretty_kitty params[:is_pretty]
+ end
+end
diff --git a/knife/spec/data/run_context/cookbooks/test/definitions/test_res.rb b/knife/spec/data/run_context/cookbooks/test/definitions/test_res.rb
new file mode 100644
index 0000000000..b6a2e53488
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test/definitions/test_res.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('test-definition')
diff --git a/knife/spec/data/run_context/cookbooks/test/providers/provider.rb b/knife/spec/data/run_context/cookbooks/test/providers/provider.rb
new file mode 100644
index 0000000000..abf0bd24e9
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test/providers/provider.rb
@@ -0,0 +1 @@
+LibraryLoadOrder.record('test-provider')
diff --git a/knife/spec/data/run_context/cookbooks/test/recipes/default.rb b/knife/spec/data/run_context/cookbooks/test/recipes/default.rb
new file mode 100644
index 0000000000..d769dc826d
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test/recipes/default.rb
@@ -0,0 +1,5 @@
+
+cat "einstein" do
+ pretty_kitty true
+end
+
diff --git a/knife/spec/data/run_context/cookbooks/test/recipes/one.rb b/knife/spec/data/run_context/cookbooks/test/recipes/one.rb
new file mode 100644
index 0000000000..7795cc1d4a
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test/recipes/one.rb
@@ -0,0 +1,7 @@
+cat "loulou" do
+ pretty_kitty true
+end
+
+new_cat "birthday" do
+ pretty_kitty false
+end
diff --git a/knife/spec/data/run_context/cookbooks/test/recipes/two.rb b/knife/spec/data/run_context/cookbooks/test/recipes/two.rb
new file mode 100644
index 0000000000..01def1b2ac
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test/recipes/two.rb
@@ -0,0 +1,7 @@
+cat "peanut" do
+ pretty_kitty true
+end
+
+new_cat "fat peanut" do
+ pretty_kitty false
+end
diff --git a/knife/spec/data/run_context/cookbooks/test/resources/resource.rb b/knife/spec/data/run_context/cookbooks/test/resources/resource.rb
new file mode 100644
index 0000000000..54c99d2fb8
--- /dev/null
+++ b/knife/spec/data/run_context/cookbooks/test/resources/resource.rb
@@ -0,0 +1,3 @@
+unified_mode true
+
+LibraryLoadOrder.record('test-resource')
diff --git a/knife/spec/data/run_context/nodes/run_context.rb b/knife/spec/data/run_context/nodes/run_context.rb
new file mode 100644
index 0000000000..076d21ab89
--- /dev/null
+++ b/knife/spec/data/run_context/nodes/run_context.rb
@@ -0,0 +1,5 @@
+##
+# Nodes should have a unique name
+##
+name "compile"
+run_list "test", "test::one", "test::two"
diff --git a/knife/spec/data/sample_msu1.xml b/knife/spec/data/sample_msu1.xml
new file mode 100644
index 0000000000..cc68dbf060
--- /dev/null
+++ b/knife/spec/data/sample_msu1.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<unattend xmlns="urn:schemas-microsoft-com:unattend">
+ <servicing>
+ <package action="install">
+ <assemblyIdentity name="Package_for_KB2859903" version="10.2.1.0" language="neutral" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
+ <source location="%configsetroot%\IE10-Windows6.1-KB2859903-x86.CAB" />
+ </package>
+ </servicing>
+</unattend>
+
diff --git a/knife/spec/data/sample_msu2.xml b/knife/spec/data/sample_msu2.xml
new file mode 100644
index 0000000000..6f95e04f93
--- /dev/null
+++ b/knife/spec/data/sample_msu2.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<unattend xmlns="urn:schemas-microsoft-com:unattend">
+ <servicing>
+ <package action="install">
+ <assemblyIdentity name="Package_for_KB2859903" version="10.2.1.0" language="neutral" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
+ <source location="%configsetroot%\IE10-Windows6.1-KB2859903-x86.CAB" />
+ </package>
+ <package action="install">
+ <assemblyIdentity name="Package_for_abc" version="10.2.1.0" language="neutral" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
+ <source location="%configsetroot%\abc.CAB" />
+ </package>
+ </servicing>
+</unattend>
+
diff --git a/knife/spec/data/sample_msu3.xml b/knife/spec/data/sample_msu3.xml
new file mode 100644
index 0000000000..0ef09da206
--- /dev/null
+++ b/knife/spec/data/sample_msu3.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<unattend xmlns="urn:schemas-microsoft-com:unattend">
+ <servicing>
+ <package action="install">
+ <assemblyIdentity name="Package_for_KB2859903" version="10.2.1.0" language="neutral" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
+ <source location="%configsetroot%\IE10-Windows6.1-KB2859903-x86.CAB" />
+ </package>
+ </servicing>
+ <servicing>
+ <package action="install">
+ <assemblyIdentity name="Package_for_abc" version="10.2.1.0" language="neutral" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
+ <source location="%configsetroot%\abc.CAB" />
+ </package>
+ </servicing>
+</unattend>
+
diff --git a/knife/spec/data/search_queries_to_transform.txt b/knife/spec/data/search_queries_to_transform.txt
new file mode 100644
index 0000000000..4a05d5405e
--- /dev/null
+++ b/knife/spec/data/search_queries_to_transform.txt
@@ -0,0 +1,98 @@
+afield:[* TO *]
+content:afield__=__*
+
+afield:[a TO *]
+content:[afield__=__a TO afield__=__\ufff0]
+
+afield:[* TO b]
+content:[afield__=__ TO afield__=__b]
+
+*:*
+*:*
+
+role:mon
+content:role__=__mon
+
+role:mon AND role:prod
+content:role__=__mon AND content:role__=__prod
+
+run_list:role\[rubberband\] AND run_list:role\[whale\]
+content:run_list__=__role\[rubberband\] AND content:run_list__=__role\[whale\]
+
+sharable_server:[* TO *]
+content:sharable_server__=__*
+
+run_list:role\[nfs_server\] AND sharable_server:[* TO *]
+content:run_list__=__role\[nfs_server\] AND content:sharable_server__=__*
+
+run_list:role\[nfs_server\] AND sharable_server:[* TO *]
+content:run_list__=__role\[nfs_server\] AND content:sharable_server__=__*
+
+(role:prod AND x_y:true)
+(content:role__=__prod AND content:x_y__=__true)
+
+hostname:[* TO *] AND role:prod
+content:hostname__=__* AND content:role__=__prod
+
+role:t_mem AND role:prod NOT hostname:ip-1-2-3-4
+content:role__=__t_mem AND content:role__=__prod NOT content:hostname__=__ip-1-2-3-4
+
+ohai_time:[1234.567 TO *]
+content:[ohai_time__=__1234.567 TO ohai_time__=__\ufff0]
+
+ohai_time:{1234.567 TO *}
+content:{ohai_time__=__1234.567 TO ohai_time__=__\ufff0}
+
+ohai_time:[* TO baz]
+content:[ohai_time__=__ TO ohai_time__=__baz]
+
+ohai_time:{* TO baz}
+content:{ohai_time__=__ TO ohai_time__=__baz}
+
+tags:apples*.for.eating.com
+content:tags__=__apples*.for.eating.com
+
+role:safe AND ohai_time:[1234.567 TO *] AND whiz_bang:x5
+content:role__=__safe AND content:[ohai_time__=__1234.567 TO ohai_time__=__\ufff0] AND content:whiz_bang__=__x5
+
+role:safe AND ohai_time:[* TO 1234.567] AND whiz_bang:x5
+content:role__=__safe AND content:[ohai_time__=__ TO ohai_time__=__1234.567] AND content:whiz_bang__=__x5
+
+animal:[ape TO zebra]
+content:[animal__=__ape TO animal__=__zebra]
+
+animal:{ape TO zebra}
+content:{animal__=__ape TO animal__=__zebra}
+
+((value:[1 TO 3] OR nested_b1_a2_a3:B1_A2_A3-c) OR value:[5 TO *])
+((content:[value__=__1 TO value__=__3] OR content:nested_b1_a2_a3__=__B1_A2_A3-c) OR content:[value__=__5 TO value__=__\ufff0])
+
+((value:{1 TO 3} OR value:{1 TO 3}) OR run_list:recipe\[alpha\])
+((content:{value__=__1 TO value__=__3} OR content:{value__=__1 TO value__=__3}) OR content:run_list__=__recipe\[alpha\])
+
+words:"one two three"
+content:"words__=__one two three"
+
+words:"one \"two\" three"
+content:"words__=__one \"two\" three"
+
+words:"\"one two\" three"
+content:"words__=__\"one two\" three"
+
+words:"one two \"three\""
+content:"words__=__one two \"three\""
+
+words:"one two \"three\"" OR words:"\"one two\" three" AND words:"one \"two\" three"
+content:"words__=__one two \"three\"" OR content:"words__=__\"one two\" three" AND content:"words__=__one \"two\" three"
+
+words:\"*
+content:words__=__\"*
+
+-version:0.9.12
+-content:version__=__0.9.12
+
+!version:0.9.12
+NOT content:version__=__0.9.12
+
+ec2:*
+content:ec2__=__*
diff --git a/knife/spec/data/shef-config.rb b/knife/spec/data/shef-config.rb
new file mode 100644
index 0000000000..1ace5efd21
--- /dev/null
+++ b/knife/spec/data/shef-config.rb
@@ -0,0 +1,11 @@
+ohai[:disabled_plugins] << "darwin::system_profiler" << "darwin::kernel" << "darwin::ssh_host_key" << "network_listeners"
+ohai[:disabled_plugins] << "virtualization" << "darwin::virtualization"
+ohai[:disabled_plugins] << "darwin::uptime" << "darwin::filesystem" << "dmi" << "languages" << "perl" << "python" << "java"
+ohai[:disabled_plugins] << "linux::block_device" << "linux::kernel" << "linux::ssh_host_key" << "linux::virtualization"
+ohai[:disabled_plugins] << "linux::cpu" << "linux::memory" << "ec2" << "rackspace" << "eucalyptus" << "ip_scopes"
+ohai[:disabled_plugins] << "solaris2::cpu" << "solaris2::dmi" << "solaris2::filesystem" << "solaris2::kernel"
+ohai[:disabled_plugins] << "solaris2::virtualization" << "solaris2::zpools"
+ohai[:disabled_plugins] << "c" << "php" << "mono" << "groovy" << "lua" << "erlang"
+ohai[:disabled_plugins] << "kernel" << "linux::filesystem" << "ruby"
+chef_repo_path __dir__
+cookbook_path "#{chef_repo_path}/cookbooks"
diff --git a/knife/spec/data/snap_package/async_result_success.json b/knife/spec/data/snap_package/async_result_success.json
new file mode 100644
index 0000000000..09781ad5bd
--- /dev/null
+++ b/knife/spec/data/snap_package/async_result_success.json
@@ -0,0 +1,6 @@
+{
+ "type": "async",
+ "status-code": 202,
+ "status": "Accepted",
+ "change": "401"
+}
diff --git a/knife/spec/data/snap_package/change_id_result.json b/knife/spec/data/snap_package/change_id_result.json
new file mode 100644
index 0000000000..cd823d7cbc
--- /dev/null
+++ b/knife/spec/data/snap_package/change_id_result.json
@@ -0,0 +1,175 @@
+{
+ "type": "sync",
+ "status-code": 200,
+ "status": "OK",
+ "result": {
+ "id": "15",
+ "kind": "install-snap",
+ "summary": "Install snap \"hello\"",
+ "status": "Done",
+ "tasks": [{
+ "id": "165",
+ "kind": "prerequisites",
+ "summary": "Ensure prerequisites for \"hello\" are available",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.22104314Z",
+ "ready-time": "2018-09-22T20:25:25.231090966Z"
+ }, {
+ "id": "166",
+ "kind": "download-snap",
+ "summary": "Download snap \"hello\" (20) from channel \"stable\"",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221070859Z",
+ "ready-time": "2018-09-22T20:25:25.24321909Z"
+ }, {
+ "id": "167",
+ "kind": "validate-snap",
+ "summary": "Fetch and check assertions for snap \"hello\" (20)",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221080163Z",
+ "ready-time": "2018-09-22T20:25:25.55308904Z"
+ }, {
+ "id": "168",
+ "kind": "mount-snap",
+ "summary": "Mount snap \"hello\" (20)",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221082984Z",
+ "ready-time": "2018-09-22T20:25:25.782452658Z"
+ }, {
+ "id": "169",
+ "kind": "copy-snap-data",
+ "summary": "Copy snap \"hello\" data",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221085677Z",
+ "ready-time": "2018-09-22T20:25:25.790911883Z"
+ }, {
+ "id": "170",
+ "kind": "setup-profiles",
+ "summary": "Setup snap \"hello\" (20) security profiles",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221088261Z",
+ "ready-time": "2018-09-22T20:25:25.972796111Z"
+ }, {
+ "id": "171",
+ "kind": "link-snap",
+ "summary": "Make snap \"hello\" (20) available to the system",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221090669Z",
+ "ready-time": "2018-09-22T20:25:25.986931331Z"
+ }, {
+ "id": "172",
+ "kind": "auto-connect",
+ "summary": "Automatically connect eligible plugs and slots of snap \"hello\"",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221093357Z",
+ "ready-time": "2018-09-22T20:25:25.996914144Z"
+ }, {
+ "id": "173",
+ "kind": "set-auto-aliases",
+ "summary": "Set automatic aliases for snap \"hello\"",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221097651Z",
+ "ready-time": "2018-09-22T20:25:26.009155888Z"
+ }, {
+ "id": "174",
+ "kind": "setup-aliases",
+ "summary": "Setup snap \"hello\" aliases",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221100379Z",
+ "ready-time": "2018-09-22T20:25:26.021062388Z"
+ }, {
+ "id": "175",
+ "kind": "run-hook",
+ "summary": "Run install hook of \"hello\" snap if present",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221103116Z",
+ "ready-time": "2018-09-22T20:25:26.031383884Z"
+ }, {
+ "id": "176",
+ "kind": "start-snap-services",
+ "summary": "Start snap \"hello\" (20) services",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221110251Z",
+ "ready-time": "2018-09-22T20:25:26.039564637Z"
+ }, {
+ "id": "177",
+ "kind": "run-hook",
+ "summary": "Run configure hook of \"hello\" snap if present",
+ "status": "Done",
+ "progress": {
+ "label": "",
+ "done": 1,
+ "total": 1
+ },
+ "spawn-time": "2018-09-22T20:25:25.221115952Z",
+ "ready-time": "2018-09-22T20:25:26.05069451Z"
+ }
+ ],
+ "ready": true,
+ "spawn-time": "2018-09-22T20:25:25.221130149Z",
+ "ready-time": "2018-09-22T20:25:26.050696298Z",
+ "data": {
+ "snap-names": ["hello"]
+ }
+ }
+}
diff --git a/knife/spec/data/snap_package/find_result_failure.json b/knife/spec/data/snap_package/find_result_failure.json
new file mode 100644
index 0000000000..ec0d82a3b8
--- /dev/null
+++ b/knife/spec/data/snap_package/find_result_failure.json
@@ -0,0 +1,10 @@
+{
+ "type": "error",
+ "status-code": 404,
+ "status": "Not Found",
+ "result": {
+ "message": "snap not found",
+ "kind": "snap-not-found",
+ "value": "hello2"
+ }
+}
diff --git a/knife/spec/data/snap_package/find_result_success.json b/knife/spec/data/snap_package/find_result_success.json
new file mode 100644
index 0000000000..f19f24dcef
--- /dev/null
+++ b/knife/spec/data/snap_package/find_result_success.json
@@ -0,0 +1,70 @@
+{
+ "type": "sync",
+ "status-code": 200,
+ "status": "OK",
+ "result": [{
+ "id": "mVyGrEwiqSi5PugCwyH7WgpoQLemtTd6",
+ "title": "hello",
+ "summary": "GNU Hello, the \"hello world\" snap",
+ "description": "GNU hello prints a friendly greeting. This is part of the snapcraft tour at https://snapcraft.io/",
+ "download-size": 65536,
+ "name": "hello",
+ "publisher": {
+ "id": "canonical",
+ "username": "canonical",
+ "display-name": "Canonical",
+ "validation": "verified"
+ },
+ "developer": "canonical",
+ "status": "available",
+ "type": "app",
+ "version": "2.10",
+ "channel": "stable",
+ "ignore-validation": false,
+ "revision": "20",
+ "confinement": "strict",
+ "private": false,
+ "devmode": false,
+ "jailmode": false,
+ "contact": "mailto:snaps@canonical.com",
+ "license": "GPL-3.0",
+ "channels": {
+ "latest/beta": {
+ "revision": "29",
+ "confinement": "strict",
+ "version": "2.10.1",
+ "channel": "beta",
+ "epoch": "0",
+ "size": 65536
+ },
+ "latest/candidate": {
+ "revision": "20",
+ "confinement": "strict",
+ "version": "2.10",
+ "channel": "candidate",
+ "epoch": "0",
+ "size": 65536
+ },
+ "latest/edge": {
+ "revision": "34",
+ "confinement": "strict",
+ "version": "2.10.42",
+ "channel": "edge",
+ "epoch": "0",
+ "size": 65536
+ },
+ "latest/stable": {
+ "revision": "20",
+ "confinement": "strict",
+ "version": "2.10",
+ "channel": "stable",
+ "epoch": "0",
+ "size": 65536
+ }
+ },
+ "tracks": ["latest"]
+ }
+ ],
+ "sources": ["store"],
+ "suggested-currency": "USD"
+}
diff --git a/knife/spec/data/snap_package/get_by_name_result_failure.json b/knife/spec/data/snap_package/get_by_name_result_failure.json
new file mode 100644
index 0000000000..c8c1bb7342
--- /dev/null
+++ b/knife/spec/data/snap_package/get_by_name_result_failure.json
@@ -0,0 +1,10 @@
+{
+ "type": "error",
+ "status-code": 404,
+ "status": "Not Found",
+ "result": {
+ "message": "snap not installed",
+ "kind": "snap-not-found",
+ "value": "aws-cliasdfasdf"
+ }
+}
diff --git a/knife/spec/data/snap_package/get_by_name_result_success.json b/knife/spec/data/snap_package/get_by_name_result_success.json
new file mode 100644
index 0000000000..05517362ab
--- /dev/null
+++ b/knife/spec/data/snap_package/get_by_name_result_success.json
@@ -0,0 +1,38 @@
+{
+ "type": "sync",
+ "status-code": 200,
+ "status": "OK",
+ "result": {
+ "id": "CRrJViJiSuDcCkU31G0xpNRVNaj4P960",
+ "summary": "Universal Command Line Interface for Amazon Web Services",
+ "description": "This package provides a unified command line interface to Amazon Web\nServices.\n",
+ "installed-size": 15851520,
+ "name": "aws-cli",
+ "publisher": {
+ "id": "S7iQ7mKDXBDliQqRcgefvc2TKXIH9pYk",
+ "username": "aws",
+ "display-name": "Amazon Web Services",
+ "validation": "verified"
+ },
+ "developer": "aws",
+ "status": "active",
+ "type": "app",
+ "version": "1.15.71",
+ "channel": "",
+ "tracking-channel": "stable",
+ "ignore-validation": false,
+ "revision": "135",
+ "confinement": "classic",
+ "private": false,
+ "devmode": false,
+ "jailmode": false,
+ "apps": [{
+ "snap": "aws-cli",
+ "name": "aws"
+ }
+ ],
+ "contact": "",
+ "mounted-from": "/var/lib/snapd/snaps/aws-cli_135.snap",
+ "install-date": "2018-09-17T20:39:38.516Z"
+ }
+}
diff --git a/knife/spec/data/snap_package/get_conf_success.json b/knife/spec/data/snap_package/get_conf_success.json
new file mode 100644
index 0000000000..e83ffbfbe3
--- /dev/null
+++ b/knife/spec/data/snap_package/get_conf_success.json
@@ -0,0 +1,10 @@
+{
+ "type": "sync",
+ "status-code": 200,
+ "status": "OK",
+ "result": {
+ "address": "0.0.0.0",
+ "allow-privileged": true,
+ "anonymous-auth": false
+ }
+}
diff --git a/knife/spec/data/snap_package/result_failure.json b/knife/spec/data/snap_package/result_failure.json
new file mode 100644
index 0000000000..e65120ad33
--- /dev/null
+++ b/knife/spec/data/snap_package/result_failure.json
@@ -0,0 +1,9 @@
+{
+ "type": "error",
+ "status-code": 401,
+ "status": "Unauthorized",
+ "result": {
+ "message": "access denied",
+ "kind": "login-required"
+ }
+}
diff --git a/knife/spec/data/ssl/5e707473.0 b/knife/spec/data/ssl/5e707473.0
new file mode 100644
index 0000000000..5c5cf87e11
--- /dev/null
+++ b/knife/spec/data/ssl/5e707473.0
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC6DCCAlGgAwIBAgIJANlevg7kzqvpMA0GCSqGSIb3DQEBBQUAMFcxITAfBgNV
+BAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEeMBwGA1UECxMVU25ha2VvaWwg
+Q2VydGlmaWNhdGVzMRIwEAYDVQQDEwlsb2NhbGhvc3QwHhcNMDkxMjE5MTkxODUy
+WhcNMTAwMTE4MTkxODUyWjBXMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0
+eSBMdGQxHjAcBgNVBAsTFVNuYWtlb2lsIENlcnRpZmljYXRlczESMBAGA1UEAxMJ
+bG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhm9En1DL3aC4H
+j5/SA6FXm6B/0AoVzoPfWX2rpkRcz/XX24JEhQhLXStjhDr4p/IrARnZ8shy0MA4
+wNpNPEn5c0RvqKypHzX+AeQkBx8J1/8vnMAoM9b/4pd0FqgRW1UbhvqQDzkWmVyK
+Tz5yCiTntxDzudAtHlTo8V6E7UEDkwIDAQABo4G7MIG4MB0GA1UdDgQWBBTmAcyA
+CqQblJ1L4sOIzmkdIAtY6jCBiAYDVR0jBIGAMH6AFOYBzIAKpBuUnUviw4jOaR0g
+C1jqoVukWTBXMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxHjAc
+BgNVBAsTFVNuYWtlb2lsIENlcnRpZmljYXRlczESMBAGA1UEAxMJbG9jYWxob3N0
+ggkA2V6+DuTOq+kwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQBe4f9R
+s0g5GCFekabzl9AHvIn4ITxenvuyaNX9f2BJbdgoD03wlGycBxjbC57RjFVfetu7
+mtUYuJSx7iojBSC+LzotGptrG9d2BxrWOKBfF2K+dyoIG8kZL5aLfS0be6Cc5O3c
+L/IPadJhBu/EfyGI2vL1l8GspXdOxaFzHprpgA==
+-----END CERTIFICATE-----
diff --git a/knife/spec/data/ssl/binary/chef-rspec-der.cert b/knife/spec/data/ssl/binary/chef-rspec-der.cert
new file mode 100644
index 0000000000..e49df6252a
--- /dev/null
+++ b/knife/spec/data/ssl/binary/chef-rspec-der.cert
Binary files differ
diff --git a/knife/spec/data/ssl/binary/chef-rspec-der.key b/knife/spec/data/ssl/binary/chef-rspec-der.key
new file mode 100644
index 0000000000..d8adadc5c9
--- /dev/null
+++ b/knife/spec/data/ssl/binary/chef-rspec-der.key
Binary files differ
diff --git a/knife/spec/data/ssl/chef-rspec.cert b/knife/spec/data/ssl/chef-rspec.cert
new file mode 100644
index 0000000000..9215a39362
--- /dev/null
+++ b/knife/spec/data/ssl/chef-rspec.cert
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEkjCCA3qgAwIBAgIJAOEDC5RFoEUZMA0GCSqGSIb3DQEBCwUAMIGMMQswCQYD
+VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHU2VhdHRsZTEN
+MAsGA1UEChMEQ2hlZjETMBEGA1UECxMKZGV2ZWxvcGVyczESMBAGA1UEAxMJa2Fs
+bGlzdGVjMR4wHAYJKoZIhvcNAQkBFg9kYW5Ab3BzY29kZS5jb20wHhcNMjAwODEy
+MTEyOTUxWhcNMzAwODEwMTEyOTUxWjCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
+Cldhc2hpbmd0b24xEDAOBgNVBAcTB1NlYXR0bGUxDTALBgNVBAoTBENoZWYxEzAR
+BgNVBAsTCmRldmVsb3BlcnMxEjAQBgNVBAMTCWthbGxpc3RlYzEeMBwGCSqGSIb3
+DQEJARYPZGFuQG9wc2NvZGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAw5l9EtBHsJrb5AIxARP695an3v+509gOXRKnjWIRnU+knbdTnEdjlGGG
+SxuFR7Fnp2OM8ed7iPIKSrcM0vQ+g7vYKCv5Z8UR3sbLY8UHm9AgZ/bLAHEHS2if
+1WHPD5DOe1B7HwW0IfEiW4/WakkVn4uoWw5rCZ87f4YCrETomXIo1n/rMFHf+yoY
+guuEfGQxRcQdlEZM9YMlMByQvXlVR5IVhpiMHBCyV6KzxjZVCgTlvS8nPMiiHpoO
+pgB6BGEQ/nn4Kapk40baPqpT4EP/DnBnbhhR3kBQ6MQRlh7bl5vjH5xFSFwGUUA9
+IcaDTwfliD27bo36aMvcBhrsmbSwqwIDAQABo4H0MIHxMAwGA1UdEwQFMAMBAf8w
+HQYDVR0OBBYEFLzxnG28b4VO7VT5UUDjt9/PBK1uMIHBBgNVHSMEgbkwgbaAFLzx
+nG28b4VO7VT5UUDjt9/PBK1uoYGSpIGPMIGMMQswCQYDVQQGEwJVUzETMBEGA1UE
+CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHU2VhdHRsZTENMAsGA1UEChMEQ2hlZjET
+MBEGA1UECxMKZGV2ZWxvcGVyczESMBAGA1UEAxMJa2FsbGlzdGVjMR4wHAYJKoZI
+hvcNAQkBFg9kYW5Ab3BzY29kZS5jb22CCQDhAwuURaBFGTANBgkqhkiG9w0BAQsF
+AAOCAQEAoTCRzUbZOPrJdpd928fQPt/HsYODDmgWQJIPucdLKmlY5wb3zSc1B5H6
+zBUmSFylnDLKhZlO+gojBuQDhr2h9bMXn8RvE0A/Dqq9XcNsblMn0HjoJmjv/x8Q
+wFfrwIWj1wHoGHromkJaedWCRGlVW1oLZa99JmQCNee4bjcwkK2H0xRqX8STbqJV
+z+uEBf5fDc4EioULwfxa6B15XDD09k14uHtlV6JwTmahDjpdKV/ICKBi/WN0aQg1
+9k7OAkW5cnzmS6uFFjrvWuNy4ey4j1c4U5GogxEgCsattshHNO+icWRCN2gPg2Nx
+SKEXNcUA4jRWGF7PRgY/oyjULObFqw==
+-----END CERTIFICATE-----
diff --git a/knife/spec/data/ssl/chef-rspec.key b/knife/spec/data/ssl/chef-rspec.key
new file mode 100644
index 0000000000..29aaecf2a6
--- /dev/null
+++ b/knife/spec/data/ssl/chef-rspec.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAw5l9EtBHsJrb5AIxARP695an3v+509gOXRKnjWIRnU+knbdT
+nEdjlGGGSxuFR7Fnp2OM8ed7iPIKSrcM0vQ+g7vYKCv5Z8UR3sbLY8UHm9AgZ/bL
+AHEHS2if1WHPD5DOe1B7HwW0IfEiW4/WakkVn4uoWw5rCZ87f4YCrETomXIo1n/r
+MFHf+yoYguuEfGQxRcQdlEZM9YMlMByQvXlVR5IVhpiMHBCyV6KzxjZVCgTlvS8n
+PMiiHpoOpgB6BGEQ/nn4Kapk40baPqpT4EP/DnBnbhhR3kBQ6MQRlh7bl5vjH5xF
+SFwGUUA9IcaDTwfliD27bo36aMvcBhrsmbSwqwIDAQABAoIBAQC+hddKaA4se+sL
+4QaSoj+mwtypXjZHnv/+sJj8IjY+IMGbzmJmqzLX6VbB+gCMoMTySwmS54NxFTHp
+LPwUz0vFTUdzecHpzg9mDAU5HUYYA1ZNbhq2R2JvlW16j1b9NnOpse77fLbFCPgK
+b8TOqnmheot2hkjEipGN2Z7o5gYaz1/3PtolkP1ypCTG6Bh7V3ohBLBIEdjA552o
+HNGe3t6PpvoNtBqaeb/j/SAOvg+8DGF1WQtE+5Y1koSlhABYWkHzHC1fHAzRMSHH
+ZMfKOQNusRgBRNJabdVqkuTbvyRCQEb2YGQxPPYV2C+AxAlh3APeYTg90vUqAq/3
+ivNdilcBAoGBAOLELc0mcTftDbIMWVnrzAGAJOCMz3FkwGcV8nqNeA3R77e3pWL2
+5+bKadWQGjjpR3ZEYt/RxHsoGCW3NtM44icxqVCTPW/unp2xqadjuvcsKrxk+1wD
+OdvVrwcd/N+KzgXO+Hm7xbV/loFms3ueGfCRbOueQyP4dj9MyOBGlO2hAoGBANzQ
+u8IrZBG0DL8YFdmjw4YWUENIOtABPU1qHo/sugTQjI9K3/E3LA7aaGnl2P//1tao
+SR/aP/To90H6D989/JomhkEKKA+DyL1sRL1NMdtWwrKdEq32W8fUN0JEA+Q1FMsd
+Hk6Ix+KrZVg9cTb9HoGikDxeHW3pPKDWaEkWIQLLAoGAD13N4L3/JBQLPop5r487
+9soRNao1EHEMXK/vC4D0prMYNHHcYjVrB4el3lPygvLD5e7CaHpVfyb7Y+rjazLK
+mG9UEuK3YhNgaj00yuQGMmOqzbNmGRka3ZvATZIppZhJV7lruwwPXLo1n7Uu6myP
+Q28HW3wQ/qoCkU2JuzDtPKECgYBUrYcTEuixEUbCEU5vw6k7RltJMe27zn3frg5C
+Sxmatw7v9Fqkee/fUkowMgBhS47rimVgXaWhGaWYG3jytyajRpq9XlO2f2b/nQFP
+RscTwdWwASQkqhDQNMVsGAEWBnUO3v+8Rh/BANFAYW+FEtQcCmcdf0nx2DtzwkUD
+ogTOuQKBgCbEg+/ND/p8xKwY9LtjLKnrQSL5tSH/7prhLJvVVdW7FMRfKSp1t2xc
+kfJFqO1Lcf2j7hiclval3xDoWUretNQ5379T0Ob30WuIomSfeqcxJjCUtyN3fUqr
+z/QG9dk/23OOYJhRgAmttBDqpk5uB5mOQgSftdELNyw0EOyNIBfZ
+-----END RSA PRIVATE KEY-----
diff --git a/knife/spec/data/ssl/key.pem b/knife/spec/data/ssl/key.pem
new file mode 100644
index 0000000000..50b8fd83c8
--- /dev/null
+++ b/knife/spec/data/ssl/key.pem
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQDhm9En1DL3aC4Hj5/SA6FXm6B/0AoVzoPfWX2rpkRcz/XX24JE
+hQhLXStjhDr4p/IrARnZ8shy0MA4wNpNPEn5c0RvqKypHzX+AeQkBx8J1/8vnMAo
+M9b/4pd0FqgRW1UbhvqQDzkWmVyKTz5yCiTntxDzudAtHlTo8V6E7UEDkwIDAQAB
+AoGAGicC1tgdVFqqQ0wd3a14DXzH3SkTkjWPSdvI2pX6hLvCptQWRLUbIglZ1z5j
+y6FETEHjakVfgRe7wJhyddOQS3eeVt/aK0xBHz/JiJuIF+NzbJT9t01nPV21abYU
+lWIhWV8Ja39a5LKV6hee0TTYdAub7BVQ95kwrqMqRcDoXHECQQDxpAgq925Cmlz1
+0Q1WZq2A/o8oqPvPS1FulPK2OgyOyQSK+DdcK2xUKGWMn0m9fDLLzj/pe/H3dN1I
+b8Z/iiWrAkEA7wPlesZX3GzfqQLd6GYGBa4IdrV5dHdeoCCVRnkFr06KjcqpAhg1
+7i0T9frSC5EfRCfbGNgo4eutT9+D7HJhuQJAZeDBrNPbQetxDBbSp73sovkwhHUS
+jah0scnMtvWse7rW1nymYo7QQn8xqWMzJNerVvAjVB50ut8juLmfmAA3twJAQy9/
+NBHI5Mcd365Unlz/WF1hN60vZNOhH7XJADRIqsyTGeRbuaEAl+DH+Z71qBa1CT2C
+0usAIvFSmF8mADLu0QJAHSSh6zLNInvkhDjYAmEu3oeFQgQ4Rp7oiMaBZ6VVuOMo
+4GU9CA18iI75NaO7FOfquJPkIJ0li0xadVofUpaJcg==
+-----END RSA PRIVATE KEY-----
diff --git a/knife/spec/data/ssl/private_key.pem b/knife/spec/data/ssl/private_key.pem
new file mode 100644
index 0000000000..b6636604a8
--- /dev/null
+++ b/knife/spec/data/ssl/private_key.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA49TA0y81ps0zxkOpmf5V4/c4IeR5yVyQFpX3JpxO4TquwnRh
+8VSUhrw8kkTLmB3cS39Db+3HadvhoqCEbqPE6915kXSuk/cWIcNozujLK7tkuPEy
+YVsyTioQAddSdfe+8EhQVf3oHxaKmUd6waXrWqYCnhxgOjxocenREYNhZ/OETIei
+PbOku47vB4nJK/0GhKBytL2XnsRgfKgDxf42BqAi1jglIdeq8lAWZNF9TbNBU21A
+O1iuT7Pm6LyQujhggPznR5FJhXKRUARXBJZawxpGV4dGtdcahwXNE4601aXPra+x
+PcRd2puCNoEDBzgVuTSsLYeKBDMSfs173W1QYwIDAQABAoIBAGF05q7vqOGbMaSD
+2Q7YbuE/JTHKTBZIlBI1QC2x+0P5GDxyEFttNMOVzcs7xmNhkpRw8eX1LrInrpMk
+WsIBKAFFEfWYlf0RWtRChJjNl+szE9jQxB5FJnWtJH/FHa78tR6PsF24aQyzVcJP
+g0FGujBihwgfV0JSCNOBkz8MliQihjQA2i8PGGmo4R4RVzGfxYKTIq9vvRq/+QEa
+Q4lpVLoBqnENpnY/9PTl6JMMjW2b0spbLjOPVwDaIzXJ0dChjNXo15K5SHI5mALJ
+I5gN7ODGb8PKUf4619ez194FXq+eob5YJdilTFKensIUvt3YhP1ilGMM+Chi5Vi/
+/RCTw3ECgYEA9jTw4wv9pCswZ9wbzTaBj9yZS3YXspGg26y6Ohq3ZmvHz4jlT6uR
+xK+DDcUiK4072gci8S4Np0fIVS7q6ivqcOdzXPrTF5/j+MufS32UrBbUTPiM1yoO
+ECcy+1szl/KoLEV09bghPbvC58PFSXV71evkaTETYnA/F6RK12lEepcCgYEA7OSy
+bsMrGDVU/MKJtwqyGP9ubA53BorM4Pp9VVVSCrGGVhb9G/XNsjO5wJC8J30QAo4A
+s59ZzCpyNRy046AB8jwRQuSwEQbejSdeNgQGXhZ7aIVUtuDeFFdaIz/zjVgxsfj4
+DPOuzieMmJ2MLR4F71ocboxNoDI7xruPSE8dDhUCgYA3vx732cQxgtHwAkeNPJUz
+dLiE/JU7CnxIoSB9fYUfPLI+THnXgzp7NV5QJN2qzMzLfigsQcg3oyo6F2h7Yzwv
+GkjlualIRRzCPaCw4Btkp7qkPvbs1QngIHALt8fD1N69P3DPHkTwjG4COjKWgnJq
+qoHKS6Fe/ZlbigikI6KsuwKBgQCTlSLoyGRHr6oj0hqz01EDK9ciMJzMkZp0Kvn8
+OKxlBxYW+jlzut4MQBdgNYtS2qInxUoAnaz2+hauqhSzntK3k955GznpUatCqx0R
+b857vWviwPX2/P6+E3GPdl8IVsKXCvGWOBZWTuNTjQtwbDzsUepWoMgXnlQJSn5I
+YSlLxQKBgQD16Gw9kajpKlzsPa6XoQeGmZALT6aKWJQlrKtUQIrsIWM0Z6eFtX12
+2jjHZ0awuCQ4ldqwl8IfRogWMBkHOXjTPVK0YKWWlxMpD/5+bGPARa5fir8O1Zpo
+Y6S6MeZ69Rp89ma4ttMZ+kwi1+XyHqC/dlcVRW42Zl5Dc7BALRlJjQ==
+-----END RSA PRIVATE KEY-----
diff --git a/knife/spec/data/ssl/private_key_with_whitespace.pem b/knife/spec/data/ssl/private_key_with_whitespace.pem
new file mode 100644
index 0000000000..b393a3f13d
--- /dev/null
+++ b/knife/spec/data/ssl/private_key_with_whitespace.pem
@@ -0,0 +1,32 @@
+
+
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA49TA0y81ps0zxkOpmf5V4/c4IeR5yVyQFpX3JpxO4TquwnRh
+8VSUhrw8kkTLmB3cS39Db+3HadvhoqCEbqPE6915kXSuk/cWIcNozujLK7tkuPEy
+YVsyTioQAddSdfe+8EhQVf3oHxaKmUd6waXrWqYCnhxgOjxocenREYNhZ/OETIei
+PbOku47vB4nJK/0GhKBytL2XnsRgfKgDxf42BqAi1jglIdeq8lAWZNF9TbNBU21A
+O1iuT7Pm6LyQujhggPznR5FJhXKRUARXBJZawxpGV4dGtdcahwXNE4601aXPra+x
+PcRd2puCNoEDBzgVuTSsLYeKBDMSfs173W1QYwIDAQABAoIBAGF05q7vqOGbMaSD
+2Q7YbuE/JTHKTBZIlBI1QC2x+0P5GDxyEFttNMOVzcs7xmNhkpRw8eX1LrInrpMk
+WsIBKAFFEfWYlf0RWtRChJjNl+szE9jQxB5FJnWtJH/FHa78tR6PsF24aQyzVcJP
+g0FGujBihwgfV0JSCNOBkz8MliQihjQA2i8PGGmo4R4RVzGfxYKTIq9vvRq/+QEa
+Q4lpVLoBqnENpnY/9PTl6JMMjW2b0spbLjOPVwDaIzXJ0dChjNXo15K5SHI5mALJ
+I5gN7ODGb8PKUf4619ez194FXq+eob5YJdilTFKensIUvt3YhP1ilGMM+Chi5Vi/
+/RCTw3ECgYEA9jTw4wv9pCswZ9wbzTaBj9yZS3YXspGg26y6Ohq3ZmvHz4jlT6uR
+xK+DDcUiK4072gci8S4Np0fIVS7q6ivqcOdzXPrTF5/j+MufS32UrBbUTPiM1yoO
+ECcy+1szl/KoLEV09bghPbvC58PFSXV71evkaTETYnA/F6RK12lEepcCgYEA7OSy
+bsMrGDVU/MKJtwqyGP9ubA53BorM4Pp9VVVSCrGGVhb9G/XNsjO5wJC8J30QAo4A
+s59ZzCpyNRy046AB8jwRQuSwEQbejSdeNgQGXhZ7aIVUtuDeFFdaIz/zjVgxsfj4
+DPOuzieMmJ2MLR4F71ocboxNoDI7xruPSE8dDhUCgYA3vx732cQxgtHwAkeNPJUz
+dLiE/JU7CnxIoSB9fYUfPLI+THnXgzp7NV5QJN2qzMzLfigsQcg3oyo6F2h7Yzwv
+GkjlualIRRzCPaCw4Btkp7qkPvbs1QngIHALt8fD1N69P3DPHkTwjG4COjKWgnJq
+qoHKS6Fe/ZlbigikI6KsuwKBgQCTlSLoyGRHr6oj0hqz01EDK9ciMJzMkZp0Kvn8
+OKxlBxYW+jlzut4MQBdgNYtS2qInxUoAnaz2+hauqhSzntK3k955GznpUatCqx0R
+b857vWviwPX2/P6+E3GPdl8IVsKXCvGWOBZWTuNTjQtwbDzsUepWoMgXnlQJSn5I
+YSlLxQKBgQD16Gw9kajpKlzsPa6XoQeGmZALT6aKWJQlrKtUQIrsIWM0Z6eFtX12
+2jjHZ0awuCQ4ldqwl8IfRogWMBkHOXjTPVK0YKWWlxMpD/5+bGPARa5fir8O1Zpo
+Y6S6MeZ69Rp89ma4ttMZ+kwi1+XyHqC/dlcVRW42Zl5Dc7BALRlJjQ==
+-----END RSA PRIVATE KEY-----
+
+
+
diff --git a/knife/spec/data/standalone_cookbook/Gemfile b/knife/spec/data/standalone_cookbook/Gemfile
new file mode 100644
index 0000000000..9c961848d8
--- /dev/null
+++ b/knife/spec/data/standalone_cookbook/Gemfile
@@ -0,0 +1 @@
+source "https://rubygems.org/" \ No newline at end of file
diff --git a/knife/spec/data/standalone_cookbook/chefignore b/knife/spec/data/standalone_cookbook/chefignore
new file mode 100644
index 0000000000..cd18e699c1
--- /dev/null
+++ b/knife/spec/data/standalone_cookbook/chefignore
@@ -0,0 +1,9 @@
+#
+# The ignore file allows you to skip files in cookbooks with the same name that appear
+# later in the search path.
+#
+
+recipes/ignoreme.rb
+ # comments can be indented
+ignored
+vendor/bundle/*
diff --git a/knife/spec/data/standalone_cookbook/recipes/default.rb b/knife/spec/data/standalone_cookbook/recipes/default.rb
new file mode 100644
index 0000000000..c2fa53be32
--- /dev/null
+++ b/knife/spec/data/standalone_cookbook/recipes/default.rb
@@ -0,0 +1,3 @@
+#
+# Nothing ot see here
+# \ No newline at end of file
diff --git a/knife/spec/data/standalone_cookbook/vendor/bundle/ruby/2.0.0/gems/multi_json-1.9.0/lib/multi_json.rb b/knife/spec/data/standalone_cookbook/vendor/bundle/ruby/2.0.0/gems/multi_json-1.9.0/lib/multi_json.rb
new file mode 100644
index 0000000000..3b992add1a
--- /dev/null
+++ b/knife/spec/data/standalone_cookbook/vendor/bundle/ruby/2.0.0/gems/multi_json-1.9.0/lib/multi_json.rb
@@ -0,0 +1 @@
+# This is a dummy ruby file \ No newline at end of file
diff --git a/knife/spec/data/templates/chef-seattle20160930-4388-1crv7ef.txt b/knife/spec/data/templates/chef-seattle20160930-4388-1crv7ef.txt
new file mode 100644
index 0000000000..f476ccd704
--- /dev/null
+++ b/knife/spec/data/templates/chef-seattle20160930-4388-1crv7ef.txt
@@ -0,0 +1 @@
+Do do do do, do do do do, do do do do, do do do do \ No newline at end of file
diff --git a/knife/spec/data/templates/chef-seattle20160930-4388-jjfoae.txt b/knife/spec/data/templates/chef-seattle20160930-4388-jjfoae.txt
new file mode 100644
index 0000000000..f476ccd704
--- /dev/null
+++ b/knife/spec/data/templates/chef-seattle20160930-4388-jjfoae.txt
@@ -0,0 +1 @@
+Do do do do, do do do do, do do do do, do do do do \ No newline at end of file
diff --git a/knife/spec/data/templates/chef-seattle20160930-4388-umeq2c.txt b/knife/spec/data/templates/chef-seattle20160930-4388-umeq2c.txt
new file mode 100644
index 0000000000..f476ccd704
--- /dev/null
+++ b/knife/spec/data/templates/chef-seattle20160930-4388-umeq2c.txt
@@ -0,0 +1 @@
+Do do do do, do do do do, do do do do, do do do do \ No newline at end of file
diff --git a/knife/spec/data/templates/failed.erb b/knife/spec/data/templates/failed.erb
new file mode 100644
index 0000000000..e077ac8684
--- /dev/null
+++ b/knife/spec/data/templates/failed.erb
@@ -0,0 +1,5 @@
+This is a template
+
+Which includes some content
+
+And will fail <%= nil[] %>
diff --git a/knife/spec/data/templates/seattle.txt b/knife/spec/data/templates/seattle.txt
new file mode 100644
index 0000000000..19f6290939
--- /dev/null
+++ b/knife/spec/data/templates/seattle.txt
@@ -0,0 +1 @@
+Seattle is a great town. Next time you visit, you should buy me a beer. \ No newline at end of file
diff --git a/knife/spec/data/trusted_certs/example.crt b/knife/spec/data/trusted_certs/example.crt
new file mode 100644
index 0000000000..832aebe2ec
--- /dev/null
+++ b/knife/spec/data/trusted_certs/example.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnoCCQDihI8kxGYTFTANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
+VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMRAwDgYDVQQKEwdZb3VD
+b3JwMRMwEQYDVQQLEwpPcGVyYXRpb25zMRYwFAYDVQQDEw1leGFtcGxlLmxvY2Fs
+MR0wGwYJKoZIhvcNAQkBFg5tZUBleGFtcGxlLmNvbTAeFw0xMzEwMTcxODAxMzVa
+Fw0yMzEwMTUxODAxMzVaMIGKMQswCQYDVQQGEwJVUzELMAkGA1UECBMCV0ExEDAO
+BgNVBAcTB1NlYXR0bGUxEDAOBgNVBAoTB1lvdUNvcnAxEzARBgNVBAsTCk9wZXJh
+dGlvbnMxFjAUBgNVBAMTDWV4YW1wbGUubG9jYWwxHTAbBgkqhkiG9w0BCQEWDm1l
+QGV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyKBo
+U+Bdni0xZK/NCzdLdi2X+TyW5eahbYMx+r1GDcVqCICvrthBCVLVFsQ8rvOHwTPi
+AxQJGxb9TLSXRgXQSlH6FLjIUceuOtpan3qYVJ1v7AxY4DgNvYBpbtJz5MQedJnT
+g2F+rXzkwaD6CWBqWHeGU0oP3r7bq1AMD6XEsK2w2/zHtG7TEnL45ARv1PsyrU5M
+ZAW/XyoMyq1k2Lpv7YR5kAvTq1+4RSt/it2RFE7R0AVbaQ0MeAnllfySiHHHlaOT
+FVd/qPSiGISxsUmmzA3Z08+0sfJwkrnJXbLscCBYndd7gMGgtczGjJtul0Ch3GFa
+/Pn5McjwF272+usJ1wIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCzPePWifWNECsG
+nL8on1AtFMkczE1/pdRS4YUl/Tc926MpezptSja8rL31+4Bom37/wYPG7HygtAQl
+R4FHpAtuqJKPOfjUmDNsIXRFnytrnflTpctDu/Nbj4PDCy01k/sTDUQt+s+lEBL8
+M8ArmfLZ8PCfAwnXmJQ5rggDFKqegjt6z1RsSglbMiASE7+KkpBnzaqH6fET6IQz
+WgAjv6WdRfwgfJjOTSX4XMpCSet9KaWmXExKrxiVng2Uu6E+ShVAyKaGMuc1B7VA
+oxnnVaVapFv5lOWucQr4KkC7EgaUZnyt8duOc8+Yvd+y3Xd2dcHUnmegRxly4jRV
+/lXbFAUb
+-----END CERTIFICATE-----
diff --git a/knife/spec/data/trusted_certs/example_no_cn.crt b/knife/spec/data/trusted_certs/example_no_cn.crt
new file mode 100644
index 0000000000..6b42b40d99
--- /dev/null
+++ b/knife/spec/data/trusted_certs/example_no_cn.crt
@@ -0,0 +1,36 @@
+-----BEGIN CERTIFICATE-----
+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
+oYdVLVWSjyoA2l4Xb4LdexAgCg==
+-----END CERTIFICATE-----
diff --git a/knife/spec/data/trusted_certs/intermediate.pem b/knife/spec/data/trusted_certs/intermediate.pem
new file mode 100644
index 0000000000..78148b0fcf
--- /dev/null
+++ b/knife/spec/data/trusted_certs/intermediate.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEjzCCA3egAwIBAgIQBp4dt3/PHfupevXlyaJANzANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0xMzAzMDgxMjAwMDBaFw0yMzAzMDgxMjAwMDBaMEgxCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxIjAgBgNVBAMTGURpZ2lDZXJ0IFNlY3Vy
+ZSBTZXJ2ZXIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7V+Qh
+qdWbYDd+jqFhf4HiGsJ1ZNmRUAvkNkQkbjDSm3on+sJqrmpwCTi5IArIZRBKiKwx
+8tyS8mOhXYBjWYCSIxzm73ZKUDXJ2HE4ue3w5kKu0zgmeTD5IpTG26Y/QXiQ2N5c
+fml9+JAVOtChoL76srIZodgr0c6/a91Jq6OS/rWryME+7gEA2KlEuEJziMNh9atK
+gygK0tRJ+mqxzd9XLJTl4sqDX7e6YlwvaKXwwLn9K9HpH9gaYhW9/z2m98vv5ttl
+LyU47PvmIGZYljQZ0hXOIdMkzNkUb9j+Vcfnb7YPGoxJvinyulqagSY3JG/XSBJs
+Lln1nBi72fZo4t9FAgMBAAGjggFaMIIBVjASBgNVHRMBAf8ECDAGAQH/AgEAMA4G
+A1UdDwEB/wQEAwIBhjA0BggrBgEFBQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6
+Ly9vY3NwLmRpZ2ljZXJ0LmNvbTB7BgNVHR8EdDByMDegNaAzhjFodHRwOi8vY3Js
+My5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9iYWxSb290Q0EuY3JsMDegNaAzhjFo
+dHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9iYWxSb290Q0EuY3Js
+MD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5k
+aWdpY2VydC5jb20vQ1BTMB0GA1UdDgQWBBSQcds363PI79zVHhK2NLorWqCmkjAf
+BgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3RVTANBgkqhkiG9w0BAQUFAAOC
+AQEAMM7RlVEArgYLoQ4CwBestn+PIPZAdXQczHixpE/q9NDEnaLegQcmH0CIUfAf
+z7dMQJnQ9DxxmHOIlywZ126Ej6QfnFog41FcsMWemWpPyGn3EP9OrRnZyVizM64M
+2ZYpnnGycGOjtpkWQh1l8/egHn3F1GUUsmKE1GxcCAzYbJMrtHZZitF//wPYwl24
+LyLWOPD2nGt9RuuZdPfrSg6ppgTre87wXGuYMVqYQOtpxAX0IKjKCDplbDgV9Vws
+slXkLGtB8L5cRspKKaBIXiDSRf8F3jSvcEuBOeLKB1d8tjHcISnivpcOd5AUUUDh
+v+PMGxmcJcqnBrJT3yOyzxIZow==
+-----END CERTIFICATE-----
diff --git a/knife/spec/data/trusted_certs/opscode.pem b/knife/spec/data/trusted_certs/opscode.pem
new file mode 100644
index 0000000000..e421a4e6e9
--- /dev/null
+++ b/knife/spec/data/trusted_certs/opscode.pem
@@ -0,0 +1,57 @@
+-----BEGIN CERTIFICATE-----
+MIIElDCCA3ygAwIBAgIQAf2j627KdciIQ4tyS8+8kTANBgkqhkiG9w0BAQsFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0xMzAzMDgxMjAwMDBaFw0yMzAzMDgxMjAwMDBaME0xCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxJzAlBgNVBAMTHkRpZ2lDZXJ0IFNIQTIg
+U2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ANyuWJBNwcQwFZA1W248ghX1LFy949v/cUP6ZCWA1O4Yok3wZtAKc24RmDYXZK83
+nf36QYSvx6+M/hpzTc8zl5CilodTgyu5pnVILR1WN3vaMTIa16yrBvSqXUu3R0bd
+KpPDkC55gIDvEwRqFDu1m5K+wgdlTvza/P96rtxcflUxDOg5B6TXvi/TC2rSsd9f
+/ld0Uzs1gN2ujkSYs58O09rg1/RrKatEp0tYhG2SS4HD2nOLEpdIkARFdRrdNzGX
+kujNVA075ME/OV4uuPNcfhCOhkEAjUVmR7ChZc6gqikJTvOX6+guqw9ypzAO+sf0
+/RR3w6RbKFfCs/mC/bdFWJsCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8C
+AQAwDgYDVR0PAQH/BAQDAgGGMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYY
+aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMHsGA1UdHwR0MHIwN6A1oDOGMWh0dHA6
+Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwN6A1
+oDOGMWh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RD
+QS5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
+d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwHQYDVR0OBBYEFA+AYRyCMWHVLyjnjUY4tCzh
+xtniMB8GA1UdIwQYMBaAFAPeUDVW0Uy7ZvCj4hsbw5eyPdFVMA0GCSqGSIb3DQEB
+CwUAA4IBAQAjPt9L0jFCpbZ+QlwaRMxp0Wi0XUvgBCFsS+JtzLHgl4+mUwnNqipl
+5TlPHoOlblyYoiQm5vuh7ZPHLgLGTUq/sELfeNqzqPlt/yGFUzZgTHbO7Djc1lGA
+8MXW5dRNJ2Srm8c+cftIl7gzbckTB+6WohsYFfZcTEDts8Ls/3HB40f/1LkAtDdC
+2iDJ6m6K7hQGrn2iWZiIqBtvLfTyyRRfJs8sjX7tN8Cp1Tm5gr8ZDOo0rwAhaPit
+c+LJMto4JQtV05od8GiG7S5BNO98pVAdvzr508EIDObtHopYJeS4d60tbvVS3bR0
+j6tJLp07kzQoH3jOlOrHvdPJbRzeXDLz
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFDTCCA/WgAwIBAgIQBZ8R1sZP2Lbc8x554UUQ2DANBgkqhkiG9w0BAQsFADBN
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
+aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTQxMTEwMDAwMDAwWhcN
+MTcxMTE0MTIwMDAwWjBlMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
+bjEQMA4GA1UEBxMHU2VhdHRsZTEbMBkGA1UEChMSQ2hlZiBTb2Z0d2FyZSwgSW5j
+MRIwEAYDVQQDDAkqLmNoZWYuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQC3xCIczkV10O5jTDpbd4YlPLC6kfnVoOkno2N/OOlcLQu3ulj/Lj1j4r6e
+2XthJLcFgTO+y+1/IKnnpLKDfkx1YngWEBXEBP+MrrpDUKKs053s45/bI9QBPISA
+tXgnYxMH9Glo6FWWd13TUq++OKGw1p1wazH64XK4MAf5y/lkmWXIWumNuO35ZqtB
+ME3wJISwVHzHB2CQjlDklt+Mb0APEiIFIZflgu9JNBYzLdvUtxiz15FUZQI7SsYL
+TfXOD1KBNMWqN8snG2e5gRAzB2D161DFvAZt8OiYUe+3QurNlTYVzeHv1ok6UqgM
+ZcLzg8m801rRip0D7FCGvMCU/ktdAgMBAAGjggHPMIIByzAfBgNVHSMEGDAWgBQP
+gGEcgjFh1S8o541GOLQs4cbZ4jAdBgNVHQ4EFgQUwldjw4Pb4HV+wxGZ7MSSRh+d
+pm4wHQYDVR0RBBYwFIIJKi5jaGVmLmlvggdjaGVmLmlvMA4GA1UdDwEB/wQEAwIF
+oDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwawYDVR0fBGQwYjAvoC2g
+K4YpaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NzY2Etc2hhMi1nMy5jcmwwL6At
+oCuGKWh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zc2NhLXNoYTItZzMuY3JsMEIG
+A1UdIAQ7MDkwNwYJYIZIAYb9bAEBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3
+LmRpZ2ljZXJ0LmNvbS9DUFMwfAYIKwYBBQUHAQEEcDBuMCQGCCsGAQUFBzABhhho
+dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wRgYIKwYBBQUHMAKGOmh0dHA6Ly9jYWNl
+cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFNIQTJTZWN1cmVTZXJ2ZXJDQS5jcnQw
+DAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAQEAvcTWenNuvvrhX2omm8LQ
+zWOuu8jqpoflACwD4lOSZ4TgOe4pQGCjXq8aRBD5k+goqQrPVf9lHnelUHFQac0Q
+5WT4YUmisUbF0S4uY5OGQymM52MvUWG4ODL4gaWhFvN+HAXrDPP/9iitsjV0QOnl
+CDq7Q4/XYRYW3opu5nLLbfW6v4QvF5yzZagEACGs7Vt32p6l391UcU8f6wiB3uMD
+eioCvjpv/+2YOUNlDPCM3uBubjUhHOwO817wBxXkzdk1OSRe4jzcw/uX6wL7birt
+fbaSkpilvVX529pSzB2Lvi9xWOoGMM578dpQ0h3PwhmmvKhhCWP+pI05k3oSkYCP
+ng==
+-----END CERTIFICATE-----
diff --git a/knife/spec/data/trusted_certs/root.pem b/knife/spec/data/trusted_certs/root.pem
new file mode 100644
index 0000000000..fd4341df26
--- /dev/null
+++ b/knife/spec/data/trusted_certs/root.pem
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
+CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
+nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
+43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
+T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
+gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
+TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
+DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
+hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
+06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
+PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
+YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
diff --git a/knife/spec/data/windows_certificates/base64_test.cer b/knife/spec/data/windows_certificates/base64_test.cer
new file mode 100644
index 0000000000..763216f86a
--- /dev/null
+++ b/knife/spec/data/windows_certificates/base64_test.cer
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDQTCCAimgAwIBAgIQPAc5ZRAOLL1PCvdo8CoWDTANBgkqhkiG9w0BAQsFADAh
+MR8wHQYDVQQDDBZ3d3cuZHVtbXljaGVmdGVzdHMuY29tMCAXDTIwMDMwNjEyMDUz
+MVoYDzI4OTkxMjMxMTgzMDAwWjAhMR8wHQYDVQQDDBZ3d3cuZHVtbXljaGVmdGVz
+dHMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6uZ0V5zobMQm
+JPtZxt4vYtL/As7U6sUBVe9oR9OCYvyIDmpuPcNnrJ26L+iu2W5Kd+840Dv6tHS4
+yOV07bYBU+nVHiCdEn/K7Q5ITv/8uXv39dvlSuSrIn4P+I2vhSQjIy/B94QPD/xE
+dD0WDym1ySY2zQsL4T+yKoaXc5tiBoWBwAdl6/RiXeOm2kBXhIDcW4MLlB0BXtDJ
+l7syB30mOvNsQT6UlymI1q7fpsaPBTo8V3lUWooVVmQciiYquoD34gq7XpdGQOLJ
+V7aSIch1BoQyeQJfWsKzv/R5yzAzw+2zeRf301USunBXwhoac/Sx4xrJxjRknGTs
+7tsCNQUmRQIDAQABo3MwcTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
+BQUHAwIGCCsGAQUFBwMBMCEGA1UdEQQaMBiCFnd3dy5kdW1teWNoZWZ0ZXN0cy5j
+b20wHQYDVR0OBBYEFGQa7l1ZPNbhj0s64g1/nyY+xULdMA0GCSqGSIb3DQEBCwUA
+A4IBAQCS3chRs1LUvlq7Hj1kx3CtAhjTE75eEWz8wzWZ+DGppGnMUQg0vwrw7JPd
+s3ODAFor62J97Fmb1sQ9/lSGan0CwBtCMqzHr3hoKbpVR9aFKu/Kt21zE4pEvFgZ
+NVrxOFofmZ072VRdRpRK3RcnV58I02Xyb+5VR8lTbHpIsUOj+i9+y5ZuuOXoRDpI
+G+AdIAfvcBbshPkI62gSFvBUdic0fcMVPZ5rFWaDjW2XFXZ6s/e5mPHNjpGpSZy7
+2y9ku9kB6ywBQXx9U21DBoIDxfprSylQGxtUuXaeCwnRvpT0Ifto5/KaeH4IzJQq
+ZYGdPzBO7WBpk/AsO6buw3kQ9M5h
+-----END CERTIFICATE-----
diff --git a/knife/spec/data/windows_certificates/othertest.cer b/knife/spec/data/windows_certificates/othertest.cer
new file mode 100644
index 0000000000..f4ff69eb08
--- /dev/null
+++ b/knife/spec/data/windows_certificates/othertest.cer
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDVjCCAj6gAwIBAgIQEavqVx6t6J9MQFWBGNLMAzANBgkqhkiG9w0BAQsFADAo
+MSYwJAYDVQQDDB13d3cuZHVtbXljaGVmdGVzdHNhbm90aGVyLmNvbTAgFw0yMDAz
+MDYxMDA2NDVaGA8yODk5MTIzMTE4MzAwMFowKDEmMCQGA1UEAwwdd3d3LmR1bW15
+Y2hlZnRlc3RzYW5vdGhlci5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQDwvGtD46qB4T9Fyt0oEXX2C0zgMQuFPWSutAKWArQCXjDlSD2+a4DvFHvz
+czv8P5P9XZM52cYDIk1nsdG75ZsgzLoiFvk2MtGpH3A1J8tXxJAROZCj8mAwoVpQ
+e791otvHH6LYK4iABHUN3PvuQEfbLTqcPPDFB3jgqV7mkI3wiGxZ5txrjBJo4f8Q
+9ZcqhR33zhp5+eBUH46T7ZY524/CI2dv+1a58LX9y1neqe6Bg0K51Rw0O8Zm/8kD
+31paD75qkq1qWS0BD0OOhVXXzsO1C4OH8L53nAtrwGceTmNRKPgMD5+Rwe6zaw94
+G7m+UeMyEkFJ87Y8+HeSU7F09TcVAgMBAAGjejB4MA4GA1UdDwEB/wQEAwIFoDAd
+BgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwKAYDVR0RBCEwH4Idd3d3LmR1
+bW15Y2hlZnRlc3RzYW5vdGhlci5jb20wHQYDVR0OBBYEFLzhpImP5MmDZ0s60syY
+agCrc9NoMA0GCSqGSIb3DQEBCwUAA4IBAQArFhqQQ0U3yzLr47Bcu5WwooULCarW
+caroDqJySdQV+abAMf0aqr8TTl+o9dVyl7Lzt+G4WQgl8Ay7P5dlEv3mGRl7J2PF
+o55PPPmZQkORzwv772d7Nzv9bQemMcYZF38su9+k3mcMh0vxdHoaz39TpUQt5Tz1
+3WC56dflaCbRMq8/fQhYivxfByq3BOf4ghW+BswZMjrV9wMDwKv21ebYAULmxaU3
+/Z0igXN3O4V4RKavONUwRMyRspLFlxm0EEirP+FruQS+/ABIPxuaReYLSqnD9Jqa
+03UdwrqC3bymfKI1zYYToSAqBO8qjim8+cjvdEaXGILW7YBKXNEvyJ20
+-----END CERTIFICATE-----
diff --git a/knife/spec/data/windows_certificates/test.cer b/knife/spec/data/windows_certificates/test.cer
new file mode 100644
index 0000000000..1c358b5035
--- /dev/null
+++ b/knife/spec/data/windows_certificates/test.cer
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDQTCCAimgAwIBAgIQX3zqNCJbsKlEvzCz3Z9aNDANBgkqhkiG9w0BAQsFADAh
+MR8wHQYDVQQDDBZ3d3cuZHVtbXljaGVmdGVzdHMuY29tMCAXDTIwMDMwNTEwMjcw
+NVoYDzIxMjAwMzA1MTAzNzA2WjAhMR8wHQYDVQQDDBZ3d3cuZHVtbXljaGVmdGVz
+dHMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuYKDb6woWIH
+HPPOrcVpgJFVxbkjgk+tsYwbIiqR9jtRaKE6nM/awOgn9/dFF4k8KB8Em0sUx7Vq
+J3YhK2N2cAacgP2Frqqf5znpNBBOg968RoZzGx0EiXFvLsqC4y8ggApWTbMXPRk4
+1a7GlpUpSqI3y5cLeEbzwGQKu8I1I+v7P2fTlnJPHarM7sBbL8bieukkFHYu78iV
+u1wpKOCCfs5DTmJu8WN+z1Mar9vyrWMBlt2wBBgNHPz5mcXUzJHTzaI/D9RGgBgF
+V0IkNqISx/IzR62jjj2g6MgTH4G/0mM6O5sxduM4yGmWZNZpVzh0yMLgH619MZlj
+SMQIN3U/SQIDAQABo3MwcTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
+BQUHAwIGCCsGAQUFBwMBMCEGA1UdEQQaMBiCFnd3dy5kdW1teWNoZWZ0ZXN0cy5j
+b20wHQYDVR0OBBYEFHwS3gs03m6RcpR+66u4OqGiZdYnMA0GCSqGSIb3DQEBCwUA
+A4IBAQCFHqMjHUfBZahIsKHQIcFCbC1NFh1ZHlJKZzrRBRwRzX19OttHGMyLpDd6
+tM9Ac6LLR8S4QIWg+HF3IrkN+vfTRDZAccj+tIwBRstmdsEz/rAJ79Vb/00mXZQx
+0FPiBDR3hE7On2oo24DU8kJP3v6TrunwtIomVGqrrkwZzvxqyW+WJMB2shGNFw5J
+mKYBiiXsHl4Bi7V4zhXssrLp877sqpNLeXloXBmAlT39SwQTP9ImZaV5R6udqlvo
+Gfgm5PH/WeK6MV3n5ik0v1rS0LwR2o82WlIB6a4iSEbzY3qSLsWOwt8o5QjAVzCR
+tNdbdS3U8nrG73iA2clmF57ARQWC
+-----END CERTIFICATE-----
diff --git a/knife/spec/data/windows_certificates/test.p7b b/knife/spec/data/windows_certificates/test.p7b
new file mode 100644
index 0000000000..bd46d5eccd
--- /dev/null
+++ b/knife/spec/data/windows_certificates/test.p7b
Binary files differ
diff --git a/knife/spec/data/windows_certificates/test.pem b/knife/spec/data/windows_certificates/test.pem
new file mode 100644
index 0000000000..1c358b5035
--- /dev/null
+++ b/knife/spec/data/windows_certificates/test.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDQTCCAimgAwIBAgIQX3zqNCJbsKlEvzCz3Z9aNDANBgkqhkiG9w0BAQsFADAh
+MR8wHQYDVQQDDBZ3d3cuZHVtbXljaGVmdGVzdHMuY29tMCAXDTIwMDMwNTEwMjcw
+NVoYDzIxMjAwMzA1MTAzNzA2WjAhMR8wHQYDVQQDDBZ3d3cuZHVtbXljaGVmdGVz
+dHMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuYKDb6woWIH
+HPPOrcVpgJFVxbkjgk+tsYwbIiqR9jtRaKE6nM/awOgn9/dFF4k8KB8Em0sUx7Vq
+J3YhK2N2cAacgP2Frqqf5znpNBBOg968RoZzGx0EiXFvLsqC4y8ggApWTbMXPRk4
+1a7GlpUpSqI3y5cLeEbzwGQKu8I1I+v7P2fTlnJPHarM7sBbL8bieukkFHYu78iV
+u1wpKOCCfs5DTmJu8WN+z1Mar9vyrWMBlt2wBBgNHPz5mcXUzJHTzaI/D9RGgBgF
+V0IkNqISx/IzR62jjj2g6MgTH4G/0mM6O5sxduM4yGmWZNZpVzh0yMLgH619MZlj
+SMQIN3U/SQIDAQABo3MwcTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB
+BQUHAwIGCCsGAQUFBwMBMCEGA1UdEQQaMBiCFnd3dy5kdW1teWNoZWZ0ZXN0cy5j
+b20wHQYDVR0OBBYEFHwS3gs03m6RcpR+66u4OqGiZdYnMA0GCSqGSIb3DQEBCwUA
+A4IBAQCFHqMjHUfBZahIsKHQIcFCbC1NFh1ZHlJKZzrRBRwRzX19OttHGMyLpDd6
+tM9Ac6LLR8S4QIWg+HF3IrkN+vfTRDZAccj+tIwBRstmdsEz/rAJ79Vb/00mXZQx
+0FPiBDR3hE7On2oo24DU8kJP3v6TrunwtIomVGqrrkwZzvxqyW+WJMB2shGNFw5J
+mKYBiiXsHl4Bi7V4zhXssrLp877sqpNLeXloXBmAlT39SwQTP9ImZaV5R6udqlvo
+Gfgm5PH/WeK6MV3n5ik0v1rS0LwR2o82WlIB6a4iSEbzY3qSLsWOwt8o5QjAVzCR
+tNdbdS3U8nrG73iA2clmF57ARQWC
+-----END CERTIFICATE-----
diff --git a/knife/spec/data/windows_certificates/test.pfx b/knife/spec/data/windows_certificates/test.pfx
new file mode 100644
index 0000000000..2c208bf7c6
--- /dev/null
+++ b/knife/spec/data/windows_certificates/test.pfx
Binary files differ
diff --git a/spec/functional/knife/configure_spec.rb b/knife/spec/functional/configure_spec.rb
index 402e988132..402e988132 100644
--- a/spec/functional/knife/configure_spec.rb
+++ b/knife/spec/functional/configure_spec.rb
diff --git a/spec/functional/knife/cookbook_delete_spec.rb b/knife/spec/functional/cookbook_delete_spec.rb
index f25999f0fc..f25999f0fc 100644
--- a/spec/functional/knife/cookbook_delete_spec.rb
+++ b/knife/spec/functional/cookbook_delete_spec.rb
diff --git a/spec/functional/knife/exec_spec.rb b/knife/spec/functional/exec_spec.rb
index 267fe8492e..267fe8492e 100644
--- a/spec/functional/knife/exec_spec.rb
+++ b/knife/spec/functional/exec_spec.rb
diff --git a/spec/functional/knife/rehash_spec.rb b/knife/spec/functional/rehash_spec.rb
index a4b7e5507c..a4b7e5507c 100644
--- a/spec/functional/knife/rehash_spec.rb
+++ b/knife/spec/functional/rehash_spec.rb
diff --git a/spec/functional/knife/smoke_test.rb b/knife/spec/functional/smoke_test.rb
index 99b61f42f2..99b61f42f2 100644
--- a/spec/functional/knife/smoke_test.rb
+++ b/knife/spec/functional/smoke_test.rb
diff --git a/spec/functional/knife/ssh_spec.rb b/knife/spec/functional/ssh_spec.rb
index 5a29f995f8..5a29f995f8 100644
--- a/spec/functional/knife/ssh_spec.rb
+++ b/knife/spec/functional/ssh_spec.rb
diff --git a/spec/functional/knife/version_spec.rb b/knife/spec/functional/version_spec.rb
index b024cc1cda..b024cc1cda 100644
--- a/spec/functional/knife/version_spec.rb
+++ b/knife/spec/functional/version_spec.rb
diff --git a/spec/integration/knife/chef_fs_data_store_spec.rb b/knife/spec/integration/chef_fs_data_store_spec.rb
index fda06164a4..fda06164a4 100644
--- a/spec/integration/knife/chef_fs_data_store_spec.rb
+++ b/knife/spec/integration/chef_fs_data_store_spec.rb
diff --git a/spec/integration/knife/chef_repo_path_spec.rb b/knife/spec/integration/chef_repo_path_spec.rb
index 27b45ac428..27b45ac428 100644
--- a/spec/integration/knife/chef_repo_path_spec.rb
+++ b/knife/spec/integration/chef_repo_path_spec.rb
diff --git a/spec/integration/knife/chef_repository_file_system_spec.rb b/knife/spec/integration/chef_repository_file_system_spec.rb
index 9a129dcb98..9a129dcb98 100644
--- a/spec/integration/knife/chef_repository_file_system_spec.rb
+++ b/knife/spec/integration/chef_repository_file_system_spec.rb
diff --git a/spec/integration/knife/chefignore_spec.rb b/knife/spec/integration/chefignore_spec.rb
index f111cd56e1..f111cd56e1 100644
--- a/spec/integration/knife/chefignore_spec.rb
+++ b/knife/spec/integration/chefignore_spec.rb
diff --git a/spec/integration/knife/client_bulk_delete_spec.rb b/knife/spec/integration/client_bulk_delete_spec.rb
index b7733f638d..b7733f638d 100644
--- a/spec/integration/knife/client_bulk_delete_spec.rb
+++ b/knife/spec/integration/client_bulk_delete_spec.rb
diff --git a/spec/integration/knife/client_create_spec.rb b/knife/spec/integration/client_create_spec.rb
index 3898ff9d24..3898ff9d24 100644
--- a/spec/integration/knife/client_create_spec.rb
+++ b/knife/spec/integration/client_create_spec.rb
diff --git a/spec/integration/knife/client_delete_spec.rb b/knife/spec/integration/client_delete_spec.rb
index 057561eaea..057561eaea 100644
--- a/spec/integration/knife/client_delete_spec.rb
+++ b/knife/spec/integration/client_delete_spec.rb
diff --git a/spec/integration/knife/client_key_create_spec.rb b/knife/spec/integration/client_key_create_spec.rb
index 29b960111c..29b960111c 100644
--- a/spec/integration/knife/client_key_create_spec.rb
+++ b/knife/spec/integration/client_key_create_spec.rb
diff --git a/spec/integration/knife/client_key_delete_spec.rb b/knife/spec/integration/client_key_delete_spec.rb
index 8c15377986..8c15377986 100644
--- a/spec/integration/knife/client_key_delete_spec.rb
+++ b/knife/spec/integration/client_key_delete_spec.rb
diff --git a/spec/integration/knife/client_key_list_spec.rb b/knife/spec/integration/client_key_list_spec.rb
index 01e5b78585..01e5b78585 100644
--- a/spec/integration/knife/client_key_list_spec.rb
+++ b/knife/spec/integration/client_key_list_spec.rb
diff --git a/spec/integration/knife/client_key_show_spec.rb b/knife/spec/integration/client_key_show_spec.rb
index 05024d40b2..05024d40b2 100644
--- a/spec/integration/knife/client_key_show_spec.rb
+++ b/knife/spec/integration/client_key_show_spec.rb
diff --git a/spec/integration/knife/client_list_spec.rb b/knife/spec/integration/client_list_spec.rb
index 7668b9e455..7668b9e455 100644
--- a/spec/integration/knife/client_list_spec.rb
+++ b/knife/spec/integration/client_list_spec.rb
diff --git a/spec/integration/knife/client_show_spec.rb b/knife/spec/integration/client_show_spec.rb
index 39a107e37f..39a107e37f 100644
--- a/spec/integration/knife/client_show_spec.rb
+++ b/knife/spec/integration/client_show_spec.rb
diff --git a/spec/integration/knife/common_options_spec.rb b/knife/spec/integration/common_options_spec.rb
index 7796bf9923..7796bf9923 100644
--- a/spec/integration/knife/common_options_spec.rb
+++ b/knife/spec/integration/common_options_spec.rb
diff --git a/spec/integration/knife/config_list_spec.rb b/knife/spec/integration/config_list_spec.rb
index 5193608f36..5193608f36 100644
--- a/spec/integration/knife/config_list_spec.rb
+++ b/knife/spec/integration/config_list_spec.rb
diff --git a/spec/integration/knife/config_show_spec.rb b/knife/spec/integration/config_show_spec.rb
index e11d001df9..e11d001df9 100644
--- a/spec/integration/knife/config_show_spec.rb
+++ b/knife/spec/integration/config_show_spec.rb
diff --git a/spec/integration/knife/config_use_spec.rb b/knife/spec/integration/config_use_spec.rb
index 4a982bc0bd..4a982bc0bd 100644
--- a/spec/integration/knife/config_use_spec.rb
+++ b/knife/spec/integration/config_use_spec.rb
diff --git a/spec/integration/knife/cookbook_api_ipv6_spec.rb b/knife/spec/integration/cookbook_api_ipv6_spec.rb
index 5d0ce0707f..5d0ce0707f 100644
--- a/spec/integration/knife/cookbook_api_ipv6_spec.rb
+++ b/knife/spec/integration/cookbook_api_ipv6_spec.rb
diff --git a/spec/integration/knife/cookbook_bulk_delete_spec.rb b/knife/spec/integration/cookbook_bulk_delete_spec.rb
index 0e791f5a1e..0e791f5a1e 100644
--- a/spec/integration/knife/cookbook_bulk_delete_spec.rb
+++ b/knife/spec/integration/cookbook_bulk_delete_spec.rb
diff --git a/spec/integration/knife/cookbook_download_spec.rb b/knife/spec/integration/cookbook_download_spec.rb
index 589417126c..589417126c 100644
--- a/spec/integration/knife/cookbook_download_spec.rb
+++ b/knife/spec/integration/cookbook_download_spec.rb
diff --git a/spec/integration/knife/cookbook_list_spec.rb b/knife/spec/integration/cookbook_list_spec.rb
index e712ae3235..e712ae3235 100644
--- a/spec/integration/knife/cookbook_list_spec.rb
+++ b/knife/spec/integration/cookbook_list_spec.rb
diff --git a/spec/integration/knife/cookbook_show_spec.rb b/knife/spec/integration/cookbook_show_spec.rb
index d8c2e38f64..d8c2e38f64 100644
--- a/spec/integration/knife/cookbook_show_spec.rb
+++ b/knife/spec/integration/cookbook_show_spec.rb
diff --git a/spec/integration/knife/cookbook_upload_spec.rb b/knife/spec/integration/cookbook_upload_spec.rb
index f42683b2a3..f42683b2a3 100644
--- a/spec/integration/knife/cookbook_upload_spec.rb
+++ b/knife/spec/integration/cookbook_upload_spec.rb
diff --git a/spec/integration/knife/data_bag_create_spec.rb b/knife/spec/integration/data_bag_create_spec.rb
index 439d69507c..439d69507c 100644
--- a/spec/integration/knife/data_bag_create_spec.rb
+++ b/knife/spec/integration/data_bag_create_spec.rb
diff --git a/spec/integration/knife/data_bag_delete_spec.rb b/knife/spec/integration/data_bag_delete_spec.rb
index a7fac7e2ee..a7fac7e2ee 100644
--- a/spec/integration/knife/data_bag_delete_spec.rb
+++ b/knife/spec/integration/data_bag_delete_spec.rb
diff --git a/spec/integration/knife/data_bag_edit_spec.rb b/knife/spec/integration/data_bag_edit_spec.rb
index 1071df2a78..1071df2a78 100644
--- a/spec/integration/knife/data_bag_edit_spec.rb
+++ b/knife/spec/integration/data_bag_edit_spec.rb
diff --git a/spec/integration/knife/data_bag_from_file_spec.rb b/knife/spec/integration/data_bag_from_file_spec.rb
index bb8bd192f0..bb8bd192f0 100644
--- a/spec/integration/knife/data_bag_from_file_spec.rb
+++ b/knife/spec/integration/data_bag_from_file_spec.rb
diff --git a/spec/integration/knife/data_bag_list_spec.rb b/knife/spec/integration/data_bag_list_spec.rb
index 1e7734db64..1e7734db64 100644
--- a/spec/integration/knife/data_bag_list_spec.rb
+++ b/knife/spec/integration/data_bag_list_spec.rb
diff --git a/spec/integration/knife/data_bag_show_spec.rb b/knife/spec/integration/data_bag_show_spec.rb
index 91ebf605f1..91ebf605f1 100644
--- a/spec/integration/knife/data_bag_show_spec.rb
+++ b/knife/spec/integration/data_bag_show_spec.rb
diff --git a/spec/integration/knife/delete_spec.rb b/knife/spec/integration/delete_spec.rb
index e00949e7f4..e00949e7f4 100644
--- a/spec/integration/knife/delete_spec.rb
+++ b/knife/spec/integration/delete_spec.rb
diff --git a/spec/integration/knife/deps_spec.rb b/knife/spec/integration/deps_spec.rb
index 9875277f14..9875277f14 100644
--- a/spec/integration/knife/deps_spec.rb
+++ b/knife/spec/integration/deps_spec.rb
diff --git a/spec/integration/knife/diff_spec.rb b/knife/spec/integration/diff_spec.rb
index c69573735a..c69573735a 100644
--- a/spec/integration/knife/diff_spec.rb
+++ b/knife/spec/integration/diff_spec.rb
diff --git a/spec/integration/knife/download_spec.rb b/knife/spec/integration/download_spec.rb
index 29200d66f2..29200d66f2 100644
--- a/spec/integration/knife/download_spec.rb
+++ b/knife/spec/integration/download_spec.rb
diff --git a/spec/integration/knife/environment_compare_spec.rb b/knife/spec/integration/environment_compare_spec.rb
index a8d207466a..a8d207466a 100644
--- a/spec/integration/knife/environment_compare_spec.rb
+++ b/knife/spec/integration/environment_compare_spec.rb
diff --git a/spec/integration/knife/environment_create_spec.rb b/knife/spec/integration/environment_create_spec.rb
index 496828073d..496828073d 100644
--- a/spec/integration/knife/environment_create_spec.rb
+++ b/knife/spec/integration/environment_create_spec.rb
diff --git a/spec/integration/knife/environment_delete_spec.rb b/knife/spec/integration/environment_delete_spec.rb
index 93427aaf2f..93427aaf2f 100644
--- a/spec/integration/knife/environment_delete_spec.rb
+++ b/knife/spec/integration/environment_delete_spec.rb
diff --git a/spec/integration/knife/environment_from_file_spec.rb b/knife/spec/integration/environment_from_file_spec.rb
index e5ba056bb7..e5ba056bb7 100644
--- a/spec/integration/knife/environment_from_file_spec.rb
+++ b/knife/spec/integration/environment_from_file_spec.rb
diff --git a/spec/integration/knife/environment_list_spec.rb b/knife/spec/integration/environment_list_spec.rb
index f74b2b6360..f74b2b6360 100644
--- a/spec/integration/knife/environment_list_spec.rb
+++ b/knife/spec/integration/environment_list_spec.rb
diff --git a/spec/integration/knife/environment_show_spec.rb b/knife/spec/integration/environment_show_spec.rb
index b961e85734..b961e85734 100644
--- a/spec/integration/knife/environment_show_spec.rb
+++ b/knife/spec/integration/environment_show_spec.rb
diff --git a/spec/integration/knife/list_spec.rb b/knife/spec/integration/list_spec.rb
index 8228ba6056..8228ba6056 100644
--- a/spec/integration/knife/list_spec.rb
+++ b/knife/spec/integration/list_spec.rb
diff --git a/spec/integration/knife/node_bulk_delete_spec.rb b/knife/spec/integration/node_bulk_delete_spec.rb
index 8784b5ea8a..8784b5ea8a 100644
--- a/spec/integration/knife/node_bulk_delete_spec.rb
+++ b/knife/spec/integration/node_bulk_delete_spec.rb
diff --git a/spec/integration/knife/node_create_spec.rb b/knife/spec/integration/node_create_spec.rb
index d3debb8f00..d3debb8f00 100644
--- a/spec/integration/knife/node_create_spec.rb
+++ b/knife/spec/integration/node_create_spec.rb
diff --git a/spec/integration/knife/node_delete_spec.rb b/knife/spec/integration/node_delete_spec.rb
index 3cece6ebaf..3cece6ebaf 100644
--- a/spec/integration/knife/node_delete_spec.rb
+++ b/knife/spec/integration/node_delete_spec.rb
diff --git a/spec/integration/knife/node_environment_set_spec.rb b/knife/spec/integration/node_environment_set_spec.rb
index 51b288fe39..51b288fe39 100644
--- a/spec/integration/knife/node_environment_set_spec.rb
+++ b/knife/spec/integration/node_environment_set_spec.rb
diff --git a/spec/integration/knife/node_from_file_spec.rb b/knife/spec/integration/node_from_file_spec.rb
index 5dcaaaa463..5dcaaaa463 100644
--- a/spec/integration/knife/node_from_file_spec.rb
+++ b/knife/spec/integration/node_from_file_spec.rb
diff --git a/spec/integration/knife/node_list_spec.rb b/knife/spec/integration/node_list_spec.rb
index 65c201be3f..65c201be3f 100644
--- a/spec/integration/knife/node_list_spec.rb
+++ b/knife/spec/integration/node_list_spec.rb
diff --git a/spec/integration/knife/node_run_list_add_spec.rb b/knife/spec/integration/node_run_list_add_spec.rb
index 72b5328b17..72b5328b17 100644
--- a/spec/integration/knife/node_run_list_add_spec.rb
+++ b/knife/spec/integration/node_run_list_add_spec.rb
diff --git a/spec/integration/knife/node_run_list_remove_spec.rb b/knife/spec/integration/node_run_list_remove_spec.rb
index 19aeb81806..19aeb81806 100644
--- a/spec/integration/knife/node_run_list_remove_spec.rb
+++ b/knife/spec/integration/node_run_list_remove_spec.rb
diff --git a/spec/integration/knife/node_run_list_set_spec.rb b/knife/spec/integration/node_run_list_set_spec.rb
index d83e74dd04..d83e74dd04 100644
--- a/spec/integration/knife/node_run_list_set_spec.rb
+++ b/knife/spec/integration/node_run_list_set_spec.rb
diff --git a/spec/integration/knife/node_show_spec.rb b/knife/spec/integration/node_show_spec.rb
index be63011ef8..be63011ef8 100644
--- a/spec/integration/knife/node_show_spec.rb
+++ b/knife/spec/integration/node_show_spec.rb
diff --git a/spec/integration/knife/raw_spec.rb b/knife/spec/integration/raw_spec.rb
index 8e7e913b02..8e7e913b02 100644
--- a/spec/integration/knife/raw_spec.rb
+++ b/knife/spec/integration/raw_spec.rb
diff --git a/spec/integration/knife/redirection_spec.rb b/knife/spec/integration/redirection_spec.rb
index eea5556cff..eea5556cff 100644
--- a/spec/integration/knife/redirection_spec.rb
+++ b/knife/spec/integration/redirection_spec.rb
diff --git a/spec/integration/knife/role_bulk_delete_spec.rb b/knife/spec/integration/role_bulk_delete_spec.rb
index 76745d9b6a..76745d9b6a 100644
--- a/spec/integration/knife/role_bulk_delete_spec.rb
+++ b/knife/spec/integration/role_bulk_delete_spec.rb
diff --git a/spec/integration/knife/role_create_spec.rb b/knife/spec/integration/role_create_spec.rb
index 03f59d4b99..03f59d4b99 100644
--- a/spec/integration/knife/role_create_spec.rb
+++ b/knife/spec/integration/role_create_spec.rb
diff --git a/spec/integration/knife/role_delete_spec.rb b/knife/spec/integration/role_delete_spec.rb
index 22b36e5572..22b36e5572 100644
--- a/spec/integration/knife/role_delete_spec.rb
+++ b/knife/spec/integration/role_delete_spec.rb
diff --git a/spec/integration/knife/role_from_file_spec.rb b/knife/spec/integration/role_from_file_spec.rb
index ae296122ce..ae296122ce 100644
--- a/spec/integration/knife/role_from_file_spec.rb
+++ b/knife/spec/integration/role_from_file_spec.rb
diff --git a/spec/integration/knife/role_list_spec.rb b/knife/spec/integration/role_list_spec.rb
index 39aa28783f..39aa28783f 100644
--- a/spec/integration/knife/role_list_spec.rb
+++ b/knife/spec/integration/role_list_spec.rb
diff --git a/spec/integration/knife/role_show_spec.rb b/knife/spec/integration/role_show_spec.rb
index a4ecea1d61..a4ecea1d61 100644
--- a/spec/integration/knife/role_show_spec.rb
+++ b/knife/spec/integration/role_show_spec.rb
diff --git a/spec/integration/knife/search_node_spec.rb b/knife/spec/integration/search_node_spec.rb
index 9e7935b83c..9e7935b83c 100644
--- a/spec/integration/knife/search_node_spec.rb
+++ b/knife/spec/integration/search_node_spec.rb
diff --git a/spec/integration/knife/serve_spec.rb b/knife/spec/integration/serve_spec.rb
index fa9b1dc47c..fa9b1dc47c 100644
--- a/spec/integration/knife/serve_spec.rb
+++ b/knife/spec/integration/serve_spec.rb
diff --git a/spec/integration/knife/show_spec.rb b/knife/spec/integration/show_spec.rb
index 6913494916..6913494916 100644
--- a/spec/integration/knife/show_spec.rb
+++ b/knife/spec/integration/show_spec.rb
diff --git a/spec/integration/knife/upload_spec.rb b/knife/spec/integration/upload_spec.rb
index e4bb44ad7e..e4bb44ad7e 100644
--- a/spec/integration/knife/upload_spec.rb
+++ b/knife/spec/integration/upload_spec.rb
diff --git a/spec/knife_spec_helper.rb b/knife/spec/knife_spec_helper.rb
index 7395d2759b..7395d2759b 100644
--- a/spec/knife_spec_helper.rb
+++ b/knife/spec/knife_spec_helper.rb
diff --git a/knife/spec/support/chef_helpers.rb b/knife/spec/support/chef_helpers.rb
new file mode 100644
index 0000000000..3738c4a41e
--- /dev/null
+++ b/knife/spec/support/chef_helpers.rb
@@ -0,0 +1,79 @@
+# Copyright:: Copyright (c) Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+CHEF_SPEC_DATA = File.expand_path(__dir__ + "/../data/")
+CHEF_SPEC_ASSETS = File.expand_path(__dir__ + "/../functional/assets/")
+CHEF_SPEC_BACKUP_PATH = File.join(Dir.tmpdir, "test-backup-path")
+
+def sha256_checksum(path)
+ OpenSSL::Digest.hexdigest("SHA256", File.read(path))
+end
+
+# extracted from Ruby < 2.5 to return a unique temp file name without creating it
+def make_tmpname(prefix_suffix, n = nil)
+ case prefix_suffix
+ when String
+ prefix = prefix_suffix
+ suffix = ""
+ when Array
+ prefix = prefix_suffix[0]
+ suffix = prefix_suffix[1]
+ else
+ raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
+ end
+ t = Time.now.strftime("%Y%m%d")
+ path = "#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
+ path << "-#{n}" if n
+ path << suffix
+end
+
+# This is a helper to canonicalize paths that we're using in the file
+# tests.
+def canonicalize_path(path)
+ windows? ? path.tr("/", '\\') : path
+end
+
+# Makes a temp directory with a canonical path on any platform.
+# Only really needed to work around an issue on Windows where
+# Ruby's temp library generates paths with short names.
+def make_canonical_temp_directory
+ temp_directory = Dir.mktmpdir
+ if windows?
+ # On Windows, temporary file / directory path names may have shortened
+ # subdirectory names due to reliance on the TMP and TEMP environment variables
+ # in some Windows APIs and duplicated logic in Ruby's temp file implementation.
+ # To work around this in the unit test context, we obtain the long (canonical)
+ # path name via a Windows system call so that this path name can be used
+ # in expectations that assume the ability to canonically name paths in comparisons.
+ # Note that this was not an issue prior to Ruby 2.2 -- with Ruby 2.2,
+ # some Chef code started to use long file names, while Ruby's temp file implementation
+ # continued to return the shortened names -- this would cause these particular tests to
+ # fail if the username happened to be longer than 8 characters.
+ Chef::ReservedNames::Win32::File.get_long_path_name(temp_directory)
+ else
+ temp_directory
+ end
+end
+
+# Check if a cmd exists on the PATH
+def which(cmd)
+ paths = ENV["PATH"].split(File::PATH_SEPARATOR) + [ "/bin", "/usr/bin", "/sbin", "/usr/sbin" ]
+ paths.each do |path|
+ filename = File.join(path, cmd)
+ return filename if File.executable?(filename)
+ end
+ false
+end
diff --git a/knife/spec/support/key_helpers.rb b/knife/spec/support/key_helpers.rb
new file mode 100644
index 0000000000..2a27834050
--- /dev/null
+++ b/knife/spec/support/key_helpers.rb
@@ -0,0 +1,102 @@
+#
+# Author:: Tyler Cloke (<tyler@chef.io>)
+# Copyright:: Copyright (c) Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+shared_examples_for "a knife key command" do
+ let(:stderr) { StringIO.new }
+ let(:command) do
+ c = described_class.new([])
+ c.ui.config[:disable_editing] = true
+ allow(c.ui).to receive(:stderr).and_return(stderr)
+ allow(c.ui).to receive(:stdout).and_return(stderr)
+ allow(c).to receive(:show_usage)
+ c
+ end
+
+ context "before apply_params! is called" do
+ context "when apply_params! is called with invalid args (missing actor)" do
+ let(:params) { [] }
+ it "shows the usage" do
+ expect(command).to receive(:show_usage)
+ expect { command.apply_params!(params) }.to exit_with_code(1)
+ end
+
+ it "outputs the proper error" do
+ expect { command.apply_params!(params) }.to exit_with_code(1)
+ expect(stderr.string).to include(command.actor_missing_error)
+ end
+
+ it "exits 1" do
+ expect { command.apply_params!(params) }.to exit_with_code(1)
+ end
+ end
+ end # before apply_params! is called
+
+ context "after apply_params! is called with valid args" do
+ before do
+ command.apply_params!(params)
+ end
+
+ it "properly defines the actor" do
+ expect(command.actor).to eq("charmander")
+ end
+ end # after apply_params! is called with valid args
+
+ context "when the command is run" do
+ before do
+ allow(command).to receive(:service_object).and_return(service_object)
+ allow(command).to receive(:name_args).and_return(["charmander"])
+ end
+
+ context "when the command is successful" do
+ before do
+ expect(service_object).to receive(:run)
+ end
+ end
+ end
+end # a knife key command
+
+shared_examples_for "a knife key command with a keyname as the second arg" do
+ let(:stderr) { StringIO.new }
+ let(:command) do
+ c = described_class.new([])
+ c.ui.config[:disable_editing] = true
+ allow(c.ui).to receive(:stderr).and_return(stderr)
+ allow(c.ui).to receive(:stdout).and_return(stderr)
+ allow(c).to receive(:show_usage)
+ c
+ end
+
+ context "before apply_params! is called" do
+ context "when apply_params! is called with invalid args (missing keyname)" do
+ let(:params) { ["charmander"] }
+ it "shows the usage" do
+ expect(command).to receive(:show_usage)
+ expect { command.apply_params!(params) }.to exit_with_code(1)
+ end
+
+ it "outputs the proper error" do
+ expect { command.apply_params!(params) }.to exit_with_code(1)
+ expect(stderr.string).to include(command.keyname_missing_error)
+ end
+
+ it "exits 1" do
+ expect { command.apply_params!(params) }.to exit_with_code(1)
+ end
+ end
+ end # before apply_params! is called
+end
diff --git a/knife/spec/support/platform_helpers.rb b/knife/spec/support/platform_helpers.rb
new file mode 100644
index 0000000000..a3fb95e069
--- /dev/null
+++ b/knife/spec/support/platform_helpers.rb
@@ -0,0 +1,251 @@
+require "fcntl"
+require "chef/mixin/shell_out"
+require "ohai/mixin/http_helper"
+require "ohai/mixin/gce_metadata"
+require "spec/support/chef_helpers"
+
+class ShellHelpers
+ extend Chef::Mixin::ShellOut
+end
+
+# magic stolen from bundler/spec/support/less_than_proc.rb
+class DependencyProc < Proc
+ attr_accessor :present
+
+ def self.with(present)
+ provided = Gem::Version.new(present.dup)
+ new do |required|
+ !Gem::Requirement.new(required).satisfied_by?(provided)
+ end.tap { |l| l.present = present }
+ end
+
+ def inspect
+ "\"#{present}\""
+ end
+end
+
+def ruby_64bit?
+ RbConfig::CONFIG["host_cpu"].include?("x86_64")
+end
+
+def ruby_32bit?
+ RbConfig::CONFIG["host_cpu"].include?("i686")
+end
+
+def windows?
+ # NOTE this deliberately does not use ChefUtils.windows? because otherwise it would
+ # pick up the node out of tests, while this tests the hosts running the specs.
+ !!(RUBY_PLATFORM =~ /mswin|mingw|windows/)
+end
+
+def ohai
+ # This is defined in spec_helper; it has the `platform` populated.
+ OHAI_SYSTEM
+end
+
+require "wmi-lite/wmi" if windows?
+
+def windows_domain_joined?
+ return false unless windows?
+
+ wmi = WmiLite::Wmi.new
+ computer_system = wmi.first_of("Win32_ComputerSystem")
+ computer_system["partofdomain"]
+end
+
+def windows_2012r2?
+ return false unless windows?
+
+ (win32_os_version && win32_os_version.start_with?("6.3"))
+end
+
+def windows_gte_10?
+ return false unless windows?
+
+ Gem::Requirement.new(">= 10").satisfied_by?(Gem::Version.new(win32_os_version))
+end
+
+def win32_os_version
+ @win32_os_version ||= begin
+ wmi = WmiLite::Wmi.new
+ host = wmi.first_of("Win32_OperatingSystem")
+ host["version"]
+ end
+end
+
+def windows_powershell_dsc?
+ return false unless windows?
+
+ supports_dsc = false
+ begin
+ wmi = WmiLite::Wmi.new("root/microsoft/windows/desiredstateconfiguration")
+ lcm = wmi.query("SELECT * FROM meta_class WHERE __this ISA 'MSFT_DSCLocalConfigurationManager'")
+ supports_dsc = !! lcm
+ rescue WmiLite::WmiException
+ end
+ supports_dsc
+end
+
+def windows_user_right?(right)
+ return false unless windows?
+
+ require "chef/win32/security"
+ Chef::ReservedNames::Win32::Security.get_account_right(ENV["USERNAME"]).include?(right)
+end
+
+# detects if the hardware is 64-bit (evaluates to true in "WOW64" mode in a 32-bit app on a 64-bit system)
+def windows64?
+ windows? && ( ENV["PROCESSOR_ARCHITECTURE"] == "AMD64" || ENV["PROCESSOR_ARCHITEW6432"] == "AMD64" )
+end
+
+# detects if the hardware is 32-bit
+def windows32?
+ windows? && !windows64?
+end
+
+def unix?
+ !windows?
+end
+
+def linux?
+ RUBY_PLATFORM.include?("linux")
+end
+
+def macos?
+ RUBY_PLATFORM.include?("darwin")
+end
+
+def macos_gte_11?
+ macos? && !!(ohai[:platform_version].to_i >= 11)
+end
+
+def solaris?
+ RUBY_PLATFORM.include?("solaris")
+end
+
+def freebsd?
+ RUBY_PLATFORM.include?("freebsd")
+end
+
+def intel_64bit?
+ !!(ohai[:kernel][:machine] == "x86_64")
+end
+
+def rhel?
+ !!(ohai[:platform_family] == "rhel")
+end
+
+def rhel6?
+ rhel? && !!(ohai[:platform_version].to_i == 6)
+end
+
+def opensuse?
+ suse? && !!(ohai[:platform_version].to_i >= 15)
+end
+
+def rhel7?
+ rhel? && !!(ohai[:platform_version].to_i == 7)
+end
+
+def rhel8?
+ rhel? && !!(ohai[:platform_version].to_i == 8)
+end
+
+def rhel_gte_8?
+ rhel? && !!(ohai[:platform_version].to_i >= 8)
+end
+
+def debian_family?
+ !!(ohai[:platform_family] == "debian")
+end
+
+def aix?
+ RUBY_PLATFORM.include?("aix")
+end
+
+def wpar?
+ !((ohai[:virtualization] || {})[:wpar_no].nil?)
+end
+
+def supports_cloexec?
+ Fcntl.const_defined?("F_SETFD") && Fcntl.const_defined?("FD_CLOEXEC")
+end
+
+def selinux_enabled?
+ # This code is currently copied from lib/chef/util/selinux to make
+ # specs independent of product.
+ selinuxenabled_path = which("selinuxenabled")
+ if selinuxenabled_path
+ cmd = Mixlib::ShellOut.new(selinuxenabled_path, returns: [0, 1])
+ cmd_result = cmd.run_command
+ case cmd_result.exitstatus
+ when 1
+ false
+ when 0
+ true
+ else
+ raise "Unknown exit code from command #{selinuxenabled_path}: #{cmd.exitstatus}"
+ end
+ else
+ # We assume selinux is not enabled if selinux utils are not
+ # installed.
+ false
+ end
+end
+
+def suse?
+ !!(ohai[:platform_family] == "suse")
+end
+
+def root?
+ return false if windows?
+
+ Process.euid == 0
+end
+
+def openssl_gte_101?
+ OpenSSL::OPENSSL_VERSION_NUMBER >= 10001000
+end
+
+def openssl_lt_101?
+ !openssl_gte_101?
+end
+
+def aes_256_gcm?
+ OpenSSL::Cipher.ciphers.include?("aes-256-gcm")
+end
+
+def fips?
+ ENV["CHEF_FIPS"] == "1"
+end
+
+class HttpHelper
+ extend Ohai::Mixin::HttpHelper
+ def self.logger
+ Chef::Log
+ end
+end
+
+def gce?
+ HttpHelper.can_socket_connect?(Ohai::Mixin::GCEMetadata::GCE_METADATA_ADDR, 80)
+rescue SocketError
+ false
+end
+
+def ifconfig?
+ which("ifconfig")
+end
+
+def choco_installed?
+ result = ShellHelpers.shell_out("choco --version")
+ result.stderr.empty?
+rescue
+ false
+end
+
+def pwsh_installed?
+ result = ShellHelpers.shell_out("pwsh.exe --version")
+ result.stderr.empty?
+rescue
+ false
+end
diff --git a/knife/spec/support/platforms/prof/gc.rb b/knife/spec/support/platforms/prof/gc.rb
new file mode 100644
index 0000000000..87e50758f3
--- /dev/null
+++ b/knife/spec/support/platforms/prof/gc.rb
@@ -0,0 +1,51 @@
+#
+# Author:: Seth Chisamore (<schisamo@chef.io>)
+# Copyright:: Copyright (c) Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+module RSpec
+ module Prof
+ module GC
+ class Profiler
+
+ # GC 1 invokes.
+ # Index Invoke Time(sec) Use Size(byte) Total Size(byte) Total Object GC time(ms)
+ # 1 0.012 159240 212940 10647 0.00000000000001530000
+ LINE_PATTERN = /^\s+([\d\.]*)\s+([\d\.]*)\s+([\d\.]*)\s+([\d\.]*)\s+([\d\.]*)\s+([\d\.]*)$/.freeze
+
+ def start
+ ::GC::Profiler.enable unless ::GC::Profiler.enabled?
+ end
+
+ def stop
+ ::GC::Profiler.disable
+ end
+
+ def working_set_size
+ ::GC.start
+ ::GC::Profiler.result.scan(LINE_PATTERN)[-1][2].to_i if ::GC::Profiler.enabled?
+ ensure
+ ::GC::Profiler.clear
+ end
+
+ def handle_count
+ 0
+ end
+
+ end
+ end
+ end
+end
diff --git a/knife/spec/support/platforms/prof/win32.rb b/knife/spec/support/platforms/prof/win32.rb
new file mode 100644
index 0000000000..da95f16a3d
--- /dev/null
+++ b/knife/spec/support/platforms/prof/win32.rb
@@ -0,0 +1,45 @@
+#
+# Author:: Seth Chisamore (<schisamo@chef.io>)
+# Copyright:: Copyright (c) Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require "chef/win32/process"
+
+module RSpec
+ module Prof
+ module Win32
+ class Profiler
+
+ def start
+ GC.start
+ end
+
+ def stop
+ GC.start
+ end
+
+ def working_set_size
+ Chef::ReservedNames::Win32::Process.get_current_process.memory_info[:WorkingSetSize]
+ end
+
+ def handle_count
+ Chef::ReservedNames::Win32::Process.get_current_process.handle_count
+ end
+ end
+
+ end
+ end
+end
diff --git a/knife/spec/support/platforms/win32/spec_service.rb b/knife/spec/support/platforms/win32/spec_service.rb
new file mode 100644
index 0000000000..27f71a8bf0
--- /dev/null
+++ b/knife/spec/support/platforms/win32/spec_service.rb
@@ -0,0 +1,57 @@
+#
+# Author:: Serdar Sutay (<serdar@lambda.local>)
+# Copyright:: Copyright (c) Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
+ require "win32/daemon"
+
+ class SpecService < ::Win32::Daemon
+ def service_init
+ @test_service_file = "#{ENV["TMP"]}/spec_service_file"
+ end
+
+ def service_main(*startup_parameters)
+ while running?
+ unless File.exist?(@test_service_file)
+ File.open(@test_service_file, "wb") do |f|
+ f.write("This file is created by SpecService")
+ end
+ end
+
+ sleep 1
+ end
+ end
+
+ ################################################################################
+ # Control Signal Callback Methods
+ ################################################################################
+
+ def service_stop; end
+
+ def service_pause; end
+
+ def service_resume; end
+
+ def service_shutdown; end
+ end
+
+ # To run this file as a service, it must be called as a script from within
+ # the Windows Service framework. In that case, kick off the main loop!
+ if __FILE__ == $0
+ SpecService.mainloop
+ end
+end
diff --git a/knife/spec/support/recipe_dsl_helper.rb b/knife/spec/support/recipe_dsl_helper.rb
new file mode 100644
index 0000000000..2542345ed4
--- /dev/null
+++ b/knife/spec/support/recipe_dsl_helper.rb
@@ -0,0 +1,83 @@
+#
+# This is a helper for functional tests to embed the recipe DSL directly into the rspec example blocks using
+# unified mode.
+#
+# If you wind up wanting to stub/expect on internal details of the resource/provider you are not testing the
+# public API and are trying to write a unit test, which this is not designed for.
+#
+# If you want to start writing full recipes and testing them, doing notifies/subscribes/etc then you are writing
+# an integration test, and not a functional single-resource test, which this is not designed for.
+#
+# Examples:
+#
+# it "creates a file" do
+# FileUtils.rm_f("/tmp/foo.xyz")
+# file "/tmp/foo.xyz" do # please use proper tmpdir though
+# content "whatever"
+# end.should_be_updated
+# expect(IO.read("/tmp/foo.xyz").to eql("content")
+# end
+#
+# it "is idempotent" do
+# FileUtils.rm_f("/tmp/foo.xyz")
+# file "/tmp/foo.xyz" do # please use proper tmpdir though
+# content "whatever"
+# end.should_be_updated
+# file "/tmp/foo.xyz" do # please use proper tmpdir though
+# content "whatever"
+# end.should_not_be_updated
+# expect(IO.read("/tmp/foo.xyz").to eql("content")
+# end
+#
+# it "has a failure" do
+# FileUtils.rm_f("/tmp/foo.xyz")
+# expect { file "/tmp/lksjdflksjdf/foo.xyz" do
+# content "whatever"
+# end }.to raise_error(Chef::Exception::EnclosingDirectoryDoesNotExist)
+# end
+#
+module RecipeDSLHelper
+ include Chef::DSL::Recipe
+ def event_dispatch
+ @event_dispatch ||= Chef::EventDispatch::Dispatcher.new
+ end
+
+ def node
+ @node ||= Chef::Node.new.tap do |n|
+ # clone the global ohai data to keep tests fast but reasonably isolated
+ n.consume_external_attrs(OHAI_SYSTEM.data.dup, {})
+ end
+ end
+
+ def run_context
+ @run_context ||= Chef::RunContext.new(node, {}, event_dispatch).tap do |rc|
+ rc.resource_collection.unified_mode = true
+ Chef::Runner.new(rc)
+ end
+ end
+
+ def cookbook_name
+ "rspec"
+ end
+
+ def recipe_name
+ "default"
+ end
+
+ def declare_resource(type, name, created_at: nil, run_context: self.run_context, &resource_attrs_block)
+ created_at = caller[0]
+ rspec_context = self
+ # we slightly abuse the "enclosing_provider" method_missing magic to send methods to the rspec example block so that
+ # rspec `let` methods work as arguments to resource properties
+ resource = super(type, name, created_at: created_at, run_context: run_context, enclosing_provider: rspec_context, &resource_attrs_block)
+ # we also inject these methods to make terse expression of checking the updated status (so it is more readiable and
+ # therefore should get used more -- even though it is "should" vs. "expect")
+ resource.define_singleton_method(:should_be_updated) do
+ rspec_context.expect(self).to be_updated
+ end
+ resource.define_singleton_method(:should_not_be_updated) do
+ rspec_context.expect(self).not_to be_updated
+ end
+ resource
+ end
+end
diff --git a/knife/spec/support/shared/context/config.rb b/knife/spec/support/shared/context/config.rb
new file mode 100644
index 0000000000..7c4ae8dca6
--- /dev/null
+++ b/knife/spec/support/shared/context/config.rb
@@ -0,0 +1,18 @@
+
+#
+# Define config file setups for spec tests here.
+# https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-context
+#
+
+# Required chef files here:
+require "chef/config"
+
+# Basic config. Nothing fancy.
+shared_context "default config options" do
+ before do
+ Chef::Config[:cache_path] = windows? ? 'C:\chef' : "/var/chef"
+ end
+
+ # Don't need to have an after block to reset the config...
+ # The spec_helper.rb takes care of resetting the config state.
+end
diff --git a/knife/spec/support/shared/functional/knife.rb b/knife/spec/support/shared/functional/knife.rb
new file mode 100644
index 0000000000..89207e76fc
--- /dev/null
+++ b/knife/spec/support/shared/functional/knife.rb
@@ -0,0 +1,37 @@
+#
+# Author:: Adam Jacob (<adam@chef.io>)
+# Author:: AJ Christensen (<aj@junglist.gen.nz>)
+# Author:: Ho-Sheng Hsiao (<hosh@chef.io>)
+# Copyright:: Copyright (c) Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+module SpecHelpers
+ module Knife
+ def redefine_argv(value)
+ Object.send(:remove_const, :ARGV)
+ Object.send(:const_set, :ARGV, value)
+ end
+
+ def with_argv(*argv)
+ original_argv = ARGV
+ redefine_argv(argv.flatten)
+ begin
+ yield
+ ensure
+ redefine_argv(original_argv)
+ end
+ end
+ end
+end
diff --git a/knife/spec/support/shared/integration/integration_helper.rb b/knife/spec/support/shared/integration/integration_helper.rb
new file mode 100644
index 0000000000..c42a04004a
--- /dev/null
+++ b/knife/spec/support/shared/integration/integration_helper.rb
@@ -0,0 +1,122 @@
+#
+# Author:: John Keiser (<jkeiser@chef.io>)
+# Author:: Ho-Sheng Hsiao (<hosh@chef.io>)
+# Copyright:: Copyright (c) Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require "tmpdir"
+require "fileutils"
+require "chef/config"
+require "chef/json_compat"
+require "chef/server_api"
+require "cheffish/rspec/chef_run_support"
+
+module Cheffish
+ class BasicChefClient
+ def_delegators :@run_context, :before_notifications
+ end
+end
+
+module IntegrationSupport
+ include ChefZero::RSpec
+
+ def self.included(includer_class)
+ includer_class.extend(Cheffish::RSpec::ChefRunSupport)
+ includer_class.extend(ClassMethods)
+ end
+
+ module ClassMethods
+ include ChefZero::RSpec
+
+ def when_the_repository(desc, *tags, &block)
+ context("when the chef repo #{desc}", *tags) do
+ before :each do
+ raise "Can only create one directory per test" if @repository_dir
+
+ @repository_dir = Dir.mktmpdir("chef_repo")
+ Chef::Config.chef_repo_path = @repository_dir
+ %w{client cookbook data_bag environment node role user}.each do |object_name|
+ Chef::Config.delete("#{object_name}_path".to_sym)
+ end
+ end
+
+ after :each do
+ if @repository_dir
+ begin
+ # TODO: "force" actually means "silence all exceptions". this
+ # silences a weird permissions error on Windows that we should track
+ # down, but for now there's no reason for it to blow up our CI.
+ FileUtils.remove_entry_secure(@repository_dir, force = ChefUtils.windows?)
+ ensure
+ @repository_dir = nil
+ end
+ end
+ Dir.chdir(@old_cwd) if @old_cwd
+ end
+
+ module_eval(&block)
+ end
+ end
+ end
+
+ def api
+ Chef::ServerAPI.new
+ end
+
+ def directory(relative_path, &block)
+ old_parent_path = @parent_path
+ @parent_path = path_to(relative_path)
+ FileUtils.mkdir_p(@parent_path)
+ instance_eval(&block) if block
+ @parent_path = old_parent_path
+ end
+
+ def file(relative_path, contents)
+ filename = path_to(relative_path)
+ dir = File.dirname(filename)
+ FileUtils.mkdir_p(dir) unless dir == "."
+ File.open(filename, "w") do |file|
+ raw = case contents
+ when Hash, Array
+ Chef::JSONCompat.to_json_pretty(contents)
+ else
+ contents
+ end
+ file.write(raw)
+ end
+ end
+
+ def symlink(relative_path, relative_dest)
+ filename = path_to(relative_path)
+ dir = File.dirname(filename)
+ FileUtils.mkdir_p(dir) unless dir == "."
+ dest_filename = path_to(relative_dest)
+ File.symlink(dest_filename, filename)
+ end
+
+ def path_to(relative_path)
+ File.expand_path(relative_path, (@parent_path || @repository_dir))
+ end
+
+ def cb_metadata(name, version, extra_text = "")
+ "name #{name.inspect}; version #{version.inspect}#{extra_text}"
+ end
+
+ def cwd(relative_path)
+ @old_cwd = Dir.pwd
+ Dir.chdir(path_to(relative_path))
+ end
+end
diff --git a/knife/spec/support/shared/integration/knife_support.rb b/knife/spec/support/shared/integration/knife_support.rb
new file mode 100644
index 0000000000..af7b503d16
--- /dev/null
+++ b/knife/spec/support/shared/integration/knife_support.rb
@@ -0,0 +1,192 @@
+#
+# Author:: John Keiser (<jkeiser@chef.io>)
+# Copyright:: Copyright (c) Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+require "chef/config"
+require "chef/knife"
+require "chef/application/knife"
+require "logger"
+require "chef/log"
+require "chef/chef_fs/file_system_cache"
+
+module KnifeSupport
+ DEBUG = ENV["DEBUG"]
+ def knife(*args, input: nil, instance_filter: nil)
+ # Allow knife('role from file roles/blah.json') rather than requiring the
+ # arguments to be split like knife('role', 'from', 'file', 'roles/blah.json')
+ # If any argument will have actual spaces in it, the long form is required.
+ # (Since knife commands always start with the command name, and command
+ # names with spaces are always multiple args, this is safe.)
+ if args.length == 1
+ args = args[0].split(/\s+/)
+ end
+
+ # Make output stable
+ Chef::Config[:concurrency] = 1
+
+ # Work on machines where we can't access /var
+ Dir.mktmpdir("checksums") do |checksums_cache_dir|
+ Chef::Config[:syntax_check_cache_path] = checksums_cache_dir
+
+ # This is Chef::Knife.run without load_commands--we'll load stuff
+ # ourselves, thank you very much
+ stdout = StringIO.new
+ stderr = StringIO.new
+
+ stdin = if input
+ StringIO.new(input)
+ else
+ STDIN
+ end
+
+ begin
+ puts "knife: #{args.join(" ")}" if DEBUG
+ subcommand_class = Chef::Knife.subcommand_class_from(args)
+ subcommand_class.options = Chef::Application::Knife.options.merge(subcommand_class.options)
+ subcommand_class.load_deps
+ instance = subcommand_class.new(args)
+
+ # Load configs
+ instance.merge_configs
+
+ # Capture stdout/stderr
+ instance.ui = Chef::Knife::UI.new(stdout, stderr, stdin, instance.config.merge(disable_editing: true))
+
+ # Don't print stuff
+ Chef::Config[:verbosity] = ( DEBUG ? 2 : 0 )
+ instance.config[:config_file] = File.join(CHEF_SPEC_DATA, "null_config.rb")
+
+ # Ensure the ChefFS cache is empty
+ Chef::ChefFS::FileSystemCache.instance.reset!
+
+ # Configure chef with a (mostly) blank knife.rb
+ # We set a global and then mutate it in our stub knife.rb so we can be
+ # extra sure that we're not loading someone's real knife.rb and then
+ # running test scenarios against a real chef server. If things don't
+ # smell right, abort.
+
+ # To ensure that we don't pick up a user's credentials file we lie through our teeth about
+ # it's existence.
+ allow(File).to receive(:file?).and_call_original
+ allow(File).to receive(:file?).with(File.expand_path("~/.chef/credentials")).and_return(false)
+
+ # Set a canary that is modified by the default null_config.rb config file.
+ $__KNIFE_INTEGRATION_FAILSAFE_CHECK = "ole"
+
+ # Allow tweaking the knife instance before configuration.
+ instance_filter.call(instance) if instance_filter
+
+ instance.configure_chef
+
+ # The canary is incorrect, meaning the normal null_config.rb didn't run. Something is wrong.
+ unless $__KNIFE_INTEGRATION_FAILSAFE_CHECK == "ole ole"
+ raise Exception, "Potential misconfiguration of integration tests detected. Aborting test."
+ end
+
+ logger = Logger.new(stderr)
+ logger.formatter = proc { |severity, datetime, progname, msg| "#{severity}: #{msg}\n" }
+ Chef::Log.use_log_devices([logger])
+ Chef::Log.level = ( DEBUG ? :debug : :warn )
+ Chef::Log::Formatter.show_time = false
+
+ instance.run_with_pretty_exceptions(true)
+
+ exit_code = 0
+
+ # This is how rspec catches exit()
+ rescue SystemExit => e
+ exit_code = e.status
+ ensure
+ Chef::Config.delete(:syntax_check_cache_path)
+ Chef::Config.delete(:concurrency)
+ end
+
+ KnifeResult.new(stdout.string, stderr.string, exit_code)
+ end
+ end
+
+ class KnifeResult
+
+ include ::RSpec::Matchers
+
+ def initialize(stdout, stderr, exit_code)
+ @stdout = stdout
+ @stderr = stderr
+ @exit_code = exit_code
+ end
+
+ attr_reader :stdout
+ attr_reader :stderr
+ attr_reader :exit_code
+
+ def should_fail(*args)
+ expected = {}
+ args.each do |arg|
+ if arg.is_a?(Hash)
+ expected.merge!(arg)
+ elsif arg.is_a?(Integer)
+ expected[:exit_code] = arg
+ else
+ expected[:stderr] = arg
+ end
+ end
+ expected[:exit_code] = 1 unless expected[:exit_code]
+ should_result_in(expected)
+ end
+
+ def should_succeed(*args)
+ expected = {}
+ args.each do |arg|
+ if arg.is_a?(Hash)
+ expected.merge!(arg)
+ else
+ expected[:stdout] = arg
+ end
+ end
+ should_result_in(expected)
+ end
+
+ private
+
+ def should_result_in(expected)
+ expected[:stdout] = "" unless expected[:stdout]
+ expected[:stdout] = expected[:stdout].is_a?(String) ? expected[:stdout].gsub(/[ \t\f\v]+$/, "") : expected[:stdout]
+ expected[:stderr] = "" unless expected[:stderr]
+ expected[:stderr] = expected[:stderr].is_a?(String) ? expected[:stderr].gsub(/[ \t\f\v]+$/, "") : expected[:stderr]
+ expected[:exit_code] = 0 unless expected[:exit_code]
+ # TODO make this go away
+ stderr_actual = @stderr.sub(/^WARNING: No knife configuration file found\n/, "")
+ stderr_actual = stderr_actual.gsub(/[ \t\f\v]+$/, "")
+ stdout_actual = @stdout
+ stdout_actual = stdout_actual.gsub(/[ \t\f\v]+$/, "")
+ if ChefUtils.windows?
+ stderr_actual = stderr_actual.gsub("\r\n", "\n")
+ stdout_actual = stdout_actual.gsub("\r\n", "\n")
+ end
+ if expected[:stderr].is_a?(Regexp)
+ expect(stderr_actual).to match(expected[:stderr])
+ else
+ expect(stderr_actual).to eq(expected[:stderr])
+ end
+ expect(@exit_code).to eq(expected[:exit_code])
+ if expected[:stdout].is_a?(Regexp)
+ expect(stdout_actual).to match(expected[:stdout])
+ else
+ expect(stdout_actual).to eq(expected[:stdout])
+ end
+ end
+ end
+end
diff --git a/knife/spec/support/shared/matchers/exit_with_code.rb b/knife/spec/support/shared/matchers/exit_with_code.rb
new file mode 100644
index 0000000000..a9f1af81ce
--- /dev/null
+++ b/knife/spec/support/shared/matchers/exit_with_code.rb
@@ -0,0 +1,32 @@
+require "rspec/expectations"
+
+# Lifted from http://stackoverflow.com/questions/1480537/how-can-i-validate-exits-and-aborts-in-rspec
+RSpec::Matchers.define :exit_with_code do |exp_code|
+ actual = nil
+ match do |block|
+ begin
+ block.call
+ rescue SystemExit => e
+ actual = e.status
+ end
+ actual && actual == exp_code
+ end
+
+ failure_message do |block|
+ "expected block to call exit(#{exp_code}) but exit" +
+ (actual.nil? ? " not called" : "(#{actual}) was called")
+ end
+
+ failure_message_when_negated do |block|
+ "expected block not to call exit(#{exp_code})"
+ end
+
+ description do
+ "expect block to call exit(#{exp_code})"
+ end
+
+ def supports_block_expectations?
+ true
+ end
+
+end
diff --git a/knife/spec/support/shared/matchers/match_environment_variable.rb b/knife/spec/support/shared/matchers/match_environment_variable.rb
new file mode 100644
index 0000000000..393775ea29
--- /dev/null
+++ b/knife/spec/support/shared/matchers/match_environment_variable.rb
@@ -0,0 +1,17 @@
+
+require "rspec/expectations"
+require "spec/support/platform_helpers"
+
+RSpec::Matchers.define :match_environment_variable do |varname|
+ match do |actual|
+ expected = if windows? && ENV[varname].nil?
+ # On Windows, if an environment variable is not set, the command
+ # `echo %VARNAME%` outputs %VARNAME%
+ "%#{varname}%"
+ else
+ ENV[varname].to_s
+ end
+
+ actual == expected
+ end
+end
diff --git a/knife/spec/support/shared/unit/knife_shared.rb b/knife/spec/support/shared/unit/knife_shared.rb
new file mode 100644
index 0000000000..3c7459cfcc
--- /dev/null
+++ b/knife/spec/support/shared/unit/knife_shared.rb
@@ -0,0 +1,39 @@
+#
+# Author:: Tyler Cloke (<tyler@chef.io>)
+# Copyright:: Copyright (c) Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+shared_examples_for "mandatory field missing" do
+ context "when field is nil" do
+ before do
+ knife.name_args = name_args
+ end
+
+ it "exits 1" do
+ expect { knife.run }.to raise_error(SystemExit)
+ end
+
+ it "prints the usage" do
+ expect(knife).to receive(:show_usage)
+ expect { knife.run }.to raise_error(SystemExit)
+ end
+
+ it "prints a relevant error message" do
+ expect { knife.run }.to raise_error(SystemExit)
+ expect(stderr.string).to match(/You must specify a #{fieldname}/)
+ end
+ end
+end
diff --git a/knife/spec/support/shared/unit/mock_shellout.rb b/knife/spec/support/shared/unit/mock_shellout.rb
new file mode 100644
index 0000000000..0ea8f64c4d
--- /dev/null
+++ b/knife/spec/support/shared/unit/mock_shellout.rb
@@ -0,0 +1,49 @@
+#
+# Author:: John Keiser <jkeiser@chef.io>
+# Copyright:: Copyright 2015-2016, John Keiser.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#
+# Mocks shellout results. Examples:
+# mock_shellout_command("systemctl --all", exitstatus: 1)
+#
+class MockShellout
+ module RSpec
+ def mock_shellout_command(command, **result)
+ allow(::Mixlib::ShellOut).to receive(:new).with(command, anything).and_return MockShellout.new(**result)
+ end
+ end
+
+ def initialize(**properties)
+ @properties = {
+ stdout: "",
+ stderr: "",
+ exitstatus: 0,
+ }.merge(properties)
+ end
+
+ def method_missing(name, *args)
+ @properties[name.to_sym]
+ end
+
+ def error?
+ exitstatus != 0
+ end
+
+ def error!
+ raise Mixlib::ShellOut::ShellCommandFailed, "Expected process to exit with 0, but received #{exitstatus}" if error?
+ end
+end
diff --git a/knife/spec/tiny_server.rb b/knife/spec/tiny_server.rb
new file mode 100644
index 0000000000..786130d0d5
--- /dev/null
+++ b/knife/spec/tiny_server.rb
@@ -0,0 +1,190 @@
+#
+# Author:: Daniel DeLeo (<dan@chef.io>)
+# Copyright:: Copyright (c) Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require "webrick"
+require "webrick/https"
+require "rack"
+require "singleton"
+require "open-uri"
+require "chef/config"
+
+module TinyServer
+
+ class Manager
+
+ # 5 == debug, 3 == warning
+ LOGGER = WEBrick::Log.new(STDOUT, 3)
+ DEFAULT_OPTIONS = {
+ Port: 9000,
+ Host: "localhost",
+ Logger: LOGGER,
+ # SSLEnable: options[:ssl],
+ # SSLCertName: [ [ 'CN', WEBrick::Utils::getservername ] ],
+ AccessLog: [], # Remove this option to enable the access log when debugging.
+ }.freeze
+
+ def initialize(**options)
+ @options = DEFAULT_OPTIONS.merge(options)
+ @creator = caller.first
+ end
+
+ attr_reader :options
+ attr_reader :creator
+ attr_reader :server
+
+ def start(timeout = 5)
+ raise "Server already started!" if server
+
+ # Create the server (but don't start yet)
+ start_queue = Queue.new
+ @server = create_server(StartCallback: proc { start_queue << true })
+
+ @server_thread = Thread.new do
+ # Ensure any exceptions will cause the main rspec thread to fail too
+ Thread.current.abort_on_exception = true
+ server.start
+ end
+
+ # Wait for the StartCallback to tell us we've started
+ Timeout.timeout(timeout) do
+ start_queue.pop
+ end
+ end
+
+ def stop(timeout = 5)
+ if server
+ server.shutdown
+ @server = nil
+ end
+
+ if server_thread
+ begin
+ # Wait for a normal shutdown
+ server_thread.join(timeout)
+ rescue
+ # If it wouldn't shut down normally, kill it.
+ server_thread.kill
+ server_thread.join(timeout)
+ end
+ @server_thread = nil
+ end
+ end
+
+ private
+
+ attr_reader :server_thread
+
+ def create_server(**extra_options)
+ server = WEBrick::HTTPServer.new(**options, **extra_options)
+ server.mount("/", Rack::Handler::WEBrick, API.instance)
+ server
+ end
+ end
+
+ class API
+ include Singleton
+
+ GET = "GET".freeze
+ PUT = "PUT".freeze
+ POST = "POST".freeze
+ DELETE = "DELETE".freeze
+
+ attr_reader :routes
+
+ def initialize
+ clear
+ end
+
+ def clear
+ @routes = { GET => [], PUT => [], POST => [], DELETE => [] }
+ end
+
+ def get(path, response_code, data = nil, headers = nil, &block)
+ @routes[GET] << Route.new(path, Response.new(response_code, data, headers, &block))
+ end
+
+ def put(path, response_code, data = nil, headers = nil, &block)
+ @routes[PUT] << Route.new(path, Response.new(response_code, data, headers, &block))
+ end
+
+ def post(path, response_code, data = nil, headers = nil, &block)
+ @routes[POST] << Route.new(path, Response.new(response_code, data, headers, &block))
+ end
+
+ def delete(path, response_code, data = nil, headers = nil, &block)
+ @routes[DELETE] << Route.new(path, Response.new(response_code, data, headers, &block))
+ end
+
+ def call(env)
+ if response = response_for_request(env)
+ response.call
+ else
+ debug_info = { message: "no data matches the request for #{env["REQUEST_URI"]}",
+ available_routes: @routes, request: env }
+ # Uncomment me for glorious debugging
+ # pp :not_found => debug_info
+ [404, { "Content-Type" => "application/json" }, [ Chef::JSONCompat.to_json(debug_info) ]]
+ end
+ end
+
+ def response_for_request(env)
+ if route = @routes[env["REQUEST_METHOD"]].find { |route| route.matches_request?(env["REQUEST_URI"]) }
+ route.response
+ end
+ end
+ end
+
+ class Route
+ attr_reader :response
+
+ def initialize(path_spec, response)
+ @path_spec, @response = path_spec, response
+ end
+
+ def matches_request?(uri)
+ uri = URI.parse(uri).request_uri
+ @path_spec === uri
+ end
+
+ def to_s
+ "#{@path_spec} => (#{@response})"
+ end
+
+ end
+
+ class Response
+ HEADERS = { "Content-Type" => "application/json" }.freeze
+
+ def initialize(response_code = 200, data = nil, headers = nil, &block)
+ @response_code, @data = response_code, data
+ @response_headers = headers ? HEADERS.merge(headers) : HEADERS
+ @block = block_given? ? block : nil
+ end
+
+ def call
+ data = @data || @block.call
+ [@response_code, @response_headers, Array(data)]
+ end
+
+ def to_s
+ "#{@response_code} => #{(@data || @block)}"
+ end
+
+ end
+
+end
diff --git a/spec/unit/application/knife_spec.rb b/knife/spec/unit/application/knife_spec.rb
index ad705ab1e5..ad705ab1e5 100644
--- a/spec/unit/application/knife_spec.rb
+++ b/knife/spec/unit/application/knife_spec.rb
diff --git a/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb b/knife/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb
index a4d007611e..a4d007611e 100644
--- a/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb
+++ b/knife/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb
diff --git a/spec/unit/knife/bootstrap/client_builder_spec.rb b/knife/spec/unit/knife/bootstrap/client_builder_spec.rb
index cf6999b093..cf6999b093 100644
--- a/spec/unit/knife/bootstrap/client_builder_spec.rb
+++ b/knife/spec/unit/knife/bootstrap/client_builder_spec.rb
diff --git a/spec/unit/knife/bootstrap/train_connector_spec.rb b/knife/spec/unit/knife/bootstrap/train_connector_spec.rb
index 0a1091fa8d..0a1091fa8d 100644
--- a/spec/unit/knife/bootstrap/train_connector_spec.rb
+++ b/knife/spec/unit/knife/bootstrap/train_connector_spec.rb
diff --git a/spec/unit/knife/bootstrap_spec.rb b/knife/spec/unit/knife/bootstrap_spec.rb
index f2f2f48f98..f2f2f48f98 100644
--- a/spec/unit/knife/bootstrap_spec.rb
+++ b/knife/spec/unit/knife/bootstrap_spec.rb
diff --git a/spec/unit/knife/client_bulk_delete_spec.rb b/knife/spec/unit/knife/client_bulk_delete_spec.rb
index 86d69ff4d6..86d69ff4d6 100644
--- a/spec/unit/knife/client_bulk_delete_spec.rb
+++ b/knife/spec/unit/knife/client_bulk_delete_spec.rb
diff --git a/spec/unit/knife/client_create_spec.rb b/knife/spec/unit/knife/client_create_spec.rb
index 48a7e71df5..48a7e71df5 100644
--- a/spec/unit/knife/client_create_spec.rb
+++ b/knife/spec/unit/knife/client_create_spec.rb
diff --git a/spec/unit/knife/client_delete_spec.rb b/knife/spec/unit/knife/client_delete_spec.rb
index ec20878ade..ec20878ade 100644
--- a/spec/unit/knife/client_delete_spec.rb
+++ b/knife/spec/unit/knife/client_delete_spec.rb
diff --git a/spec/unit/knife/client_edit_spec.rb b/knife/spec/unit/knife/client_edit_spec.rb
index 03ac450b3e..03ac450b3e 100644
--- a/spec/unit/knife/client_edit_spec.rb
+++ b/knife/spec/unit/knife/client_edit_spec.rb
diff --git a/spec/unit/knife/client_list_spec.rb b/knife/spec/unit/knife/client_list_spec.rb
index b6a205e6b1..b6a205e6b1 100644
--- a/spec/unit/knife/client_list_spec.rb
+++ b/knife/spec/unit/knife/client_list_spec.rb
diff --git a/spec/unit/knife/client_reregister_spec.rb b/knife/spec/unit/knife/client_reregister_spec.rb
index f1217edee4..f1217edee4 100644
--- a/spec/unit/knife/client_reregister_spec.rb
+++ b/knife/spec/unit/knife/client_reregister_spec.rb
diff --git a/spec/unit/knife/client_show_spec.rb b/knife/spec/unit/knife/client_show_spec.rb
index 39928a6289..39928a6289 100644
--- a/spec/unit/knife/client_show_spec.rb
+++ b/knife/spec/unit/knife/client_show_spec.rb
diff --git a/spec/unit/knife/configure_client_spec.rb b/knife/spec/unit/knife/configure_client_spec.rb
index f88ffb31ed..f88ffb31ed 100644
--- a/spec/unit/knife/configure_client_spec.rb
+++ b/knife/spec/unit/knife/configure_client_spec.rb
diff --git a/spec/unit/knife/configure_spec.rb b/knife/spec/unit/knife/configure_spec.rb
index f9d1bea8fd..f9d1bea8fd 100644
--- a/spec/unit/knife/configure_spec.rb
+++ b/knife/spec/unit/knife/configure_spec.rb
diff --git a/spec/unit/knife/cookbook_bulk_delete_spec.rb b/knife/spec/unit/knife/cookbook_bulk_delete_spec.rb
index 52f9c1eeb9..52f9c1eeb9 100644
--- a/spec/unit/knife/cookbook_bulk_delete_spec.rb
+++ b/knife/spec/unit/knife/cookbook_bulk_delete_spec.rb
diff --git a/spec/unit/knife/cookbook_delete_spec.rb b/knife/spec/unit/knife/cookbook_delete_spec.rb
index b05006f2d3..b05006f2d3 100644
--- a/spec/unit/knife/cookbook_delete_spec.rb
+++ b/knife/spec/unit/knife/cookbook_delete_spec.rb
diff --git a/spec/unit/knife/cookbook_download_spec.rb b/knife/spec/unit/knife/cookbook_download_spec.rb
index b3dbc81205..b3dbc81205 100644
--- a/spec/unit/knife/cookbook_download_spec.rb
+++ b/knife/spec/unit/knife/cookbook_download_spec.rb
diff --git a/spec/unit/knife/cookbook_list_spec.rb b/knife/spec/unit/knife/cookbook_list_spec.rb
index 42c3ef1bfd..42c3ef1bfd 100644
--- a/spec/unit/knife/cookbook_list_spec.rb
+++ b/knife/spec/unit/knife/cookbook_list_spec.rb
diff --git a/spec/unit/knife/cookbook_metadata_from_file_spec.rb b/knife/spec/unit/knife/cookbook_metadata_from_file_spec.rb
index c595aef96f..c595aef96f 100644
--- a/spec/unit/knife/cookbook_metadata_from_file_spec.rb
+++ b/knife/spec/unit/knife/cookbook_metadata_from_file_spec.rb
diff --git a/spec/unit/knife/cookbook_metadata_spec.rb b/knife/spec/unit/knife/cookbook_metadata_spec.rb
index 1a274cc6f4..1a274cc6f4 100644
--- a/spec/unit/knife/cookbook_metadata_spec.rb
+++ b/knife/spec/unit/knife/cookbook_metadata_spec.rb
diff --git a/spec/unit/knife/cookbook_show_spec.rb b/knife/spec/unit/knife/cookbook_show_spec.rb
index 94e080cb15..94e080cb15 100644
--- a/spec/unit/knife/cookbook_show_spec.rb
+++ b/knife/spec/unit/knife/cookbook_show_spec.rb
diff --git a/spec/unit/knife/cookbook_upload_spec.rb b/knife/spec/unit/knife/cookbook_upload_spec.rb
index 0893f6a6b3..0893f6a6b3 100644
--- a/spec/unit/knife/cookbook_upload_spec.rb
+++ b/knife/spec/unit/knife/cookbook_upload_spec.rb
diff --git a/spec/unit/knife/core/bootstrap_context_spec.rb b/knife/spec/unit/knife/core/bootstrap_context_spec.rb
index 79fddc8184..79fddc8184 100644
--- a/spec/unit/knife/core/bootstrap_context_spec.rb
+++ b/knife/spec/unit/knife/core/bootstrap_context_spec.rb
diff --git a/spec/unit/knife/core/cookbook_scm_repo_spec.rb b/knife/spec/unit/knife/core/cookbook_scm_repo_spec.rb
index 68a155bbbe..68a155bbbe 100644
--- a/spec/unit/knife/core/cookbook_scm_repo_spec.rb
+++ b/knife/spec/unit/knife/core/cookbook_scm_repo_spec.rb
diff --git a/spec/unit/knife/core/cookbook_site_streaming_uploader_spec.rb b/knife/spec/unit/knife/core/cookbook_site_streaming_uploader_spec.rb
index f40626990a..f40626990a 100644
--- a/spec/unit/knife/core/cookbook_site_streaming_uploader_spec.rb
+++ b/knife/spec/unit/knife/core/cookbook_site_streaming_uploader_spec.rb
diff --git a/spec/unit/knife/core/gem_glob_loader_spec.rb b/knife/spec/unit/knife/core/gem_glob_loader_spec.rb
index 072dac3986..072dac3986 100644
--- a/spec/unit/knife/core/gem_glob_loader_spec.rb
+++ b/knife/spec/unit/knife/core/gem_glob_loader_spec.rb
diff --git a/spec/unit/knife/core/hashed_command_loader_spec.rb b/knife/spec/unit/knife/core/hashed_command_loader_spec.rb
index 305c928309..305c928309 100644
--- a/spec/unit/knife/core/hashed_command_loader_spec.rb
+++ b/knife/spec/unit/knife/core/hashed_command_loader_spec.rb
diff --git a/spec/unit/knife/core/node_editor_spec.rb b/knife/spec/unit/knife/core/node_editor_spec.rb
index f4fbe76695..f4fbe76695 100644
--- a/spec/unit/knife/core/node_editor_spec.rb
+++ b/knife/spec/unit/knife/core/node_editor_spec.rb
diff --git a/spec/unit/knife/core/object_loader_spec.rb b/knife/spec/unit/knife/core/object_loader_spec.rb
index 00a9ed4553..00a9ed4553 100644
--- a/spec/unit/knife/core/object_loader_spec.rb
+++ b/knife/spec/unit/knife/core/object_loader_spec.rb
diff --git a/spec/unit/knife/core/status_presenter_spec.rb b/knife/spec/unit/knife/core/status_presenter_spec.rb
index a3f297045b..a3f297045b 100644
--- a/spec/unit/knife/core/status_presenter_spec.rb
+++ b/knife/spec/unit/knife/core/status_presenter_spec.rb
diff --git a/spec/unit/knife/core/subcommand_loader_spec.rb b/knife/spec/unit/knife/core/subcommand_loader_spec.rb
index ad53a422fe..ad53a422fe 100644
--- a/spec/unit/knife/core/subcommand_loader_spec.rb
+++ b/knife/spec/unit/knife/core/subcommand_loader_spec.rb
diff --git a/spec/unit/knife/core/ui_spec.rb b/knife/spec/unit/knife/core/ui_spec.rb
index d5d09c0fdf..d5d09c0fdf 100644
--- a/spec/unit/knife/core/ui_spec.rb
+++ b/knife/spec/unit/knife/core/ui_spec.rb
diff --git a/spec/unit/knife/core/windows_bootstrap_context_spec.rb b/knife/spec/unit/knife/core/windows_bootstrap_context_spec.rb
index af656facf0..af656facf0 100644
--- a/spec/unit/knife/core/windows_bootstrap_context_spec.rb
+++ b/knife/spec/unit/knife/core/windows_bootstrap_context_spec.rb
diff --git a/spec/unit/knife/data_bag_create_spec.rb b/knife/spec/unit/knife/data_bag_create_spec.rb
index 6700d886fc..6700d886fc 100644
--- a/spec/unit/knife/data_bag_create_spec.rb
+++ b/knife/spec/unit/knife/data_bag_create_spec.rb
diff --git a/spec/unit/knife/data_bag_edit_spec.rb b/knife/spec/unit/knife/data_bag_edit_spec.rb
index 1be75ba014..1be75ba014 100644
--- a/spec/unit/knife/data_bag_edit_spec.rb
+++ b/knife/spec/unit/knife/data_bag_edit_spec.rb
diff --git a/spec/unit/knife/data_bag_from_file_spec.rb b/knife/spec/unit/knife/data_bag_from_file_spec.rb
index 4d7c506d0d..4d7c506d0d 100644
--- a/spec/unit/knife/data_bag_from_file_spec.rb
+++ b/knife/spec/unit/knife/data_bag_from_file_spec.rb
diff --git a/spec/unit/knife/data_bag_secret_options_spec.rb b/knife/spec/unit/knife/data_bag_secret_options_spec.rb
index 9946b82110..9946b82110 100644
--- a/spec/unit/knife/data_bag_secret_options_spec.rb
+++ b/knife/spec/unit/knife/data_bag_secret_options_spec.rb
diff --git a/spec/unit/knife/data_bag_show_spec.rb b/knife/spec/unit/knife/data_bag_show_spec.rb
index 0cc0bdf766..0cc0bdf766 100644
--- a/spec/unit/knife/data_bag_show_spec.rb
+++ b/knife/spec/unit/knife/data_bag_show_spec.rb
diff --git a/spec/unit/knife/environment_compare_spec.rb b/knife/spec/unit/knife/environment_compare_spec.rb
index 001c725624..001c725624 100644
--- a/spec/unit/knife/environment_compare_spec.rb
+++ b/knife/spec/unit/knife/environment_compare_spec.rb
diff --git a/spec/unit/knife/environment_create_spec.rb b/knife/spec/unit/knife/environment_create_spec.rb
index 0535276e9c..0535276e9c 100644
--- a/spec/unit/knife/environment_create_spec.rb
+++ b/knife/spec/unit/knife/environment_create_spec.rb
diff --git a/spec/unit/knife/environment_delete_spec.rb b/knife/spec/unit/knife/environment_delete_spec.rb
index e088f6a791..e088f6a791 100644
--- a/spec/unit/knife/environment_delete_spec.rb
+++ b/knife/spec/unit/knife/environment_delete_spec.rb
diff --git a/spec/unit/knife/environment_edit_spec.rb b/knife/spec/unit/knife/environment_edit_spec.rb
index f05de2cb2f..f05de2cb2f 100644
--- a/spec/unit/knife/environment_edit_spec.rb
+++ b/knife/spec/unit/knife/environment_edit_spec.rb
diff --git a/spec/unit/knife/environment_from_file_spec.rb b/knife/spec/unit/knife/environment_from_file_spec.rb
index fb9329eb57..fb9329eb57 100644
--- a/spec/unit/knife/environment_from_file_spec.rb
+++ b/knife/spec/unit/knife/environment_from_file_spec.rb
diff --git a/spec/unit/knife/environment_list_spec.rb b/knife/spec/unit/knife/environment_list_spec.rb
index 4f44a93f60..4f44a93f60 100644
--- a/spec/unit/knife/environment_list_spec.rb
+++ b/knife/spec/unit/knife/environment_list_spec.rb
diff --git a/spec/unit/knife/environment_show_spec.rb b/knife/spec/unit/knife/environment_show_spec.rb
index 536afcc058..536afcc058 100644
--- a/spec/unit/knife/environment_show_spec.rb
+++ b/knife/spec/unit/knife/environment_show_spec.rb
diff --git a/spec/unit/knife/key_create_spec.rb b/knife/spec/unit/knife/key_create_spec.rb
index 91d3fc0f69..91d3fc0f69 100644
--- a/spec/unit/knife/key_create_spec.rb
+++ b/knife/spec/unit/knife/key_create_spec.rb
diff --git a/spec/unit/knife/key_delete_spec.rb b/knife/spec/unit/knife/key_delete_spec.rb
index ff669446bb..ff669446bb 100644
--- a/spec/unit/knife/key_delete_spec.rb
+++ b/knife/spec/unit/knife/key_delete_spec.rb
diff --git a/spec/unit/knife/key_edit_spec.rb b/knife/spec/unit/knife/key_edit_spec.rb
index ae58d281b7..ae58d281b7 100644
--- a/spec/unit/knife/key_edit_spec.rb
+++ b/knife/spec/unit/knife/key_edit_spec.rb
diff --git a/spec/unit/knife/key_helper.rb b/knife/spec/unit/knife/key_helper.rb
index c58d383703..c58d383703 100644
--- a/spec/unit/knife/key_helper.rb
+++ b/knife/spec/unit/knife/key_helper.rb
diff --git a/spec/unit/knife/key_list_spec.rb b/knife/spec/unit/knife/key_list_spec.rb
index 3cb8a1c58d..3cb8a1c58d 100644
--- a/spec/unit/knife/key_list_spec.rb
+++ b/knife/spec/unit/knife/key_list_spec.rb
diff --git a/spec/unit/knife/key_show_spec.rb b/knife/spec/unit/knife/key_show_spec.rb
index ace6dad990..ace6dad990 100644
--- a/spec/unit/knife/key_show_spec.rb
+++ b/knife/spec/unit/knife/key_show_spec.rb
diff --git a/spec/unit/knife/node_bulk_delete_spec.rb b/knife/spec/unit/knife/node_bulk_delete_spec.rb
index cf38d542fa..cf38d542fa 100644
--- a/spec/unit/knife/node_bulk_delete_spec.rb
+++ b/knife/spec/unit/knife/node_bulk_delete_spec.rb
diff --git a/spec/unit/knife/node_delete_spec.rb b/knife/spec/unit/knife/node_delete_spec.rb
index 92932c0b6f..92932c0b6f 100644
--- a/spec/unit/knife/node_delete_spec.rb
+++ b/knife/spec/unit/knife/node_delete_spec.rb
diff --git a/spec/unit/knife/node_edit_spec.rb b/knife/spec/unit/knife/node_edit_spec.rb
index e89322d415..e89322d415 100644
--- a/spec/unit/knife/node_edit_spec.rb
+++ b/knife/spec/unit/knife/node_edit_spec.rb
diff --git a/spec/unit/knife/node_environment_set_spec.rb b/knife/spec/unit/knife/node_environment_set_spec.rb
index c2d55d0ab1..c2d55d0ab1 100644
--- a/spec/unit/knife/node_environment_set_spec.rb
+++ b/knife/spec/unit/knife/node_environment_set_spec.rb
diff --git a/spec/unit/knife/node_from_file_spec.rb b/knife/spec/unit/knife/node_from_file_spec.rb
index 359b9726b6..359b9726b6 100644
--- a/spec/unit/knife/node_from_file_spec.rb
+++ b/knife/spec/unit/knife/node_from_file_spec.rb
diff --git a/spec/unit/knife/node_list_spec.rb b/knife/spec/unit/knife/node_list_spec.rb
index baa79cb81f..baa79cb81f 100644
--- a/spec/unit/knife/node_list_spec.rb
+++ b/knife/spec/unit/knife/node_list_spec.rb
diff --git a/spec/unit/knife/node_policy_set_spec.rb b/knife/spec/unit/knife/node_policy_set_spec.rb
index 5815da29df..5815da29df 100644
--- a/spec/unit/knife/node_policy_set_spec.rb
+++ b/knife/spec/unit/knife/node_policy_set_spec.rb
diff --git a/spec/unit/knife/node_run_list_add_spec.rb b/knife/spec/unit/knife/node_run_list_add_spec.rb
index 87b75d9818..87b75d9818 100644
--- a/spec/unit/knife/node_run_list_add_spec.rb
+++ b/knife/spec/unit/knife/node_run_list_add_spec.rb
diff --git a/spec/unit/knife/node_run_list_remove_spec.rb b/knife/spec/unit/knife/node_run_list_remove_spec.rb
index 0eff7c6d27..0eff7c6d27 100644
--- a/spec/unit/knife/node_run_list_remove_spec.rb
+++ b/knife/spec/unit/knife/node_run_list_remove_spec.rb
diff --git a/spec/unit/knife/node_run_list_set_spec.rb b/knife/spec/unit/knife/node_run_list_set_spec.rb
index 35fdd63e4d..35fdd63e4d 100644
--- a/spec/unit/knife/node_run_list_set_spec.rb
+++ b/knife/spec/unit/knife/node_run_list_set_spec.rb
diff --git a/spec/unit/knife/node_show_spec.rb b/knife/spec/unit/knife/node_show_spec.rb
index c26ae94f40..c26ae94f40 100644
--- a/spec/unit/knife/node_show_spec.rb
+++ b/knife/spec/unit/knife/node_show_spec.rb
diff --git a/spec/unit/knife/org_create_spec.rb b/knife/spec/unit/knife/org_create_spec.rb
index f45ade2df7..f45ade2df7 100644
--- a/spec/unit/knife/org_create_spec.rb
+++ b/knife/spec/unit/knife/org_create_spec.rb
diff --git a/spec/unit/knife/org_delete_spec.rb b/knife/spec/unit/knife/org_delete_spec.rb
index 33311bd678..33311bd678 100644
--- a/spec/unit/knife/org_delete_spec.rb
+++ b/knife/spec/unit/knife/org_delete_spec.rb
diff --git a/spec/unit/knife/org_edit_spec.rb b/knife/spec/unit/knife/org_edit_spec.rb
index af9dae2c49..af9dae2c49 100644
--- a/spec/unit/knife/org_edit_spec.rb
+++ b/knife/spec/unit/knife/org_edit_spec.rb
diff --git a/spec/unit/knife/org_list_spec.rb b/knife/spec/unit/knife/org_list_spec.rb
index aa5fca5099..aa5fca5099 100644
--- a/spec/unit/knife/org_list_spec.rb
+++ b/knife/spec/unit/knife/org_list_spec.rb
diff --git a/spec/unit/knife/org_show_spec.rb b/knife/spec/unit/knife/org_show_spec.rb
index 364b879a7c..364b879a7c 100644
--- a/spec/unit/knife/org_show_spec.rb
+++ b/knife/spec/unit/knife/org_show_spec.rb
diff --git a/spec/unit/knife/org_user_add_spec.rb b/knife/spec/unit/knife/org_user_add_spec.rb
index 72ee1d0607..72ee1d0607 100644
--- a/spec/unit/knife/org_user_add_spec.rb
+++ b/knife/spec/unit/knife/org_user_add_spec.rb
diff --git a/spec/unit/knife/raw_spec.rb b/knife/spec/unit/knife/raw_spec.rb
index 90a09a31e6..90a09a31e6 100644
--- a/spec/unit/knife/raw_spec.rb
+++ b/knife/spec/unit/knife/raw_spec.rb
diff --git a/spec/unit/knife/role_bulk_delete_spec.rb b/knife/spec/unit/knife/role_bulk_delete_spec.rb
index f68efba57c..f68efba57c 100644
--- a/spec/unit/knife/role_bulk_delete_spec.rb
+++ b/knife/spec/unit/knife/role_bulk_delete_spec.rb
diff --git a/spec/unit/knife/role_create_spec.rb b/knife/spec/unit/knife/role_create_spec.rb
index 13f47492b1..13f47492b1 100644
--- a/spec/unit/knife/role_create_spec.rb
+++ b/knife/spec/unit/knife/role_create_spec.rb
diff --git a/spec/unit/knife/role_delete_spec.rb b/knife/spec/unit/knife/role_delete_spec.rb
index 658da5299d..658da5299d 100644
--- a/spec/unit/knife/role_delete_spec.rb
+++ b/knife/spec/unit/knife/role_delete_spec.rb
diff --git a/spec/unit/knife/role_edit_spec.rb b/knife/spec/unit/knife/role_edit_spec.rb
index adade177a7..adade177a7 100644
--- a/spec/unit/knife/role_edit_spec.rb
+++ b/knife/spec/unit/knife/role_edit_spec.rb
diff --git a/spec/unit/knife/role_env_run_list_add_spec.rb b/knife/spec/unit/knife/role_env_run_list_add_spec.rb
index b42ec6141f..b42ec6141f 100644
--- a/spec/unit/knife/role_env_run_list_add_spec.rb
+++ b/knife/spec/unit/knife/role_env_run_list_add_spec.rb
diff --git a/spec/unit/knife/role_env_run_list_clear_spec.rb b/knife/spec/unit/knife/role_env_run_list_clear_spec.rb
index ad88d1ae37..ad88d1ae37 100644
--- a/spec/unit/knife/role_env_run_list_clear_spec.rb
+++ b/knife/spec/unit/knife/role_env_run_list_clear_spec.rb
diff --git a/spec/unit/knife/role_env_run_list_remove_spec.rb b/knife/spec/unit/knife/role_env_run_list_remove_spec.rb
index 8755ce452b..8755ce452b 100644
--- a/spec/unit/knife/role_env_run_list_remove_spec.rb
+++ b/knife/spec/unit/knife/role_env_run_list_remove_spec.rb
diff --git a/spec/unit/knife/role_env_run_list_replace_spec.rb b/knife/spec/unit/knife/role_env_run_list_replace_spec.rb
index 457f4efbd7..457f4efbd7 100644
--- a/spec/unit/knife/role_env_run_list_replace_spec.rb
+++ b/knife/spec/unit/knife/role_env_run_list_replace_spec.rb
diff --git a/spec/unit/knife/role_env_run_list_set_spec.rb b/knife/spec/unit/knife/role_env_run_list_set_spec.rb
index 34233398f5..34233398f5 100644
--- a/spec/unit/knife/role_env_run_list_set_spec.rb
+++ b/knife/spec/unit/knife/role_env_run_list_set_spec.rb
diff --git a/spec/unit/knife/role_from_file_spec.rb b/knife/spec/unit/knife/role_from_file_spec.rb
index 6e2fdf7cfb..6e2fdf7cfb 100644
--- a/spec/unit/knife/role_from_file_spec.rb
+++ b/knife/spec/unit/knife/role_from_file_spec.rb
diff --git a/spec/unit/knife/role_list_spec.rb b/knife/spec/unit/knife/role_list_spec.rb
index f37a85b6dc..f37a85b6dc 100644
--- a/spec/unit/knife/role_list_spec.rb
+++ b/knife/spec/unit/knife/role_list_spec.rb
diff --git a/spec/unit/knife/role_run_list_add_spec.rb b/knife/spec/unit/knife/role_run_list_add_spec.rb
index 7b038c2e81..7b038c2e81 100644
--- a/spec/unit/knife/role_run_list_add_spec.rb
+++ b/knife/spec/unit/knife/role_run_list_add_spec.rb
diff --git a/spec/unit/knife/role_run_list_clear_spec.rb b/knife/spec/unit/knife/role_run_list_clear_spec.rb
index 5479b01811..5479b01811 100644
--- a/spec/unit/knife/role_run_list_clear_spec.rb
+++ b/knife/spec/unit/knife/role_run_list_clear_spec.rb
diff --git a/spec/unit/knife/role_run_list_remove_spec.rb b/knife/spec/unit/knife/role_run_list_remove_spec.rb
index 353ae36c1a..353ae36c1a 100644
--- a/spec/unit/knife/role_run_list_remove_spec.rb
+++ b/knife/spec/unit/knife/role_run_list_remove_spec.rb
diff --git a/spec/unit/knife/role_run_list_replace_spec.rb b/knife/spec/unit/knife/role_run_list_replace_spec.rb
index e59b704f00..e59b704f00 100644
--- a/spec/unit/knife/role_run_list_replace_spec.rb
+++ b/knife/spec/unit/knife/role_run_list_replace_spec.rb
diff --git a/spec/unit/knife/role_run_list_set_spec.rb b/knife/spec/unit/knife/role_run_list_set_spec.rb
index b75f1ab377..b75f1ab377 100644
--- a/spec/unit/knife/role_run_list_set_spec.rb
+++ b/knife/spec/unit/knife/role_run_list_set_spec.rb
diff --git a/spec/unit/knife/role_show_spec.rb b/knife/spec/unit/knife/role_show_spec.rb
index a79cb40e81..a79cb40e81 100644
--- a/spec/unit/knife/role_show_spec.rb
+++ b/knife/spec/unit/knife/role_show_spec.rb
diff --git a/spec/unit/knife/ssh_spec.rb b/knife/spec/unit/knife/ssh_spec.rb
index 59015f024a..59015f024a 100644
--- a/spec/unit/knife/ssh_spec.rb
+++ b/knife/spec/unit/knife/ssh_spec.rb
diff --git a/spec/unit/knife/ssl_check_spec.rb b/knife/spec/unit/knife/ssl_check_spec.rb
index 4412ee0be9..4412ee0be9 100644
--- a/spec/unit/knife/ssl_check_spec.rb
+++ b/knife/spec/unit/knife/ssl_check_spec.rb
diff --git a/spec/unit/knife/ssl_fetch_spec.rb b/knife/spec/unit/knife/ssl_fetch_spec.rb
index c2dc5bdade..c2dc5bdade 100644
--- a/spec/unit/knife/ssl_fetch_spec.rb
+++ b/knife/spec/unit/knife/ssl_fetch_spec.rb
diff --git a/spec/unit/knife/status_spec.rb b/knife/spec/unit/knife/status_spec.rb
index f3b31c1897..f3b31c1897 100644
--- a/spec/unit/knife/status_spec.rb
+++ b/knife/spec/unit/knife/status_spec.rb
diff --git a/spec/unit/knife/supermarket_download_spec.rb b/knife/spec/unit/knife/supermarket_download_spec.rb
index 3796140d61..3796140d61 100644
--- a/spec/unit/knife/supermarket_download_spec.rb
+++ b/knife/spec/unit/knife/supermarket_download_spec.rb
diff --git a/spec/unit/knife/supermarket_install_spec.rb b/knife/spec/unit/knife/supermarket_install_spec.rb
index 6ebbbc005c..6ebbbc005c 100644
--- a/spec/unit/knife/supermarket_install_spec.rb
+++ b/knife/spec/unit/knife/supermarket_install_spec.rb
diff --git a/spec/unit/knife/supermarket_list_spec.rb b/knife/spec/unit/knife/supermarket_list_spec.rb
index bbaf733f44..bbaf733f44 100644
--- a/spec/unit/knife/supermarket_list_spec.rb
+++ b/knife/spec/unit/knife/supermarket_list_spec.rb
diff --git a/spec/unit/knife/supermarket_search_spec.rb b/knife/spec/unit/knife/supermarket_search_spec.rb
index 18092f52c8..18092f52c8 100644
--- a/spec/unit/knife/supermarket_search_spec.rb
+++ b/knife/spec/unit/knife/supermarket_search_spec.rb
diff --git a/spec/unit/knife/supermarket_share_spec.rb b/knife/spec/unit/knife/supermarket_share_spec.rb
index d362edf3c0..d362edf3c0 100644
--- a/spec/unit/knife/supermarket_share_spec.rb
+++ b/knife/spec/unit/knife/supermarket_share_spec.rb
diff --git a/spec/unit/knife/supermarket_unshare_spec.rb b/knife/spec/unit/knife/supermarket_unshare_spec.rb
index 63682a663c..63682a663c 100644
--- a/spec/unit/knife/supermarket_unshare_spec.rb
+++ b/knife/spec/unit/knife/supermarket_unshare_spec.rb
diff --git a/spec/unit/knife/tag_create_spec.rb b/knife/spec/unit/knife/tag_create_spec.rb
index 290b925f4e..290b925f4e 100644
--- a/spec/unit/knife/tag_create_spec.rb
+++ b/knife/spec/unit/knife/tag_create_spec.rb
diff --git a/spec/unit/knife/tag_delete_spec.rb b/knife/spec/unit/knife/tag_delete_spec.rb
index dd01fba50f..dd01fba50f 100644
--- a/spec/unit/knife/tag_delete_spec.rb
+++ b/knife/spec/unit/knife/tag_delete_spec.rb
diff --git a/spec/unit/knife/tag_list_spec.rb b/knife/spec/unit/knife/tag_list_spec.rb
index 5da7803e09..5da7803e09 100644
--- a/spec/unit/knife/tag_list_spec.rb
+++ b/knife/spec/unit/knife/tag_list_spec.rb
diff --git a/spec/unit/knife/user_create_spec.rb b/knife/spec/unit/knife/user_create_spec.rb
index 1257d92ee9..1257d92ee9 100644
--- a/spec/unit/knife/user_create_spec.rb
+++ b/knife/spec/unit/knife/user_create_spec.rb
diff --git a/spec/unit/knife/user_delete_spec.rb b/knife/spec/unit/knife/user_delete_spec.rb
index 57d4072c50..57d4072c50 100644
--- a/spec/unit/knife/user_delete_spec.rb
+++ b/knife/spec/unit/knife/user_delete_spec.rb
diff --git a/spec/unit/knife/user_edit_spec.rb b/knife/spec/unit/knife/user_edit_spec.rb
index 12e2f19561..12e2f19561 100644
--- a/spec/unit/knife/user_edit_spec.rb
+++ b/knife/spec/unit/knife/user_edit_spec.rb
diff --git a/spec/unit/knife/user_list_spec.rb b/knife/spec/unit/knife/user_list_spec.rb
index 01013de352..01013de352 100644
--- a/spec/unit/knife/user_list_spec.rb
+++ b/knife/spec/unit/knife/user_list_spec.rb
diff --git a/spec/unit/knife/user_password_spec.rb b/knife/spec/unit/knife/user_password_spec.rb
index 139ed242de..139ed242de 100644
--- a/spec/unit/knife/user_password_spec.rb
+++ b/knife/spec/unit/knife/user_password_spec.rb
diff --git a/spec/unit/knife/user_reregister_spec.rb b/knife/spec/unit/knife/user_reregister_spec.rb
index 9178996abf..9178996abf 100644
--- a/spec/unit/knife/user_reregister_spec.rb
+++ b/knife/spec/unit/knife/user_reregister_spec.rb
diff --git a/spec/unit/knife/user_show_spec.rb b/knife/spec/unit/knife/user_show_spec.rb
index 3bcbbcb648..3bcbbcb648 100644
--- a/spec/unit/knife/user_show_spec.rb
+++ b/knife/spec/unit/knife/user_show_spec.rb
diff --git a/spec/unit/knife_spec.rb b/knife/spec/unit/knife_spec.rb
index f3315f3cf5..f3315f3cf5 100644
--- a/spec/unit/knife_spec.rb
+++ b/knife/spec/unit/knife_spec.rb