summaryrefslogtreecommitdiff
path: root/spec/integration/knife/diff_spec.rb
diff options
context:
space:
mode:
authordanielsdeleo <dan@getchef.com>2014-08-07 18:20:20 -0700
committerdanielsdeleo <dan@getchef.com>2014-08-10 09:40:36 -0700
commit674cc65dc68b9d5f0eaa36f2409c6c12becf2c11 (patch)
tree7c33437663b794c5cdbbd78eff5a77f0b83ead1f /spec/integration/knife/diff_spec.rb
parente2a6b85f5b095f2350fa24f8e825fa22660fcbc7 (diff)
downloadchef-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/diff_spec.rb')
-rw-r--r--spec/integration/knife/diff_spec.rb278
1 files changed, 170 insertions, 108 deletions
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