From a6c50e5a4871b918398fec98f128412711b33389 Mon Sep 17 00:00:00 2001 From: danielsdeleo Date: Tue, 6 Nov 2012 11:32:58 -0800 Subject: modify remote_directory tests to verify updated/not_updated status --- spec/functional/resource/remote_directory_spec.rb | 171 +++++++++++++++++----- 1 file changed, 136 insertions(+), 35 deletions(-) (limited to 'spec/functional/resource/remote_directory_spec.rb') 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 -- cgit v1.2.1