summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorjkeiser <jkeiser@opscode.com>2013-01-15 23:11:55 -0800
committerJohn Keiser <jkeiser@opscode.com>2013-06-07 13:12:19 -0700
commitc3e6d026a5c80f16f61bd4c21993a7185640f707 (patch)
tree7c8202e1af7a8be78ae71028a9d26d04f70ff1bc /spec
parent1f7699afbb0dd76c33aa81304cf0e57bf65f312d (diff)
downloadchef-c3e6d026a5c80f16f61bd4c21993a7185640f707.tar.gz
Add delete spec, make error printing more consistent
Diffstat (limited to 'spec')
-rw-r--r--spec/integration/knife/delete_spec.rb181
-rw-r--r--spec/integration/knife/upload_spec.rb16
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