1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
require "support/shared/integration/integration_helper"
describe Chef::Resource::RemoteDirectory do
include IntegrationSupport
include Chef::Mixin::ShellOut
# Until Cheffish::RSpec has cookbook support, we have to run the whole client
let(:chef_dir) { File.join(File.dirname(__FILE__), "..", "..", "..", "bin") }
# Invoke `chef-client` as `ruby PATH/TO/chef-client`. This ensures the
# following constraints are satisfied:
# * Windows: windows can only run batch scripts as bare executables. Rubygems
# creates batch wrappers for installed gems, but we don't have batch wrappers
# in the source tree.
# * Other `chef-client` in PATH: A common case is running the tests on a
# machine that has omnibus chef installed. In that case we need to ensure
# we're running `chef-client` from the source tree and not the external one.
# cf. CHEF-4914
let(:chef_client) { "bundle exec chef-client --minimal-ohai" }
when_the_repository "has a cookbook with a source_dir with two subdirectories, each with one file and subdir in a different alphabetical order" do
before do
file "config/client.rb", <<-EOM
local_mode true
cookbook_path "#{path_to('cookbooks')}"
EOM
directory "cookbooks/test" do
directory "files/default/source_dir" do
directory "sub1" do
file "aaa", ""
file "zzz/file", ""
end
directory "sub2" do
file "aaa/file", ""
file "zzz", ""
end
end
end
end
context "and a recipe is run with a remote_directory that syncs source_dir with different mode and file_mode" do
let!(:dest_dir) { path_to("dest_dir") }
before do
directory "cookbooks/test" do
file "recipes/default.rb", <<-EOM
remote_directory #{dest_dir.inspect} do
source "source_dir"
mode "0754"
files_mode 0777
end
EOM
end
shell_out!("#{chef_client} -c \"#{path_to('config/client.rb')}\" -o 'test::default'", cwd: chef_dir)
end
def mode_of(path)
path = path_to(path)
stat = File.stat(path)
(stat.mode & 0777).to_s(8)
end
it "creates all directories and files with the correct permissions" do
expect(mode_of("dest_dir/sub1")).to eq "754"
expect(mode_of("dest_dir/sub1/aaa")).to eq "777"
expect(mode_of("dest_dir/sub1/zzz")).to eq "754"
expect(mode_of("dest_dir/sub1/zzz/file")).to eq "777"
expect(mode_of("dest_dir/sub2")).to eq "754"
expect(mode_of("dest_dir/sub2/aaa")).to eq "754"
expect(mode_of("dest_dir/sub2/aaa/file")).to eq "777"
expect(mode_of("dest_dir/sub2/zzz")).to eq "777"
end
end
end
end
|