diff options
author | danielsdeleo <dan@getchef.com> | 2014-08-07 18:20:20 -0700 |
---|---|---|
committer | danielsdeleo <dan@getchef.com> | 2014-08-10 09:40:36 -0700 |
commit | 674cc65dc68b9d5f0eaa36f2409c6c12becf2c11 (patch) | |
tree | 7c33437663b794c5cdbbd78eff5a77f0b83ead1f /spec/integration/knife | |
parent | e2a6b85f5b095f2350fa24f8e825fa22660fcbc7 (diff) | |
download | chef-674cc65dc68b9d5f0eaa36f2409c6c12becf2c11.tar.gz |
Convert Chef Zero helpers to instance methods
* Prefer instance methods to class methods for Chef Zero helpers.
RSpec's design and feature set heavily favors using instance methods
for test setup. This change will allow us to use let bindings and more
naturally move common setup to shared contexts.
* Temporarily copy ChefZero's RSpec features in-repo. master of Chef
Zero is currently broken for unit testing. Copy the changes here for
now so we can make progress.
* Automatically generate a metadata file when using the "cookbook"
helper function. This will be needed for a subsequent change that
makes `name' required in metadata.
Diffstat (limited to 'spec/integration/knife')
-rw-r--r-- | spec/integration/knife/chef_fs_data_store_spec.rb | 98 | ||||
-rw-r--r-- | spec/integration/knife/chef_repo_path_spec.rb | 183 | ||||
-rw-r--r-- | spec/integration/knife/chef_repository_file_system_spec.rb | 184 | ||||
-rw-r--r-- | spec/integration/knife/chefignore_spec.rb | 122 | ||||
-rw-r--r-- | spec/integration/knife/common_options_spec.rb | 37 | ||||
-rw-r--r-- | spec/integration/knife/cookbook_api_ipv6_spec.rb | 4 | ||||
-rw-r--r-- | spec/integration/knife/delete_spec.rb | 112 | ||||
-rw-r--r-- | spec/integration/knife/deps_spec.rb | 239 | ||||
-rw-r--r-- | spec/integration/knife/diff_spec.rb | 278 | ||||
-rw-r--r-- | spec/integration/knife/download_spec.rb | 355 | ||||
-rw-r--r-- | spec/integration/knife/list_spec.rb | 116 | ||||
-rw-r--r-- | spec/integration/knife/raw_spec.rb | 33 | ||||
-rw-r--r-- | spec/integration/knife/redirection_spec.rb | 4 | ||||
-rw-r--r-- | spec/integration/knife/serve_spec.rb | 4 | ||||
-rw-r--r-- | spec/integration/knife/show_spec.rb | 58 | ||||
-rw-r--r-- | spec/integration/knife/upload_spec.rb | 447 |
16 files changed, 1384 insertions, 890 deletions
diff --git a/spec/integration/knife/chef_fs_data_store_spec.rb b/spec/integration/knife/chef_fs_data_store_spec.rb index 7e55aa7319..da1c72bd0c 100644 --- a/spec/integration/knife/chef_fs_data_store_spec.rb +++ b/spec/integration/knife/chef_fs_data_store_spec.rb @@ -23,17 +23,19 @@ require 'chef/knife/raw' require 'chef/knife/cookbook_upload' describe 'ChefFSDataStore tests' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport when_the_repository "has one of each thing" do - file 'clients/x.json', {} - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/y.json', {} - file 'environments/x.json', {} - file 'nodes/x.json', {} - file 'roles/x.json', {} - file 'users/x.json', {} + before do + file 'clients/x.json', {} + file 'cookbooks/x/metadata.rb', 'version "1.0.0"' + file 'data_bags/x/y.json', {} + file 'environments/x.json', {} + file 'nodes/x.json', {} + file 'roles/x.json', {} + file 'users/x.json', {} + end context 'GET /TYPE' do it 'knife list -z -R returns everything' do @@ -102,7 +104,7 @@ EOM context 'GET /TYPE/NAME' do it 'knife show -z /clients/x.json works' do - knife('show -z /clients/x.json').should_succeed /"x"/ + knife('show -z /clients/x.json').should_succeed( /"x"/ ) end it 'knife show -z /cookbooks/x/metadata.rb works' do @@ -110,33 +112,35 @@ EOM end it 'knife show -z /data_bags/x/y.json works' do - knife('show -z /data_bags/x/y.json').should_succeed /"y"/ + knife('show -z /data_bags/x/y.json').should_succeed( /"y"/ ) end it 'knife show -z /environments/x.json works' do - knife('show -z /environments/x.json').should_succeed /"x"/ + knife('show -z /environments/x.json').should_succeed( /"x"/ ) end it 'knife show -z /nodes/x.json works' do - knife('show -z /nodes/x.json').should_succeed /"x"/ + knife('show -z /nodes/x.json').should_succeed( /"x"/ ) end it 'knife show -z /roles/x.json works' do - knife('show -z /roles/x.json').should_succeed /"x"/ + knife('show -z /roles/x.json').should_succeed( /"x"/ ) end it 'knife show -z /users/x.json works' do - knife('show -z /users/x.json').should_succeed /"x"/ + knife('show -z /users/x.json').should_succeed( /"x"/ ) end end context 'PUT /TYPE/NAME' do - file 'empty.json', {} - file 'rolestuff.json', '{"description":"hi there","name":"x"}' - file 'cookbooks_to_upload/x/metadata.rb', "version '1.0.0'\n\n" + before do + file 'empty.json', {} + file 'rolestuff.json', '{"description":"hi there","name":"x"}' + file 'cookbooks_to_upload/x/metadata.rb', "version '1.0.0'\n\n" + end it 'knife raw -z -i empty.json -m PUT /clients/x' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /clients/x").should_succeed /"x"/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /clients/x").should_succeed( /"x"/ ) knife('list --local /clients').should_succeed "/clients/x.json\n" end @@ -149,32 +153,32 @@ EOM end it 'knife raw -z -i empty.json -m PUT /data/x/y' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /data/x/y").should_succeed /"y"/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /data/x/y").should_succeed( /"y"/ ) knife('list --local -Rfp /data_bags').should_succeed "/data_bags/x/\n/data_bags/x/y.json\n" end it 'knife raw -z -i empty.json -m PUT /environments/x' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /environments/x").should_succeed /"x"/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /environments/x").should_succeed( /"x"/ ) knife('list --local /environments').should_succeed "/environments/x.json\n" end it 'knife raw -z -i empty.json -m PUT /nodes/x' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /nodes/x").should_succeed /"x"/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /nodes/x").should_succeed( /"x"/ ) knife('list --local /nodes').should_succeed "/nodes/x.json\n" end it 'knife raw -z -i empty.json -m PUT /roles/x' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /roles/x").should_succeed /"x"/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /roles/x").should_succeed( /"x"/ ) knife('list --local /roles').should_succeed "/roles/x.json\n" end it 'knife raw -z -i empty.json -m PUT /users/x' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /users/x").should_succeed /"x"/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /users/x").should_succeed( /"x"/ ) knife('list --local /users').should_succeed "/users/x.json\n" end it 'After knife raw -z -i rolestuff.json -m PUT /roles/x, the output is pretty', :pending => (RUBY_VERSION < "1.9") do - knife("raw -z -i #{path_to('rolestuff.json')} -m PUT /roles/x").should_succeed /"x"/ + knife("raw -z -i #{path_to('rolestuff.json')} -m PUT /roles/x").should_succeed( /"x"/ ) IO.read(path_to('roles/x.json')).should == <<EOM.strip { "name": "x", @@ -187,14 +191,16 @@ EOM when_the_repository 'is empty' do context 'POST /TYPE/NAME' do - file 'empty.json', { 'name' => 'z' } - file 'empty_x.json', { 'name' => 'x' } - file 'empty_id.json', { 'id' => 'z' } - file 'rolestuff.json', '{"description":"hi there","name":"x"}' - file 'cookbooks_to_upload/z/metadata.rb', "version '1.0.0'" + before do + file 'empty.json', { 'name' => 'z' } + file 'empty_x.json', { 'name' => 'x' } + file 'empty_id.json', { 'id' => 'z' } + file 'rolestuff.json', '{"description":"hi there","name":"x"}' + file 'cookbooks_to_upload/z/metadata.rb', "version '1.0.0'" + end it 'knife raw -z -i empty.json -m POST /clients' do - knife("raw -z -i #{path_to('empty.json')} -m POST /clients").should_succeed /uri/ + knife("raw -z -i #{path_to('empty.json')} -m POST /clients").should_succeed( /uri/ ) knife('list --local /clients').should_succeed "/clients/z.json\n" end @@ -207,38 +213,38 @@ EOM end it 'knife raw -z -i empty.json -m POST /data' do - knife("raw -z -i #{path_to('empty.json')} -m POST /data").should_succeed /uri/ + knife("raw -z -i #{path_to('empty.json')} -m POST /data").should_succeed( /uri/ ) knife('list --local -Rfp /data_bags').should_succeed "/data_bags/z/\n" end it 'knife raw -z -i empty.json -m POST /data/x' do - knife("raw -z -i #{path_to('empty_x.json')} -m POST /data").should_succeed /uri/ - knife("raw -z -i #{path_to('empty_id.json')} -m POST /data/x").should_succeed /"z"/ + knife("raw -z -i #{path_to('empty_x.json')} -m POST /data").should_succeed( /uri/ ) + knife("raw -z -i #{path_to('empty_id.json')} -m POST /data/x").should_succeed( /"z"/ ) knife('list --local -Rfp /data_bags').should_succeed "/data_bags/x/\n/data_bags/x/z.json\n" end it 'knife raw -z -i empty.json -m POST /environments' do - knife("raw -z -i #{path_to('empty.json')} -m POST /environments").should_succeed /uri/ + knife("raw -z -i #{path_to('empty.json')} -m POST /environments").should_succeed( /uri/ ) knife('list --local /environments').should_succeed "/environments/z.json\n" end it 'knife raw -z -i empty.json -m POST /nodes' do - knife("raw -z -i #{path_to('empty.json')} -m POST /nodes").should_succeed /uri/ + knife("raw -z -i #{path_to('empty.json')} -m POST /nodes").should_succeed( /uri/ ) knife('list --local /nodes').should_succeed "/nodes/z.json\n" end it 'knife raw -z -i empty.json -m POST /roles' do - knife("raw -z -i #{path_to('empty.json')} -m POST /roles").should_succeed /uri/ + knife("raw -z -i #{path_to('empty.json')} -m POST /roles").should_succeed( /uri/ ) knife('list --local /roles').should_succeed "/roles/z.json\n" end it 'knife raw -z -i empty.json -m POST /users' do - knife("raw -z -i #{path_to('empty.json')} -m POST /users").should_succeed /uri/ + knife("raw -z -i #{path_to('empty.json')} -m POST /users").should_succeed( /uri/ ) knife('list --local /users').should_succeed "/users/z.json\n" end it 'After knife raw -z -i rolestuff.json -m POST /roles, the output is pretty', :pending => (RUBY_VERSION < "1.9") do - knife("raw -z -i #{path_to('rolestuff.json')} -m POST /roles").should_succeed /uri/ + knife("raw -z -i #{path_to('rolestuff.json')} -m POST /roles").should_succeed( /uri/ ) IO.read(path_to('roles/x.json')).should == <<EOM.strip { "name": "x", @@ -325,30 +331,32 @@ EOM end context 'PUT /TYPE/NAME' do - file 'empty.json', {} + before do + file 'empty.json', {} + end it 'knife raw -z -i empty.json -m PUT /clients/x fails with 404' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /clients/x").should_fail /404/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /clients/x").should_fail( /404/ ) end it 'knife raw -z -i empty.json -m PUT /data/x/y fails with 404' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /data/x/y").should_fail /404/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /data/x/y").should_fail( /404/ ) end it 'knife raw -z -i empty.json -m PUT /environments/x fails with 404' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /environments/x").should_fail /404/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /environments/x").should_fail( /404/ ) end it 'knife raw -z -i empty.json -m PUT /nodes/x fails with 404' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /nodes/x").should_fail /404/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /nodes/x").should_fail( /404/ ) end it 'knife raw -z -i empty.json -m PUT /roles/x fails with 404' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /roles/x").should_fail /404/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /roles/x").should_fail( /404/ ) end it 'knife raw -z -i empty.json -m PUT /users/x fails with 404' do - knife("raw -z -i #{path_to('empty.json')} -m PUT /users/x").should_fail /404/ + knife("raw -z -i #{path_to('empty.json')} -m PUT /users/x").should_fail( /404/ ) end end end diff --git a/spec/integration/knife/chef_repo_path_spec.rb b/spec/integration/knife/chef_repo_path_spec.rb index 72d2ffbf75..90455ed374 100644 --- a/spec/integration/knife/chef_repo_path_spec.rb +++ b/spec/integration/knife/chef_repo_path_spec.rb @@ -21,36 +21,38 @@ require 'chef/knife/list' require 'chef/knife/show' describe 'chef_repo_path tests' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport # TODO alternate repo_path / *_path context 'alternate *_path' do when_the_repository 'has clients and clients2, cookbooks and cookbooks2, etc.' do - file 'clients/client1.json', {} - file 'cookbooks/cookbook1/metadata.rb', '' - file 'data_bags/bag/item.json', {} - file 'environments/env1.json', {} - file 'nodes/node1.json', {} - file 'roles/role1.json', {} - file 'users/user1.json', {} - - file 'clients2/client2.json', {} - file 'cookbooks2/cookbook2/metadata.rb', '' - file 'data_bags2/bag2/item2.json', {} - file 'environments2/env2.json', {} - file 'nodes2/node2.json', {} - file 'roles2/role2.json', {} - file 'users2/user2.json', {} - - directory 'chef_repo2' do - file 'clients/client3.json', {} - file 'cookbooks/cookbook3/metadata.rb', '' - file 'data_bags/bag3/item3.json', {} - file 'environments/env3.json', {} - file 'nodes/node3.json', {} - file 'roles/role3.json', {} - file 'users/user3.json', {} + before do + file 'clients/client1.json', {} + file 'cookbooks/cookbook1/metadata.rb', '' + file 'data_bags/bag/item.json', {} + file 'environments/env1.json', {} + file 'nodes/node1.json', {} + file 'roles/role1.json', {} + file 'users/user1.json', {} + + file 'clients2/client2.json', {} + file 'cookbooks2/cookbook2/metadata.rb', '' + file 'data_bags2/bag2/item2.json', {} + file 'environments2/env2.json', {} + file 'nodes2/node2.json', {} + file 'roles2/role2.json', {} + file 'users2/user2.json', {} + + directory 'chef_repo2' do + file 'clients/client3.json', {} + file 'cookbooks/cookbook3/metadata.rb', '' + file 'data_bags/bag3/item3.json', {} + file 'environments/env3.json', {} + file 'nodes/node3.json', {} + file 'roles/role3.json', {} + file 'users/user3.json', {} + end end it 'knife list --local -Rfp --chef-repo-path chef_repo2 / grabs chef_repo2 stuff' do @@ -105,21 +107,21 @@ EOM end context 'when cwd is at the top level' do - cwd '.' + before { cwd '.' } it 'knife list --local -Rfp fails' do knife('list --local -Rfp').should_fail("ERROR: Attempt to use relative path '' when current directory is outside the repository path\n") end end context 'when cwd is inside the data_bags directory' do - cwd 'data_bags' + before { cwd 'data_bags' } it 'knife list --local -Rfp fails' do knife('list --local -Rfp').should_fail("ERROR: Attempt to use relative path '' when current directory is outside the repository path\n") end end context 'when cwd is inside chef_repo2' do - cwd 'chef_repo2' + before { cwd 'chef_repo2' } it 'knife list --local -Rfp lists everything' do knife('list --local -Rfp').should_succeed <<EOM clients/ @@ -143,7 +145,7 @@ EOM end context 'when cwd is inside data_bags2' do - cwd 'data_bags2' + before { cwd 'data_bags2' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag2/ @@ -164,7 +166,7 @@ EOM end context 'when cwd is at the top level' do - cwd '.' + before { cwd '.' } it 'knife list --local -Rfp lists everything' do knife('list --local -Rfp').should_succeed <<EOM clients/ @@ -188,21 +190,21 @@ EOM end context 'when cwd is inside the data_bags directory' do - cwd 'data_bags' + before { cwd 'data_bags' } it 'knife list --local -Rfp fails' do knife('list --local -Rfp').should_fail("ERROR: Attempt to use relative path '' when current directory is outside the repository path\n") end end context 'when cwd is inside chef_repo2' do - cwd 'chef_repo2' + before { cwd 'chef_repo2' } it 'knife list -Rfp fails' do knife('list --local -Rfp').should_fail("ERROR: Attempt to use relative path '' when current directory is outside the repository path\n") end end context 'when cwd is inside data_bags2' do - cwd 'data_bags2' + before { cwd 'data_bags2' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag2/ @@ -221,21 +223,21 @@ EOM end context 'when cwd is at the top level' do - cwd '.' + before { cwd '.' } it 'knife list --local -Rfp fails' do knife('list --local -Rfp').should_fail("ERROR: Attempt to use relative path '' when current directory is outside the repository path\n") end end context 'when cwd is inside the data_bags directory' do - cwd 'data_bags' + before { cwd 'data_bags' } it 'knife list --local -Rfp fails' do knife('list --local -Rfp').should_fail("ERROR: Attempt to use relative path '' when current directory is outside the repository path\n") end end context 'when cwd is inside chef_repo2' do - cwd 'chef_repo2' + before { cwd 'chef_repo2' } it 'knife list --local -Rfp lists everything' do knife('list --local -Rfp').should_succeed <<EOM clients/ @@ -259,7 +261,7 @@ EOM end context 'when cwd is inside chef_repo2/data_bags' do - cwd 'chef_repo2/data_bags' + before { cwd 'chef_repo2/data_bags' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag3/ @@ -281,20 +283,25 @@ EOM end context 'when there is a directory in clients1 and file in clients2 with the same name' do - directory 'clients/blah.json' - file 'clients2/blah.json', {} + before do + directory 'clients/blah.json' + file 'clients2/blah.json', {} + end it 'knife show /clients/blah.json succeeds' do knife('show --local /clients/blah.json').should_succeed <<EOM /clients/blah.json: { + } EOM end end context 'when there is a file in cookbooks1 and directory in cookbooks2 with the same name' do - file 'cookbooks/blah', '' - file 'cookbooks2/blah/metadata.rb', '' + before do + file 'cookbooks/blah', '' + file 'cookbooks2/blah/metadata.rb', '' + end it 'knife list -Rfp cookbooks shows files in blah' do knife('list --local -Rfp /cookbooks').should_succeed <<EOM /cookbooks/blah/ @@ -308,8 +315,10 @@ EOM end context 'when there is an empty directory in cookbooks1 and a real cookbook in cookbooks2 with the same name' do - directory 'cookbooks/blah' - file 'cookbooks2/blah/metadata.rb', '' + before do + directory 'cookbooks/blah' + file 'cookbooks2/blah/metadata.rb', '' + end it 'knife list -Rfp cookbooks shows files in blah' do knife('list --local -Rfp /cookbooks').should_succeed(<<EOM, :stderr => "WARN: Cookbook 'blah' is empty or entirely chefignored at #{Chef::Config.cookbook_path[0]}/blah\n") /cookbooks/blah/ @@ -323,8 +332,10 @@ EOM end context 'when there is a cookbook in cookbooks1 and a cookbook in cookbooks2 with the same name' do - file 'cookbooks/blah/metadata.json', {} - file 'cookbooks2/blah/metadata.rb', '' + before do + file 'cookbooks/blah/metadata.json', {} + file 'cookbooks2/blah/metadata.rb', '' + end it 'knife list -Rfp cookbooks shows files in the first cookbook and not the second' do knife('list --local -Rfp /cookbooks').should_succeed(<<EOM, :stderr => "WARN: Child with name 'blah' found in multiple directories: #{Chef::Config.cookbook_path[0]}/blah and #{Chef::Config.cookbook_path[1]}/blah\n") /cookbooks/blah/ @@ -338,8 +349,10 @@ EOM end context 'when there is a file in data_bags1 and a directory in data_bags2 with the same name' do - file 'data_bags/blah', '' - file 'data_bags2/blah/item.json', '' + before do + file 'data_bags/blah', '' + file 'data_bags2/blah/item.json', '' + end it 'knife list -Rfp data_bags shows files in blah' do knife('list --local -Rfp /data_bags').should_succeed <<EOM /data_bags/bag/ @@ -353,8 +366,10 @@ EOM end context 'when there is a data bag in data_bags1 and a data bag in data_bags2 with the same name' do - file 'data_bags/blah/item1.json', '' - file 'data_bags2/blah/item2.json', '' + before do + file 'data_bags/blah/item1.json', '' + file 'data_bags2/blah/item2.json', '' + end it 'knife list -Rfp data_bags shows only items in data_bags1' do knife('list --local -Rfp /data_bags').should_succeed(<<EOM, :stderr => "WARN: Child with name 'blah' found in multiple directories: #{Chef::Config.data_bag_path[0]}/blah and #{Chef::Config.data_bag_path[1]}/blah\n") /data_bags/bag/ @@ -368,62 +383,74 @@ EOM end context 'when there is a directory in environments1 and file in environments2 with the same name' do - directory 'environments/blah.json' - file 'environments2/blah.json', {} + before do + directory 'environments/blah.json' + file 'environments2/blah.json', {} + end it 'knife show /environments/blah.json succeeds' do knife('show --local /environments/blah.json').should_succeed <<EOM /environments/blah.json: { + } EOM end end context 'when there is a directory in nodes1 and file in nodes2 with the same name' do - directory 'nodes/blah.json' - file 'nodes2/blah.json', {} + before do + directory 'nodes/blah.json' + file 'nodes2/blah.json', {} + end it 'knife show /nodes/blah.json succeeds' do knife('show --local /nodes/blah.json').should_succeed <<EOM /nodes/blah.json: { + } EOM end end context 'when there is a directory in roles1 and file in roles2 with the same name' do - directory 'roles/blah.json' - file 'roles2/blah.json', {} + before do + directory 'roles/blah.json' + file 'roles2/blah.json', {} + end it 'knife show /roles/blah.json succeeds' do knife('show --local /roles/blah.json').should_succeed <<EOM /roles/blah.json: { + } EOM end end context 'when there is a directory in users1 and file in users2 with the same name' do - directory 'users/blah.json' - file 'users2/blah.json', {} + before do + directory 'users/blah.json' + file 'users2/blah.json', {} + end it 'knife show /users/blah.json succeeds' do knife('show --local /users/blah.json').should_succeed <<EOM /users/blah.json: { + } EOM end end context 'when cwd is at the top level' do - cwd '.' + before { cwd '.' } it 'knife list --local -Rfp fails' do knife('list --local -Rfp').should_fail("ERROR: Attempt to use relative path '' when current directory is outside the repository path\n") end end context 'when cwd is inside the data_bags directory' do - cwd 'data_bags' + before { cwd 'data_bags' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag/ @@ -435,7 +462,7 @@ EOM end context 'when cwd is inside chef_repo2' do - cwd 'chef_repo2' + before { cwd 'chef_repo2' } it 'knife list --local -Rfp lists everything' do knife('list --local -Rfp').should_succeed <<EOM clients/ @@ -468,7 +495,7 @@ EOM end context 'when cwd is inside data_bags2' do - cwd 'data_bags2' + before { cwd 'data_bags2' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag/ @@ -492,7 +519,7 @@ EOM end context 'when cwd is at the top level' do - cwd '.' + before { cwd '.' } it 'knife list --local -Rfp lists everything' do knife('list --local -Rfp').should_succeed <<EOM clients/ @@ -525,7 +552,7 @@ EOM end context 'when cwd is inside the data_bags directory' do - cwd 'data_bags' + before { cwd 'data_bags' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag/ @@ -537,7 +564,7 @@ EOM end context 'when cwd is inside chef_repo2' do - cwd 'chef_repo2' + before { cwd 'chef_repo2' } it 'knife list --local -Rfp lists everything' do knife('list --local -Rfp').should_succeed <<EOM clients/ @@ -570,7 +597,7 @@ EOM end context 'when cwd is inside chef_repo2/data_bags' do - cwd 'chef_repo2/data_bags' + before { cwd 'chef_repo2/data_bags' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag/ @@ -592,21 +619,21 @@ EOM end context 'when cwd is at the top level' do - cwd '.' + before { cwd '.' } it 'knife list --local -Rfp fails' do knife('list --local -Rfp').should_fail("ERROR: Attempt to use relative path '' when current directory is outside the repository path\n") end end context 'when cwd is inside the data_bags directory' do - cwd 'data_bags' + before { cwd 'data_bags' } it 'knife list --local -Rfp fails' do knife('list --local -Rfp').should_fail("ERROR: Attempt to use relative path '' when current directory is outside the repository path\n") end end context 'when cwd is inside chef_repo2' do - cwd 'chef_repo2' + before { cwd 'chef_repo2' } it 'knife list --local -Rfp lists everything' do knife('list --local -Rfp').should_succeed <<EOM clients/ @@ -630,7 +657,7 @@ EOM end context 'when cwd is inside chef_repo2/data_bags' do - cwd 'chef_repo2/data_bags' + before { cwd 'chef_repo2/data_bags' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag3/ @@ -653,7 +680,7 @@ EOM end context 'when cwd is at the top level' do - cwd '.' + before { cwd '.' } it 'knife list --local -Rfp lists everything' do knife('list --local -Rfp').should_succeed <<EOM clients/ @@ -686,7 +713,7 @@ EOM end context 'when cwd is inside the data_bags directory' do - cwd 'data_bags' + before { cwd 'data_bags' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag/ @@ -698,7 +725,7 @@ EOM end context 'when cwd is inside chef_repo2' do - cwd 'chef_repo2' + before { cwd 'chef_repo2' } it 'knife list --local -Rfp lists everything' do knife('list --local -Rfp').should_succeed <<EOM clients/ @@ -731,7 +758,7 @@ EOM end context 'when cwd is inside chef_repo2/data_bags' do - cwd 'chef_repo2/data_bags' + before { cwd 'chef_repo2/data_bags' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag/ @@ -753,14 +780,14 @@ EOM end context 'when cwd is at the top level' do - cwd '.' + before { cwd '.' } it 'knife list --local -Rfp fails' do knife('list --local -Rfp').should_fail("ERROR: Attempt to use relative path '' when current directory is outside the repository path\n") end end context 'when cwd is inside the data_bags directory' do - cwd 'data_bags' + before { cwd 'data_bags' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag/ @@ -770,7 +797,7 @@ EOM end context 'when cwd is inside chef_repo2' do - cwd 'chef_repo2' + before { cwd 'chef_repo2' } it 'knife list --local -Rfp lists everything' do knife('list --local -Rfp').should_succeed <<EOM clients/ @@ -794,7 +821,7 @@ EOM end context 'when cwd is inside chef_repo2/data_bags' do - cwd 'chef_repo2/data_bags' + before { cwd 'chef_repo2/data_bags' } it 'knife list --local -Rfp fails' do knife('list --local -Rfp').should_fail("ERROR: Attempt to use relative path '' when current directory is outside the repository path\n") end @@ -828,7 +855,7 @@ EOM end context 'when cwd is inside the data_bags directory' do - cwd 'data_bags' + before { cwd 'data_bags' } it 'knife list --local -Rfp lists data bags' do knife('list --local -Rfp').should_succeed <<EOM bag/ diff --git a/spec/integration/knife/chef_repository_file_system_spec.rb b/spec/integration/knife/chef_repository_file_system_spec.rb index 68ca5f89f4..ff86924e22 100644 --- a/spec/integration/knife/chef_repository_file_system_spec.rb +++ b/spec/integration/knife/chef_repository_file_system_spec.rb @@ -20,14 +20,16 @@ require 'chef/knife/list' require 'chef/knife/show' describe 'General chef_repo file system checks' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport context 'directories and files that should/should not be ignored' do when_the_repository "has empty roles, environments and data bag item directories" do - directory "roles" - directory "environments" - directory "data_bags/bag1" + before do + directory "roles" + directory "environments" + directory "data_bags/bag1" + end it "knife list --local -Rfp / returns them" do knife('list --local -Rfp /').should_succeed <<EOM @@ -40,7 +42,7 @@ EOM end when_the_repository "has an empty data_bags directory" do - directory "data_bags" + before { directory "data_bags" } it "knife list --local / returns it" do knife('list --local /').should_succeed "/data_bags\n" @@ -48,7 +50,7 @@ EOM end when_the_repository "has an empty cookbook directory" do - directory 'cookbooks/cookbook1' + before { directory 'cookbooks/cookbook1' } it "knife list --local -Rfp / does not return it" do knife('list --local -Rfp /').should_succeed(<<EOM, :stderr => "WARN: Cookbook 'cookbook1' is empty or entirely chefignored at #{Chef::Config.chef_repo_path}/cookbooks/cookbook1\n") @@ -58,7 +60,7 @@ EOM end when_the_repository "has only empty cookbook subdirectories" do - directory 'cookbooks/cookbook1/recipes' + before { directory 'cookbooks/cookbook1/recipes' } it "knife list --local -Rfp / does not return it" do knife('list --local -Rfp /').should_succeed(<<EOM, :stderr => "WARN: Cookbook 'cookbook1' is empty or entirely chefignored at #{Chef::Config.chef_repo_path}/cookbooks/cookbook1\n") @@ -68,8 +70,10 @@ EOM end when_the_repository "has empty and non-empty cookbook subdirectories" do - directory 'cookbooks/cookbook1/recipes' - file 'cookbooks/cookbook1/templates/default/x.txt', '' + before do + directory 'cookbooks/cookbook1/recipes' + file 'cookbooks/cookbook1/templates/default/x.txt', '' + end it "knife list --local -Rfp / does not return the empty ones" do knife('list --local -Rfp /').should_succeed <<EOM @@ -83,7 +87,7 @@ EOM end when_the_repository "has only empty cookbook sub-sub-directories" do - directory 'cookbooks/cookbook1/templates/default' + before { directory 'cookbooks/cookbook1/templates/default' } it "knife list --local -Rfp / does not return it" do knife('list --local -Rfp /').should_succeed(<<EOM, :stderr => "WARN: Cookbook 'cookbook1' is empty or entirely chefignored at #{Chef::Config.chef_repo_path}/cookbooks/cookbook1\n") @@ -93,9 +97,11 @@ EOM end when_the_repository "has empty cookbook sub-sub-directories alongside non-empty ones" do - file 'cookbooks/cookbook1/templates/default/x.txt', '' - directory 'cookbooks/cookbook1/templates/rhel' - directory 'cookbooks/cookbook1/files/default' + before do + file 'cookbooks/cookbook1/templates/default/x.txt', '' + directory 'cookbooks/cookbook1/templates/rhel' + directory 'cookbooks/cookbook1/files/default' + end it "knife list --local -Rfp / does not return the empty ones" do knife('list --local -Rfp /').should_succeed <<EOM @@ -109,8 +115,10 @@ EOM end when_the_repository "has an extra schmenvironments directory" do - directory "schmenvironments" do - file "_default.json", {} + before do + directory "schmenvironments" do + file "_default.json", {} + end end it "knife list --local -Rfp / should NOT return it" do @@ -119,20 +127,22 @@ EOM end when_the_repository "has extra subdirectories and files under data bag items, roles, and environments" do - directory "data_bags/bag1" do - file "item1.json", {} - file "item2.xml", "" - file "another_subdir/item.json", {} - end - directory "roles" do - file "role1.json", {} - file "role2.xml", "" - file "subdir/role.json", {} - end - directory "environments" do - file "environment1.json", {} - file "environment2.xml", "" - file "subdir/environment.json", {} + before do + directory "data_bags/bag1" do + file "item1.json", {} + file "item2.xml", "" + file "another_subdir/item.json", {} + end + directory "roles" do + file "role1.json", {} + file "role2.xml", "" + file "subdir/role.json", {} + end + directory "environments" do + file "environment1.json", {} + file "environment2.xml", "" + file "subdir/environment.json", {} + end end it "knife list --local -Rfp / should NOT return them" do @@ -149,56 +159,58 @@ EOM end when_the_repository "has extraneous subdirectories and files under a cookbook" do - directory 'cookbooks/cookbook1' do - file 'a.rb', '' - file 'blarghle/blah.rb', '' - directory 'attributes' do - file 'a.rb', '' - file 'b.json', {} - file 'c/d.rb', '' - file 'c/e.json', {} - end - directory 'definitions' do - file 'a.rb', '' - file 'b.json', {} - file 'c/d.rb', '' - file 'c/e.json', {} - end - directory 'recipes' do + before do + directory 'cookbooks/cookbook1' do file 'a.rb', '' - file 'b.json', {} - file 'c/d.rb', '' - file 'c/e.json', {} - end - directory 'libraries' do - file 'a.rb', '' - file 'b.json', {} - file 'c/d.rb', '' - file 'c/e.json', {} - end - directory 'templates' do - file 'a.rb', '' - file 'b.json', {} - file 'c/d.rb', '' - file 'c/e.json', {} - end - directory 'files' do - file 'a.rb', '' - file 'b.json', {} - file 'c/d.rb', '' - file 'c/e.json', {} - end - directory 'resources' do - file 'a.rb', '' - file 'b.json', {} - file 'c/d.rb', '' - file 'c/e.json', {} - end - directory 'providers' do - file 'a.rb', '' - file 'b.json', {} - file 'c/d.rb', '' - file 'c/e.json', {} + file 'blarghle/blah.rb', '' + directory 'attributes' do + file 'a.rb', '' + file 'b.json', {} + file 'c/d.rb', '' + file 'c/e.json', {} + end + directory 'definitions' do + file 'a.rb', '' + file 'b.json', {} + file 'c/d.rb', '' + file 'c/e.json', {} + end + directory 'recipes' do + file 'a.rb', '' + file 'b.json', {} + file 'c/d.rb', '' + file 'c/e.json', {} + end + directory 'libraries' do + file 'a.rb', '' + file 'b.json', {} + file 'c/d.rb', '' + file 'c/e.json', {} + end + directory 'templates' do + file 'a.rb', '' + file 'b.json', {} + file 'c/d.rb', '' + file 'c/e.json', {} + end + directory 'files' do + file 'a.rb', '' + file 'b.json', {} + file 'c/d.rb', '' + file 'c/e.json', {} + end + directory 'resources' do + file 'a.rb', '' + file 'b.json', {} + file 'c/d.rb', '' + file 'c/e.json', {} + end + directory 'providers' do + file 'a.rb', '' + file 'b.json', {} + file 'c/d.rb', '' + file 'c/e.json', {} + end end end @@ -240,7 +252,7 @@ EOM end when_the_repository "has a file in cookbooks/" do - file 'cookbooks/file', '' + before { file 'cookbooks/file', '' } it 'does not show up in list -Rfp' do knife('list --local -Rfp /').should_succeed <<EOM /cookbooks/ @@ -249,7 +261,7 @@ EOM end when_the_repository "has a file in data_bags/" do - file 'data_bags/file', '' + before { file 'data_bags/file', '' } it 'does not show up in list -Rfp' do knife('list --local -Rfp /').should_succeed <<EOM /data_bags/ @@ -259,16 +271,20 @@ EOM end when_the_repository 'has a cookbook starting with .' do - file 'cookbooks/.svn/metadata.rb', '' - file 'cookbooks/a.b/metadata.rb', '' + before do + file 'cookbooks/.svn/metadata.rb', '' + file 'cookbooks/a.b/metadata.rb', '' + end it 'knife list does not show it' do knife('list --local -fp /cookbooks').should_succeed "/cookbooks/a.b/\n" end end when_the_repository 'has a data bag starting with .' do - file 'data_bags/.svn/x.json', {} - file 'data_bags/a.b/x.json', {} + before do + file 'data_bags/.svn/x.json', {} + file 'data_bags/a.b/x.json', {} + end it 'knife list does not show it' do knife('list --local -fp /data_bags').should_succeed "/data_bags/a.b/\n" end diff --git a/spec/integration/knife/chefignore_spec.rb b/spec/integration/knife/chefignore_spec.rb index 4c3d2fa3aa..b09959b581 100644 --- a/spec/integration/knife/chefignore_spec.rb +++ b/spec/integration/knife/chefignore_spec.rb @@ -20,23 +20,27 @@ require 'chef/knife/list' require 'chef/knife/show' describe 'chefignore tests' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport when_the_repository "has lots of stuff in it" do - file 'roles/x.json', {} - file 'environments/x.json', {} - file 'data_bags/bag1/x.json', {} - file 'cookbooks/cookbook1/x.json', {} + before do + file 'roles/x.json', {} + file 'environments/x.json', {} + file 'data_bags/bag1/x.json', {} + file 'cookbooks/cookbook1/x.json', {} + end context "and has a chefignore everywhere except cookbooks" do - chefignore = "x.json\nroles/x.json\nenvironments/x.json\ndata_bags/bag1/x.json\nbag1/x.json\ncookbooks/cookbook1/x.json\ncookbook1/x.json\n" - file 'chefignore', chefignore - file 'roles/chefignore', chefignore - file 'environments/chefignore', chefignore - file 'data_bags/chefignore', chefignore - file 'data_bags/bag1/chefignore', chefignore - file 'cookbooks/cookbook1/chefignore', chefignore + before do + chefignore = "x.json\nroles/x.json\nenvironments/x.json\ndata_bags/bag1/x.json\nbag1/x.json\ncookbooks/cookbook1/x.json\ncookbook1/x.json\n" + file 'chefignore', chefignore + file 'roles/chefignore', chefignore + file 'environments/chefignore', chefignore + file 'data_bags/chefignore', chefignore + file 'data_bags/bag1/chefignore', chefignore + file 'cookbooks/cookbook1/chefignore', chefignore + end it 'matching files and directories get ignored' do # NOTE: many of the "chefignore" files should probably not show up @@ -58,9 +62,11 @@ EOM end when_the_repository 'has a cookbook with only chefignored files' do - file 'cookbooks/cookbook1/templates/default/x.rb', '' - file 'cookbooks/cookbook1/libraries/x.rb', '' - file 'cookbooks/chefignore', "libraries/x.rb\ntemplates/default/x.rb\n" + before do + file 'cookbooks/cookbook1/templates/default/x.rb', '' + file 'cookbooks/cookbook1/libraries/x.rb', '' + file 'cookbooks/chefignore', "libraries/x.rb\ntemplates/default/x.rb\n" + end it 'the cookbook is not listed' do knife('list --local -Rfp /').should_succeed(<<EOM, :stderr => "WARN: Cookbook 'cookbook1' is empty or entirely chefignored at #{Chef::Config.chef_repo_path}/cookbooks/cookbook1\n") @@ -70,13 +76,15 @@ EOM end when_the_repository "has multiple cookbooks" do - file 'cookbooks/cookbook1/x.json', {} - file 'cookbooks/cookbook1/y.json', {} - file 'cookbooks/cookbook2/x.json', {} - file 'cookbooks/cookbook2/y.json', {} + before do + file 'cookbooks/cookbook1/x.json', {} + file 'cookbooks/cookbook1/y.json', {} + file 'cookbooks/cookbook2/x.json', {} + file 'cookbooks/cookbook2/y.json', {} + end context 'and has a chefignore with filenames' do - file 'cookbooks/chefignore', "x.json\n" + before { file 'cookbooks/chefignore', "x.json\n" } it 'matching files and directories get ignored in all cookbooks' do knife('list --local -Rfp /').should_succeed <<EOM @@ -90,8 +98,10 @@ EOM end context "and has a chefignore with wildcards" do - file 'cookbooks/chefignore', "x.*\n" - file 'cookbooks/cookbook1/x.rb', '' + before do + file 'cookbooks/chefignore', "x.*\n" + file 'cookbooks/cookbook1/x.rb', '' + end it 'matching files and directories get ignored in all cookbooks' do knife('list --local -Rfp /').should_succeed <<EOM @@ -105,9 +115,11 @@ EOM end context "and has a chefignore with relative paths" do - file 'cookbooks/cookbook1/recipes/x.rb', '' - file 'cookbooks/cookbook2/recipes/y.rb', '' - file 'cookbooks/chefignore', "recipes/x.rb\n" + before do + file 'cookbooks/cookbook1/recipes/x.rb', '' + file 'cookbooks/cookbook2/recipes/y.rb', '' + file 'cookbooks/chefignore', "recipes/x.rb\n" + end it 'matching directories get ignored' do knife('list --local -Rfp /').should_succeed <<EOM @@ -125,8 +137,10 @@ EOM end context "and has a chefignore with subdirectories" do - file 'cookbooks/cookbook1/recipes/y.rb', '' - file 'cookbooks/chefignore', "recipes\nrecipes/\n" + before do + file 'cookbooks/cookbook1/recipes/y.rb', '' + file 'cookbooks/chefignore', "recipes\nrecipes/\n" + end it 'matching directories do NOT get ignored' do knife('list --local -Rfp /').should_succeed <<EOM @@ -144,9 +158,11 @@ EOM end context "and has a chefignore that ignores all files in a subdirectory" do - file 'cookbooks/cookbook1/templates/default/x.rb', '' - file 'cookbooks/cookbook1/libraries/x.rb', '' - file 'cookbooks/chefignore', "libraries/x.rb\ntemplates/default/x.rb\n" + before do + file 'cookbooks/cookbook1/templates/default/x.rb', '' + file 'cookbooks/cookbook1/libraries/x.rb', '' + file 'cookbooks/chefignore', "libraries/x.rb\ntemplates/default/x.rb\n" + end it 'ignores the subdirectory entirely' do knife('list --local -Rfp /').should_succeed <<EOM @@ -162,7 +178,9 @@ EOM end context "and has an empty chefignore" do - file 'cookbooks/chefignore', "\n" + before do + file 'cookbooks/chefignore', "\n" + end it 'nothing is ignored' do knife('list --local -Rfp /').should_succeed <<EOM @@ -178,7 +196,9 @@ EOM end context "and has a chefignore with comments and empty lines" do - file 'cookbooks/chefignore', "\n\n # blah\n#\nx.json\n\n" + before do + file 'cookbooks/chefignore', "\n\n # blah\n#\nx.json\n\n" + end it 'matching files and directories get ignored in all cookbooks' do knife('list --local -Rfp /').should_succeed <<EOM @@ -200,14 +220,18 @@ EOM ] end - file 'cookbooks1/mycookbook/metadata.rb', '' - file 'cookbooks1/mycookbook/x.json', {} - file 'cookbooks2/yourcookbook/metadata.rb', '' - file 'cookbooks2/yourcookbook/x.json', '' + before do + file 'cookbooks1/mycookbook/metadata.rb', '' + file 'cookbooks1/mycookbook/x.json', {} + file 'cookbooks2/yourcookbook/metadata.rb', '' + file 'cookbooks2/yourcookbook/x.json', '' + end context "and multiple chefignores" do - file 'cookbooks1/chefignore', "metadata.rb\n" - file 'cookbooks2/chefignore', "x.json\n" + before do + file 'cookbooks1/chefignore', "metadata.rb\n" + file 'cookbooks2/chefignore', "x.json\n" + end it "chefignores apply only to the directories they are in" do knife('list --local -Rfp /').should_succeed <<EOM /cookbooks/ @@ -219,10 +243,12 @@ EOM end context "and conflicting cookbooks" do - file 'cookbooks1/yourcookbook/metadata.rb', '' - file 'cookbooks1/yourcookbook/x.json', '' - file 'cookbooks1/yourcookbook/onlyincookbooks1.rb', '' - file 'cookbooks2/yourcookbook/onlyincookbooks2.rb', '' + before do + file 'cookbooks1/yourcookbook/metadata.rb', '' + file 'cookbooks1/yourcookbook/x.json', '' + file 'cookbooks1/yourcookbook/onlyincookbooks1.rb', '' + file 'cookbooks2/yourcookbook/onlyincookbooks2.rb', '' + end it "chefignores apply only to the winning cookbook" do knife('list --local -Rfp /').should_succeed(<<EOM, :stderr => "WARN: Child with name 'yourcookbook' found in multiple directories: #{Chef::Config.chef_repo_path}/cookbooks1/yourcookbook and #{Chef::Config.chef_repo_path}/cookbooks2/yourcookbook\n") @@ -239,7 +265,9 @@ EOM end when_the_repository 'has a cookbook named chefignore' do - file 'cookbooks/chefignore/metadata.rb', {} + before do + file 'cookbooks/chefignore/metadata.rb', {} + end it 'knife list -Rfp /cookbooks shows it' do knife('list --local -Rfp /cookbooks').should_succeed <<EOM /cookbooks/chefignore/ @@ -249,9 +277,11 @@ EOM end when_the_repository 'has multiple cookbook paths, one with a chefignore file and the other with a cookbook named chefignore' do - file 'cookbooks1/chefignore', '' - file 'cookbooks1/blah/metadata.rb', '' - file 'cookbooks2/chefignore/metadata.rb', '' + before do + file 'cookbooks1/chefignore', '' + file 'cookbooks1/blah/metadata.rb', '' + file 'cookbooks2/chefignore/metadata.rb', '' + end before :each do Chef::Config.cookbook_path = [ File.join(Chef::Config.chef_repo_path, 'cookbooks1'), diff --git a/spec/integration/knife/common_options_spec.rb b/spec/integration/knife/common_options_spec.rb index 9127edc6b5..7a48f14ad3 100644 --- a/spec/integration/knife/common_options_spec.rb +++ b/spec/integration/knife/common_options_spec.rb @@ -19,18 +19,11 @@ require 'support/shared/integration/integration_helper' require 'chef/knife/raw' describe 'knife common options' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport when_the_repository "has a node" do - file 'nodes/x.json', {} - - before(:each) do - if ChefZero::RSpec.server - ChefZero::RSpec.server.stop - ChefZero::RSpec.server = nil - end - end + before { file 'nodes/x.json', {} } context 'When chef_zero.enabled is true' do before(:each) do @@ -38,14 +31,14 @@ describe 'knife common options' do end it 'knife raw /nodes/x should retrieve the node' do - knife('raw /nodes/x').should_succeed /"name": "x"/ + knife('raw /nodes/x').should_succeed( /"name": "x"/ ) end context 'And chef_zero.port is 9999' do before(:each) { Chef::Config.chef_zero.port = 9999 } it 'knife raw /nodes/x should retrieve the node' do - knife('raw /nodes/x').should_succeed /"name": "x"/ + knife('raw /nodes/x').should_succeed( /"name": "x"/ ) Chef::Config.chef_server_url.should == 'http://localhost:9999' end end @@ -55,12 +48,13 @@ describe 'knife common options' do before(:each) { Chef::Config.chef_zero.host = '0.0.0.0' } it 'knife raw /nodes/x should retrieve the role' do - knife('raw /nodes/x').should_succeed /"name": "x"/ + knife('raw /nodes/x').should_succeed( /"name": "x"/ ) end end context 'and there is a private key' do - file 'mykey.pem', <<EOM + before do + file 'mykey.pem', <<EOM -----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEApubutqtYYQ5UiA9QhWP7UvSmsfHsAoPKEVVPdVW/e8Svwpyf 0Xef6OFWVmBE+W442ZjLOe2y6p2nSnaq4y7dg99NFz6X+16mcKiCbj0RCiGqCvCk @@ -89,23 +83,24 @@ syHLXYFNy0OxMtH/bBAXBGNHd9gf5uOnqh0pYcbe/uRAxumC7Rl0cL509eURiA2T +vFmf54y9YdnLXaqv+FhJT6B6V7WX7IpU9BMqJY1cJYXHuHG2KA= -----END RSA PRIVATE KEY----- EOM + end it 'knife raw /nodes/x should retrieve the node' do - knife('raw /nodes/x').should_succeed /"name": "x"/ + knife('raw /nodes/x').should_succeed( /"name": "x"/ ) end end end it 'knife raw -z /nodes/x retrieves the node' do - knife('raw -z /nodes/x').should_succeed /"name": "x"/ + knife('raw -z /nodes/x').should_succeed( /"name": "x"/ ) end it 'knife raw --local-mode /nodes/x retrieves the node' do - knife('raw --local-mode /nodes/x').should_succeed /"name": "x"/ + knife('raw --local-mode /nodes/x').should_succeed( /"name": "x"/ ) end it 'knife raw -z --chef-zero-port=9999 /nodes/x retrieves the node' do - knife('raw -z --chef-zero-port=9999 /nodes/x').should_succeed /"name": "x"/ + knife('raw -z --chef-zero-port=9999 /nodes/x').should_succeed( /"name": "x"/ ) Chef::Config.chef_server_url.should == 'http://localhost:9999' end @@ -123,7 +118,7 @@ EOM end it 'knife raw -z /nodes/x retrieves the node' do - knife('raw -z /nodes/x').should_succeed /"name": "x"/ + knife('raw -z /nodes/x').should_succeed( /"name": "x"/ ) expect(URI(Chef::Config.chef_server_url).port).to be > 8889 end end @@ -142,18 +137,18 @@ EOM end it 'knife raw -z --chef-zero-port=9999-20000 /nodes/x' do - knife('raw -z --chef-zero-port=9999-20000 /nodes/x').should_succeed /"name": "x"/ + knife('raw -z --chef-zero-port=9999-20000 /nodes/x').should_succeed( /"name": "x"/ ) expect(URI(Chef::Config.chef_server_url).port).to be > 9999 end it 'knife raw -z --chef-zero-port=9999-9999,19423' do - knife('raw -z --chef-zero-port=9999-9999,19423 /nodes/x').should_succeed /"name": "x"/ + knife('raw -z --chef-zero-port=9999-9999,19423 /nodes/x').should_succeed( /"name": "x"/ ) expect(URI(Chef::Config.chef_server_url).port).to be == 19423 end end it 'knife raw -z --chef-zero-port=9999 /nodes/x retrieves the node' do - knife('raw -z --chef-zero-port=9999 /nodes/x').should_succeed /"name": "x"/ + knife('raw -z --chef-zero-port=9999 /nodes/x').should_succeed( /"name": "x"/ ) Chef::Config.chef_server_url.should == 'http://localhost:9999' end end diff --git a/spec/integration/knife/cookbook_api_ipv6_spec.rb b/spec/integration/knife/cookbook_api_ipv6_spec.rb index ad7d5e857f..ac2538dc38 100644 --- a/spec/integration/knife/cookbook_api_ipv6_spec.rb +++ b/spec/integration/knife/cookbook_api_ipv6_spec.rb @@ -19,7 +19,7 @@ require 'support/shared/integration/integration_helper' require 'chef/mixin/shell_out' describe "Knife cookbook API integration with IPv6" do - extend IntegrationSupport + include IntegrationSupport include Chef::Mixin::ShellOut when_the_chef_server "is bound to IPv6" do @@ -100,7 +100,7 @@ END_CLIENT_RB end it "downloads the cookbook" do - s = shell_out!("knife cookbook download apache2 #{knife_config_flag} -d #{cache_path}", :cwd => chef_dir) + shell_out!("knife cookbook download apache2 #{knife_config_flag} -d #{cache_path}", :cwd => chef_dir) Dir["#{cache_path}/*"].map {|entry| File.basename(entry)}.should include("apache2-0.0.0") end end diff --git a/spec/integration/knife/delete_spec.rb b/spec/integration/knife/delete_spec.rb index 8d9b972ca4..efbfa1004b 100644 --- a/spec/integration/knife/delete_spec.rb +++ b/spec/integration/knife/delete_spec.rb @@ -21,7 +21,7 @@ require 'chef/knife/list' require 'chef/knife/raw' describe 'knife delete' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport let :everything do @@ -99,23 +99,27 @@ EOM end when_the_chef_server "has one of each thing" do - client 'x', '{}' - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' } - data_bag 'x', { 'y' => '{}' } - environment 'x', '{}' - node 'x', '{}' - role 'x', '{}' - user 'x', '{}' + before do + client 'x', '{}' + cookbook 'x', '1.0.0' + data_bag 'x', { 'y' => '{}' } + environment 'x', '{}' + node 'x', '{}' + role 'x', '{}' + user 'x', '{}' + end when_the_repository 'also has one of each thing' do - file 'clients/x.json', {} - file 'cookbooks/x/metadata.rb', '' - file 'data_bags/x/y.json', {} - file 'environments/_default.json', {} - file 'environments/x.json', {} - file 'nodes/x.json', {} - file 'roles/x.json', {} - file 'users/x.json', {} + before do + file 'clients/x.json', {} + file 'cookbooks/x/metadata.rb', '' + file 'data_bags/x/y.json', {} + file 'environments/_default.json', {} + file 'environments/x.json', {} + file 'nodes/x.json', {} + file 'roles/x.json', {} + file 'users/x.json', {} + end it 'knife delete --both /cookbooks/x fails' do knife('delete --both /cookbooks/x').should_fail <<EOM @@ -216,8 +220,11 @@ EOM # TODO delete empty data bag (particularly different on local side) context 'with an empty data bag on both' do - data_bag 'empty', {} - directory 'data_bags/empty' + before do + data_bag 'empty', {} + directory 'data_bags/empty' + end + it 'knife delete --both /data_bags/empty fails but deletes local version' do knife('delete --both /data_bags/empty').should_fail <<EOM ERROR: /data_bags/empty (remote) must be deleted recursively! Pass -r to knife delete. @@ -468,13 +475,15 @@ EOM end when_the_repository 'has only top-level directories' do - directory 'clients' - directory 'cookbooks' - directory 'data_bags' - directory 'environments' - directory 'nodes' - directory 'roles' - directory 'users' + before do + directory 'clients' + directory 'cookbooks' + directory 'data_bags' + directory 'environments' + directory 'nodes' + directory 'roles' + directory 'users' + end it 'knife delete --both /cookbooks/x fails' do knife('delete --both /cookbooks/x').should_fail "ERROR: /cookbooks/x (remote) must be deleted recursively! Pass -r to knife delete.\n" @@ -632,7 +641,7 @@ EOM end context 'and cwd is at the top level' do - cwd '.' + before { cwd '.' } it 'knife delete fails' do knife('delete').should_fail "FATAL: Must specify at least one argument. If you want to delete everything in this directory, type \"knife delete --recurse .\"\n", :stdout => /USAGE/ knife('list -Rf /').should_succeed <<EOM @@ -673,14 +682,16 @@ EOM when_the_chef_server 'is empty' do when_the_repository 'has one of each thing' do - file 'clients/x.json', {} - file 'cookbooks/x/metadata.rb', '' - file 'data_bags/x/y.json', {} - file 'environments/_default.json', {} - file 'environments/x.json', {} - file 'nodes/x.json', {} - file 'roles/x.json', {} - file 'users/x.json', {} + before do + file 'clients/x.json', {} + file 'cookbooks/x/metadata.rb', '' + file 'data_bags/x/y.json', {} + file 'environments/_default.json', {} + file 'environments/x.json', {} + file 'nodes/x.json', {} + file 'roles/x.json', {} + file 'users/x.json', {} + end it 'knife delete --both /cookbooks/x fails' do knife('delete --both /cookbooks/x').should_fail "ERROR: /cookbooks/x (local) must be deleted recursively! Pass -r to knife delete.\n" @@ -843,7 +854,7 @@ EOM end context 'and cwd is at the top level' do - cwd '.' + before { cwd '.' } it 'knife delete fails' do knife('delete').should_fail "FATAL: Must specify at least one argument. If you want to delete everything in this directory, type \"knife delete --recurse .\"\n", :stdout => /USAGE/ knife('list -Rf /').should_succeed <<EOM @@ -884,12 +895,16 @@ EOM end when_the_repository 'has a cookbook' do - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x/onlyin1.0.0.rb', 'old_text' + before do + file 'cookbooks/x/metadata.rb', 'version "1.0.0"' + file 'cookbooks/x/onlyin1.0.0.rb', 'old_text' + end when_the_chef_server 'has a later version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => '' } - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => '' } + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' } + end # TODO this seems wrong it 'knife delete --both -r /cookbooks/x deletes the latest version on the server and the local version' do @@ -900,8 +915,10 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => ''} - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => ''} + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' } + end it 'knife delete --both /cookbooks/x deletes the latest version on the server and the local version' do knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n" @@ -911,7 +928,7 @@ EOM end when_the_chef_server 'has a later version for the cookbook, and no current version' do - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' } + before { cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' } } it 'knife delete --both /cookbooks/x deletes the server and client version of the cookbook' do knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n" @@ -921,7 +938,7 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook, and no current version' do - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' } + before { cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' } } it 'knife delete --both /cookbooks/x deletes the server and client version of the cookbook' do knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n" @@ -933,11 +950,14 @@ EOM when_the_repository 'is empty' do when_the_chef_server 'has two versions of a cookbook' do - cookbook 'x', '2.0.11', { 'metadata.rb' => 'version "2.0.11"' } - cookbook 'x', '11.0.0', { 'metadata.rb' => 'version "11.0.0"' } + before do + cookbook 'x', '2.0.11' + cookbook 'x', '11.0.0' + end + it 'knife delete deletes the latest version' do knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n" - knife('raw /cookbooks/x').should_succeed /2.0.11/ + knife('raw /cookbooks/x').should_succeed( /2.0.11/ ) end end end diff --git a/spec/integration/knife/deps_spec.rb b/spec/integration/knife/deps_spec.rb index 7f434f844d..7ee6138739 100644 --- a/spec/integration/knife/deps_spec.rb +++ b/spec/integration/knife/deps_spec.rb @@ -20,24 +20,26 @@ require 'support/shared/context/config' require 'chef/knife/deps' describe 'knife deps' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport context 'local' do when_the_repository 'has a role with no run_list' do - file 'roles/starring.json', {} + before { file 'roles/starring.json', {} } it 'knife deps reports no dependencies' do knife('deps /roles/starring.json').should_succeed "/roles/starring.json\n" end end when_the_repository 'has a role with a default run_list' do - file 'roles/starring.json', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } - file 'roles/minor.json', {} - file 'cookbooks/quiche/metadata.rb', 'name "quiche"' - file 'cookbooks/quiche/recipes/default.rb', '' - file 'cookbooks/soup/metadata.rb', 'name "soup"' - file 'cookbooks/soup/recipes/chicken.rb', '' + before do + file 'roles/starring.json', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } + file 'roles/minor.json', {} + file 'cookbooks/quiche/metadata.rb', 'name "quiche"' + file 'cookbooks/quiche/recipes/default.rb', '' + file 'cookbooks/soup/metadata.rb', 'name "soup"' + file 'cookbooks/soup/recipes/chicken.rb', '' + end it 'knife deps reports all dependencies' do knife('deps /roles/starring.json').should_succeed <<EOM /roles/minor.json @@ -49,12 +51,14 @@ EOM end when_the_repository 'has a role with an env_run_list' do - file 'roles/starring.json', { 'env_run_lists' => { 'desert' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } } - file 'roles/minor.json', {} - file 'cookbooks/quiche/metadata.rb', 'name "quiche"' - file 'cookbooks/quiche/recipes/default.rb', '' - file 'cookbooks/soup/metadata.rb', 'name "soup"' - file 'cookbooks/soup/recipes/chicken.rb', '' + before do + file 'roles/starring.json', { 'env_run_lists' => { 'desert' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } } + file 'roles/minor.json', {} + file 'cookbooks/quiche/metadata.rb', 'name "quiche"' + file 'cookbooks/quiche/recipes/default.rb', '' + file 'cookbooks/soup/metadata.rb', 'name "soup"' + file 'cookbooks/soup/recipes/chicken.rb', '' + end it 'knife deps reports all dependencies' do knife('deps /roles/starring.json').should_succeed <<EOM /roles/minor.json @@ -66,25 +70,29 @@ EOM end when_the_repository 'has a node with no environment or run_list' do - file 'nodes/mort.json', {} + before { file 'nodes/mort.json', {} } it 'knife deps reports just the node' do knife('deps /nodes/mort.json').should_succeed "/nodes/mort.json\n" end end when_the_repository 'has a node with an environment' do - file 'environments/desert.json', {} - file 'nodes/mort.json', { 'chef_environment' => 'desert' } + before do + file 'environments/desert.json', {} + file 'nodes/mort.json', { 'chef_environment' => 'desert' } + end it 'knife deps reports just the node' do knife('deps /nodes/mort.json').should_succeed "/environments/desert.json\n/nodes/mort.json\n" end end when_the_repository 'has a node with roles and recipes in its run_list' do - file 'roles/minor.json', {} - file 'cookbooks/quiche/metadata.rb', 'name "quiche"' - file 'cookbooks/quiche/recipes/default.rb', '' - file 'cookbooks/soup/metadata.rb', 'name "soup"' - file 'cookbooks/soup/recipes/chicken.rb', '' - file 'nodes/mort.json', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } + before do + file 'roles/minor.json', {} + file 'cookbooks/quiche/metadata.rb', 'name "quiche"' + file 'cookbooks/quiche/recipes/default.rb', '' + file 'cookbooks/soup/metadata.rb', 'name "soup"' + file 'cookbooks/soup/recipes/chicken.rb', '' + file 'nodes/mort.json', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } + end it 'knife deps reports just the node' do knife('deps /nodes/mort.json').should_succeed <<EOM /roles/minor.json @@ -95,42 +103,48 @@ EOM end end when_the_repository 'has a cookbook with no dependencies' do - file 'cookbooks/quiche/metadata.rb', 'name "quiche"' - file 'cookbooks/quiche/recipes/default.rb', '' + before do + file 'cookbooks/quiche/metadata.rb', 'name "quiche"' + file 'cookbooks/quiche/recipes/default.rb', '' + end it 'knife deps reports just the cookbook' do knife('deps /cookbooks/quiche').should_succeed "/cookbooks/quiche\n" end end when_the_repository 'has a cookbook with dependencies' do - file 'cookbooks/kettle/metadata.rb', 'name "kettle"' - file 'cookbooks/quiche/metadata.rb', "name 'quiche'\ndepends 'kettle'\n" - file 'cookbooks/quiche/recipes/default.rb', '' + before do + file 'cookbooks/kettle/metadata.rb', 'name "kettle"' + file 'cookbooks/quiche/metadata.rb', "name 'quiche'\ndepends 'kettle'\n" + file 'cookbooks/quiche/recipes/default.rb', '' + end it 'knife deps reports just the cookbook' do knife('deps /cookbooks/quiche').should_succeed "/cookbooks/kettle\n/cookbooks/quiche\n" end end when_the_repository 'has a data bag' do - file 'data_bags/bag/item.json', {} + before { file 'data_bags/bag/item.json', {} } it 'knife deps reports just the data bag' do knife('deps /data_bags/bag/item.json').should_succeed "/data_bags/bag/item.json\n" end end when_the_repository 'has an environment' do - file 'environments/desert.json', {} + before { file 'environments/desert.json', {} } it 'knife deps reports just the environment' do knife('deps /environments/desert.json').should_succeed "/environments/desert.json\n" end end when_the_repository 'has a deep dependency tree' do - file 'roles/starring.json', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } - file 'roles/minor.json', {} - file 'cookbooks/quiche/metadata.rb', 'name "quiche"' - file 'cookbooks/quiche/recipes/default.rb', '' - file 'cookbooks/soup/metadata.rb', 'name "soup"' - file 'cookbooks/soup/recipes/chicken.rb', '' - file 'environments/desert.json', {} - file 'nodes/mort.json', { 'chef_environment' => 'desert', 'run_list' => [ 'role[starring]' ] } - file 'nodes/bart.json', { 'run_list' => [ 'role[minor]' ] } + before do + file 'roles/starring.json', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } + file 'roles/minor.json', {} + file 'cookbooks/quiche/metadata.rb', 'name "quiche"' + file 'cookbooks/quiche/recipes/default.rb', '' + file 'cookbooks/soup/metadata.rb', 'name "soup"' + file 'cookbooks/soup/recipes/chicken.rb', '' + file 'environments/desert.json', {} + file 'nodes/mort.json', { 'chef_environment' => 'desert', 'run_list' => [ 'role[starring]' ] } + file 'nodes/bart.json', { 'run_list' => [ 'role[minor]' ] } + end it 'knife deps reports all dependencies' do knife('deps /nodes/mort.json').should_succeed <<EOM @@ -189,10 +203,13 @@ EOM context 'circular dependencies' do when_the_repository 'has cookbooks with circular dependencies' do - file 'cookbooks/foo/metadata.rb', "name 'foo'\ndepends 'bar'\n" - file 'cookbooks/bar/metadata.rb', "name 'bar'\ndepends 'baz'\n" - file 'cookbooks/baz/metadata.rb', "name 'baz'\ndepends 'foo'\n" - file 'cookbooks/self/metadata.rb', "name 'self'\ndepends 'self'\n" + before do + file 'cookbooks/foo/metadata.rb', "name 'foo'\ndepends 'bar'\n" + file 'cookbooks/bar/metadata.rb', "name 'bar'\ndepends 'baz'\n" + file 'cookbooks/baz/metadata.rb', "name 'baz'\ndepends 'foo'\n" + file 'cookbooks/self/metadata.rb', "name 'self'\ndepends 'self'\n" + end + it 'knife deps prints each once' do knife('deps /cookbooks/foo /cookbooks/self').should_succeed <<EOM /cookbooks/baz @@ -213,10 +230,12 @@ EOM end end when_the_repository 'has roles with circular dependencies' do - file 'roles/foo.json', { 'run_list' => [ 'role[bar]' ] } - file 'roles/bar.json', { 'run_list' => [ 'role[baz]' ] } - file 'roles/baz.json', { 'run_list' => [ 'role[foo]' ] } - file 'roles/self.json', { 'run_list' => [ 'role[self]' ] } + before do + file 'roles/foo.json', { 'run_list' => [ 'role[bar]' ] } + file 'roles/bar.json', { 'run_list' => [ 'role[baz]' ] } + file 'roles/baz.json', { 'run_list' => [ 'role[foo]' ] } + file 'roles/self.json', { 'run_list' => [ 'role[self]' ] } + end it 'knife deps prints each once' do knife('deps /roles/foo.json /roles/self.json').should_succeed <<EOM /roles/baz.json @@ -280,7 +299,9 @@ EOM end end when_the_repository 'is missing a dependent cookbook' do - file 'roles/starring.json', { 'run_list' => [ 'recipe[quiche]'] } + before do + file 'roles/starring.json', { 'run_list' => [ 'recipe[quiche]'] } + end it 'knife deps reports the cookbook, along with an error' do knife('deps /roles/starring.json').should_fail( :exit_code => 2, @@ -290,7 +311,9 @@ EOM end end when_the_repository 'is missing a dependent environment' do - file 'nodes/mort.json', { 'chef_environment' => 'desert' } + before do + file 'nodes/mort.json', { 'chef_environment' => 'desert' } + end it 'knife deps reports the environment, along with an error' do knife('deps /nodes/mort.json').should_fail( :exit_code => 2, @@ -300,7 +323,9 @@ EOM end end when_the_repository 'is missing a dependent role' do - file 'roles/starring.json', { 'run_list' => [ 'role[minor]'] } + before do + file 'roles/starring.json', { 'run_list' => [ 'role[minor]'] } + end it 'knife deps reports the role, along with an error' do knife('deps /roles/starring.json').should_fail( :exit_code => 2, @@ -324,13 +349,13 @@ EOM end end when_the_repository 'has a data bag' do - file 'data_bags/bag/item.json', '' + before { file 'data_bags/bag/item.json', '' } it 'knife deps /data_bags/bag shows no dependencies' do knife('deps /data_bags/bag').should_succeed("/data_bags/bag\n") end end when_the_repository 'has a cookbook' do - file 'cookbooks/blah/metadata.rb', 'name "blah"' + before { file 'cookbooks/blah/metadata.rb', 'name "blah"' } it 'knife deps on a cookbook file shows no dependencies' do knife('deps /cookbooks/blah/metadata.rb').should_succeed( "/cookbooks/blah/metadata.rb\n" @@ -342,19 +367,21 @@ EOM context 'remote' do include_context "default config options" - + when_the_chef_server 'has a role with no run_list' do - role 'starring', {} + before { role 'starring', {} } it 'knife deps reports no dependencies' do knife('deps --remote /roles/starring.json').should_succeed "/roles/starring.json\n" end end when_the_chef_server 'has a role with a default run_list' do - role 'starring', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } - role 'minor', {} - cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } } - cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } } + before do + role 'starring', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } + role 'minor', {} + cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } } + cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } } + end it 'knife deps reports all dependencies' do knife('deps --remote /roles/starring.json').should_succeed <<EOM /roles/minor.json @@ -366,10 +393,12 @@ EOM end when_the_chef_server 'has a role with an env_run_list' do - role 'starring', { 'env_run_lists' => { 'desert' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } } - role 'minor', {} - cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } } - cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } } + before do + role 'starring', { 'env_run_lists' => { 'desert' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } } + role 'minor', {} + cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } } + cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } } + end it 'knife deps reports all dependencies' do knife('deps --remote /roles/starring.json').should_succeed <<EOM /roles/minor.json @@ -381,23 +410,27 @@ EOM end when_the_chef_server 'has a node with no environment or run_list' do - node 'mort', {} + before { node 'mort', {} } it 'knife deps reports just the node' do knife('deps --remote /nodes/mort.json').should_succeed "/nodes/mort.json\n" end end when_the_chef_server 'has a node with an environment' do - environment 'desert', {} - node 'mort', { 'chef_environment' => 'desert' } + before do + environment 'desert', {} + node 'mort', { 'chef_environment' => 'desert' } + end it 'knife deps reports just the node' do knife('deps --remote /nodes/mort.json').should_succeed "/environments/desert.json\n/nodes/mort.json\n" end end when_the_chef_server 'has a node with roles and recipes in its run_list' do - role 'minor', {} - cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } } - cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } } - node 'mort', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } + before do + role 'minor', {} + cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } } + cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } } + node 'mort', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } + end it 'knife deps reports just the node' do knife('deps --remote /nodes/mort.json').should_succeed <<EOM /roles/minor.json @@ -408,38 +441,44 @@ EOM end end when_the_chef_server 'has a cookbook with no dependencies' do - cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } } + before do + cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } } + end it 'knife deps reports just the cookbook' do knife('deps --remote /cookbooks/quiche').should_succeed "/cookbooks/quiche\n" end end when_the_chef_server 'has a cookbook with dependencies' do - cookbook 'kettle', '1.0.0', { 'metadata.rb' => "name 'kettle'\nversion '1.0.0'\n" } - cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\ndepends 'kettle'\n", 'recipes' => { 'default.rb' => '' } } + before do + cookbook 'kettle', '1.0.0', { 'metadata.rb' => "name 'kettle'\nversion '1.0.0'\n" } + cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\ndepends 'kettle'\n", 'recipes' => { 'default.rb' => '' } } + end it 'knife deps reports the cookbook and its dependencies' do knife('deps --remote /cookbooks/quiche').should_succeed "/cookbooks/kettle\n/cookbooks/quiche\n" end end when_the_chef_server 'has a data bag' do - data_bag 'bag', { 'item' => {} } + before { data_bag 'bag', { 'item' => {} } } it 'knife deps reports just the data bag' do knife('deps --remote /data_bags/bag/item.json').should_succeed "/data_bags/bag/item.json\n" end end when_the_chef_server 'has an environment' do - environment 'desert', {} + before { environment 'desert', {} } it 'knife deps reports just the environment' do knife('deps --remote /environments/desert.json').should_succeed "/environments/desert.json\n" end end when_the_chef_server 'has a deep dependency tree' do - role 'starring', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } - role 'minor', {} - cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } } - cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } } - environment 'desert', {} - node 'mort', { 'chef_environment' => 'desert', 'run_list' => [ 'role[starring]' ] } - node 'bart', { 'run_list' => [ 'role[minor]' ] } + before do + role 'starring', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } + role 'minor', {} + cookbook 'quiche', '1.0.0', { 'metadata.rb' => "name 'quiche'\nversion '1.0.0'\n", 'recipes' => { 'default.rb' => '' } } + cookbook 'soup', '1.0.0', { 'metadata.rb' => "name 'soup'\nversion '1.0.0'\n", 'recipes' => { 'chicken.rb' => '' } } + environment 'desert', {} + node 'mort', { 'chef_environment' => 'desert', 'run_list' => [ 'role[starring]' ] } + node 'bart', { 'run_list' => [ 'role[minor]' ] } + end it 'knife deps reports all dependencies' do knife('deps --remote /nodes/mort.json').should_succeed <<EOM @@ -498,10 +537,12 @@ EOM context 'circular dependencies' do when_the_chef_server 'has cookbooks with circular dependencies' do - cookbook 'foo', '1.0.0', { 'metadata.rb' => "name 'foo'\ndepends 'bar'\n" } - cookbook 'bar', '1.0.0', { 'metadata.rb' => "name 'bar'\ndepends 'baz'\n" } - cookbook 'baz', '1.0.0', { 'metadata.rb' => "name 'baz'\ndepends 'foo'\n" } - cookbook 'self', '1.0.0', { 'metadata.rb' => "name 'self'\ndepends 'self'\n" } + before do + cookbook 'foo', '1.0.0', { 'metadata.rb' => "name 'foo'\ndepends 'bar'\n" } + cookbook 'bar', '1.0.0', { 'metadata.rb' => "name 'bar'\ndepends 'baz'\n" } + cookbook 'baz', '1.0.0', { 'metadata.rb' => "name 'baz'\ndepends 'foo'\n" } + cookbook 'self', '1.0.0', { 'metadata.rb' => "name 'self'\ndepends 'self'\n" } + end it 'knife deps prints each once' do knife('deps --remote /cookbooks/foo /cookbooks/self').should_succeed <<EOM /cookbooks/baz @@ -522,10 +563,12 @@ EOM end end when_the_chef_server 'has roles with circular dependencies' do - role 'foo', { 'run_list' => [ 'role[bar]' ] } - role 'bar', { 'run_list' => [ 'role[baz]' ] } - role 'baz', { 'run_list' => [ 'role[foo]' ] } - role 'self', { 'run_list' => [ 'role[self]' ] } + before do + role 'foo', { 'run_list' => [ 'role[bar]' ] } + role 'bar', { 'run_list' => [ 'role[baz]' ] } + role 'baz', { 'run_list' => [ 'role[foo]' ] } + role 'self', { 'run_list' => [ 'role[self]' ] } + end it 'knife deps prints each once' do knife('deps --remote /roles/foo.json /roles/self.json').should_succeed <<EOM /roles/baz.json @@ -589,7 +632,9 @@ EOM end end when_the_chef_server 'is missing a dependent cookbook' do - role 'starring', { 'run_list' => [ 'recipe[quiche]'] } + before do + role 'starring', { 'run_list' => [ 'recipe[quiche]'] } + end it 'knife deps reports the cookbook, along with an error' do knife('deps --remote /roles/starring.json').should_fail( :exit_code => 2, @@ -599,7 +644,9 @@ EOM end end when_the_chef_server 'is missing a dependent environment' do - node 'mort', { 'chef_environment' => 'desert' } + before do + node 'mort', { 'chef_environment' => 'desert' } + end it 'knife deps reports the environment, along with an error' do knife('deps --remote /nodes/mort.json').should_fail( :exit_code => 2, @@ -609,7 +656,9 @@ EOM end end when_the_chef_server 'is missing a dependent role' do - role 'starring', { 'run_list' => [ 'role[minor]'] } + before do + role 'starring', { 'run_list' => [ 'role[minor]'] } + end it 'knife deps reports the role, along with an error' do knife('deps --remote /roles/starring.json').should_fail( :exit_code => 2, @@ -629,13 +678,15 @@ EOM end end when_the_chef_server 'has a data bag' do - data_bag 'bag', { 'item' => {} } + before { data_bag 'bag', { 'item' => {} } } it 'knife deps /data_bags/bag shows no dependencies' do knife('deps --remote /data_bags/bag').should_succeed("/data_bags/bag\n") end end when_the_chef_server 'has a cookbook' do - cookbook 'blah', '1.0.0', { 'metadata.rb' => 'name "blah"' } + before do + cookbook 'blah', '1.0.0', { 'metadata.rb' => 'name "blah"' } + end it 'knife deps on a cookbook file shows no dependencies' do knife('deps --remote /cookbooks/blah/metadata.rb').should_succeed( "/cookbooks/blah/metadata.rb\n" diff --git a/spec/integration/knife/diff_spec.rb b/spec/integration/knife/diff_spec.rb index 2e36f39c82..8d13d86a99 100644 --- a/spec/integration/knife/diff_spec.rb +++ b/spec/integration/knife/diff_spec.rb @@ -19,27 +19,31 @@ require 'support/shared/integration/integration_helper' require 'chef/knife/diff' describe 'knife diff' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport context 'without versioned cookbooks' do when_the_chef_server "has one of each thing" do - client 'x', '{}' - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' } - data_bag 'x', { 'y' => '{}' } - environment 'x', '{}' - node 'x', '{}' - role 'x', '{}' - user 'x', '{}' + before do + client 'x', '{}' + cookbook 'x', '1.0.0' + data_bag 'x', { 'y' => '{}' } + environment 'x', '{}' + node 'x', '{}' + role 'x', '{}' + user 'x', '{}' + end when_the_repository 'has only top-level directories' do - directory 'clients' - directory 'cookbooks' - directory 'data_bags' - directory 'environments' - directory 'nodes' - directory 'roles' - directory 'users' + before do + directory 'clients' + directory 'cookbooks' + directory 'data_bags' + directory 'environments' + directory 'nodes' + directory 'roles' + directory 'users' + end it 'knife diff reports everything as deleted' do knife('diff --name-status /').should_succeed <<EOM @@ -60,17 +64,19 @@ EOM when_the_repository 'has an identical copy of each thing' do - file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/y.json', {} - file 'environments/_default.json', { "description" => "The default Chef environment" } - file 'environments/x.json', {} - file 'nodes/x.json', {} - file 'roles/x.json', {} - file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + before do + file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + file 'cookbooks/x/metadata.rb', cb_metadata("x", "1.0.0") + file 'data_bags/x/y.json', {} + file 'environments/_default.json', { "description" => "The default Chef environment" } + file 'environments/x.json', {} + file 'nodes/x.json', {} + file 'roles/x.json', {} + file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + end it 'knife diff reports no differences' do knife('diff /').should_succeed '' @@ -85,11 +91,14 @@ EOM end context 'except the role file' do - file 'roles/x.json', <<EOM + before do + file 'roles/x.json', <<EOM { "foo": "bar" } EOM + end + it 'knife diff reports the role as different' do knife('diff --name-status /').should_succeed <<EOM M\t/roles/x.json @@ -98,15 +107,17 @@ EOM end context 'as well as one extra copy of each thing' do - file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } - file 'cookbooks/x/blah.rb', '' - file 'cookbooks/y/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/z.json', {} - file 'data_bags/y/zz.json', {} - file 'environments/y.json', {} - file 'nodes/y.json', {} - file 'roles/y.json', {} - file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + before do + file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + file 'cookbooks/x/blah.rb', '' + file 'cookbooks/y/metadata.rb', cb_metadata("y", "1.0.0") + file 'data_bags/x/z.json', {} + file 'data_bags/y/zz.json', {} + file 'environments/y.json', {} + file 'nodes/y.json', {} + file 'roles/y.json', {} + file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + end it 'knife diff reports the new files as added' do knife('diff --name-status /').should_succeed <<EOM @@ -123,7 +134,7 @@ EOM end context 'when cwd is the data_bags directory' do - cwd 'data_bags' + before { cwd 'data_bags' } it 'knife diff reports different data bags' do knife('diff --name-status').should_succeed <<EOM A\tx/z.json @@ -156,12 +167,16 @@ EOM end when_the_repository 'has a cookbook' do - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x/onlyin1.0.0.rb', '' + before do + file 'cookbooks/x/metadata.rb', cb_metadata("x", "1.0.0") + file 'cookbooks/x/onlyin1.0.0.rb', '' + end when_the_chef_server 'has a later version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => ''} - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => '' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => ''} + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => '' } + end it 'knife diff /cookbooks/x shows differences' do knife('diff --name-status /cookbooks/x').should_succeed <<EOM @@ -180,15 +195,19 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => '' } - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => '' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => '' } + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => '' } + end it 'knife diff /cookbooks/x shows no differences' do knife('diff --name-status /cookbooks/x').should_succeed '' end end when_the_chef_server 'has a later version for the cookbook, and no current version' do - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => '' } + before do + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => '' } + end it 'knife diff /cookbooks/x shows the differences' do knife('diff --name-status /cookbooks/x').should_succeed <<EOM @@ -200,7 +219,9 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook, and no current version' do - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => '' } + before do + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => '' } + end it 'knife diff /cookbooks/x shows the differences' do knife('diff --name-status /cookbooks/x').should_succeed <<EOM @@ -214,15 +235,18 @@ EOM context 'json diff tests' do when_the_repository 'has an empty environment file' do - file 'environments/x.json', {} + before do + file 'environments/x.json', {} + end + when_the_chef_server 'has an empty environment' do - environment 'x', {} + before { environment 'x', {} } it 'knife diff returns no differences' do knife('diff /environments/x.json').should_succeed '' end end when_the_chef_server 'has an environment with a different value' do - environment 'x', { 'description' => 'hi' } + before { environment 'x', { 'description' => 'hi' } } it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do knife('diff /environments/x.json').should_succeed(/ { @@ -236,15 +260,23 @@ EOM end when_the_repository 'has an environment file with a value in it' do - file 'environments/x.json', { 'description' => 'hi' } + before do + file 'environments/x.json', { 'description' => 'hi' } + end + when_the_chef_server 'has an environment with the same value' do - environment 'x', { 'description' => 'hi' } + before do + environment 'x', { 'description' => 'hi' } + end it 'knife diff returns no differences' do knife('diff /environments/x.json').should_succeed '' end end when_the_chef_server 'has an environment with no value' do - environment 'x', {} + before do + environment 'x', {} + end + it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do knife('diff /environments/x.json').should_succeed(/ { @@ -256,7 +288,9 @@ EOM end end when_the_chef_server 'has an environment with a different value' do - environment 'x', { 'description' => 'lo' } + before do + environment 'x', { 'description' => 'lo' } + end it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do knife('diff /environments/x.json').should_succeed(/ { @@ -271,9 +305,9 @@ EOM end when_the_chef_server 'has an environment' do - environment 'x', {} + before { environment 'x', {} } when_the_repository 'has an environment with bad JSON' do - file 'environments/x.json', '{' + before { file 'environments/x.json', '{' } it 'knife diff reports an error and does a textual diff' do knife('diff /environments/x.json').should_succeed(/- "name": "x"/, :stderr => "WARN: Parse error reading #{path_to('environments/x.json')} as JSON: A JSON text must at least contain two octets!\n") end @@ -283,22 +317,26 @@ EOM with_versioned_cookbooks do when_the_chef_server "has one of each thing" do - client 'x', '{}' - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' } - data_bag 'x', { 'y' => '{}' } - environment 'x', '{}' - node 'x', '{}' - role 'x', '{}' - user 'x', '{}' + before do + client 'x', '{}' + cookbook 'x', '1.0.0' + data_bag 'x', { 'y' => '{}' } + environment 'x', '{}' + node 'x', '{}' + role 'x', '{}' + user 'x', '{}' + end when_the_repository 'has only top-level directories' do - directory 'clients' - directory 'cookbooks' - directory 'data_bags' - directory 'environments' - directory 'nodes' - directory 'roles' - directory 'users' + before do + directory 'clients' + directory 'cookbooks' + directory 'data_bags' + directory 'environments' + directory 'nodes' + directory 'roles' + directory 'users' + end it 'knife diff reports everything as deleted' do knife('diff --name-status /').should_succeed <<EOM @@ -318,17 +356,19 @@ EOM end when_the_repository 'has an identical copy of each thing' do - file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } - file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/y.json', {} - file 'environments/_default.json', { "description" => "The default Chef environment" } - file 'environments/x.json', {} - file 'nodes/x.json', {} - file 'roles/x.json', {} - file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + before do + file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + file 'cookbooks/x-1.0.0/metadata.rb', cb_metadata("x", "1.0.0") + file 'data_bags/x/y.json', {} + file 'environments/_default.json', { "description" => "The default Chef environment" } + file 'environments/x.json', {} + file 'nodes/x.json', {} + file 'roles/x.json', {} + file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + end it 'knife diff reports no differences' do knife('diff /').should_succeed '' @@ -343,11 +383,14 @@ EOM end context 'except the role file' do - file 'roles/x.json', <<EOM + before do + file 'roles/x.json', <<EOM { "foo": "bar" } EOM + end + it 'knife diff reports the role as different' do knife('diff --name-status /').should_succeed <<EOM M\t/roles/x.json @@ -356,16 +399,18 @@ EOM end context 'as well as one extra copy of each thing' do - file 'clients/y.json', {} - file 'cookbooks/x-1.0.0/blah.rb', '' - file 'cookbooks/x-2.0.0/metadata.rb', 'version "2.0.0"' - file 'cookbooks/y-1.0.0/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/z.json', {} - file 'data_bags/y/zz.json', {} - file 'environments/y.json', {} - file 'nodes/y.json', {} - file 'roles/y.json', {} - file 'users/y.json', {} + before do + file 'clients/y.json', {} + file 'cookbooks/x-1.0.0/blah.rb', '' + file 'cookbooks/x-2.0.0/metadata.rb', cb_metadata("x", "2.0.0") + file 'cookbooks/y-1.0.0/metadata.rb', cb_metadata("y", "1.0.0") + file 'data_bags/x/z.json', {} + file 'data_bags/y/zz.json', {} + file 'environments/y.json', {} + file 'nodes/y.json', {} + file 'roles/y.json', {} + file 'users/y.json', {} + end it 'knife diff reports the new files as added' do knife('diff --name-status /').should_succeed <<EOM @@ -383,7 +428,7 @@ EOM end context 'when cwd is the data_bags directory' do - cwd 'data_bags' + before { cwd 'data_bags' } it 'knife diff reports different data bags' do knife('diff --name-status').should_succeed <<EOM A\tx/z.json @@ -416,12 +461,16 @@ EOM end when_the_repository 'has a cookbook' do - file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x-1.0.0/onlyin1.0.0.rb', '' + before do + file 'cookbooks/x-1.0.0/metadata.rb', cb_metadata("x", "1.0.0") + file 'cookbooks/x-1.0.0/onlyin1.0.0.rb', '' + end when_the_chef_server 'has a later version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => ''} - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => '' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => ''} + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => '' } + end it 'knife diff /cookbooks shows differences' do knife('diff --name-status /cookbooks').should_succeed <<EOM @@ -435,15 +484,19 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => '' } - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => '' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => '' } + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => '' } + end it 'knife diff /cookbooks shows the differences' do knife('diff --name-status /cookbooks').should_succeed "D\t/cookbooks/x-0.9.9\n" end end when_the_chef_server 'has a later version for the cookbook, and no current version' do - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => '' } + before do + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => '' } + end it 'knife diff /cookbooks shows the differences' do knife('diff --name-status /cookbooks').should_succeed <<EOM @@ -454,7 +507,9 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook, and no current version' do - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => '' } + before do + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => '' } + end it 'knife diff /cookbooks shows the differences' do knife('diff --name-status /cookbooks').should_succeed <<EOM @@ -467,15 +522,15 @@ EOM context 'json diff tests' do when_the_repository 'has an empty environment file' do - file 'environments/x.json', {} + before { file 'environments/x.json', {} } when_the_chef_server 'has an empty environment' do - environment 'x', {} + before { environment 'x', {} } it 'knife diff returns no differences' do knife('diff /environments/x.json').should_succeed '' end end when_the_chef_server 'has an environment with a different value' do - environment 'x', { 'description' => 'hi' } + before { environment 'x', { 'description' => 'hi' } } it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do knife('diff /environments/x.json').should_succeed(/ { @@ -489,15 +544,20 @@ EOM end when_the_repository 'has an environment file with a value in it' do - file 'environments/x.json', { 'description' => 'hi' } + before do + file 'environments/x.json', { 'description' => 'hi' } + end + when_the_chef_server 'has an environment with the same value' do - environment 'x', { 'description' => 'hi' } + before do + environment 'x', { 'description' => 'hi' } + end it 'knife diff returns no differences' do knife('diff /environments/x.json').should_succeed '' end end when_the_chef_server 'has an environment with no value' do - environment 'x', {} + before { environment 'x', {} } it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do knife('diff /environments/x.json').should_succeed(/ { @@ -509,7 +569,9 @@ EOM end end when_the_chef_server 'has an environment with a different value' do - environment 'x', { 'description' => 'lo' } + before do + environment 'x', { 'description' => 'lo' } + end it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do knife('diff /environments/x.json').should_succeed(/ { @@ -524,9 +586,9 @@ EOM end when_the_chef_server 'has an environment' do - environment 'x', {} + before { environment 'x', {} } when_the_repository 'has an environment with bad JSON' do - file 'environments/x.json', '{' + before { file 'environments/x.json', '{' } it 'knife diff reports an error and does a textual diff' do knife('diff /environments/x.json').should_succeed(/- "name": "x"/, :stderr => "WARN: Parse error reading #{path_to('environments/x.json')} as JSON: A JSON text must at least contain two octets!\n") end diff --git a/spec/integration/knife/download_spec.rb b/spec/integration/knife/download_spec.rb index f266b47b1b..4788a564b7 100644 --- a/spec/integration/knife/download_spec.rb +++ b/spec/integration/knife/download_spec.rb @@ -20,27 +20,32 @@ require 'chef/knife/download' require 'chef/knife/diff' describe 'knife download' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport context 'without versioned cookbooks' do when_the_chef_server "has one of each thing" do - client 'x', {} - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' } - data_bag 'x', { 'y' => {} } - environment 'x', {} - node 'x', {} - role 'x', {} - user 'x', {} + + before do + client 'x', {} + cookbook 'x', '1.0.0' + data_bag 'x', { 'y' => {} } + environment 'x', {} + node 'x', {} + role 'x', {} + user 'x', {} + end when_the_repository 'has only top-level directories' do - directory 'clients' - directory 'cookbooks' - directory 'data_bags' - directory 'environments' - directory 'nodes' - directory 'roles' - directory 'users' + before do + directory 'clients' + directory 'cookbooks' + directory 'data_bags' + directory 'environments' + directory 'nodes' + directory 'roles' + directory 'users' + end it 'knife download downloads everything' do knife('download /').should_succeed <<EOM @@ -63,17 +68,19 @@ EOM end when_the_repository 'has an identical copy of each thing' do - file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/y.json', {} - file 'environments/_default.json', { "description" => "The default Chef environment" } - file 'environments/x.json', {} - file 'nodes/x.json', {} - file 'roles/x.json', {} - file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + before do + file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + file 'cookbooks/x/metadata.rb', cb_metadata("x", "1.0.0") + file 'data_bags/x/y.json', {} + file 'environments/_default.json', { "description" => "The default Chef environment" } + file 'environments/x.json', {} + file 'nodes/x.json', {} + file 'roles/x.json', {} + file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + end it 'knife download makes no changes' do knife('download /').should_succeed '' @@ -86,7 +93,8 @@ EOM end context 'except the role file' do - file 'roles/x.json', <<EOM + before do + file 'roles/x.json', <<EOM { "chef_type": "role", "default_attributes": { @@ -103,6 +111,8 @@ EOM ] } EOM + end + it 'knife download changes the role' do knife('download /').should_succeed "Updated /roles/x.json\n" knife('diff --name-status /').should_succeed '' @@ -115,7 +125,8 @@ EOM end context 'except the role file is textually different, but not ACTUALLY different' do - file 'roles/x.json', <<EOM + before do + file 'roles/x.json', <<EOM { "chef_type": "role", "default_attributes": { @@ -132,6 +143,8 @@ EOM ] } EOM + end + it 'knife download / does not change anything' do knife('download /').should_succeed '' knife('diff --name-status /').should_succeed '' @@ -139,15 +152,17 @@ EOM end context 'as well as one extra copy of each thing' do - file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } - file 'cookbooks/x/blah.rb', '' - file 'cookbooks/y/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/z.json', {} - file 'data_bags/y/zz.json', {} - file 'environments/y.json', {} - file 'nodes/y.json', {} - file 'roles/y.json', {} - file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + before do + file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + file 'cookbooks/x/blah.rb', '' + file 'cookbooks/y/metadata.rb', cb_metadata("x", "1.0.0") + file 'data_bags/x/z.json', {} + file 'data_bags/y/zz.json', {} + file 'environments/y.json', {} + file 'nodes/y.json', {} + file 'roles/y.json', {} + file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + end it 'knife download does nothing' do knife('download /').should_succeed '' @@ -235,7 +250,10 @@ EOM end context 'when current directory is top level' do - cwd '.' + before do + cwd '.' + end + it 'knife download with no parameters reports an error' do knife('download').should_fail "FATAL: Must specify at least one argument. If you want to download everything in this directory, type \"knife download .\"\n", :stdout => /USAGE/ end @@ -246,7 +264,9 @@ EOM # Test download of an item when the other end doesn't even have the container when_the_repository 'is empty' do when_the_chef_server 'has two data bag items' do - data_bag 'x', { 'y' => {}, 'z' => {} } + before do + data_bag 'x', { 'y' => {}, 'z' => {} } + end it 'knife download of one data bag item itself succeeds' do knife('download /data_bags/x/y.json').should_succeed <<EOM @@ -271,28 +291,32 @@ EOM end when_the_repository 'has three data bag items' do - file 'data_bags/x/deleted.json', <<EOM + before do + file 'data_bags/x/deleted.json', <<EOM { "id": "deleted" } EOM - file 'data_bags/x/modified.json', <<EOM + file 'data_bags/x/modified.json', <<EOM { "id": "modified" } EOM - file 'data_bags/x/unmodified.json', <<EOM + file 'data_bags/x/unmodified.json', <<EOM { "id": "unmodified" } EOM + end when_the_chef_server 'has a modified, unmodified, added and deleted data bag item' do - data_bag 'x', { - 'added' => {}, - 'modified' => { 'foo' => 'bar' }, - 'unmodified' => {} - } + before do + data_bag 'x', { + 'added' => {}, + 'modified' => { 'foo' => 'bar' }, + 'unmodified' => {} + } + end it 'knife download of the modified file succeeds' do knife('download /data_bags/x/modified.json').should_succeed <<EOM @@ -355,7 +379,9 @@ EOM knife('diff --name-status /data_bags').should_succeed '' end context 'when cwd is the /data_bags directory' do - cwd 'data_bags' + before do + cwd 'data_bags' + end it 'knife download fails' do knife('download').should_fail "FATAL: Must specify at least one argument. If you want to download everything in this directory, type \"knife download .\"\n", :stdout => /USAGE/ end @@ -380,11 +406,15 @@ EOM end when_the_repository 'has a cookbook' do - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x/z.rb', '' + before do + file 'cookbooks/x/metadata.rb', cb_metadata("x", "1.0.0") + file 'cookbooks/x/z.rb', '' + end when_the_chef_server 'has a modified, added and deleted file for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'y.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'metadata.rb' => cb_metadata("x", "1.0.0", "#extra content"), 'y.rb' => 'hi' } + end it 'knife download of a modified file succeeds' do knife('download /cookbooks/x/metadata.rb').should_succeed "Updated /cookbooks/x/metadata.rb\n" @@ -436,12 +466,16 @@ EOM end when_the_repository 'has a cookbook' do - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x/onlyin1.0.0.rb', 'old_text' + before do + file 'cookbooks/x/metadata.rb', cb_metadata("x", "1.0.0") + file 'cookbooks/x/onlyin1.0.0.rb', 'old_text' + end when_the_chef_server 'has a later version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => '' } - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => '' } + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' } + end it 'knife download /cookbooks/x downloads the latest version' do knife('download --purge /cookbooks/x').should_succeed <<EOM @@ -454,8 +488,11 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => ''} - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => ''} + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' } + end + it 'knife download /cookbooks/x downloads the updated file' do knife('download --purge /cookbooks/x').should_succeed <<EOM Updated /cookbooks/x/onlyin1.0.0.rb @@ -465,7 +502,9 @@ EOM end when_the_chef_server 'has a later version for the cookbook, and no current version' do - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' } + before do + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' } + end it 'knife download /cookbooks/x downloads the latest version' do knife('download --purge /cookbooks/x').should_succeed <<EOM @@ -478,7 +517,9 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook, and no current version' do - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' } + before do + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' } + end it 'knife download /cookbooks/x downloads the old version' do knife('download --purge /cookbooks/x').should_succeed <<EOM @@ -492,9 +533,13 @@ EOM end when_the_chef_server 'has an environment' do - environment 'x', {} + before do + environment 'x', {} + end when_the_repository 'has an environment with bad JSON' do - file 'environments/x.json', '{' + before do + file 'environments/x.json', '{' + end it 'knife download succeeds' do knife('download /environments/x.json').should_succeed "Updated /environments/x.json\n", :stderr => "WARN: Parse error reading #{path_to('environments/x.json')} as JSON: A JSON text must at least contain two octets!\n" knife('diff --name-status /environments/x.json').should_succeed '' @@ -502,7 +547,9 @@ EOM end when_the_repository 'has the same environment with the wrong name in the file' do - file 'environments/x.json', { 'name' => 'y' } + before do + file 'environments/x.json', { 'name' => 'y' } + end it 'knife download succeeds' do knife('download /environments/x.json').should_succeed "Updated /environments/x.json\n" knife('diff --name-status /environments/x.json').should_succeed '' @@ -510,7 +557,9 @@ EOM end when_the_repository 'has the same environment with no name in the file' do - file 'environments/x.json', { 'description' => 'hi' } + before do + file 'environments/x.json', { 'description' => 'hi' } + end it 'knife download succeeds' do knife('download /environments/x.json').should_succeed "Updated /environments/x.json\n" knife('diff --name-status /environments/x.json').should_succeed '' @@ -521,22 +570,26 @@ EOM with_versioned_cookbooks do when_the_chef_server "has one of each thing" do - client 'x', {} - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' } - data_bag 'x', { 'y' => {} } - environment 'x', {} - node 'x', {} - role 'x', {} - user 'x', {} + before do + client 'x', {} + cookbook 'x', '1.0.0' + data_bag 'x', { 'y' => {} } + environment 'x', {} + node 'x', {} + role 'x', {} + user 'x', {} + end when_the_repository 'has only top-level directories' do - directory 'clients' - directory 'cookbooks' - directory 'data_bags' - directory 'environments' - directory 'nodes' - directory 'roles' - directory 'users' + before do + directory 'clients' + directory 'cookbooks' + directory 'data_bags' + directory 'environments' + directory 'nodes' + directory 'roles' + directory 'users' + end it 'knife download downloads everything' do knife('download /').should_succeed <<EOM @@ -559,17 +612,19 @@ EOM end when_the_repository 'has an identical copy of each thing' do - file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } - file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/y.json', {} - file 'environments/_default.json', { "description" => "The default Chef environment" } - file 'environments/x.json', {} - file 'nodes/x.json', {} - file 'roles/x.json', {} - file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + before do + file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + file 'cookbooks/x-1.0.0/metadata.rb', cb_metadata("x", "1.0.0") + file 'data_bags/x/y.json', {} + file 'environments/_default.json', { "description" => "The default Chef environment" } + file 'environments/x.json', {} + file 'nodes/x.json', {} + file 'roles/x.json', {} + file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + end it 'knife download makes no changes' do knife('download /').should_succeed '' @@ -582,7 +637,9 @@ EOM end context 'except the role file' do - file 'roles/x.json', { "description" => "blarghle" } + before do + file 'roles/x.json', { "description" => "blarghle" } + end it 'knife download changes the role' do knife('download /').should_succeed "Updated /roles/x.json\n" @@ -591,7 +648,8 @@ EOM end context 'except the role file is textually different, but not ACTUALLY different' do - file 'roles/x.json', <<EOM + before do + file 'roles/x.json', <<EOM { "chef_type": "role" , "default_attributes": { @@ -608,6 +666,8 @@ EOM ] } EOM + end + it 'knife download / does not change anything' do knife('download /').should_succeed '' knife('diff --name-status /').should_succeed '' @@ -615,16 +675,18 @@ EOM end context 'as well as one extra copy of each thing' do - file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } - file 'cookbooks/x-1.0.0/blah.rb', '' - file 'cookbooks/x-2.0.0/metadata.rb', 'version "2.0.0"' - file 'cookbooks/y-1.0.0/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/z.json', {} - file 'data_bags/y/zz.json', {} - file 'environments/y.json', {} - file 'nodes/y.json', {} - file 'roles/y.json', {} - file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + before do + file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + file 'cookbooks/x-1.0.0/blah.rb', '' + file 'cookbooks/x-2.0.0/metadata.rb', 'version "2.0.0"' + file 'cookbooks/y-1.0.0/metadata.rb', 'version "1.0.0"' + file 'data_bags/x/z.json', {} + file 'data_bags/y/zz.json', {} + file 'environments/y.json', {} + file 'nodes/y.json', {} + file 'roles/y.json', {} + file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + end it 'knife download does nothing' do knife('download /').should_succeed '' @@ -688,7 +750,9 @@ EOM end context 'when current directory is top level' do - cwd '.' + before do + cwd '.' + end it 'knife download with no parameters reports an error' do knife('download').should_fail "FATAL: Must specify at least one argument. If you want to download everything in this directory, type \"knife download .\"\n", :stdout => /USAGE/ end @@ -699,7 +763,9 @@ EOM # Test download of an item when the other end doesn't even have the container when_the_repository 'is empty' do when_the_chef_server 'has two data bag items' do - data_bag 'x', { 'y' => {}, 'z' => {} } + before do + data_bag 'x', { 'y' => {}, 'z' => {} } + end it 'knife download of one data bag item itself succeeds' do knife('download /data_bags/x/y.json').should_succeed <<EOM @@ -715,28 +781,32 @@ EOM end when_the_repository 'has three data bag items' do - file 'data_bags/x/deleted.json', <<EOM + before do + file 'data_bags/x/deleted.json', <<EOM { "id": "deleted" } EOM - file 'data_bags/x/modified.json', <<EOM + file 'data_bags/x/modified.json', <<EOM { "id": "modified" } EOM - file 'data_bags/x/unmodified.json', <<EOM + file 'data_bags/x/unmodified.json', <<EOM { "id": "unmodified" } EOM + end when_the_chef_server 'has a modified, unmodified, added and deleted data bag item' do - data_bag 'x', { - 'added' => {}, - 'modified' => { 'foo' => 'bar' }, - 'unmodified' => {} - } + before do + data_bag 'x', { + 'added' => {}, + 'modified' => { 'foo' => 'bar' }, + 'unmodified' => {} + } + end it 'knife download of the modified file succeeds' do knife('download /data_bags/x/modified.json').should_succeed <<EOM @@ -799,7 +869,9 @@ EOM knife('diff --name-status /data_bags').should_succeed '' end context 'when cwd is the /data_bags directory' do - cwd 'data_bags' + before do + cwd 'data_bags' + end it 'knife download fails' do knife('download').should_fail "FATAL: Must specify at least one argument. If you want to download everything in this directory, type \"knife download .\"\n", :stdout => /USAGE/ end @@ -824,11 +896,15 @@ EOM end when_the_repository 'has a cookbook' do - file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x-1.0.0/z.rb', '' + before do + file 'cookbooks/x-1.0.0/metadata.rb', 'name "x"; version "1.0.0"' + file 'cookbooks/x-1.0.0/z.rb', '' + end when_the_chef_server 'has a modified, added and deleted file for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'y.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'y.rb' => 'hi' } + end it 'knife download of a modified file succeeds' do knife('download /cookbooks/x-1.0.0/metadata.rb').should_succeed "Updated /cookbooks/x-1.0.0/metadata.rb\n" @@ -880,12 +956,16 @@ EOM end when_the_repository 'has a cookbook' do - file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x-1.0.0/onlyin1.0.0.rb', 'old_text' + before do + file 'cookbooks/x-1.0.0/metadata.rb', cb_metadata("x", "1.0.0") + file 'cookbooks/x-1.0.0/onlyin1.0.0.rb', 'old_text' + end when_the_chef_server 'has a later version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => '' } - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => '' } + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' } + end it 'knife download /cookbooks/x downloads the latest version' do knife('download --purge /cookbooks').should_succeed <<EOM @@ -899,8 +979,11 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => ''} - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => ''} + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' } + end + it 'knife download /cookbooks downloads the updated file' do knife('download --purge /cookbooks').should_succeed <<EOM Created /cookbooks/x-0.9.9 @@ -913,7 +996,9 @@ EOM end when_the_chef_server 'has a later version for the cookbook, and no current version' do - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' } + before do + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' } + end it 'knife download /cookbooks/x downloads the latest version' do knife('download --purge /cookbooks').should_succeed <<EOM @@ -927,7 +1012,9 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook, and no current version' do - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' } + before do + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' } + end it 'knife download --purge /cookbooks downloads the old version and deletes the new version' do knife('download --purge /cookbooks').should_succeed <<EOM @@ -942,9 +1029,15 @@ EOM end when_the_chef_server 'has an environment' do - environment 'x', {} + before do + environment 'x', {} + end + when_the_repository 'has an environment with bad JSON' do - file 'environments/x.json', '{' + before do + file 'environments/x.json', '{' + end + it 'knife download succeeds' do knife('download /environments/x.json').should_succeed "Updated /environments/x.json\n", :stderr => "WARN: Parse error reading #{path_to('environments/x.json')} as JSON: A JSON text must at least contain two octets!\n" knife('diff --name-status /environments/x.json').should_succeed '' @@ -952,7 +1045,10 @@ EOM end when_the_repository 'has the same environment with the wrong name in the file' do - file 'environments/x.json', { 'name' => 'y' } + before do + file 'environments/x.json', { 'name' => 'y' } + end + it 'knife download succeeds' do knife('download /environments/x.json').should_succeed "Updated /environments/x.json\n" knife('diff --name-status /environments/x.json').should_succeed '' @@ -960,7 +1056,10 @@ EOM end when_the_repository 'has the same environment with no name in the file' do - file 'environments/x.json', { 'description' => 'hi' } + before do + file 'environments/x.json', { 'description' => 'hi' } + end + it 'knife download succeeds' do knife('download /environments/x.json').should_succeed "Updated /environments/x.json\n" knife('diff --name-status /environments/x.json').should_succeed '' @@ -970,7 +1069,9 @@ EOM end # with versioned cookbooks when_the_chef_server 'has a cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' } + before do + cookbook 'x', '1.0.0' + end when_the_repository 'is empty' do it 'knife download /cookbooks/x signs all requests', :ruby_gte_19_only do diff --git a/spec/integration/knife/list_spec.rb b/spec/integration/knife/list_spec.rb index b9e72c5573..31dba2407d 100644 --- a/spec/integration/knife/list_spec.rb +++ b/spec/integration/knife/list_spec.rb @@ -20,7 +20,7 @@ require 'support/shared/context/config' require 'chef/knife/list' describe 'knife list' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport include_context "default config options" @@ -71,20 +71,22 @@ EOM end when_the_chef_server "has plenty of stuff in it" do - client 'client1', {} - client 'client2', {} - cookbook 'cookbook1', '1.0.0', { 'metadata.rb' => '' } - cookbook 'cookbook2', '1.0.1', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } } - data_bag 'bag1', { 'item1' => {}, 'item2' => {} } - data_bag 'bag2', { 'item1' => {}, 'item2' => {} } - environment 'environment1', {} - environment 'environment2', {} - node 'node1', {} - node 'node2', {} - role 'role1', {} - role 'role2', {} - user 'user1', {} - user 'user2', {} + before do + client 'client1', {} + client 'client2', {} + cookbook 'cookbook1', '1.0.0' + cookbook 'cookbook2', '1.0.1', { 'recipes' => { 'default.rb' => '' } } + data_bag 'bag1', { 'item1' => {}, 'item2' => {} } + data_bag 'bag2', { 'item1' => {}, 'item2' => {} } + environment 'environment1', {} + environment 'environment2', {} + node 'node1', {} + node 'node2', {} + role 'role1', {} + role 'role2', {} + user 'user1', {} + user 'user2', {} + end it "knife list / returns all top level directories" do knife('list /').should_succeed <<EOM @@ -317,7 +319,7 @@ EOM context 'symlink tests' do when_the_repository 'is empty' do context 'when cwd is at the top of the repository' do - cwd '.' + before { cwd '.' } it "knife list -Rfp returns everything" do knife('list -Rfp').should_succeed <<EOM @@ -360,9 +362,9 @@ EOM end when_the_repository 'has a cookbooks directory' do - directory 'cookbooks' + before { directory 'cookbooks' } context 'when cwd is in cookbooks/' do - cwd 'cookbooks' + before { cwd 'cookbooks' } it "knife list -Rfp / returns everything" do knife('list -Rfp /').should_succeed <<EOM @@ -454,10 +456,10 @@ EOM end when_the_repository 'has a cookbooks/cookbook2 directory' do - directory 'cookbooks/cookbook2' + before { directory 'cookbooks/cookbook2' } context 'when cwd is in cookbooks/cookbook2' do - cwd 'cookbooks/cookbook2' + before { cwd 'cookbooks/cookbook2' } it "knife list -Rfp returns cookbooks" do knife('list -Rfp').should_succeed <<EOM @@ -470,11 +472,13 @@ EOM end when_the_repository 'has a cookbooks directory and a symlinked cookbooks directory', :pending => (Chef::Platform.windows?) do - directory 'cookbooks' - symlink 'symlinked', 'cookbooks' + before do + directory 'cookbooks' + symlink 'symlinked', 'cookbooks' + end context 'when cwd is in cookbooks/' do - cwd 'cookbooks' + before { cwd 'cookbooks' } it "knife list -Rfp returns cookbooks" do knife('list -Rfp').should_succeed <<EOM @@ -489,7 +493,7 @@ EOM end context 'when cwd is in symlinked/' do - cwd 'symlinked' + before { cwd 'symlinked' } it "knife list -Rfp returns cookbooks" do knife('list -Rfp').should_succeed <<EOM @@ -505,11 +509,13 @@ EOM end when_the_repository 'has a real_cookbooks directory and a cookbooks symlink to it', :pending => (Chef::Platform.windows?) do - directory 'real_cookbooks' - symlink 'cookbooks', 'real_cookbooks' + before do + directory 'real_cookbooks' + symlink 'cookbooks', 'real_cookbooks' + end context 'when cwd is in real_cookbooks/' do - cwd 'real_cookbooks' + before { cwd 'real_cookbooks' } it "knife list -Rfp returns cookbooks" do knife('list -Rfp').should_succeed <<EOM @@ -524,7 +530,7 @@ EOM end context 'when cwd is in cookbooks/' do - cwd 'cookbooks' + before { cwd 'cookbooks' } it "knife list -Rfp returns cookbooks" do knife('list -Rfp').should_succeed <<EOM @@ -553,36 +559,38 @@ EOM end when_the_repository "has a bunch of stuff" do - file 'clients/client1.json', {} - file 'clients/client2.json', {} - - directory 'cookbooks/cookbook1' do - file 'metadata.rb', '' - end - directory 'cookbooks/cookbook2' do - file 'metadata.rb', '' - file 'recipes/default.rb', '' - end + before do + file 'clients/client1.json', {} + file 'clients/client2.json', {} - directory 'data_bags' do - directory 'bag1' do - file 'item1.json', {} - file 'item2.json', {} + directory 'cookbooks/cookbook1' do + file 'metadata.rb', cb_metadata("cookbook1", "1.0.0") end - directory 'bag2' do - file 'item1.json', {} - file 'item2.json', {} + directory 'cookbooks/cookbook2' do + file 'metadata.rb', cb_metadata("cookbook2", "2.0.0") + file 'recipes/default.rb', '' + end + + directory 'data_bags' do + directory 'bag1' do + file 'item1.json', {} + file 'item2.json', {} + end + directory 'bag2' do + file 'item1.json', {} + file 'item2.json', {} + end end - end - file 'environments/environment1.json', {} - file 'environments/environment2.json', {} - file 'nodes/node1.json', {} - file 'nodes/node2.json', {} - file 'roles/role1.json', {} - file 'roles/role2.json', {} - file 'users/user1.json', {} - file 'users/user2.json', {} + file 'environments/environment1.json', {} + file 'environments/environment2.json', {} + file 'nodes/node1.json', {} + file 'nodes/node2.json', {} + file 'roles/role1.json', {} + file 'roles/role2.json', {} + file 'users/user1.json', {} + file 'users/user2.json', {} + end it "knife list -Rfp / returns everything" do knife('list -Rp --local --flat /').should_succeed <<EOM diff --git a/spec/integration/knife/raw_spec.rb b/spec/integration/knife/raw_spec.rb index 2a9b5d8904..080ea0f21b 100644 --- a/spec/integration/knife/raw_spec.rb +++ b/spec/integration/knife/raw_spec.rb @@ -21,20 +21,22 @@ require 'chef/knife/raw' require 'chef/knife/show' describe 'knife raw' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport include AppServerSupport include_context "default config options" when_the_chef_server "has one of each thing" do - client 'x', '{}' - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' } - data_bag 'x', { 'y' => '{}' } - environment 'x', '{}' - node 'x', '{}' - role 'x', '{}' - user 'x', '{}' + before do + client 'x', '{}' + cookbook 'x', '1.0.0' + data_bag 'x', { 'y' => '{}' } + environment 'x', '{}' + node 'x', '{}' + role 'x', '{}' + user 'x', '{}' + end it 'knife raw /nodes/x returns the node', :pending => (RUBY_VERSION < "1.9") do knife('raw /nodes/x').should_succeed <<EOM @@ -44,12 +46,16 @@ describe 'knife raw' do "chef_type": "node", "chef_environment": "_default", "override": { + }, "normal": { + }, "default": { + }, "automatic": { + }, "run_list": [ @@ -70,13 +76,16 @@ EOM "json_class": "Chef::Role", "chef_type": "role", "default_attributes": { + }, "override_attributes": { + }, "run_list": [ ], "env_run_lists": { + } } EOM @@ -92,13 +101,16 @@ EOM "json_class": "Chef::Role", "chef_type": "role", "default_attributes": { + }, "override_attributes": { + }, "run_list": [ ], "env_run_lists": { + } } EOM @@ -111,13 +123,16 @@ EOM "json_class": "Chef::Role", "chef_type": "role", "default_attributes": { + }, "override_attributes": { + }, "run_list": [ ], "env_run_lists": { + } } EOM @@ -154,7 +169,7 @@ EOM knife("raw -m POST -i #{file.path} /roles").should_succeed <<EOM { - "uri": "#{ChefZero::RSpec.server.url}/roles/y" + "uri": "#{ChefZeroSupport::Server.server.url}/roles/y" } EOM knife('show /roles/y.json').should_succeed <<EOM diff --git a/spec/integration/knife/redirection_spec.rb b/spec/integration/knife/redirection_spec.rb index ebfd40966e..549a6f6df0 100644 --- a/spec/integration/knife/redirection_spec.rb +++ b/spec/integration/knife/redirection_spec.rb @@ -20,14 +20,14 @@ require 'support/shared/context/config' require 'chef/knife/list' describe 'redirection' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport include AppServerSupport include_context "default config options" when_the_chef_server 'has a role' do - role 'x', {} + before { role 'x', {} } context 'and another server redirects to it with 302' do before :each do diff --git a/spec/integration/knife/serve_spec.rb b/spec/integration/knife/serve_spec.rb index 20e4e43586..32e633543d 100644 --- a/spec/integration/knife/serve_spec.rb +++ b/spec/integration/knife/serve_spec.rb @@ -20,12 +20,12 @@ require 'chef/knife/serve' require 'chef/server_api' describe 'knife serve' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport include AppServerSupport when_the_repository 'also has one of each thing' do - file 'nodes/x.json', { 'foo' => 'bar' } + before { file 'nodes/x.json', { 'foo' => 'bar' } } it 'knife serve serves up /nodes/x' do exception = nil diff --git a/spec/integration/knife/show_spec.rb b/spec/integration/knife/show_spec.rb index 5b15110e41..3a20f96a11 100644 --- a/spec/integration/knife/show_spec.rb +++ b/spec/integration/knife/show_spec.rb @@ -20,40 +20,44 @@ require 'support/shared/context/config' require 'chef/knife/show' describe 'knife show' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport include_context "default config options" when_the_chef_server "has one of each thing" do - client 'x', '{}' - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' } - data_bag 'x', { 'y' => '{}' } - environment 'x', '{}' - node 'x', '{}' - role 'x', '{}' - user 'x', '{}' + before do + client 'x', '{}' + cookbook 'x', '1.0.0' + data_bag 'x', { 'y' => '{}' } + environment 'x', '{}' + node 'x', '{}' + role 'x', '{}' + user 'x', '{}' + end when_the_repository 'also has one of each thing' do - file 'clients/x.json', { 'foo' => 'bar' } - file 'cookbooks/x/metadata.rb', 'version "1.0.1"' - file 'data_bags/x/y.json', { 'foo' => 'bar' } - file 'environments/_default.json', { 'foo' => 'bar' } - file 'environments/x.json', { 'foo' => 'bar' } - file 'nodes/x.json', { 'foo' => 'bar' } - file 'roles/x.json', { 'foo' => 'bar' } - file 'users/x.json', { 'foo' => 'bar' } + before do + file 'clients/x.json', { 'foo' => 'bar' } + file 'cookbooks/x/metadata.rb', cb_metadata('x', '1.0.0') + file 'data_bags/x/y.json', { 'foo' => 'bar' } + file 'environments/_default.json', { 'foo' => 'bar' } + file 'environments/x.json', { 'foo' => 'bar' } + file 'nodes/x.json', { 'foo' => 'bar' } + file 'roles/x.json', { 'foo' => 'bar' } + file 'users/x.json', { 'foo' => 'bar' } + end it 'knife show /cookbooks/x/metadata.rb shows the remote version' do knife('show /cookbooks/x/metadata.rb').should_succeed <<EOM /cookbooks/x/metadata.rb: -version "1.0.0" +name 'x'; version '1.0.0' EOM end it 'knife show --local /cookbooks/x/metadata.rb shows the local version' do knife('show --local /cookbooks/x/metadata.rb').should_succeed <<EOM /cookbooks/x/metadata.rb: -version "1.0.1" +name 'x'; version '1.0.0' EOM end it 'knife show /data_bags/x/y.json shows the remote version' do @@ -122,13 +126,15 @@ EOM end when_the_chef_server 'has a hash with multiple keys' do - environment 'x', { - 'default_attributes' => { 'foo' => 'bar' }, - 'cookbook_versions' => { 'blah' => '= 1.0.0'}, - 'override_attributes' => { 'x' => 'y' }, - 'description' => 'woo', - 'name' => 'x' - } + before do + environment 'x', { + 'default_attributes' => { 'foo' => 'bar' }, + 'cookbook_versions' => { 'blah' => '= 1.0.0'}, + 'override_attributes' => { 'x' => 'y' }, + 'description' => 'woo', + 'name' => 'x' + } + end it 'knife show shows the attributes in a predetermined order', :pending => (RUBY_VERSION < "1.9") do knife('show /environments/x.json').should_succeed <<EOM /environments/x.json: @@ -150,7 +156,7 @@ EOM end when_the_repository 'has an environment with bad JSON' do - file 'environments/x.json', '{' + before { file 'environments/x.json', '{' } it 'knife show succeeds' do knife('show --local /environments/x.json').should_succeed <<EOM /environments/x.json: diff --git a/spec/integration/knife/upload_spec.rb b/spec/integration/knife/upload_spec.rb index 46b804205f..90666f4fc9 100644 --- a/spec/integration/knife/upload_spec.rb +++ b/spec/integration/knife/upload_spec.rb @@ -21,27 +21,33 @@ require 'chef/knife/diff' require 'chef/knife/raw' describe 'knife upload' do - extend IntegrationSupport + include IntegrationSupport include KnifeSupport context 'without versioned cookbooks' do + when_the_chef_server "has one of each thing" do - client 'x', {} - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' } - data_bag 'x', { 'y' => {} } - environment 'x', {} - node 'x', {} - role 'x', {} - user 'x', {} + + before do + client 'x', {} + cookbook 'x', '1.0.0' + data_bag 'x', { 'y' => {} } + environment 'x', {} + node 'x', {} + role 'x', {} + user 'x', {} + end when_the_repository 'has only top-level directories' do - directory 'clients' - directory 'cookbooks' - directory 'data_bags' - directory 'environments' - directory 'nodes' - directory 'roles' - directory 'users' + before do + directory 'clients' + directory 'cookbooks' + directory 'data_bags' + directory 'environments' + directory 'nodes' + directory 'roles' + directory 'users' + end it 'knife upload does nothing' do knife('upload /').should_succeed '' @@ -80,17 +86,20 @@ EOM end when_the_repository 'has an identical copy of each thing' do - file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/y.json', {} - file 'environments/_default.json', { "description" => "The default Chef environment" } - file 'environments/x.json', {} - file 'nodes/x.json', {} - file 'roles/x.json', {} - file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + + before do + file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + file 'cookbooks/x/metadata.rb', cb_metadata("x", "1.0.0") + file 'data_bags/x/y.json', {} + file 'environments/_default.json', { "description" => "The default Chef environment" } + file 'environments/x.json', {} + file 'nodes/x.json', {} + file 'roles/x.json', {} + file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + end it 'knife upload makes no changes' do knife('upload /cookbooks/x').should_succeed '' @@ -103,7 +112,10 @@ EOM end context 'except the role file' do - file 'roles/x.json', { 'description' => 'blarghle' } + before do + file 'roles/x.json', { 'description' => 'blarghle' } + end + it 'knife upload changes the role' do knife('upload /').should_succeed "Updated /roles/x.json\n" knife('diff --name-status /').should_succeed '' @@ -115,7 +127,8 @@ EOM end context 'except the role file is textually different, but not ACTUALLY different' do - file 'roles/x.json', <<EOM + before do + file 'roles/x.json', <<EOM { "chef_type": "role", "default_attributes": { @@ -132,6 +145,8 @@ EOM ] } EOM + end + it 'knife upload / does not change anything' do knife('upload /').should_succeed '' knife('diff --name-status /').should_succeed '' @@ -139,15 +154,17 @@ EOM end context 'as well as one extra copy of each thing' do - file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } - file 'cookbooks/x/blah.rb', '' - file 'cookbooks/y/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/z.json', {} - file 'data_bags/y/zz.json', {} - file 'environments/y.json', {} - file 'nodes/y.json', {} - file 'roles/y.json', {} - file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + before do + file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + file 'cookbooks/x/blah.rb', '' + file 'cookbooks/y/metadata.rb', cb_metadata("y", "1.0.0") + file 'data_bags/x/z.json', {} + file 'data_bags/y/zz.json', {} + file 'environments/y.json', {} + file 'nodes/y.json', {} + file 'roles/y.json', {} + file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + end it 'knife upload adds the new files' do knife('upload /').should_succeed <<EOM @@ -219,7 +236,10 @@ EOM end context 'when current directory is top level' do - cwd '.' + before do + cwd '.' + end + it 'knife upload with no parameters reports an error' do knife('upload').should_fail "FATAL: Must specify at least one argument. If you want to upload everything in this directory, type \"knife upload .\"\n", :stdout => /USAGE/ end @@ -229,7 +249,11 @@ EOM when_the_chef_server 'is empty' do when_the_repository 'has a data bag item' do - file 'data_bags/x/y.json', { 'foo' => 'bar' } + + before do + file 'data_bags/x/y.json', { 'foo' => 'bar' } + end + it 'knife upload of the data bag uploads only the values in the data bag item and no other' do knife('upload /data_bags/x/y.json').should_succeed <<EOM Created /data_bags/x @@ -249,7 +273,11 @@ EOM end when_the_repository 'has a data bag item with keys chef_type and data_bag' do - file 'data_bags/x/y.json', { 'chef_type' => 'aaa', 'data_bag' => 'bbb' } + + before do + file 'data_bags/x/y.json', { 'chef_type' => 'aaa', 'data_bag' => 'bbb' } + end + it 'upload preserves chef_type and data_bag' do knife('upload /data_bags/x/y.json').should_succeed <<EOM Created /data_bags/x @@ -265,8 +293,10 @@ EOM # Test upload of an item when the other end doesn't even have the container when_the_repository 'has two data bag items' do - file 'data_bags/x/y.json', {} - file 'data_bags/x/z.json', {} + before do + file 'data_bags/x/y.json', {} + file 'data_bags/x/z.json', {} + end it 'knife upload of one data bag item itself succeeds' do knife('upload /data_bags/x/y.json').should_succeed <<EOM Created /data_bags/x @@ -280,12 +310,17 @@ EOM end when_the_chef_server 'has three data bag items' do - data_bag 'x', { 'deleted' => {}, 'modified' => {}, 'unmodified' => {} } + + before do + data_bag 'x', { 'deleted' => {}, 'modified' => {}, 'unmodified' => {} } + end when_the_repository 'has a modified, unmodified, added and deleted data bag item' do - file 'data_bags/x/added.json', {} - file 'data_bags/x/modified.json', { 'foo' => 'bar' } - file 'data_bags/x/unmodified.json', {} + before do + file 'data_bags/x/added.json', {} + file 'data_bags/x/modified.json', { 'foo' => 'bar' } + file 'data_bags/x/unmodified.json', {} + end it 'knife upload of the modified file succeeds' do knife('upload /data_bags/x/modified.json').should_succeed <<EOM @@ -348,10 +383,15 @@ EOM knife('diff --name-status /data_bags').should_succeed '' end context 'when cwd is the /data_bags directory' do - cwd 'data_bags' + + before do + cwd 'data_bags' + end + it 'knife upload fails' do knife('upload').should_fail "FATAL: Must specify at least one argument. If you want to upload everything in this directory, type \"knife upload .\"\n", :stdout => /USAGE/ end + it 'knife upload --purge . uploads everything' do knife('upload --purge .').should_succeed <<EOM Created x/added.json @@ -376,10 +416,17 @@ EOM # upload of a file is designed not to work at present. Make sure that is the # case. when_the_chef_server 'has a cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'z.rb' => '' } + + before do + cookbook 'x', '1.0.0', { 'z.rb' => '' } + end + when_the_repository 'has a modified, extra and missing file for the cookbook' do - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x/y.rb', 'hi' + before do + file 'cookbooks/x/metadata.rb', cb_metadata("x", "1.0.0", "#modified") + file 'cookbooks/x/y.rb', 'hi' + end + it 'knife upload of any individual file fails' do knife('upload /cookbooks/x/metadata.rb').should_fail "ERROR: /cookbooks/x/metadata.rb cannot be updated.\n" knife('upload /cookbooks/x/y.rb').should_fail "ERROR: /cookbooks/x cannot have a child created under it.\n" @@ -402,7 +449,11 @@ EOM end end when_the_repository 'has a missing file for the cookbook' do - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' + + before do + file 'cookbooks/x/metadata.rb', cb_metadata('x', '1.0.0') + end + it 'knife upload of the cookbook succeeds' do knife('upload /cookbooks/x').should_succeed <<EOM Updated /cookbooks/x @@ -411,9 +462,13 @@ EOM end end when_the_repository 'has an extra file for the cookbook' do - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x/z.rb', '' - file 'cookbooks/x/blah.rb', '' + + before do + file 'cookbooks/x/metadata.rb', cb_metadata('x', '1.0.0') + file 'cookbooks/x/z.rb', '' + file 'cookbooks/x/blah.rb', '' + end + it 'knife upload of the cookbook succeeds' do knife('upload /cookbooks/x').should_succeed <<EOM Updated /cookbooks/x @@ -423,26 +478,31 @@ EOM end when_the_repository 'has a different file in the cookbook' do - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' + before do + file 'cookbooks/x/metadata.rb', cb_metadata('x', '1.0.0') + end it 'knife upload --freeze freezes the cookbook' do knife('upload --freeze /cookbooks/x').should_succeed <<EOM Updated /cookbooks/x EOM # Modify a file and attempt to upload - file 'cookbooks/x/metadata.rb', 'version "1.0.0" # This is different' + file 'cookbooks/x/metadata.rb', "name 'x'; version '1.0.0'#different" knife('upload /cookbooks/x').should_fail "ERROR: /cookbooks failed to write: Cookbook x is frozen\n" end end end when_the_chef_server 'has a frozen cookbook' do - cookbook 'frozencook', '1.0.0', { - 'metadata.rb' => 'version "1.0.0"' - }, :frozen => true + before do + cookbook 'frozencook', '1.0.0', {}, :frozen => true + end when_the_repository 'has an update to said cookbook' do - file 'cookbooks/frozencook/metadata.rb', 'version "1.0.0" # This is different' + + before do + file 'cookbooks/frozencook/metadata.rb', cb_metadata("frozencook", "1.0.0", "# This is different") + end it 'knife upload fails to upload the frozen cookbook' do knife('upload /cookbooks/frozencook').should_fail "ERROR: /cookbooks failed to write: Cookbook frozencook is frozen\n" @@ -456,12 +516,16 @@ EOM end when_the_repository 'has a cookbook' do - file 'cookbooks/x/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x/onlyin1.0.0.rb', 'old_text' + before do + file 'cookbooks/x/metadata.rb', cb_metadata('x', '1.0.0') + file 'cookbooks/x/onlyin1.0.0.rb', 'old_text' + end when_the_chef_server 'has a later version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => '' } - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => '' } + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' } + end it 'knife upload /cookbooks/x uploads the local version' do knife('diff --name-status /cookbooks').should_succeed <<EOM @@ -481,8 +545,11 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => ''} - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => ''} + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' } + end + it 'knife upload /cookbooks/x uploads the local version' do knife('upload --purge /cookbooks/x').should_succeed <<EOM Updated /cookbooks/x @@ -492,7 +559,9 @@ EOM end when_the_chef_server 'has a later version for the cookbook, and no current version' do - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' } + before do + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' } + end it 'knife upload /cookbooks/x uploads the local version' do knife('diff --name-status /cookbooks').should_succeed <<EOM @@ -512,7 +581,9 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook, and no current version' do - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' } + before do + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' } + end it 'knife upload /cookbooks/x uploads the new version' do knife('upload --purge /cookbooks/x').should_succeed <<EOM @@ -524,9 +595,15 @@ EOM end when_the_chef_server 'has an environment' do - environment 'x', {} + before do + environment 'x', {} + end + when_the_repository 'has an environment with bad JSON' do - file 'environments/x.json', '{' + before do + file 'environments/x.json', '{' + end + it 'knife upload tries and fails' do knife('upload /environments/x.json').should_fail "WARN: Parse error reading #{path_to('environments/x.json')} as JSON: A JSON text must at least contain two octets!\nERROR: /environments/x.json failed to write: Parse error reading JSON: A JSON text must at least contain two octets!\n" knife('diff --name-status /environments/x.json').should_succeed "M\t/environments/x.json\n", :stderr => "WARN: Parse error reading #{path_to('environments/x.json')} as JSON: A JSON text must at least contain two octets!\n" @@ -534,7 +611,9 @@ EOM end when_the_repository 'has the same environment with the wrong name in the file' do - file 'environments/x.json', { 'name' => 'y' } + before do + file 'environments/x.json', { 'name' => 'y' } + end it 'knife upload fails' do knife('upload /environments/x.json').should_fail "ERROR: /environments/x.json failed to write: Name must be 'x' (is 'y')\n" knife('diff --name-status /environments/x.json').should_succeed "M\t/environments/x.json\n" @@ -542,7 +621,9 @@ EOM end when_the_repository 'has the same environment with no name in the file' do - file 'environments/x.json', { 'description' => 'hi' } + before do + file 'environments/x.json', { 'description' => 'hi' } + end it 'knife upload succeeds' do knife('upload /environments/x.json').should_succeed "Updated /environments/x.json\n" knife('diff --name-status /environments/x.json').should_succeed '' @@ -552,7 +633,9 @@ EOM when_the_chef_server 'is empty' do when_the_repository 'has an environment with bad JSON' do - file 'environments/x.json', '{' + before do + file 'environments/x.json', '{' + end it 'knife upload tries and fails' do knife('upload /environments/x.json').should_fail "ERROR: /environments failed to create_child: Parse error reading JSON creating child 'x.json': A JSON text must at least contain two octets!\n" knife('diff --name-status /environments/x.json').should_succeed "A\t/environments/x.json\n" @@ -560,7 +643,9 @@ EOM end when_the_repository 'has an environment with the wrong name in the file' do - file 'environments/x.json', { 'name' => 'y' } + before do + file 'environments/x.json', { 'name' => 'y' } + end it 'knife upload fails' do knife('upload /environments/x.json').should_fail "ERROR: /environments failed to create_child: Error creating 'x.json': Name must be 'x' (is 'y')\n" knife('diff --name-status /environments/x.json').should_succeed "A\t/environments/x.json\n" @@ -568,7 +653,10 @@ EOM end when_the_repository 'has an environment with no name in the file' do - file 'environments/x.json', { 'description' => 'hi' } + + before do + file 'environments/x.json', { 'description' => 'hi' } + end it 'knife upload succeeds' do knife('upload /environments/x.json').should_succeed "Created /environments/x.json\n" knife('diff --name-status /environments/x.json').should_succeed '' @@ -576,7 +664,9 @@ EOM end when_the_repository 'has a data bag with no id in the file' do - file 'data_bags/bag/x.json', { 'foo' => 'bar' } + before do + file 'data_bags/bag/x.json', { 'foo' => 'bar' } + end it 'knife upload succeeds' do knife('upload /data_bags/bag/x.json').should_succeed "Created /data_bags/bag\nCreated /data_bags/bag/x.json\n" knife('diff --name-status /data_bags/bag/x.json').should_succeed '' @@ -587,22 +677,27 @@ EOM with_versioned_cookbooks do when_the_chef_server "has one of each thing" do - client 'x', {} - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' } - data_bag 'x', { 'y' => {} } - environment 'x', {} - node 'x', {} - role 'x', {} - user 'x', {} + + before do + client 'x', {} + cookbook 'x', '1.0.0' + data_bag 'x', { 'y' => {} } + environment 'x', {} + node 'x', {} + role 'x', {} + user 'x', {} + end when_the_repository 'has only top-level directories' do - directory 'clients' - directory 'cookbooks' - directory 'data_bags' - directory 'environments' - directory 'nodes' - directory 'roles' - directory 'users' + before do + directory 'clients' + directory 'cookbooks' + directory 'data_bags' + directory 'environments' + directory 'nodes' + directory 'roles' + directory 'users' + end it 'knife upload does nothing' do knife('upload /').should_succeed '' @@ -641,17 +736,19 @@ EOM end when_the_repository 'has an identical copy of each thing' do - file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } - file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/y.json', {} - file 'environments/_default.json', { 'description' => 'The default Chef environment' } - file 'environments/x.json', {} - file 'nodes/x.json', {} - file 'roles/x.json', {} - file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } - file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + before do + file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + file 'cookbooks/x-1.0.0/metadata.rb', cb_metadata('x', '1.0.0') + file 'data_bags/x/y.json', {} + file 'environments/_default.json', { 'description' => 'The default Chef environment' } + file 'environments/x.json', {} + file 'nodes/x.json', {} + file 'roles/x.json', {} + file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY } + file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY } + end it 'knife upload makes no changes' do knife('upload /cookbooks/x-1.0.0').should_succeed '' @@ -664,7 +761,9 @@ EOM end context 'except the role file' do - file 'roles/x.json', { 'description' => 'blarghle' } + before do + file 'roles/x.json', { 'description' => 'blarghle' } + end it 'knife upload changes the role' do knife('upload /').should_succeed "Updated /roles/x.json\n" @@ -673,7 +772,9 @@ EOM end context 'except the role file is textually different, but not ACTUALLY different' do - file 'roles/x.json', <<EOM + + before do + file 'roles/x.json', <<EOM { "chef_type": "role", "default_attributes": { @@ -690,6 +791,8 @@ EOM ] } EOM + end + it 'knife upload / does not change anything' do knife('upload /').should_succeed '' knife('diff --name-status /').should_succeed '' @@ -697,16 +800,18 @@ EOM end context 'as well as one extra copy of each thing' do - file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } - file 'cookbooks/x-1.0.0/blah.rb', '' - file 'cookbooks/x-2.0.0/metadata.rb', 'version "2.0.0"' - file 'cookbooks/y-1.0.0/metadata.rb', 'version "1.0.0"' - file 'data_bags/x/z.json', {} - file 'data_bags/y/zz.json', {} - file 'environments/y.json', {} - file 'nodes/y.json', {} - file 'roles/y.json', {} - file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + before do + file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + file 'cookbooks/x-1.0.0/blah.rb', '' + file 'cookbooks/x-2.0.0/metadata.rb', cb_metadata('x', '2.0.0') + file 'cookbooks/y-1.0.0/metadata.rb', cb_metadata('y', '1.0.0') + file 'data_bags/x/z.json', {} + file 'data_bags/y/zz.json', {} + file 'environments/y.json', {} + file 'nodes/y.json', {} + file 'roles/y.json', {} + file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY } + end it 'knife upload adds the new files' do knife('upload /').should_succeed <<EOM @@ -763,7 +868,9 @@ EOM end context 'when current directory is top level' do - cwd '.' + before do + cwd '.' + end it 'knife upload with no parameters reports an error' do knife('upload').should_fail "FATAL: Must specify at least one argument. If you want to upload everything in this directory, type \"knife upload .\"\n", :stdout => /USAGE/ end @@ -774,8 +881,10 @@ EOM # Test upload of an item when the other end doesn't even have the container when_the_chef_server 'is empty' do when_the_repository 'has two data bag items' do - file 'data_bags/x/y.json', {} - file 'data_bags/x/z.json', {} + before do + file 'data_bags/x/y.json', {} + file 'data_bags/x/z.json', {} + end it 'knife upload of one data bag item itself succeeds' do knife('upload /data_bags/x/y.json').should_succeed <<EOM @@ -790,11 +899,15 @@ EOM end when_the_chef_server 'has three data bag items' do - data_bag 'x', { 'deleted' => {}, 'modified' => {}, 'unmodified' => {} } + before do + data_bag 'x', { 'deleted' => {}, 'modified' => {}, 'unmodified' => {} } + end when_the_repository 'has a modified, unmodified, added and deleted data bag item' do - file 'data_bags/x/added.json', {} - file 'data_bags/x/modified.json', { 'foo' => 'bar' } - file 'data_bags/x/unmodified.json', {} + before do + file 'data_bags/x/added.json', {} + file 'data_bags/x/modified.json', { 'foo' => 'bar' } + file 'data_bags/x/unmodified.json', {} + end it 'knife upload of the modified file succeeds' do knife('upload /data_bags/x/modified.json').should_succeed <<EOM @@ -857,7 +970,9 @@ EOM knife('diff --name-status /data_bags').should_succeed '' end context 'when cwd is the /data_bags directory' do - cwd 'data_bags' + before do + cwd 'data_bags' + end it 'knife upload fails' do knife('upload').should_fail "FATAL: Must specify at least one argument. If you want to upload everything in this directory, type \"knife upload .\"\n", :stdout => /USAGE/ end @@ -885,11 +1000,15 @@ EOM # upload of a file is designed not to work at present. Make sure that is the # case. when_the_chef_server 'has a cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'z.rb' => '' } + before do + cookbook 'x', '1.0.0', { 'z.rb' => '' } + end when_the_repository 'has a modified, extra and missing file for the cookbook' do - file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x-1.0.0/y.rb', 'hi' + before do + file 'cookbooks/x-1.0.0/metadata.rb', cb_metadata('x', '1.0.0', '#modified') + file 'cookbooks/x-1.0.0/y.rb', 'hi' + end it 'knife upload of any individual file fails' do knife('upload /cookbooks/x-1.0.0/metadata.rb').should_fail "ERROR: /cookbooks/x-1.0.0/metadata.rb cannot be updated.\n" @@ -916,7 +1035,9 @@ EOM end when_the_repository 'has a missing file for the cookbook' do - file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"' + before do + file 'cookbooks/x-1.0.0/metadata.rb', cb_metadata('x', "1.0.0") + end it 'knife upload of the cookbook succeeds' do knife('upload /cookbooks/x-1.0.0').should_succeed <<EOM @@ -927,9 +1048,11 @@ EOM end when_the_repository 'has an extra file for the cookbook' do - file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x-1.0.0/z.rb', '' - file 'cookbooks/x-1.0.0/blah.rb', '' + before do + file 'cookbooks/x-1.0.0/metadata.rb', cb_metadata('x', '1.0.0') + file 'cookbooks/x-1.0.0/z.rb', '' + file 'cookbooks/x-1.0.0/blah.rb', '' + end it 'knife upload of the cookbook succeeds' do knife('upload /cookbooks/x-1.0.0').should_succeed <<EOM @@ -941,12 +1064,16 @@ EOM end when_the_repository 'has a cookbook' do - file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"' - file 'cookbooks/x-1.0.0/onlyin1.0.0.rb', 'old_text' + before do + file 'cookbooks/x-1.0.0/metadata.rb', cb_metadata('x', '1.0.0') + file 'cookbooks/x-1.0.0/onlyin1.0.0.rb', 'old_text' + end when_the_chef_server 'has a later version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => '' } - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => '' } + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' } + end it 'knife upload /cookbooks uploads the local version' do knife('diff --name-status /cookbooks').should_succeed <<EOM @@ -962,8 +1089,10 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook' do - cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => ''} - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' } + before do + cookbook 'x', '1.0.0', { 'onlyin1.0.0.rb' => ''} + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' } + end it 'knife upload /cookbooks uploads the local version' do knife('upload --purge /cookbooks').should_succeed <<EOM Updated /cookbooks/x-1.0.0 @@ -974,7 +1103,9 @@ EOM end when_the_chef_server 'has a later version for the cookbook, and no current version' do - cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' } + before do + cookbook 'x', '1.0.1', { 'onlyin1.0.1.rb' => 'hi' } + end it 'knife upload /cookbooks/x uploads the local version' do knife('diff --name-status /cookbooks').should_succeed <<EOM @@ -990,7 +1121,9 @@ EOM end when_the_chef_server 'has an earlier version for the cookbook, and no current version' do - cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' } + before do + cookbook 'x', '0.9.9', { 'onlyin0.9.9.rb' => 'hi' } + end it 'knife upload /cookbooks/x uploads the new version' do knife('upload --purge /cookbooks').should_succeed <<EOM @@ -1003,9 +1136,14 @@ EOM end when_the_chef_server 'has an environment' do - environment 'x', {} + before do + environment 'x', {} + end + when_the_repository 'has an environment with bad JSON' do - file 'environments/x.json', '{' + before do + file 'environments/x.json', '{' + end it 'knife upload tries and fails' do knife('upload /environments/x.json').should_fail "WARN: Parse error reading #{path_to('environments/x.json')} as JSON: A JSON text must at least contain two octets!\nERROR: /environments/x.json failed to write: Parse error reading JSON: A JSON text must at least contain two octets!\n" knife('diff --name-status /environments/x.json').should_succeed "M\t/environments/x.json\n", :stderr => "WARN: Parse error reading #{path_to('environments/x.json')} as JSON: A JSON text must at least contain two octets!\n" @@ -1013,7 +1151,9 @@ EOM end when_the_repository 'has the same environment with the wrong name in the file' do - file 'environments/x.json', { 'name' => 'y' } + before do + file 'environments/x.json', { 'name' => 'y' } + end it 'knife upload fails' do knife('upload /environments/x.json').should_fail "ERROR: /environments/x.json failed to write: Name must be 'x' (is 'y')\n" knife('diff --name-status /environments/x.json').should_succeed "M\t/environments/x.json\n" @@ -1021,7 +1161,9 @@ EOM end when_the_repository 'has the same environment with no name in the file' do - file 'environments/x.json', { 'description' => 'hi' } + before do + file 'environments/x.json', { 'description' => 'hi' } + end it 'knife upload succeeds' do knife('upload /environments/x.json').should_succeed "Updated /environments/x.json\n" knife('diff --name-status /environments/x.json').should_succeed '' @@ -1031,7 +1173,9 @@ EOM when_the_chef_server 'is empty' do when_the_repository 'has an environment with bad JSON' do - file 'environments/x.json', '{' + before do + file 'environments/x.json', '{' + end it 'knife upload tries and fails' do knife('upload /environments/x.json').should_fail "ERROR: /environments failed to create_child: Parse error reading JSON creating child 'x.json': A JSON text must at least contain two octets!\n" knife('diff --name-status /environments/x.json').should_succeed "A\t/environments/x.json\n" @@ -1039,7 +1183,9 @@ EOM end when_the_repository 'has an environment with the wrong name in the file' do - file 'environments/x.json', { 'name' => 'y' } + before do + file 'environments/x.json', { 'name' => 'y' } + end it 'knife upload fails' do knife('upload /environments/x.json').should_fail "ERROR: /environments failed to create_child: Error creating 'x.json': Name must be 'x' (is 'y')\n" knife('diff --name-status /environments/x.json').should_succeed "A\t/environments/x.json\n" @@ -1047,7 +1193,9 @@ EOM end when_the_repository 'has an environment with no name in the file' do - file 'environments/x.json', { 'description' => 'hi' } + before do + file 'environments/x.json', { 'description' => 'hi' } + end it 'knife upload succeeds' do knife('upload /environments/x.json').should_succeed "Created /environments/x.json\n" knife('diff --name-status /environments/x.json').should_succeed '' @@ -1055,7 +1203,9 @@ EOM end when_the_repository 'has a data bag with no id in the file' do - file 'data_bags/bag/x.json', { 'foo' => 'bar' } + before do + file 'data_bags/bag/x.json', { 'foo' => 'bar' } + end it 'knife upload succeeds' do knife('upload /data_bags/bag/x.json').should_succeed "Created /data_bags/bag\nCreated /data_bags/bag/x.json\n" knife('diff --name-status /data_bags/bag/x.json').should_succeed '' @@ -1065,9 +1215,14 @@ EOM end # with versioned cookbooks when_the_chef_server 'has a user' do - user 'x', {} + before do + user 'x', {} + end + when_the_repository 'has the same user with json_class in it' do - file 'users/x.json', { 'admin' => true, 'json_class' => 'Chef::WebUIUser' } + before do + file 'users/x.json', { 'admin' => true, 'json_class' => 'Chef::WebUIUser' } + end it 'knife upload /users/x.json succeeds' do knife('upload /users/x.json').should_succeed "Updated /users/x.json\n" end |