summaryrefslogtreecommitdiff
path: root/spec/functional/resource/remote_directory_spec.rb
diff options
context:
space:
mode:
authordanielsdeleo <dan@opscode.com>2012-11-06 11:32:58 -0800
committerdanielsdeleo <dan@opscode.com>2012-11-06 11:32:58 -0800
commita6c50e5a4871b918398fec98f128412711b33389 (patch)
tree4de9c362ee9c667a2ab2f6c18015a2a0f269dfee /spec/functional/resource/remote_directory_spec.rb
parent6d63adcc03d275626921e043f12ce7d73d3a174d (diff)
downloadchef-a6c50e5a4871b918398fec98f128412711b33389.tar.gz
modify remote_directory tests to verify updated/not_updated status
Diffstat (limited to 'spec/functional/resource/remote_directory_spec.rb')
-rw-r--r--spec/functional/resource/remote_directory_spec.rb171
1 files changed, 136 insertions, 35 deletions
diff --git a/spec/functional/resource/remote_directory_spec.rb b/spec/functional/resource/remote_directory_spec.rb
index c8319e37ba..49e84ce12d 100644
--- a/spec/functional/resource/remote_directory_spec.rb
+++ b/spec/functional/resource/remote_directory_spec.rb
@@ -39,57 +39,88 @@ describe Chef::Resource::RemoteDirectory do
resource
end
+ def create_extraneous_files
+ FileUtils.mkdir_p(File.join(path, 'remotesubdir'))
+ @existing1 = File.join(path, 'marked_for_death.txt')
+ @existing2 = File.join(path, 'remotesubdir', 'marked_for_death_again.txt')
+ FileUtils.touch(@existing1)
+ FileUtils.touch(@existing2)
+ end
+
let!(:resource) do
create_resource
end
+ let(:resource_second_pass) do
+ create_resource
+ end
+
+ # See spec/data/cookbooks/openldap/files/default
+ let(:expected_files) do
+ [
+ File.join(path, 'remote_dir_file1.txt'),
+ File.join(path, 'remote_dir_file2.txt'),
+ File.join(path, 'remotesubdir', 'remote_subdir_file1.txt'),
+ File.join(path, 'remotesubdir', 'remote_subdir_file2.txt'),
+ File.join(path, 'remotesubdir', '.a_dotfile'),
+ File.join(path, '.a_dotdir', '.a_dotfile_in_a_dotdir')
+ ]
+ end
+
it_behaves_like "a directory resource"
- context "when creating the remote directory" do
- it "transfers the directory with all contents" do
- resource.run_action(:create)
- File.should exist(File.join(path, 'remote_dir_file1.txt'))
- File.should exist(File.join(path, 'remote_dir_file2.txt'))
- File.should exist(File.join(path, 'remotesubdir', 'remote_subdir_file1.txt'))
- File.should exist(File.join(path, 'remotesubdir', 'remote_subdir_file2.txt'))
- File.should exist(File.join(path, 'remotesubdir', '.a_dotfile'))
- File.should exist(File.join(path, '.a_dotdir', '.a_dotfile_in_a_dotdir'))
- end
+ context "when creating the remote directory with purging disabled" do
- context "with purging enabled" do
- before(:each) do
- resource.purge(true)
+ context "and the directory does not yet exist" do
+ before do
+ resource.run_action(:create)
end
- it "removes existing files if purge is true" do
- FileUtils.mkdir_p(File.join(path, 'remotesubdir'))
- existing1 = File.join(path, 'marked_for_death.txt')
- existing2 = File.join(path, 'remotesubdir', 'marked_for_death_again.txt')
- FileUtils.touch(existing1)
- FileUtils.touch(existing2)
+ it "transfers the directory with all contents" do
+ expected_files.each do |file_path|
+ File.should exist(file_path)
+ end
+ end
+
+ it "is marked as updated by last action" do
+ resource.should be_updated_by_last_action
+ end
+ end
+ context "and there are extraneous files in the directory" do
+ before do
+ create_extraneous_files
resource.run_action(:create)
- File.should_not exist(existing1)
- File.should_not exist(existing2)
end
- it "removes files in subdirectories before files above" do
- FileUtils.mkdir_p(File.join(path, 'a', 'multiply', 'nested', 'directory'))
- existing1 = File.join(path, 'a', 'foo.txt')
- existing2 = File.join(path, 'a', 'multiply', 'bar.txt')
- existing3 = File.join(path, 'a', 'multiply', 'nested', 'baz.txt')
- existing4 = File.join(path, 'a', 'multiply', 'nested', 'directory', 'qux.txt')
- FileUtils.touch(existing1)
- FileUtils.touch(existing2)
- FileUtils.touch(existing3)
- FileUtils.touch(existing4)
+ it "does not modify the expected state of the directory" do
+ expected_files.each do |file_path|
+ File.should exist(file_path)
+ end
+ end
+
+ it "does not remove unmanaged files" do
+ File.should exist(@existing1)
+ File.should exist(@existing2)
+ end
+ end
+ context "and the directory is in the desired state" do
+ before do
resource.run_action(:create)
- File.should_not exist(existing1)
- File.should_not exist(existing2)
- File.should_not exist(existing3)
- File.should_not exist(existing4)
+ resource_second_pass.run_action(:create)
+ end
+
+ it "does not modify the expected state of the directory" do
+ expected_files.each do |file_path|
+ File.should exist(file_path)
+ end
end
+
+ it "is not marked as updated by last action" do
+ resource_second_pass.should_not be_updated_by_last_action
+ end
+
end
describe "with overwrite disabled" do
@@ -113,4 +144,74 @@ describe Chef::Resource::RemoteDirectory do
end
end
end
+
+ context "when creating the directory with purging enabled" do
+ before(:each) do
+ resource.purge(true)
+ end
+
+ context "and there are no extraneous files in the directory" do
+ before do
+ resource.run_action(:create)
+ end
+
+ it "creates the directory contents as normal" do
+ expected_files.each do |file_path|
+ File.should exist(file_path)
+ end
+ end
+
+ end
+
+ context "and there are extraneous files in the directory" do
+ before do
+ create_extraneous_files
+ resource.run_action(:create)
+ end
+
+ it "removes unmanaged files" do
+ File.should_not exist(@existing1)
+ File.should_not exist(@existing2)
+ end
+
+ it "does not modify managed files" do
+ expected_files.each do |file_path|
+ File.should exist(file_path)
+ end
+ end
+
+ it "is marked as updated by last action" do
+ resource.should be_updated_by_last_action
+ end
+ end
+
+ context "and there are deeply nested extraneous files in the directory" do
+ before do
+ FileUtils.mkdir_p(File.join(path, 'a', 'multiply', 'nested', 'directory'))
+ @existing1 = File.join(path, 'a', 'foo.txt')
+ @existing2 = File.join(path, 'a', 'multiply', 'bar.txt')
+ @existing3 = File.join(path, 'a', 'multiply', 'nested', 'baz.txt')
+ @existing4 = File.join(path, 'a', 'multiply', 'nested', 'directory', 'qux.txt')
+ FileUtils.touch(@existing1)
+ FileUtils.touch(@existing2)
+ FileUtils.touch(@existing3)
+ FileUtils.touch(@existing4)
+
+ resource.run_action(:create)
+ end
+
+ it "removes files in subdirectories before files above" do
+ File.should_not exist(@existing1)
+ File.should_not exist(@existing2)
+ File.should_not exist(@existing3)
+ File.should_not exist(@existing4)
+ end
+
+ it "is marked as updated by last action" do
+ resource.should be_updated_by_last_action
+ end
+
+ end
+ end
+
end