diff options
author | jkeiser <jkeiser@opscode.com> | 2013-01-15 23:11:55 -0800 |
---|---|---|
committer | John Keiser <jkeiser@opscode.com> | 2013-06-07 13:12:19 -0700 |
commit | c3e6d026a5c80f16f61bd4c21993a7185640f707 (patch) | |
tree | 7c8202e1af7a8be78ae71028a9d26d04f70ff1bc /spec | |
parent | 1f7699afbb0dd76c33aa81304cf0e57bf65f312d (diff) | |
download | chef-c3e6d026a5c80f16f61bd4c21993a7185640f707.tar.gz |
Add delete spec, make error printing more consistent
Diffstat (limited to 'spec')
-rw-r--r-- | spec/integration/knife/delete_spec.rb | 181 | ||||
-rw-r--r-- | spec/integration/knife/upload_spec.rb | 16 |
2 files changed, 189 insertions, 8 deletions
diff --git a/spec/integration/knife/delete_spec.rb b/spec/integration/knife/delete_spec.rb new file mode 100644 index 0000000000..e2cf78ea52 --- /dev/null +++ b/spec/integration/knife/delete_spec.rb @@ -0,0 +1,181 @@ +require 'support/shared/integration/integration_helper' +require 'chef/knife/delete' +require 'chef/knife/list' + +describe 'knife delete' do + extend IntegrationSupport + include KnifeSupport + + 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', '{}' + + let :everything do + <<EOM +/cookbooks +/cookbooks/x +/cookbooks/x/metadata.rb +/data_bags +/data_bags/x +/data_bags/x/y.json +/environments +/environments/_default.json +/environments/x.json +/roles +/roles/x.json +EOM + end + + let :nothing do + <<EOM +/cookbooks +/data_bags +/environments +/roles +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' + + it 'knife delete / fails' do + knife('delete /').should_fail "ERROR: / cannot be deleted.\nERROR: / cannot be deleted.\n" + knife('list -Rf /').should_succeed everything + knife('list -Rf --local /').should_succeed nothing + end + + it 'knife delete -r /* fails' do + knife('delete -r --local-only /*').should_fail <<EOM +ERROR: / cannot be deleted. +ERROR: /cookbooks cannot be deleted. +ERROR: /data_bags cannot be deleted. +ERROR: /environments cannot be deleted. +ERROR: /roles cannot be deleted. +EOM + knife('list -Rf /').should_succeed everything + knife('list -Rf --local /').should_succeed nothing + end + + it 'knife delete /cookbooks/x fails' do + knife('delete /cookbooks/x').should_fail "ERROR: /cookbooks/x must be deleted recursively! Pass -r to knife delete.\n" + knife('list -Rf /').should_succeed everything + knife('list -Rf --local /').should_succeed nothing + end + + it 'knife delete -r /cookbooks/x deletes x' do + knife('delete -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n" + knife('list -Rf /').should_succeed <<EOM +/cookbooks +/data_bags +/data_bags/x +/data_bags/x/y.json +/environments +/environments/_default.json +/environments/x.json +/roles +/roles/x.json +EOM + knife('list -Rf --local /').should_succeed nothing + end + + it 'knife delete /data_bags/x fails' do + knife('delete /data_bags/x').should_fail "ERROR: /data_bags/x must be deleted recursively! Pass -r to knife delete.\n" + knife('list -Rf /').should_succeed everything + knife('list -Rf --local /').should_succeed nothing + end + + it 'knife delete -r /data_bags/x deletes x' do + knife('delete -r /data_bags/x').should_succeed "Deleted /data_bags/x\n" + knife('list -Rf /').should_succeed <<EOM +/cookbooks +/cookbooks/x +/cookbooks/x/metadata.rb +/data_bags +/environments +/environments/_default.json +/environments/x.json +/roles +/roles/x.json +EOM + knife('list -Rf --local /').should_succeed nothing + end + + it 'knife delete /environments/x.json deletes x' do + knife('delete /environments/x.json').should_succeed "Deleted /environments/x.json\n" + knife('list -Rf /').should_succeed <<EOM +/cookbooks +/cookbooks/x +/cookbooks/x/metadata.rb +/data_bags +/data_bags/x +/data_bags/x/y.json +/environments +/environments/_default.json +/roles +/roles/x.json +EOM + knife('list -Rf --local /').should_succeed nothing + end + + it 'knife delete /roles/x.json deletes x' do + knife('delete /roles/x.json').should_succeed "Deleted /roles/x.json\n" + knife('list -Rf /').should_succeed <<EOM +/cookbooks +/cookbooks/x +/cookbooks/x/metadata.rb +/data_bags +/data_bags/x +/data_bags/x/y.json +/environments +/environments/_default.json +/environments/x.json +/roles +EOM + knife('list -Rf --local /').should_succeed nothing + end + + it 'knife delete /environments/_default.json fails' do + knife('delete /environments/_default.json').should_fail "", :stderr => "ERROR: /environments/_default.json cannot be deleted (default environment cannot be modified).\n" + knife('list -Rf /').should_succeed everything + knife('list -Rf --local /').should_succeed nothing + end + + context 'and cwd is at the top level' do + 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 +cookbooks +cookbooks/x +cookbooks/x/metadata.rb +data_bags +data_bags/x +data_bags/x/y.json +environments +environments/_default.json +environments/x.json +roles +roles/x.json +EOM + knife('list -Rf --local /').should_succeed <<EOM +cookbooks +data_bags +environments +roles +EOM + end + end + end + end +end diff --git a/spec/integration/knife/upload_spec.rb b/spec/integration/knife/upload_spec.rb index ee50a2278d..67d3e9508b 100644 --- a/spec/integration/knife/upload_spec.rb +++ b/spec/integration/knife/upload_spec.rb @@ -36,7 +36,7 @@ EOM end it 'knife upload --purge deletes everything' do - knife('upload --purge /').should_succeed(<<EOM, :stderr => "WARN: The default environment (_default.json) cannot be deleted. Skipping.\n") + knife('upload --purge /').should_succeed(<<EOM, :stderr => "WARNING: /environments/_default.json cannot be deleted (default environment cannot be modified).\n") Deleted extra entry /cookbooks/x (purge is on) Deleted extra entry /data_bags/x (purge is on) Deleted extra entry /environments/x.json (purge is on) @@ -220,10 +220,10 @@ EOM it 'knife upload --purge deletes nothing' do knife('upload --purge /').should_fail <<EOM -ERROR: remote/cookbooks cannot be deleted. -ERROR: remote/data_bags cannot be deleted. -ERROR: remote/environments cannot be deleted. -ERROR: remote/roles cannot be deleted. +ERROR: /cookbooks cannot be deleted. +ERROR: /data_bags cannot be deleted. +ERROR: /environments cannot be deleted. +ERROR: /roles cannot be deleted. EOM knife('diff --name-status /').should_succeed <<EOM D\t/cookbooks @@ -358,9 +358,9 @@ EOM file 'cookbooks/x/metadata.rb', 'version "1.0.0"' file 'cookbooks/x/y.rb', 'hi' it 'knife upload of any individual file fails' do - knife('upload /cookbooks/x/metadata.rb').should_fail "ERROR: remote/cookbooks/x/metadata.rb cannot be updated.\n" - knife('upload /cookbooks/x/y.rb').should_fail "ERROR: remote/cookbooks/x cannot have a child created under it.\n" - knife('upload --purge /cookbooks/x/z.rb').should_fail "ERROR: remote/cookbooks/x/z.rb cannot be deleted.\n" + 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" + knife('upload --purge /cookbooks/x/z.rb').should_fail "ERROR: /cookbooks/x/z.rb cannot be deleted.\n" end # TODO this is a bit of an inconsistency: if we didn't specify --purge, # technically we shouldn't have deleted missing files. But ... cookbooks |