chef 12.11.18-universal-mingw32 → 12.12.13-universal-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -4
  3. data/Rakefile +3 -2
  4. data/VERSION +1 -1
  5. data/acceptance/Gemfile.lock +22 -23
  6. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +2 -41
  7. data/lib/chef/application/solo.rb +7 -0
  8. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
  9. data/lib/chef/data_collector.rb +79 -43
  10. data/lib/chef/data_collector/messages.rb +4 -33
  11. data/lib/chef/data_collector/messages/helpers.rb +2 -2
  12. data/lib/chef/data_collector/resource_report.rb +21 -11
  13. data/lib/chef/decorator/unchain.rb +43 -0
  14. data/lib/chef/exceptions.rb +5 -0
  15. data/lib/chef/http.rb +5 -5
  16. data/lib/chef/knife/cookbook_create.rb +4 -0
  17. data/lib/chef/knife/cookbook_site_download.rb +8 -1
  18. data/lib/chef/knife/cookbook_site_install.rb +8 -0
  19. data/lib/chef/knife/cookbook_site_list.rb +8 -1
  20. data/lib/chef/knife/cookbook_site_search.rb +8 -1
  21. data/lib/chef/knife/cookbook_site_share.rb +8 -1
  22. data/lib/chef/knife/cookbook_site_show.rb +14 -3
  23. data/lib/chef/knife/cookbook_site_unshare.rb +8 -1
  24. data/lib/chef/knife/core/bootstrap_context.rb +1 -1
  25. data/lib/chef/knife/supermarket_download.rb +33 -0
  26. data/lib/chef/knife/supermarket_install.rb +33 -0
  27. data/lib/chef/knife/supermarket_list.rb +33 -0
  28. data/lib/chef/knife/supermarket_search.rb +33 -0
  29. data/lib/chef/knife/supermarket_share.rb +33 -0
  30. data/lib/chef/knife/supermarket_show.rb +33 -0
  31. data/lib/chef/knife/supermarket_unshare.rb +33 -0
  32. data/lib/chef/node.rb +13 -32
  33. data/lib/chef/node/attribute.rb +123 -70
  34. data/lib/chef/node/attribute_collections.rb +9 -130
  35. data/lib/chef/node/common_api.rb +124 -0
  36. data/lib/chef/node/immutable_collections.rb +27 -2
  37. data/lib/chef/property.rb +6 -2
  38. data/lib/chef/provider.rb +4 -5
  39. data/lib/chef/provider/batch.rb +1 -1
  40. data/lib/chef/provider/directory.rb +3 -1
  41. data/lib/chef/provider/package/openbsd.rb +1 -1
  42. data/lib/chef/provider/package/rubygems.rb +9 -3
  43. data/lib/chef/provider/package/windows/exe.rb +2 -5
  44. data/lib/chef/provider/powershell_script.rb +1 -1
  45. data/lib/chef/provider/remote_directory.rb +2 -0
  46. data/lib/chef/resource.rb +22 -17
  47. data/lib/chef/resource_builder.rb +9 -4
  48. data/lib/chef/shell.rb +1 -1
  49. data/lib/chef/version.rb +1 -1
  50. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -4
  51. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -3
  52. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  53. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  54. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -3
  55. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -3
  56. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -3
  57. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -3
  58. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -3
  59. data/spec/functional/assets/chocolatey_feed/test-A.1.0.nupkg +0 -0
  60. data/spec/functional/assets/chocolatey_feed/test-A.1.5.nupkg +0 -0
  61. data/spec/functional/assets/chocolatey_feed/test-A.2.0.nupkg +0 -0
  62. data/spec/functional/assets/chocolatey_feed/test-B.1.0.nupkg +0 -0
  63. data/spec/functional/resource/dsc_script_spec.rb +1 -0
  64. data/spec/functional/resource/package_spec.rb +1 -1
  65. data/spec/functional/resource/template_spec.rb +3 -3
  66. data/spec/functional/shell_spec.rb +1 -1
  67. data/spec/integration/knife/client_bulk_delete_spec.rb +130 -0
  68. data/spec/integration/knife/client_create_spec.rb +69 -0
  69. data/spec/integration/knife/client_delete_spec.rb +63 -0
  70. data/spec/integration/knife/client_key_create_spec.rb +65 -0
  71. data/spec/integration/knife/client_key_delete_spec.rb +42 -0
  72. data/spec/integration/knife/client_key_list_spec.rb +60 -0
  73. data/spec/integration/knife/client_key_show_spec.rb +44 -0
  74. data/spec/integration/knife/client_list_spec.rb +48 -0
  75. data/spec/integration/knife/client_show_spec.rb +36 -0
  76. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +64 -0
  77. data/spec/integration/knife/cookbook_download_spec.rb +95 -0
  78. data/spec/integration/knife/cookbook_list_spec.rb +54 -0
  79. data/spec/integration/knife/cookbook_show_spec.rb +159 -0
  80. data/spec/integration/knife/cookbook_upload_spec.rb +90 -0
  81. data/spec/integration/knife/data_bag_create_spec.rb +58 -0
  82. data/spec/integration/knife/data_bag_delete_spec.rb +58 -0
  83. data/spec/integration/knife/data_bag_from_file_spec.rb +115 -0
  84. data/spec/integration/knife/data_bag_list_spec.rb +43 -0
  85. data/spec/integration/knife/data_bag_show_spec.rb +53 -0
  86. data/spec/integration/knife/environment_compare_spec.rb +74 -0
  87. data/spec/integration/knife/environment_create_spec.rb +40 -0
  88. data/spec/integration/knife/environment_delete_spec.rb +36 -0
  89. data/spec/integration/knife/environment_from_file_spec.rb +115 -0
  90. data/spec/integration/knife/environment_list_spec.rb +41 -0
  91. data/spec/integration/knife/environment_show_spec.rb +56 -0
  92. data/spec/integration/knife/node_bulk_delete_spec.rb +51 -0
  93. data/spec/integration/knife/node_create_spec.rb +46 -0
  94. data/spec/integration/knife/node_delete_spec.rb +47 -0
  95. data/spec/integration/knife/node_environment_set_spec.rb +42 -0
  96. data/spec/integration/knife/node_from_file_spec.rb +58 -0
  97. data/spec/integration/knife/node_list_spec.rb +44 -0
  98. data/spec/integration/knife/node_run_list_add_spec.rb +53 -0
  99. data/spec/integration/knife/node_run_list_remove_spec.rb +35 -0
  100. data/spec/integration/knife/node_run_list_set_spec.rb +40 -0
  101. data/spec/integration/knife/node_show_spec.rb +35 -0
  102. data/spec/integration/knife/role_bulk_delete_spec.rb +51 -0
  103. data/spec/integration/knife/role_create_spec.rb +40 -0
  104. data/spec/integration/knife/role_delete_spec.rb +47 -0
  105. data/spec/integration/knife/role_from_file_spec.rb +95 -0
  106. data/spec/integration/knife/role_list_spec.rb +44 -0
  107. data/spec/integration/knife/role_show_spec.rb +50 -0
  108. data/spec/support/shared/integration/knife_support.rb +10 -3
  109. data/spec/unit/application/solo_spec.rb +7 -0
  110. data/spec/unit/cookbook_version_spec.rb +4 -4
  111. data/spec/unit/data_collector/messages/helpers_spec.rb +3 -7
  112. data/spec/unit/data_collector/messages_spec.rb +28 -45
  113. data/spec/unit/data_collector_spec.rb +40 -47
  114. data/spec/unit/knife/cookbook_create_spec.rb +1 -0
  115. data/spec/unit/knife/cookbook_site_download_spec.rb +1 -0
  116. data/spec/unit/knife/node_environment_set_spec.rb +0 -24
  117. data/spec/unit/knife/node_run_list_set_spec.rb +0 -25
  118. data/spec/unit/node/attribute_spec.rb +7 -9
  119. data/spec/unit/node/immutable_collections_spec.rb +4 -0
  120. data/spec/unit/node/vivid_mash_spec.rb +344 -0
  121. data/spec/unit/node_spec.rb +115 -26
  122. data/spec/unit/provider/directory_spec.rb +11 -1
  123. data/spec/unit/provider/package/windows/exe_spec.rb +14 -9
  124. data/spec/unit/provider/powershell_script_spec.rb +4 -4
  125. data/spec/unit/provider/remote_directory_spec.rb +15 -0
  126. data/spec/unit/recipe_spec.rb +31 -6
  127. data/spec/unit/run_context_spec.rb +2 -2
  128. data/spec/unit/shell/shell_session_spec.rb +1 -1
  129. data/tasks/dependencies.rb +0 -2
  130. metadata +55 -786
  131. data/acceptance/.bundle/config +0 -2
  132. data/acceptance/basics/.kitchen/logs/chef-current-install-ubuntu-1404.log +0 -2
  133. data/acceptance/basics/.kitchen/logs/kitchen.log +0 -3
  134. data/acceptance/fips/.kitchen/logs/fips-integration-centos-6.log +0 -3
  135. data/acceptance/fips/.kitchen/logs/fips-integration-windows-2012r2.log +0 -3
  136. data/acceptance/fips/.kitchen/logs/fips-unit-functional-centos-6.log +0 -3
  137. data/acceptance/fips/.kitchen/logs/fips-unit-functional-windows-2012r2.log +0 -3
  138. data/acceptance/fips/.kitchen/logs/kitchen.log +0 -6
  139. data/acceptance/trivial/.kitchen/logs/chef-current-install-windows-2012r2.log +0 -2
  140. data/acceptance/trivial/.kitchen/logs/kitchen.log +0 -3
  141. data/acceptance/windows-service/.kitchen/logs/chef-windows-service-windows-2012r2.log +0 -2
  142. data/acceptance/windows-service/.kitchen/logs/kitchen.log +0 -3
@@ -0,0 +1,51 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+
20
+ describe "knife role bulk delete", :workstation do
21
+ include IntegrationSupport
22
+ include KnifeSupport
23
+
24
+ include_context "default config options"
25
+
26
+ when_the_chef_server "has some roles" do
27
+ before do
28
+ role "cons", {}
29
+ role "car", {}
30
+ role "cdr", {}
31
+ role "cat", {}
32
+ end
33
+
34
+ it "deletes all matching roles" do
35
+ knife("role bulk delete ^ca.*", input: "Y").should_succeed <<EOM
36
+ The following roles will be deleted:
37
+
38
+ car cat
39
+
40
+ Are you sure you want to delete these roles? (Y/N) Deleted role car
41
+ Deleted role cat
42
+ EOM
43
+
44
+ knife("role list").should_succeed <<EOM
45
+ cdr
46
+ cons
47
+ EOM
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,40 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+
20
+ describe "knife role create", :workstation do
21
+ include IntegrationSupport
22
+ include KnifeSupport
23
+
24
+ include_context "default config options"
25
+
26
+ let(:out) { "Created role[bah]\n" }
27
+
28
+ when_the_chef_server "is empty" do
29
+ it "creates a new role" do
30
+ knife("role create bah").should_succeed out
31
+ end
32
+
33
+ it "refuses to add an existing role" do
34
+ pending "Knife role create must not blindly overwrite an existing role"
35
+ knife("role create bah").should_succeed out
36
+ expect { knife("role create bah") }.to raise_error(Net::HTTPServerException)
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,47 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+
20
+ describe "knife role delete", :workstation do
21
+ include IntegrationSupport
22
+ include KnifeSupport
23
+
24
+ include_context "default config options"
25
+
26
+ when_the_chef_server "has some roles" do
27
+ before do
28
+ role "cons", {}
29
+ role "car", {}
30
+ role "cdr", {}
31
+ role "cat", {}
32
+ end
33
+
34
+ it "deletes a role" do
35
+ knife("role delete car", input: "Y").should_succeed <<EOM
36
+ Do you really want to delete car? (Y/N) Deleted role[car]
37
+ EOM
38
+
39
+ knife("role list").should_succeed <<EOM
40
+ cat
41
+ cdr
42
+ cons
43
+ EOM
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,95 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+
20
+ describe "knife role from file", :workstation do
21
+ include IntegrationSupport
22
+ include KnifeSupport
23
+
24
+ # include_context "default config options"
25
+
26
+ let (:role_dir) { "#{@repository_dir}/roles" }
27
+
28
+ when_the_chef_server "is empty" do
29
+ when_the_repository "has some roles" do
30
+ before do
31
+
32
+ file "roles/cons.json", <<EOM
33
+ {
34
+ "name": "cons",
35
+ "description": "An role",
36
+ "json_class": "Chef::role",
37
+ "chef_type": "role",
38
+ "default_attributes": {
39
+ "hola": "Amigos!"
40
+ },
41
+ "override_attributes": {
42
+
43
+ }
44
+ }
45
+ EOM
46
+
47
+ file "roles/car.json", <<EOM
48
+ {
49
+ "name": "car",
50
+ "description": "A role for list nodes",
51
+ "json_class": "Chef::Role",
52
+ "chef_type": "role",
53
+ "default_attributes": {
54
+ "hola": "Amigos!"
55
+ },
56
+ "override_attributes": {
57
+
58
+ }
59
+ }
60
+ EOM
61
+
62
+ file "roles/cdr.json", <<EOM
63
+ {
64
+ "name": "cdr",
65
+ "description": "A role for last nodes",
66
+ "json_class": "Chef::Role",
67
+ "chef_type": "role",
68
+ "default_attributes": {
69
+ "hola": "Amigos!"
70
+ },
71
+ "override_attributes": {
72
+
73
+ }
74
+ }
75
+ EOM
76
+
77
+ end
78
+
79
+ it "uploads a single file" do
80
+ knife("role from file #{role_dir}/cons.json").should_succeed stderr: <<EOM
81
+ Updated Role cons
82
+ EOM
83
+ end
84
+
85
+ it "uploads many files" do
86
+ knife("role from file #{role_dir}/cons.json #{role_dir}/car.json #{role_dir}/cdr.json").should_succeed stderr: <<EOM
87
+ Updated Role cons
88
+ Updated Role car
89
+ Updated Role cdr
90
+ EOM
91
+ end
92
+
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,44 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+
20
+ describe "knife role list", :workstation do
21
+ include IntegrationSupport
22
+ include KnifeSupport
23
+
24
+ include_context "default config options"
25
+
26
+ when_the_chef_server "has some roles" do
27
+ before do
28
+ role "cons", {}
29
+ role "car", {}
30
+ role "cdr", {}
31
+ role "cat", {}
32
+ end
33
+
34
+ it "lists all cookbooks" do
35
+ knife("role list").should_succeed <<EOM
36
+ car
37
+ cat
38
+ cdr
39
+ cons
40
+ EOM
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,50 @@
1
+ #
2
+ # Copyright:: Copyright 2013-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "support/shared/integration/integration_helper"
18
+ require "support/shared/context/config"
19
+
20
+ describe "knife role show", :workstation do
21
+ include IntegrationSupport
22
+ include KnifeSupport
23
+
24
+ include_context "default config options"
25
+
26
+ when_the_chef_server "has some roles" do
27
+ before do
28
+ role "cons", {}
29
+ role "car", {}
30
+ role "cdr", {}
31
+ role "cat", {}
32
+ end
33
+
34
+ # rubocop:disable Style/TrailingWhitespace
35
+ it "shows a cookbook" do
36
+ knife("role show cons").should_succeed <<EOM
37
+ chef_type: role
38
+ default_attributes:
39
+ description:
40
+ env_run_lists:
41
+ json_class: Chef::Role
42
+ name: cons
43
+ override_attributes:
44
+ run_list:
45
+ EOM
46
+ end
47
+ # rubocop:enable Style/TrailingWhitespace
48
+
49
+ end
50
+ end
@@ -23,7 +23,7 @@ require "chef/log"
23
23
 
24
24
  module KnifeSupport
25
25
  DEBUG = ENV["DEBUG"]
26
- def knife(*args)
26
+ def knife(*args, input: nil)
27
27
  # Allow knife('role from file roles/blah.json') rather than requiring the
28
28
  # arguments to be split like knife('role', 'from', 'file', 'roles/blah.json')
29
29
  # If any argument will have actual spaces in it, the long form is required.
@@ -37,7 +37,7 @@ module KnifeSupport
37
37
  Chef::Config[:concurrency] = 1
38
38
 
39
39
  # Work on machines where we can't access /var
40
- checksums_cache_dir = Dir.mktmpdir("checksums") do |checksums_cache_dir|
40
+ Dir.mktmpdir("checksums") do |checksums_cache_dir|
41
41
  Chef::Config[:cache_options] = {
42
42
  :path => checksums_cache_dir,
43
43
  :skip_expires => true,
@@ -47,6 +47,13 @@ module KnifeSupport
47
47
  # ourselves, thank you very much
48
48
  stdout = StringIO.new
49
49
  stderr = StringIO.new
50
+
51
+ stdin = if input
52
+ StringIO.new(input)
53
+ else
54
+ STDIN
55
+ end
56
+
50
57
  old_loggers = Chef::Log.loggers
51
58
  old_log_level = Chef::Log.level
52
59
  begin
@@ -57,7 +64,7 @@ module KnifeSupport
57
64
  instance = subcommand_class.new(args)
58
65
 
59
66
  # Capture stdout/stderr
60
- instance.ui = Chef::Knife::UI.new(stdout, stderr, STDIN, {})
67
+ instance.ui = Chef::Knife::UI.new(stdout, stderr, stdin, disable_editing: true)
61
68
 
62
69
  # Don't print stuff
63
70
  Chef::Config[:verbosity] = ( DEBUG ? 2 : 0 )
@@ -212,6 +212,13 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
212
212
  end
213
213
  end
214
214
 
215
+ it "sets the repo path" do
216
+ expect(Chef::Config).to receive(:find_chef_repo_path).and_return("/var/chef")
217
+ app.reconfigure
218
+ expect(Chef::Config.has_key?(:chef_repo_path)).to be_truthy
219
+ expect(Chef::Config[:chef_repo_path]).to eq ("/var/chef")
220
+ end
221
+
215
222
  it "runs chef-client in local mode" do
216
223
  allow(app).to receive(:setup_application).and_return(true)
217
224
  allow(app).to receive(:run_application).and_return(true)
@@ -120,8 +120,8 @@ describe Chef::CookbookVersion do
120
120
  # Used to test file-specificity related file lookups
121
121
  let(:node) do
122
122
  Chef::Node.new.tap do |n|
123
- n.set[:platform] = "ubuntu"
124
- n.set[:platform_version] = "13.04"
123
+ n.normal[:platform] = "ubuntu"
124
+ n.normal[:platform_version] = "13.04"
125
125
  n.name("testing")
126
126
  end
127
127
  end
@@ -203,8 +203,8 @@ describe Chef::CookbookVersion do
203
203
  # Used to test file-specificity related file lookups
204
204
  let(:node) do
205
205
  Chef::Node.new.tap do |n|
206
- n.set[:platform] = "ubuntu"
207
- n.set[:platform_version] = "13.04"
206
+ n.normal[:platform] = "ubuntu"
207
+ n.normal[:platform_version] = "13.04"
208
208
  n.name("testing")
209
209
  end
210
210
  end
@@ -171,20 +171,16 @@ describe Chef::DataCollector::Messages::Helpers do
171
171
  end
172
172
 
173
173
  describe '#update_metadata' do
174
- let(:metadata) { double("metadata") }
175
-
176
174
  it "updates the file" do
177
175
  allow(TestMessage).to receive(:metadata_filename).and_return("fake_metadata_file.json")
178
- allow(TestMessage).to receive(:metadata).and_return(metadata)
179
- expect(metadata).to receive(:[]=).with("new_key", "new_value")
180
- expect(metadata).to receive(:to_json).and_return("metadata_json")
176
+ allow(TestMessage).to receive(:metadata).and_return({ "key" => "current_value" })
181
177
  expect(Chef::FileCache).to receive(:store).with(
182
178
  "fake_metadata_file.json",
183
- "metadata_json",
179
+ '{"key":"updated_value"}',
184
180
  0644
185
181
  )
186
182
 
187
- TestMessage.update_metadata("new_key", "new_value")
183
+ TestMessage.update_metadata("key", "updated_value")
188
184
  end
189
185
  end
190
186
  end
@@ -18,6 +18,7 @@
18
18
  #
19
19
 
20
20
  require "spec_helper"
21
+ require "ffi_yajl"
21
22
  require "chef/data_collector/messages/helpers"
22
23
 
23
24
  describe Chef::DataCollector::Messages do
@@ -61,12 +62,14 @@ describe Chef::DataCollector::Messages do
61
62
  end
62
63
 
63
64
  describe '#run_end_message' do
64
- let(:run_status) { Chef::RunStatus.new(Chef::Node.new, Chef::EventDispatch::Dispatcher.new) }
65
- let(:resource) { double("resource", for_json: "resource_data") }
65
+ let(:node) { Chef::Node.new }
66
+ let(:run_status) { Chef::RunStatus.new(node, Chef::EventDispatch::Dispatcher.new) }
67
+ let(:report1) { double("report1", report_data: { "status" => "updated" }) }
68
+ let(:report2) { double("report2", report_data: { "status" => "skipped" }) }
66
69
  let(:reporter_data) do
67
70
  {
68
71
  run_status: run_status,
69
- updated_resources: [resource],
72
+ resources: [report1, report2],
70
73
  }
71
74
  end
72
75
 
@@ -75,6 +78,20 @@ describe Chef::DataCollector::Messages do
75
78
  allow(run_status).to receive(:end_time).and_return(Time.now)
76
79
  end
77
80
 
81
+ it "includes a valid node object in the payload" do
82
+ message = Chef::DataCollector::Messages.run_end_message(reporter_data)
83
+ expect(message["node"]).to be_an_instance_of(Chef::Node)
84
+ end
85
+
86
+ it "returns a sane JSON representation of the node object" do
87
+ node.chef_environment = "my_test_environment"
88
+ node.run_list.add("recipe[my_test_cookbook::default]")
89
+ message = FFI_Yajl::Parser.parse(Chef::DataCollector::Messages.run_end_message(reporter_data).to_json)
90
+
91
+ expect(message["node"]["chef_environment"]).to eq("my_test_environment")
92
+ expect(message["node"]["run_list"]).to eq(["recipe[my_test_cookbook::default]"])
93
+ end
94
+
78
95
  context "when the run was successful" do
79
96
  let(:required_fields) do
80
97
  %w{
@@ -85,6 +102,7 @@ describe Chef::DataCollector::Messages do
85
102
  expanded_run_list
86
103
  message_type
87
104
  message_version
105
+ node
88
106
  node_name
89
107
  organization_name
90
108
  resources
@@ -116,6 +134,12 @@ describe Chef::DataCollector::Messages do
116
134
  end
117
135
  expect(extra_fields).to eq([])
118
136
  end
137
+
138
+ it "only includes updated resources in its count" do
139
+ message = Chef::DataCollector::Messages.run_end_message(reporter_data)
140
+ expect(message["total_resource_count"]).to eq(2)
141
+ expect(message["updated_resource_count"]).to eq(1)
142
+ end
119
143
  end
120
144
 
121
145
  context "when the run was not successful" do
@@ -129,6 +153,7 @@ describe Chef::DataCollector::Messages do
129
153
  expanded_run_list
130
154
  message_type
131
155
  message_version
156
+ node
132
157
  node_name
133
158
  organization_name
134
159
  resources
@@ -162,46 +187,4 @@ describe Chef::DataCollector::Messages do
162
187
  end
163
188
  end
164
189
  end
165
-
166
- describe '#node_update_message' do
167
- let(:run_status) { Chef::RunStatus.new(Chef::Node.new, Chef::EventDispatch::Dispatcher.new) }
168
-
169
- let(:required_fields) do
170
- %w{
171
- entity_name
172
- entity_type
173
- entity_uuid
174
- id
175
- message_type
176
- message_version
177
- organization_name
178
- recorded_at
179
- remote_hostname
180
- requestor_name
181
- requestor_type
182
- run_id
183
- service_hostname
184
- source
185
- task
186
- user_agent
187
- }
188
- end
189
- let(:optional_fields) { %w{data} }
190
-
191
- it "is not missing any required fields" do
192
- missing_fields = required_fields.select do |key|
193
- !Chef::DataCollector::Messages.node_update_message(run_status).key?(key)
194
- end
195
-
196
- expect(missing_fields).to eq([])
197
- end
198
-
199
- it "does not have any extra fields" do
200
- extra_fields = Chef::DataCollector::Messages.node_update_message(run_status).keys.select do |key|
201
- !required_fields.include?(key) && !optional_fields.include?(key)
202
- end
203
-
204
- expect(extra_fields).to eq([])
205
- end
206
- end
207
190
  end