chef-rewind 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/CHANGELOG +17 -0
  2. data/Gemfile +42 -2
  3. data/README.md +2 -0
  4. data/chef-rewind.gemspec +1 -1
  5. data/lib/chef/rewind.rb +7 -0
  6. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -0
  7. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -0
  8. data/spec/data/cookbooks/apache2/recipes/default.rb +3 -0
  9. data/spec/data/cookbooks/borken/recipes/default.rb +2 -0
  10. data/spec/data/cookbooks/borken/templates/default/borken.erb +2 -0
  11. data/spec/data/cookbooks/chefignore +6 -0
  12. data/spec/data/cookbooks/java/files/default/java.response +2 -0
  13. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -0
  14. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -0
  15. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -0
  16. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -0
  17. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
  18. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
  19. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
  20. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +3 -0
  21. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +3 -0
  22. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
  23. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +3 -0
  24. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +3 -0
  25. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -0
  26. data/spec/data/cookbooks/openldap/recipes/default.rb +3 -0
  27. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -0
  28. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -0
  29. data/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb +1 -0
  30. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -0
  31. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -0
  32. data/spec/rewind_recipe_spec.rb +62 -0
  33. data/spec/rewind_resource_spec.rb +34 -0
  34. data/spec/spec_helper.rb +81 -0
  35. data/spec/support/chef_helpers.rb +52 -0
  36. data/spec/support/lib/chef/provider/easy.rb +35 -0
  37. data/spec/support/lib/chef/provider/snakeoil.rb +40 -0
  38. data/spec/support/lib/chef/resource/cat.rb +41 -0
  39. data/spec/support/lib/chef/resource/one_two_three_four.rb +43 -0
  40. data/spec/support/lib/chef/resource/zen_master.rb +46 -0
  41. data/spec/support/matchers/leak.rb +96 -0
  42. data/spec/support/mock/constant.rb +52 -0
  43. data/spec/support/mock/platform.rb +18 -0
  44. data/spec/support/platform_helpers.rb +31 -0
  45. data/spec/support/platforms/prof/gc.rb +54 -0
  46. data/spec/support/platforms/prof/win32.rb +46 -0
  47. data/spec/support/shared/functional/directory_resource.rb +85 -0
  48. data/spec/support/shared/functional/file_resource.rb +173 -0
  49. data/spec/support/shared/functional/knife.rb +37 -0
  50. data/spec/support/shared/functional/securable_resource.rb +394 -0
  51. data/spec/support/shared/unit/api_error_inspector.rb +192 -0
  52. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  53. metadata +99 -4
@@ -0,0 +1,192 @@
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
3
+ # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+
20
+
21
+ # == API Error Inspector Examples
22
+ # These tests are work in progress. They exercise the code enough to ensure it
23
+ # runs without error, but don't make assertions about the output. This is
24
+ # because aspects such as how information gets formatted, what's included, etc.
25
+ # are still in flux. When testing an inspector, change the outputter to use
26
+ # STDOUT and manually check the ouput.
27
+
28
+ shared_examples_for "an api error inspector" do
29
+
30
+ before do
31
+ @node_name = "test-node.example.com"
32
+ @config = {
33
+ :validation_client_name => "testorg-validator",
34
+ :validation_key => "/etc/chef/testorg-validator.pem",
35
+ :chef_server_url => "https://chef-api.example.com",
36
+ :node_name => "testnode-name",
37
+ :client_key => "/etc/chef/client.pem"
38
+ }
39
+ @description = Chef::Formatters::ErrorDescription.new("Error registering the node:")
40
+ @outputter = Chef::Formatters::Outputter.new(StringIO.new, STDERR)
41
+ #@outputter = Chef::Formatters::Outputter.new(STDOUT, STDERR)
42
+
43
+ end
44
+
45
+ describe "when explaining a network error" do
46
+ before do
47
+ @exception = Errno::ECONNREFUSED.new("connection refused")
48
+ @inspector = described_class.new(@node_name, @exception, @config)
49
+ @inspector.add_explanation(@description)
50
+ end
51
+
52
+ it "prints a nice message" do
53
+ @description.display(@outputter)
54
+ end
55
+
56
+ end
57
+
58
+ describe "when explaining a 'private key missing' error" do
59
+ before do
60
+ @exception = Chef::Exceptions::PrivateKeyMissing.new("no private key yo")
61
+ @inspector = described_class.new(@node_name, @exception, @config)
62
+ @inspector.add_explanation(@description)
63
+ end
64
+
65
+ it "prints a nice message" do
66
+ @description.display(@outputter)
67
+ end
68
+
69
+ end
70
+
71
+ describe "when explaining a 401 caused by clock skew" do
72
+ before do
73
+ @response_body = "synchronize the clock on your host"
74
+ @response = Net::HTTPUnauthorized.new("1.1", "401", "(response) unauthorized")
75
+ @response.stub!(:body).and_return(@response_body)
76
+ @exception = Net::HTTPServerException.new("(exception) unauthorized", @response)
77
+ @inspector = described_class.new(@node_name, @exception, @config)
78
+ @inspector.add_explanation(@description)
79
+ end
80
+
81
+ it "prints a nice message" do
82
+ @description.display(@outputter)
83
+ end
84
+
85
+ end
86
+
87
+ describe "when explaining a 401 (no clock skew)" do
88
+ before do
89
+ @response_body = "check your key and node name"
90
+ @response = Net::HTTPUnauthorized.new("1.1", "401", "(response) unauthorized")
91
+ @response.stub!(:body).and_return(@response_body)
92
+ @exception = Net::HTTPServerException.new("(exception) unauthorized", @response)
93
+ @inspector = described_class.new(@node_name, @exception, @config)
94
+ @inspector.add_explanation(@description)
95
+ end
96
+
97
+ it "prints a nice message" do
98
+ @description.display(@outputter)
99
+ end
100
+
101
+ end
102
+
103
+ describe "when explaining a 403" do
104
+ before do
105
+ @response_body = "forbidden"
106
+ @response = Net::HTTPForbidden.new("1.1", "403", "(response) forbidden")
107
+ @response.stub!(:body).and_return(@response_body)
108
+ @exception = Net::HTTPServerException.new("(exception) forbidden", @response)
109
+ @inspector = described_class.new(@node_name, @exception, @config)
110
+ @inspector.add_explanation(@description)
111
+ end
112
+
113
+ it "prints a nice message" do
114
+ @description.display(@outputter)
115
+ end
116
+
117
+ end
118
+
119
+ describe "when explaining a 400" do
120
+ before do
121
+ @response_body = "didn't like your data"
122
+ @response = Net::HTTPBadRequest.new("1.1", "400", "(response) bad request")
123
+ @response.stub!(:body).and_return(@response_body)
124
+ @exception = Net::HTTPServerException.new("(exception) bad request", @response)
125
+ @inspector = described_class.new(@node_name, @exception, @config)
126
+ @inspector.add_explanation(@description)
127
+ end
128
+
129
+ it "prints a nice message" do
130
+ @description.display(@outputter)
131
+ end
132
+
133
+ end
134
+
135
+ describe "when explaining a 404" do
136
+ before do
137
+ @response_body = "probably caused by a redirect to a get"
138
+ @response = Net::HTTPNotFound.new("1.1", "404", "(response) not found")
139
+ @response.stub!(:body).and_return(@response_body)
140
+ @exception = Net::HTTPServerException.new("(exception) not found", @response)
141
+ @inspector = described_class.new(@node_name, @exception, @config)
142
+ @inspector.add_explanation(@description)
143
+ end
144
+
145
+ it "prints a nice message" do
146
+ @description.display(@outputter)
147
+ end
148
+ end
149
+
150
+ describe "when explaining a 500" do
151
+ before do
152
+ @response_body = "sad trombone"
153
+ @response = Net::HTTPInternalServerError.new("1.1", "500", "(response) internal server error")
154
+ @response.stub!(:body).and_return(@response_body)
155
+ @exception = Net::HTTPFatalError.new("(exception) internal server error", @response)
156
+ @inspector = described_class.new(@node_name, @exception, @config)
157
+ @inspector.add_explanation(@description)
158
+ end
159
+
160
+ it "prints a nice message" do
161
+ @description.display(@outputter)
162
+ end
163
+ end
164
+
165
+ describe "when explaining a 503" do
166
+ before do
167
+ @response_body = "sad trombone orchestra"
168
+ @response = Net::HTTPBadGateway.new("1.1", "502", "(response) bad gateway")
169
+ @response.stub!(:body).and_return(@response_body)
170
+ @exception = Net::HTTPFatalError.new("(exception) bad gateway", @response)
171
+ @inspector = described_class.new(@node_name, @exception, @config)
172
+ @inspector.add_explanation(@description)
173
+ end
174
+
175
+ it "prints a nice message" do
176
+ @description.display(@outputter)
177
+ end
178
+ end
179
+
180
+ describe "when explaining an unknown error" do
181
+ before do
182
+ @exception = RuntimeError.new("(exception) something went wrong")
183
+ @inspector = described_class.new(@node_name, @exception, @config)
184
+ @inspector.add_explanation(@description)
185
+ end
186
+
187
+ it "prints a nice message" do
188
+ @description.display(@outputter)
189
+ end
190
+ end
191
+
192
+ end
@@ -0,0 +1,162 @@
1
+ #
2
+ # Author:: Seth Falcon (<seth@opscode.com>)
3
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
4
+ # Copyright:: Copyright (c) 2010, 2012 Opscode, Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+
21
+ shared_examples_for "a platform introspector" do
22
+ before(:each) do
23
+ @platform_hash = {}
24
+ %w{openbsd freebsd}.each do |x|
25
+ @platform_hash[x] = {
26
+ "default" => x,
27
+ "1.2.3" => "#{x}-1.2.3"
28
+ }
29
+ end
30
+ @platform_hash["debian"] = {["5", "6"] => "debian-5/6", "default" => "debian"}
31
+ @platform_hash["default"] = "default"
32
+
33
+ @platform_family_hash = {
34
+ "debian" => "debian value",
35
+ [:rhel, :fedora] => "redhatty value",
36
+ "suse" => "suse value",
37
+ :default => "default value"
38
+ }
39
+ end
40
+
41
+ it "returns a default value when there is no known platform" do
42
+ node = Hash.new
43
+ platform_introspector.value_for_platform(@platform_hash).should == "default"
44
+ end
45
+
46
+ it "returns a default value when there is no known platform family" do
47
+ platform_introspector.value_for_platform_family(@platform_family_hash).should == "default value"
48
+ end
49
+
50
+ it "returns a default value when the current platform doesn't match" do
51
+ node.automatic_attrs[:platform] = "not-a-known-platform"
52
+ platform_introspector.value_for_platform(@platform_hash).should == "default"
53
+ end
54
+
55
+ it "returns a default value when current platform_family doesn't match" do
56
+ node.automatic_attrs[:platform_family] = "ultra-derived-linux"
57
+ platform_introspector.value_for_platform_family(@platform_family_hash).should == "default value"
58
+ end
59
+
60
+ it "returns a value based on the current platform" do
61
+ node.automatic_attrs[:platform] = "openbsd"
62
+ platform_introspector.value_for_platform(@platform_hash).should == "openbsd"
63
+ end
64
+
65
+ it "returns a value based on the current platform family" do
66
+ node.automatic_attrs[:platform_family] = "debian"
67
+ platform_introspector.value_for_platform_family(@platform_family_hash).should == "debian value"
68
+ end
69
+
70
+ it "returns a version-specific value based on the current platform" do
71
+ node.automatic_attrs[:platform] = "openbsd"
72
+ node.automatic_attrs[:platform_version] = "1.2.3"
73
+ platform_introspector.value_for_platform(@platform_hash).should == "openbsd-1.2.3"
74
+ end
75
+
76
+ it "returns a value based on the current platform if version not found" do
77
+ node.automatic_attrs[:platform] = "openbsd"
78
+ node.automatic_attrs[:platform_version] = "0.0.0"
79
+ platform_introspector.value_for_platform(@platform_hash).should == "openbsd"
80
+ end
81
+
82
+ describe "when platform versions is an array" do
83
+ it "returns a version-specific value based on the current platform" do
84
+ node.automatic_attrs[:platform] = "debian"
85
+ node.automatic_attrs[:platform_version] = "6"
86
+ platform_introspector.value_for_platform(@platform_hash).should == "debian-5/6"
87
+ end
88
+
89
+ it "returns a value based on the current platform if version not found" do
90
+ node.automatic_attrs[:platform] = "debian"
91
+ node.automatic_attrs[:platform_version] = "0.0.0"
92
+ platform_introspector.value_for_platform(@platform_hash).should == "debian"
93
+ end
94
+ end
95
+
96
+ describe "when checking platform?" do
97
+
98
+ it "returns true if the node is a provided platform and platforms are provided as symbols" do
99
+ node.automatic_attrs[:platform] = 'ubuntu'
100
+ platform_introspector.platform?([:redhat, :ubuntu]).should == true
101
+ end
102
+
103
+ it "returns true if the node is a provided platform and platforms are provided as strings" do
104
+ node.automatic_attrs[:platform] = 'ubuntu'
105
+ platform_introspector.platform?(["redhat", "ubuntu"]).should == true
106
+ end
107
+
108
+ it "returns false if the node is not of the provided platforms" do
109
+ node.automatic_attrs[:platform] = 'ubuntu'
110
+ platform_introspector.platform?(:splatlinux).should == false
111
+ end
112
+ end
113
+
114
+ describe "when checking platform_family?" do
115
+
116
+ it "returns true if the node is in a provided platform family and families are provided as symbols" do
117
+ node.automatic_attrs[:platform_family] = 'debian'
118
+ platform_introspector.platform_family?([:rhel, :debian]).should == true
119
+ end
120
+
121
+ it "returns true if the node is a provided platform and platforms are provided as strings" do
122
+ node.automatic_attrs[:platform_family] = 'rhel'
123
+ platform_introspector.platform_family?(["rhel", "debian"]).should == true
124
+ end
125
+
126
+ it "returns false if the node is not of the provided platforms" do
127
+ node.automatic_attrs[:platform_family] = 'suse'
128
+ platform_introspector.platform_family?(:splatlinux).should == false
129
+ end
130
+
131
+ it "returns false if the node is not of the provided platforms and platform_family is not set" do
132
+ platform_introspector.platform_family?(:splatlinux).should == false
133
+ end
134
+
135
+ end
136
+ # NOTE: this is a regression test for bug CHEF-1514
137
+ describe "when the value is an array" do
138
+ before do
139
+ @platform_hash = {
140
+ "debian" => { "4.0" => [ :restart, :reload ], "default" => [ :restart, :reload, :status ] },
141
+ "ubuntu" => { "default" => [ :restart, :reload, :status ] },
142
+ "centos" => { "default" => [ :restart, :reload, :status ] },
143
+ "redhat" => { "default" => [ :restart, :reload, :status ] },
144
+ "fedora" => { "default" => [ :restart, :reload, :status ] },
145
+ "default" => { "default" => [:restart, :reload ] }}
146
+ end
147
+
148
+ it "returns the correct default for a given platform" do
149
+ node.automatic_attrs[:platform] = "debian"
150
+ node.automatic_attrs[:platform_version] = '9000'
151
+ platform_introspector.value_for_platform(@platform_hash).should == [ :restart, :reload, :status ]
152
+ end
153
+
154
+ it "returns the correct platform+version specific value " do
155
+ node.automatic_attrs[:platform] = "debian"
156
+ node.automatic_attrs[:platform_version] = '4.0'
157
+ platform_introspector.value_for_platform(@platform_hash).should == [:restart, :reload]
158
+ end
159
+ end
160
+
161
+ end
162
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-rewind
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-11 00:00:00.000000000 Z
12
+ date: 2013-09-20 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Monkey patches Chef to allow rewinding of existing resources
15
15
  email:
@@ -19,12 +19,60 @@ extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
21
  - .gitignore
22
+ - CHANGELOG
22
23
  - Gemfile
23
24
  - LICENSE
24
25
  - README.md
25
26
  - Rakefile
26
27
  - chef-rewind.gemspec
27
28
  - lib/chef/rewind.rb
29
+ - spec/data/cookbooks/angrybash/recipes/default.rb
30
+ - spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl
31
+ - spec/data/cookbooks/apache2/recipes/default.rb
32
+ - spec/data/cookbooks/borken/recipes/default.rb
33
+ - spec/data/cookbooks/borken/templates/default/borken.erb
34
+ - spec/data/cookbooks/chefignore
35
+ - spec/data/cookbooks/java/files/default/java.response
36
+ - spec/data/cookbooks/openldap/attributes/default.rb
37
+ - spec/data/cookbooks/openldap/attributes/smokey.rb
38
+ - spec/data/cookbooks/openldap/definitions/client.rb
39
+ - spec/data/cookbooks/openldap/definitions/server.rb
40
+ - spec/data/cookbooks/openldap/files/default/.dotfile
41
+ - spec/data/cookbooks/openldap/files/default/.ssh/id_rsa
42
+ - spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir
43
+ - spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt
44
+ - spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt
45
+ - spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile
46
+ - spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt
47
+ - spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt
48
+ - spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt
49
+ - spec/data/cookbooks/openldap/recipes/default.rb
50
+ - spec/data/cookbooks/openldap/recipes/gigantor.rb
51
+ - spec/data/cookbooks/openldap/recipes/one.rb
52
+ - spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb
53
+ - spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb
54
+ - spec/data/cookbooks/openldap/templates/default/test.erb
55
+ - spec/rewind_recipe_spec.rb
56
+ - spec/rewind_resource_spec.rb
57
+ - spec/spec_helper.rb
58
+ - spec/support/chef_helpers.rb
59
+ - spec/support/lib/chef/provider/easy.rb
60
+ - spec/support/lib/chef/provider/snakeoil.rb
61
+ - spec/support/lib/chef/resource/cat.rb
62
+ - spec/support/lib/chef/resource/one_two_three_four.rb
63
+ - spec/support/lib/chef/resource/zen_master.rb
64
+ - spec/support/matchers/leak.rb
65
+ - spec/support/mock/constant.rb
66
+ - spec/support/mock/platform.rb
67
+ - spec/support/platform_helpers.rb
68
+ - spec/support/platforms/prof/gc.rb
69
+ - spec/support/platforms/prof/win32.rb
70
+ - spec/support/shared/functional/directory_resource.rb
71
+ - spec/support/shared/functional/file_resource.rb
72
+ - spec/support/shared/functional/knife.rb
73
+ - spec/support/shared/functional/securable_resource.rb
74
+ - spec/support/shared/unit/api_error_inspector.rb
75
+ - spec/support/shared/unit/platform_introspector.rb
28
76
  homepage: ''
29
77
  licenses: []
30
78
  post_install_message:
@@ -45,9 +93,56 @@ required_rubygems_version: !ruby/object:Gem::Requirement
45
93
  version: '0'
46
94
  requirements: []
47
95
  rubyforge_project:
48
- rubygems_version: 1.8.23
96
+ rubygems_version: 1.8.25
49
97
  signing_key:
50
98
  specification_version: 3
51
99
  summary: Monkey patches Chef to allow rewinding of existing resources
52
- test_files: []
100
+ test_files:
101
+ - spec/data/cookbooks/angrybash/recipes/default.rb
102
+ - spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl
103
+ - spec/data/cookbooks/apache2/recipes/default.rb
104
+ - spec/data/cookbooks/borken/recipes/default.rb
105
+ - spec/data/cookbooks/borken/templates/default/borken.erb
106
+ - spec/data/cookbooks/chefignore
107
+ - spec/data/cookbooks/java/files/default/java.response
108
+ - spec/data/cookbooks/openldap/attributes/default.rb
109
+ - spec/data/cookbooks/openldap/attributes/smokey.rb
110
+ - spec/data/cookbooks/openldap/definitions/client.rb
111
+ - spec/data/cookbooks/openldap/definitions/server.rb
112
+ - spec/data/cookbooks/openldap/files/default/.dotfile
113
+ - spec/data/cookbooks/openldap/files/default/.ssh/id_rsa
114
+ - spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir
115
+ - spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt
116
+ - spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt
117
+ - spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile
118
+ - spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt
119
+ - spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt
120
+ - spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt
121
+ - spec/data/cookbooks/openldap/recipes/default.rb
122
+ - spec/data/cookbooks/openldap/recipes/gigantor.rb
123
+ - spec/data/cookbooks/openldap/recipes/one.rb
124
+ - spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb
125
+ - spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb
126
+ - spec/data/cookbooks/openldap/templates/default/test.erb
127
+ - spec/rewind_recipe_spec.rb
128
+ - spec/rewind_resource_spec.rb
129
+ - spec/spec_helper.rb
130
+ - spec/support/chef_helpers.rb
131
+ - spec/support/lib/chef/provider/easy.rb
132
+ - spec/support/lib/chef/provider/snakeoil.rb
133
+ - spec/support/lib/chef/resource/cat.rb
134
+ - spec/support/lib/chef/resource/one_two_three_four.rb
135
+ - spec/support/lib/chef/resource/zen_master.rb
136
+ - spec/support/matchers/leak.rb
137
+ - spec/support/mock/constant.rb
138
+ - spec/support/mock/platform.rb
139
+ - spec/support/platform_helpers.rb
140
+ - spec/support/platforms/prof/gc.rb
141
+ - spec/support/platforms/prof/win32.rb
142
+ - spec/support/shared/functional/directory_resource.rb
143
+ - spec/support/shared/functional/file_resource.rb
144
+ - spec/support/shared/functional/knife.rb
145
+ - spec/support/shared/functional/securable_resource.rb
146
+ - spec/support/shared/unit/api_error_inspector.rb
147
+ - spec/support/shared/unit/platform_introspector.rb
53
148
  has_rdoc: