chef 12.0.0.alpha.1-x86-mingw32 → 12.0.0.alpha.2-x86-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 (180) hide show
  1. checksums.yaml +4 -4
  2. data/lib/chef/application.rb +8 -1
  3. data/lib/chef/application/apply.rb +4 -0
  4. data/lib/chef/application/client.rb +7 -7
  5. data/lib/chef/application/solo.rb +21 -13
  6. data/lib/chef/chef_fs/chef_fs_data_store.rb +60 -6
  7. data/lib/chef/chef_fs/config.rb +78 -4
  8. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +2 -2
  9. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
  10. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  11. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  12. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  13. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +76 -2
  14. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  15. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
  16. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
  17. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +30 -0
  18. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -0
  19. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -0
  20. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  21. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +2 -1
  22. data/lib/chef/chef_fs/file_system.rb +0 -1
  23. data/lib/chef/chef_fs/file_system/acl_entry.rb +1 -1
  24. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +1 -1
  25. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +5 -1
  26. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +73 -13
  27. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +44 -5
  28. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +1 -1
  29. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +3 -3
  30. data/lib/chef/chef_fs/file_system/org_entry.rb +34 -0
  31. data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +58 -0
  32. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +57 -0
  33. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +13 -4
  34. data/lib/chef/chef_fs/knife.rb +1 -1
  35. data/lib/chef/client.rb +8 -2
  36. data/lib/chef/config.rb +75 -57
  37. data/lib/chef/config_fetcher.rb +6 -21
  38. data/lib/chef/dsl/data_query.rb +48 -3
  39. data/lib/chef/dsl/platform_introspection.rb +42 -0
  40. data/lib/chef/dsl/reboot_pending.rb +6 -3
  41. data/lib/chef/encrypted_data_bag_item.rb +1 -1
  42. data/lib/chef/encrypted_data_bag_item/encryptor.rb +12 -0
  43. data/lib/chef/exceptions.rb +2 -0
  44. data/lib/chef/http/basic_client.rb +14 -0
  45. data/lib/chef/http/json_output.rb +7 -2
  46. data/lib/chef/knife.rb +36 -121
  47. data/lib/chef/knife/bootstrap.rb +68 -54
  48. data/lib/chef/knife/bootstrap/archlinux-gems.erb +6 -1
  49. data/lib/chef/knife/bootstrap/chef-aix.erb +5 -0
  50. data/lib/chef/knife/bootstrap/chef-full.erb +5 -1
  51. data/lib/chef/knife/core/bootstrap_context.rb +70 -29
  52. data/lib/chef/knife/search.rb +56 -12
  53. data/lib/chef/knife/serve.rb +1 -1
  54. data/lib/chef/local_mode.rb +10 -4
  55. data/lib/chef/mixin/deep_merge.rb +6 -3
  56. data/lib/chef/mixin/shell_out.rb +33 -17
  57. data/lib/chef/null_logger.rb +72 -0
  58. data/lib/chef/platform.rb +2 -1
  59. data/lib/chef/platform/provider_mapping.rb +1 -1
  60. data/lib/chef/platform/rebooter.rb +54 -0
  61. data/lib/chef/provider/ifconfig.rb +15 -16
  62. data/lib/chef/provider/link.rb +1 -1
  63. data/lib/chef/provider/mount/mount.rb +1 -1
  64. data/lib/chef/provider/mount/solaris.rb +102 -64
  65. data/lib/chef/provider/package/aix.rb +4 -12
  66. data/lib/chef/provider/package/ips.rb +8 -12
  67. data/lib/chef/provider/package/macports.rb +4 -12
  68. data/lib/chef/provider/package/pacman.rb +2 -6
  69. data/lib/chef/provider/package/portage.rb +2 -6
  70. data/lib/chef/provider/package/rpm.rb +4 -12
  71. data/lib/chef/provider/package/solaris.rb +4 -12
  72. data/lib/chef/provider/reboot.rb +69 -0
  73. data/lib/chef/provider/service/debian.rb +10 -10
  74. data/lib/chef/provider/service/freebsd.rb +89 -73
  75. data/lib/chef/provider/service/gentoo.rb +2 -2
  76. data/lib/chef/provider/service/init.rb +6 -4
  77. data/lib/chef/provider/service/insserv.rb +3 -3
  78. data/lib/chef/provider/service/macosx.rb +2 -2
  79. data/lib/chef/provider/service/simple.rb +6 -4
  80. data/lib/chef/provider/service/solaris.rb +1 -1
  81. data/lib/chef/provider/service/systemd.rb +9 -9
  82. data/lib/chef/provider/service/upstart.rb +6 -6
  83. data/lib/chef/provider/subversion.rb +6 -6
  84. data/lib/chef/provider/user/dscl.rb +32 -28
  85. data/lib/chef/provider/user/windows.rb +6 -6
  86. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  87. data/lib/chef/providers.rb +1 -0
  88. data/lib/chef/recipe.rb +0 -1
  89. data/lib/chef/resource.rb +3 -5
  90. data/lib/chef/resource/mount.rb +9 -0
  91. data/lib/chef/resource/reboot.rb +48 -0
  92. data/lib/chef/resources.rb +1 -0
  93. data/lib/chef/run_context.rb +25 -0
  94. data/lib/chef/search/query.rb +122 -14
  95. data/lib/chef/util/path_helper.rb +54 -6
  96. data/lib/chef/util/windows/net_user.rb +4 -1
  97. data/lib/chef/version.rb +1 -1
  98. data/lib/chef/win32/api/file.rb +1 -5
  99. data/lib/chef/win32/api/net.rb +1 -0
  100. data/lib/chef/workstation_config_loader.rb +177 -0
  101. data/spec/functional/http/simple_spec.rb +57 -1
  102. data/spec/functional/mixin/shell_out_spec.rb +2 -2
  103. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -0
  104. data/spec/functional/rebooter_spec.rb +105 -0
  105. data/spec/functional/resource/deploy_revision_spec.rb +0 -4
  106. data/spec/functional/resource/file_spec.rb +26 -3
  107. data/spec/functional/resource/group_spec.rb +5 -3
  108. data/spec/functional/resource/link_spec.rb +16 -16
  109. data/spec/functional/resource/reboot_spec.rb +103 -0
  110. data/spec/integration/client/client_spec.rb +4 -8
  111. data/spec/integration/client/ipv6_spec.rb +1 -1
  112. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +3 -2
  113. data/spec/integration/knife/delete_spec.rb +39 -0
  114. data/spec/integration/knife/deps_spec.rb +30 -20
  115. data/spec/integration/knife/download_spec.rb +77 -1
  116. data/spec/integration/knife/list_spec.rb +221 -0
  117. data/spec/integration/knife/raw_spec.rb +1 -1
  118. data/spec/integration/knife/show_spec.rb +2 -2
  119. data/spec/integration/knife/upload_spec.rb +154 -1
  120. data/spec/support/pedant/run_pedant.rb +0 -1
  121. data/spec/support/shared/functional/http.rb +8 -1
  122. data/spec/support/shared/integration/integration_helper.rb +11 -19
  123. data/spec/support/shared/unit/platform_introspector.rb +22 -0
  124. data/spec/unit/application/apply.rb +11 -1
  125. data/spec/unit/application/solo_spec.rb +19 -3
  126. data/spec/unit/chef_fs/config_spec.rb +58 -0
  127. data/spec/unit/config_fetcher_spec.rb +1 -3
  128. data/spec/unit/config_spec.rb +247 -220
  129. data/spec/unit/dsl/data_query_spec.rb +165 -23
  130. data/spec/unit/dsl/reboot_pending_spec.rb +1 -7
  131. data/spec/unit/encrypted_data_bag_item_spec.rb +1 -1
  132. data/spec/unit/knife/bootstrap_spec.rb +354 -182
  133. data/spec/unit/knife/core/bootstrap_context_spec.rb +67 -30
  134. data/spec/unit/knife_spec.rb +3 -30
  135. data/spec/unit/mixin/deep_merge_spec.rb +14 -0
  136. data/spec/unit/mixin/shell_out_spec.rb +134 -64
  137. data/spec/unit/provider/ifconfig/debian_spec.rb +19 -9
  138. data/spec/unit/provider/ifconfig/redhat_spec.rb +16 -14
  139. data/spec/unit/provider/ifconfig_spec.rb +3 -3
  140. data/spec/unit/provider/link_spec.rb +5 -5
  141. data/spec/unit/provider/mount/mount_spec.rb +10 -1
  142. data/spec/unit/provider/mount/solaris_spec.rb +185 -11
  143. data/spec/unit/provider/package/aix_spec.rb +5 -17
  144. data/spec/unit/provider/package/ips_spec.rb +8 -21
  145. data/spec/unit/provider/package/macports_spec.rb +12 -12
  146. data/spec/unit/provider/package/pacman_spec.rb +4 -12
  147. data/spec/unit/provider/package/portage_spec.rb +5 -15
  148. data/spec/unit/provider/package/rpm_spec.rb +7 -22
  149. data/spec/unit/provider/package/solaris_spec.rb +5 -16
  150. data/spec/unit/provider/service/arch_service_spec.rb +8 -14
  151. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  152. data/spec/unit/provider/service/freebsd_service_spec.rb +457 -225
  153. data/spec/unit/provider/service/gentoo_service_spec.rb +2 -2
  154. data/spec/unit/provider/service/init_service_spec.rb +10 -10
  155. data/spec/unit/provider/service/insserv_service_spec.rb +3 -4
  156. data/spec/unit/provider/service/invokercd_service_spec.rb +8 -9
  157. data/spec/unit/provider/service/macosx_spec.rb +5 -5
  158. data/spec/unit/provider/service/simple_service_spec.rb +4 -6
  159. data/spec/unit/provider/service/solaris_smf_service_spec.rb +1 -3
  160. data/spec/unit/provider/service/systemd_service_spec.rb +20 -20
  161. data/spec/unit/provider/service/upstart_service_spec.rb +15 -17
  162. data/spec/unit/provider/subversion_spec.rb +5 -6
  163. data/spec/unit/provider/user/dscl_spec.rb +2 -1
  164. data/spec/unit/provider/user/windows_spec.rb +7 -0
  165. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  166. data/spec/unit/resource/mount_spec.rb +9 -0
  167. data/spec/unit/resource_spec.rb +0 -4
  168. data/spec/unit/rest_spec.rb +1 -1
  169. data/spec/unit/run_context_spec.rb +15 -0
  170. data/spec/unit/search/query_spec.rb +196 -40
  171. data/spec/unit/util/path_helper_spec.rb +111 -28
  172. data/spec/unit/workstation_config_loader_spec.rb +283 -0
  173. metadata +36 -20
  174. data/lib/chef/knife/bootstrap/centos5-gems.erb +0 -62
  175. data/lib/chef/knife/bootstrap/fedora13-gems.erb +0 -44
  176. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +0 -53
  177. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +0 -48
  178. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +0 -46
  179. data/spec/support/shared/integration/chef_zero_support.rb +0 -130
  180. data/spec/unit/knife/config_file_selection_spec.rb +0 -135
@@ -17,6 +17,7 @@
17
17
  #
18
18
 
19
19
  require 'chef/util/windows'
20
+ require 'chef/exceptions'
20
21
 
21
22
  #wrapper around a subset of the NetUser* APIs.
22
23
  #nothing Chef specific, but not complete enough to be its own gem, so util for now.
@@ -137,7 +138,9 @@ class Chef::Util::Windows::NetUser < Chef::Util::Windows
137
138
  ptr = 0.chr * PTR_SIZE
138
139
  rc = NetUserGetInfo.call(nil, @name, 3, ptr)
139
140
 
140
- if rc != NERR_Success
141
+ if rc == NERR_UserNotFound
142
+ raise Chef::Exceptions::UserIDNotFound, get_last_error(rc)
143
+ elsif rc != NERR_Success
141
144
  raise ArgumentError, get_last_error(rc)
142
145
  end
143
146
 
data/lib/chef/version.rb CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  class Chef
19
19
  CHEF_ROOT = File.dirname(File.expand_path(File.dirname(__FILE__)))
20
- VERSION = '12.0.0.alpha.1'
20
+ VERSION = '12.0.0.alpha.2'
21
21
  end
22
22
 
23
23
  #
@@ -459,11 +459,7 @@ BOOL WINAPI DeviceIoControl(
459
459
  # to be passed to the *W vesion of WinAPI File
460
460
  # functions
461
461
  def encode_path(path)
462
- (path_prepender << path.gsub(::File::SEPARATOR, ::File::ALT_SEPARATOR)).to_wstring
463
- end
464
-
465
- def path_prepender
466
- "\\\\?\\"
462
+ Chef::Util::PathHelper.canonical_path(path).to_wstring
467
463
  end
468
464
 
469
465
  # retrieves a file search handle and passes it
@@ -33,6 +33,7 @@ class Chef
33
33
  MAX_PREFERRED_LENGTH = 0xFFFF
34
34
 
35
35
  NERR_Success = 0
36
+ NERR_UserNotFound = 2221
36
37
 
37
38
  ffi_lib "netapi32"
38
39
 
@@ -0,0 +1,177 @@
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@getchef.com>)
3
+ # Copyright:: Copyright (c) 2014 Chef Software, 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
+ require 'chef/config_fetcher'
20
+ require 'chef/config'
21
+ require 'chef/null_logger'
22
+
23
+ class Chef
24
+
25
+ class WorkstationConfigLoader
26
+
27
+ # Path to a config file requested by user, (e.g., via command line option). Can be nil
28
+ attr_reader :explicit_config_file
29
+
30
+ # TODO: initialize this with a logger for Chef and Knife
31
+ def initialize(explicit_config_file, logger=nil)
32
+ @explicit_config_file = explicit_config_file
33
+ @config_location = nil
34
+ @logger = logger || NullLogger.new
35
+ end
36
+
37
+ def no_config_found?
38
+ config_location.nil?
39
+ end
40
+
41
+ def config_location
42
+ @config_location ||= (explicit_config_file || locate_local_config)
43
+ end
44
+
45
+ def chef_config_dir
46
+ if @chef_config_dir.nil?
47
+ @chef_config_dir = false
48
+ full_path = working_directory.split(File::SEPARATOR)
49
+ (full_path.length - 1).downto(0) do |i|
50
+ candidate_directory = File.join(full_path[0..i] + [".chef" ])
51
+ if File.exist?(candidate_directory) && File.directory?(candidate_directory)
52
+ @chef_config_dir = candidate_directory
53
+ break
54
+ end
55
+ end
56
+ end
57
+ @chef_config_dir
58
+ end
59
+
60
+ def load
61
+ # Ignore it if there's no explicit_config_file and can't find one at a
62
+ # default path.
63
+ return false if config_location.nil?
64
+
65
+ if explicit_config_file && !path_exists?(config_location)
66
+ raise Exceptions::ConfigurationError, "Specified config file #{config_location} does not exist"
67
+ end
68
+
69
+ # Have to set Chef::Config.config_file b/c other config is derived from it.
70
+ Chef::Config.config_file = config_location
71
+ read_config(IO.read(config_location), config_location)
72
+ end
73
+
74
+ # (Private API, public for test purposes)
75
+ def env
76
+ ENV
77
+ end
78
+
79
+ # (Private API, public for test purposes)
80
+ def path_exists?(path)
81
+ Pathname.new(path).expand_path.exist?
82
+ end
83
+
84
+ private
85
+
86
+ def have_config?(path)
87
+ if path_exists?(path)
88
+ logger.info("Using config at #{path}")
89
+ true
90
+ else
91
+ logger.debug("Config not found at #{path}, trying next option")
92
+ false
93
+ end
94
+ end
95
+
96
+ def locate_local_config
97
+ candidate_configs = []
98
+
99
+ # Look for $KNIFE_HOME/knife.rb (allow multiple knives config on same machine)
100
+ if env['KNIFE_HOME']
101
+ candidate_configs << File.join(env['KNIFE_HOME'], 'config.rb')
102
+ candidate_configs << File.join(env['KNIFE_HOME'], 'knife.rb')
103
+ end
104
+ # Look for $PWD/knife.rb
105
+ if Dir.pwd
106
+ candidate_configs << File.join(Dir.pwd, 'config.rb')
107
+ candidate_configs << File.join(Dir.pwd, 'knife.rb')
108
+ end
109
+ # Look for $UPWARD/.chef/knife.rb
110
+ if chef_config_dir
111
+ candidate_configs << File.join(chef_config_dir, 'config.rb')
112
+ candidate_configs << File.join(chef_config_dir, 'knife.rb')
113
+ end
114
+ # Look for $HOME/.chef/knife.rb
115
+ if env['HOME']
116
+ candidate_configs << File.join(env['HOME'], '.chef', 'config.rb')
117
+ candidate_configs << File.join(env['HOME'], '.chef', 'knife.rb')
118
+ end
119
+
120
+ candidate_configs.find do | candidate_config |
121
+ have_config?(candidate_config)
122
+ end
123
+ end
124
+
125
+ def working_directory
126
+ a = if Chef::Platform.windows?
127
+ env['CD']
128
+ else
129
+ env['PWD']
130
+ end || Dir.pwd
131
+
132
+ a
133
+ end
134
+
135
+ def read_config(config_content, config_file_path)
136
+ Chef::Config.from_string(config_content, config_file_path)
137
+ rescue SignalException
138
+ raise
139
+ rescue SyntaxError => e
140
+ message = ""
141
+ message << "You have invalid ruby syntax in your config file #{config_file_path}\n\n"
142
+ message << "#{e.class.name}: #{e.message}\n"
143
+ if file_line = e.message[/#{Regexp.escape(config_file_path)}:[\d]+/]
144
+ line = file_line[/:([\d]+)$/, 1].to_i
145
+ message << highlight_config_error(config_file_path, line)
146
+ end
147
+ raise Exceptions::ConfigurationError, message
148
+ rescue Exception => e
149
+ message = "You have an error in your config file #{config_file_path}\n\n"
150
+ message << "#{e.class.name}: #{e.message}\n"
151
+ filtered_trace = e.backtrace.grep(/#{Regexp.escape(config_file_path)}/)
152
+ filtered_trace.each {|bt_line| message << " " << bt_line << "\n" }
153
+ if !filtered_trace.empty?
154
+ line_nr = filtered_trace.first[/#{Regexp.escape(config_file_path)}:([\d]+)/, 1]
155
+ message << highlight_config_error(config_file_path, line_nr.to_i)
156
+ end
157
+ raise Exceptions::ConfigurationError, message
158
+ end
159
+
160
+
161
+ def highlight_config_error(file, line)
162
+ config_file_lines = []
163
+ IO.readlines(file).each_with_index {|l, i| config_file_lines << "#{(i + 1).to_s.rjust(3)}: #{l.chomp}"}
164
+ if line == 1
165
+ lines = config_file_lines[0..3]
166
+ else
167
+ lines = config_file_lines[Range.new(line - 2, line)]
168
+ end
169
+ "Relevant file content:\n" + lines.join("\n") + "\n"
170
+ end
171
+
172
+ def logger
173
+ @logger
174
+ end
175
+
176
+ end
177
+ end
@@ -80,5 +80,61 @@ describe Chef::HTTP::Simple do
80
80
  end
81
81
 
82
82
  it_behaves_like "downloading all the things"
83
- end
84
83
 
84
+ context "when Chef::Log.level = :debug" do
85
+ before do
86
+ Chef::Log.level = :debug
87
+ @debug_log = ''
88
+ Chef::Log.stub(:debug) { |str| @debug_log << str }
89
+ end
90
+
91
+ let(:source) { 'http://localhost:9000' }
92
+
93
+ it "Logs the request and response for 200's but not the body" do
94
+ http_client.get('http://localhost:9000/nyan_cat.png')
95
+ expect(@debug_log).to match(/200/)
96
+ expect(@debug_log).to match(/HTTP Request Header Data/)
97
+ expect(@debug_log).to match(/HTTP Status and Header Data/)
98
+ expect(@debug_log).not_to match(/HTTP Request Body/)
99
+ expect(@debug_log).not_to match(/HTTP Response Body/)
100
+ expect(@debug_log).not_to match(/Your request is just terrible./)
101
+ end
102
+
103
+ it "Logs the request and response for 200 POST, but not the body" do
104
+ http_client.post('http://localhost:9000/posty', 'hithere')
105
+ expect(@debug_log).to match(/200/)
106
+ expect(@debug_log).to match(/HTTP Request Header Data/)
107
+ expect(@debug_log).to match(/HTTP Status and Header Data/)
108
+ expect(@debug_log).not_to match(/HTTP Request Body/)
109
+ expect(@debug_log).not_to match(/hithere/)
110
+ expect(@debug_log).not_to match(/HTTP Response Body/)
111
+ expect(@debug_log).not_to match(/Your request is just terrible./)
112
+ end
113
+
114
+ it "Logs the request and response and bodies for 400 response" do
115
+ expect do
116
+ http_client.get('http://localhost:9000/bad_request')
117
+ end.to raise_error(Net::HTTPServerException)
118
+ expect(@debug_log).to match(/400/)
119
+ expect(@debug_log).to match(/HTTP Request Header Data/)
120
+ expect(@debug_log).to match(/HTTP Status and Header Data/)
121
+ expect(@debug_log).not_to match(/HTTP Request Body/)
122
+ expect(@debug_log).not_to match(/hithere/)
123
+ expect(@debug_log).to match(/HTTP Response Body/)
124
+ expect(@debug_log).to match(/Your request is just terrible./)
125
+ end
126
+
127
+ it "Logs the request and response and bodies for 400 POST response" do
128
+ expect do
129
+ http_client.post('http://localhost:9000/bad_request', 'hithere')
130
+ end.to raise_error(Net::HTTPServerException)
131
+ expect(@debug_log).to match(/400/)
132
+ expect(@debug_log).to match(/HTTP Request Header Data/)
133
+ expect(@debug_log).to match(/HTTP Status and Header Data/)
134
+ expect(@debug_log).to match(/HTTP Request Body/)
135
+ expect(@debug_log).to match(/hithere/)
136
+ expect(@debug_log).to match(/HTTP Response Body/)
137
+ expect(@debug_log).to match(/Your request is just terrible./)
138
+ end
139
+ end
140
+ end
@@ -29,7 +29,7 @@ describe Chef::Mixin::ShellOut do
29
29
  shell_out_with_systems_locale('echo $LC_ALL')
30
30
  end
31
31
 
32
- cmd.stdout.chomp.should match_environment_variable('LC_ALL')
32
+ expect(cmd.stdout.chomp).to match_environment_variable('LC_ALL')
33
33
  end
34
34
  end
35
35
 
@@ -41,7 +41,7 @@ describe Chef::Mixin::ShellOut do
41
41
  shell_out_with_systems_locale('echo $LC_ALL', :environment => {'LC_ALL' => 'POSIX'})
42
42
  end
43
43
 
44
- cmd.stdout.chomp.should eq 'POSIX'
44
+ expect(cmd.stdout.chomp).to eq 'POSIX'
45
45
  end
46
46
  end
47
47
  end
@@ -0,0 +1,51 @@
1
+ #
2
+ # Author:: Serdar Sutay (<serdar@opscode.com>)
3
+ # Copyright:: Copyright (c) 2014 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
+ require 'spec_helper'
20
+
21
+ describe Chef::Resource::WhyrunSafeRubyBlock do
22
+ let(:node) { Chef::Node.new }
23
+
24
+ let(:run_context) {
25
+ events = Chef::EventDispatch::Dispatcher.new
26
+ Chef::RunContext.new(node, {}, events)
27
+ }
28
+
29
+ before do
30
+ $evil_global_evil_laugh = :wahwah
31
+ Chef::Config[:why_run] = true
32
+ end
33
+
34
+ after do
35
+ Chef::Config[:why_run] = false
36
+ end
37
+
38
+ describe "when testing the resource" do
39
+ let(:new_resource) do
40
+ r = Chef::Resource::WhyrunSafeRubyBlock.new("reload all", run_context)
41
+ r.block { $evil_global_evil_laugh = :mwahahaha }
42
+ r
43
+ end
44
+
45
+ it "updates the evil laugh, even in why-run mode" do
46
+ new_resource.run_action(new_resource.action)
47
+ $evil_global_evil_laugh.should == :mwahahaha
48
+ new_resource.should be_updated
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,105 @@
1
+ #
2
+ # Author:: Chris Doherty <cdoherty@getchef.com>)
3
+ # Copyright:: Copyright (c) 2014 Chef, 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
+ require 'spec_helper'
20
+
21
+ describe Chef::Platform::Rebooter do
22
+
23
+ let(:reboot_info) do
24
+ {
25
+ :delay_mins => 5,
26
+ :requested_by => "reboot resource functional test",
27
+ :reason => "rebooter spec test"
28
+ }
29
+ end
30
+
31
+ def create_resource
32
+ resource = Chef::Resource::Reboot.new(expected[:requested_by], run_context)
33
+ resource.delay_mins(expected[:delay_mins])
34
+ resource.reason(expected[:reason])
35
+ resource
36
+ end
37
+
38
+ let(:run_context) do
39
+ node = Chef::Node.new
40
+ events = Chef::EventDispatch::Dispatcher.new
41
+ Chef::RunContext.new(node, {}, events)
42
+ end
43
+
44
+ let(:expected) do
45
+ {
46
+ :windows => 'shutdown /r /t 5 /c "rebooter spec test"',
47
+ :linux => 'shutdown -r +5 "rebooter spec test"'
48
+ }
49
+ end
50
+
51
+ let(:rebooter) { Chef::Platform::Rebooter }
52
+
53
+ describe '#reboot_if_needed!' do
54
+
55
+ it 'should not call #shell_out! when reboot has not been requested' do
56
+ expect(rebooter).to receive(:shell_out!).exactly(0).times
57
+ expect(rebooter).to receive(:reboot_if_needed!).once.and_call_original
58
+ rebooter.reboot_if_needed!(run_context.node)
59
+ end
60
+
61
+ describe 'calling #shell_out! to reboot' do
62
+
63
+ before(:each) do
64
+ run_context.request_reboot(reboot_info)
65
+ end
66
+
67
+ after(:each) do
68
+ run_context.cancel_reboot
69
+ end
70
+
71
+ shared_context 'test a reboot method' do
72
+ def test_rebooter_method(method_sym, is_windows, expected_reboot_str)
73
+ Chef::Platform.stub(:windows?).and_return(is_windows)
74
+ expect(rebooter).to receive(:shell_out!).once.with(expected_reboot_str)
75
+ expect(rebooter).to receive(method_sym).once.and_call_original
76
+ rebooter.send(method_sym, run_context.node)
77
+ end
78
+ end
79
+
80
+ describe 'when using #reboot_if_needed!' do
81
+ include_context 'test a reboot method'
82
+
83
+ it 'should produce the correct string on Windows' do
84
+ test_rebooter_method(:reboot_if_needed!, true, expected[:windows])
85
+ end
86
+
87
+ it 'should produce the correct (Linux-specific) string on non-Windows' do
88
+ test_rebooter_method(:reboot_if_needed!, false, expected[:linux])
89
+ end
90
+ end
91
+
92
+ describe 'when using #reboot!' do
93
+ include_context 'test a reboot method'
94
+
95
+ it 'should produce the correct string on Windows' do
96
+ test_rebooter_method(:reboot!, true, expected[:windows])
97
+ end
98
+
99
+ it 'should produce the correct (Linux-specific) string on non-Windows' do
100
+ test_rebooter_method(:reboot!, false, expected[:linux])
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end