chef 13.1.31-universal-mingw32 → 13.2.20-universal-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +68 -134
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +1 -0
- data/acceptance/top-cookbooks/.kitchen.docker.yml +4 -0
- data/lib/chef/application/client.rb +27 -18
- data/lib/chef/deprecated.rb +10 -0
- data/lib/chef/dsl/declare_resource.rb +9 -1
- data/lib/chef/knife.rb +5 -1
- data/lib/chef/knife/cookbook_test.rb +1 -1
- data/lib/chef/policy_builder/policyfile.rb +27 -1
- data/lib/chef/provider.rb +2 -2
- data/lib/chef/provider/group/aix.rb +1 -1
- data/lib/chef/provider/group/groupadd.rb +1 -1
- data/lib/chef/provider/package/chocolatey.rb +1 -1
- data/lib/chef/provider/user/pw.rb +1 -1
- data/lib/chef/provider/user/windows.rb +1 -1
- data/lib/chef/resource/breakpoint.rb +1 -1
- data/lib/chef/version.rb +3 -1
- data/lib/chef/version_string.rb +143 -0
- data/spec/functional/mixin/powershell_out_spec.rb +20 -4
- data/spec/functional/resource/group_spec.rb +19 -13
- data/spec/functional/resource/windows_task_spec.rb +2 -9
- data/spec/integration/knife/common_options_spec.rb +29 -11
- data/spec/integration/knife/cookbook_bulk_delete_spec.rb +2 -2
- data/spec/integration/knife/cookbook_show_spec.rb +2 -2
- data/spec/integration/knife/environment_compare_spec.rb +2 -2
- data/spec/integration/knife/environment_show_spec.rb +2 -2
- data/spec/integration/knife/role_show_spec.rb +2 -2
- data/spec/integration/recipes/accumulator_spec.rb +6 -6
- data/spec/integration/recipes/resource_action_spec.rb +18 -7
- data/spec/integration/recipes/resource_load_spec.rb +5 -21
- data/spec/spec_helper.rb +2 -0
- data/spec/support/platform_helpers.rb +5 -0
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +1 -1
- data/spec/unit/application/client_spec.rb +2 -0
- data/spec/unit/knife_spec.rb +22 -0
- data/spec/unit/policy_builder/policyfile_spec.rb +50 -0
- data/spec/unit/provider/group/groupadd_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +1 -1
- data/spec/unit/version_string_spec.rb +79 -0
- data/tasks/dependencies.rb +1 -42
- metadata +6 -5
- data/tasks/bundle.rb +0 -73
@@ -22,6 +22,14 @@ describe "knife common options", :workstation do
|
|
22
22
|
include IntegrationSupport
|
23
23
|
include KnifeSupport
|
24
24
|
|
25
|
+
before do
|
26
|
+
# Allow this for testing the various port binding stuffs. Remove when
|
27
|
+
# we kill off --listen.
|
28
|
+
Chef::Config.treat_deprecation_warnings_as_errors(false)
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:local_listen_warning) { /\Awarn:.*local.*listen.*$/i }
|
32
|
+
|
25
33
|
when_the_repository "has a node" do
|
26
34
|
before { file "nodes/x.json", {} }
|
27
35
|
|
@@ -30,15 +38,20 @@ describe "knife common options", :workstation do
|
|
30
38
|
Chef::Config.chef_zero.enabled = true
|
31
39
|
end
|
32
40
|
|
33
|
-
it "knife raw /nodes/x should retrieve the node" do
|
41
|
+
it "knife raw /nodes/x should retrieve the node in socketless mode" do
|
42
|
+
Chef::Config.treat_deprecation_warnings_as_errors(true)
|
34
43
|
knife("raw /nodes/x").should_succeed( /"name": "x"/ )
|
35
44
|
end
|
36
45
|
|
46
|
+
it "knife raw /nodes/x should retrieve the node" do
|
47
|
+
knife("raw --listen /nodes/x").should_succeed( /"name": "x"/, stderr: local_listen_warning )
|
48
|
+
end
|
49
|
+
|
37
50
|
context "And chef_zero.port is 9999" do
|
38
51
|
before(:each) { Chef::Config.chef_zero.port = 9999 }
|
39
52
|
|
40
53
|
it "knife raw /nodes/x should retrieve the node" do
|
41
|
-
knife("raw /nodes/x").should_succeed( /"name": "x"
|
54
|
+
knife("raw --listen /nodes/x").should_succeed( /"name": "x"/, stderr: local_listen_warning )
|
42
55
|
expect(Chef::Config.chef_server_url).to eq("chefzero://localhost:9999")
|
43
56
|
end
|
44
57
|
end
|
@@ -48,7 +61,7 @@ describe "knife common options", :workstation do
|
|
48
61
|
before(:each) { Chef::Config.chef_zero.host = "0.0.0.0" }
|
49
62
|
|
50
63
|
it "knife raw /nodes/x should retrieve the role" do
|
51
|
-
knife("raw /nodes/x").should_succeed( /"name": "x"
|
64
|
+
knife("raw --listen /nodes/x").should_succeed( /"name": "x"/, stderr: local_listen_warning )
|
52
65
|
end
|
53
66
|
end
|
54
67
|
|
@@ -86,21 +99,26 @@ EOM
|
|
86
99
|
end
|
87
100
|
|
88
101
|
it "knife raw /nodes/x should retrieve the node" do
|
89
|
-
knife("raw /nodes/x").should_succeed( /"name": "x"
|
102
|
+
knife("raw --listen /nodes/x").should_succeed( /"name": "x"/, stderr: local_listen_warning )
|
90
103
|
end
|
91
104
|
end
|
92
105
|
end
|
93
106
|
|
94
|
-
it "knife raw -z /nodes/x retrieves the node" do
|
107
|
+
it "knife raw -z /nodes/x retrieves the node in socketless mode" do
|
108
|
+
Chef::Config.treat_deprecation_warnings_as_errors(true)
|
95
109
|
knife("raw -z /nodes/x").should_succeed( /"name": "x"/ )
|
96
110
|
end
|
97
111
|
|
112
|
+
it "knife raw -z /nodes/x retrieves the node" do
|
113
|
+
knife("raw -z --listen /nodes/x").should_succeed( /"name": "x"/, stderr: local_listen_warning )
|
114
|
+
end
|
115
|
+
|
98
116
|
it "knife raw --local-mode /nodes/x retrieves the node" do
|
99
|
-
knife("raw --local-mode /nodes/x").should_succeed( /"name": "x"
|
117
|
+
knife("raw --local-mode --listen /nodes/x").should_succeed( /"name": "x"/, stderr: local_listen_warning )
|
100
118
|
end
|
101
119
|
|
102
120
|
it "knife raw -z --chef-zero-port=9999 /nodes/x retrieves the node" do
|
103
|
-
knife("raw -z --chef-zero-port=9999 /nodes/x").should_succeed( /"name": "x"
|
121
|
+
knife("raw -z --chef-zero-port=9999 --listen /nodes/x").should_succeed( /"name": "x"/, stderr: local_listen_warning )
|
104
122
|
expect(Chef::Config.chef_server_url).to eq("chefzero://localhost:9999")
|
105
123
|
end
|
106
124
|
|
@@ -118,7 +136,7 @@ EOM
|
|
118
136
|
end
|
119
137
|
|
120
138
|
it "knife raw -z /nodes/x retrieves the node" do
|
121
|
-
knife("raw -z /nodes/x").should_succeed( /"name": "x"
|
139
|
+
knife("raw -z --listen /nodes/x").should_succeed( /"name": "x"/, stderr: local_listen_warning )
|
122
140
|
expect(URI(Chef::Config.chef_server_url).port).to be > 8889
|
123
141
|
end
|
124
142
|
end
|
@@ -137,18 +155,18 @@ EOM
|
|
137
155
|
end
|
138
156
|
|
139
157
|
it "knife raw -z --chef-zero-port=9999-20000 /nodes/x" do
|
140
|
-
knife("raw -z --chef-zero-port=9999-20000 /nodes/x").should_succeed( /"name": "x"
|
158
|
+
knife("raw -z --chef-zero-port=9999-20000 --listen /nodes/x").should_succeed( /"name": "x"/, stderr: local_listen_warning )
|
141
159
|
expect(URI(Chef::Config.chef_server_url).port).to be > 9999
|
142
160
|
end
|
143
161
|
|
144
162
|
it "knife raw -z --chef-zero-port=9999-9999,19423" do
|
145
|
-
knife("raw -z --chef-zero-port=9999-9999,19423 /nodes/x").should_succeed( /"name": "x"
|
163
|
+
knife("raw -z --chef-zero-port=9999-9999,19423 --listen /nodes/x").should_succeed( /"name": "x"/, stderr: local_listen_warning )
|
146
164
|
expect(URI(Chef::Config.chef_server_url).port).to be == 19423
|
147
165
|
end
|
148
166
|
end
|
149
167
|
|
150
168
|
it "knife raw -z --chef-zero-port=9999 /nodes/x retrieves the node" do
|
151
|
-
knife("raw -z --chef-zero-port=9999 /nodes/x").should_succeed( /"name": "x"
|
169
|
+
knife("raw -z --chef-zero-port=9999 --listen /nodes/x").should_succeed( /"name": "x"/, stderr: local_listen_warning )
|
152
170
|
expect(Chef::Config.chef_server_url).to eq("chefzero://localhost:9999")
|
153
171
|
end
|
154
172
|
end
|
@@ -34,7 +34,7 @@ describe "knife cookbook bulk delete", :workstation do
|
|
34
34
|
cookbook "zfa", "0.6.5"
|
35
35
|
end
|
36
36
|
|
37
|
-
# rubocop:disable
|
37
|
+
# rubocop:disable Layout/TrailingWhitespace
|
38
38
|
it "knife cookbook bulk delete deletes all matching cookbooks" do
|
39
39
|
stdout = <<EOM
|
40
40
|
All versions of the following cookbooks will be deleted:
|
@@ -58,7 +58,7 @@ fax 0.6.0
|
|
58
58
|
zfa 0.6.5
|
59
59
|
EOM
|
60
60
|
end
|
61
|
-
# rubocop:enable
|
61
|
+
# rubocop:enable Layout/TrailingWhitespace
|
62
62
|
|
63
63
|
end
|
64
64
|
end
|
@@ -34,7 +34,7 @@ describe "knife cookbook show", :workstation do
|
|
34
34
|
knife("cookbook show x").should_succeed "x 1.0.0 0.6.5\n"
|
35
35
|
end
|
36
36
|
|
37
|
-
# rubocop:disable
|
37
|
+
# rubocop:disable Layout/TrailingWhitespace
|
38
38
|
it "knife cookbook show x 1.0.0 shows the correct version" do
|
39
39
|
knife("cookbook show x 1.0.0").should_succeed <<EOM
|
40
40
|
cookbook_name: x
|
@@ -127,7 +127,7 @@ specificity: default
|
|
127
127
|
url: http://127.0.0.1:8900/file_store/checksums/d41d8cd98f00b204e9800998ecf8427e
|
128
128
|
EOM
|
129
129
|
end
|
130
|
-
# rubocop:enable
|
130
|
+
# rubocop:enable Layout/TrailingWhitespace
|
131
131
|
|
132
132
|
it "knife cookbook show x 1.0.0 recipes default.rb shows the default recipe" do
|
133
133
|
knife("cookbook show x 1.0.0 recipes default.rb").should_succeed "file 'n'\n"
|
@@ -42,7 +42,7 @@ describe "knife environment compare", :workstation do
|
|
42
42
|
}
|
43
43
|
end
|
44
44
|
|
45
|
-
# rubocop:disable
|
45
|
+
# rubocop:disable Layout/TrailingWhitespace
|
46
46
|
it "displays the cookbooks for a single environment" do
|
47
47
|
knife("environment compare x").should_succeed <<EOM
|
48
48
|
x
|
@@ -69,6 +69,6 @@ krad >= 1.0.0 >= 1.0.0
|
|
69
69
|
|
70
70
|
EOM
|
71
71
|
end
|
72
|
-
# rubocop:enable
|
72
|
+
# rubocop:enable Layout/TrailingWhitespace
|
73
73
|
end
|
74
74
|
end
|
@@ -30,7 +30,7 @@ describe "knife environment show", :workstation do
|
|
30
30
|
}
|
31
31
|
end
|
32
32
|
|
33
|
-
# rubocop:disable
|
33
|
+
# rubocop:disable Layout/TrailingWhitespace
|
34
34
|
it "shows an environment" do
|
35
35
|
knife("environment show b").should_succeed <<EOM
|
36
36
|
chef_type: environment
|
@@ -45,7 +45,7 @@ name: b
|
|
45
45
|
override_attributes:
|
46
46
|
EOM
|
47
47
|
end
|
48
|
-
# rubocop:enable
|
48
|
+
# rubocop:enable Layout/TrailingWhitespace
|
49
49
|
|
50
50
|
it "shows the requested attribute of an environment" do
|
51
51
|
knife("environment show b -a default_attributes").should_succeed <<EOM
|
@@ -31,7 +31,7 @@ describe "knife role show", :workstation do
|
|
31
31
|
role "cat", {}
|
32
32
|
end
|
33
33
|
|
34
|
-
# rubocop:disable
|
34
|
+
# rubocop:disable Layout/TrailingWhitespace
|
35
35
|
it "shows a cookbook" do
|
36
36
|
knife("role show cons").should_succeed <<EOM
|
37
37
|
chef_type: role
|
@@ -44,7 +44,7 @@ override_attributes:
|
|
44
44
|
run_list:
|
45
45
|
EOM
|
46
46
|
end
|
47
|
-
# rubocop:enable
|
47
|
+
# rubocop:enable Layout/TrailingWhitespace
|
48
48
|
|
49
49
|
end
|
50
50
|
end
|
@@ -62,7 +62,7 @@ describe "Accumulators" do
|
|
62
62
|
default_action :create
|
63
63
|
|
64
64
|
action :create do
|
65
|
-
email_alias address do
|
65
|
+
email_alias new_resource.address do
|
66
66
|
recipients new_resource.recipients
|
67
67
|
end
|
68
68
|
end
|
@@ -78,7 +78,7 @@ describe "Accumulators" do
|
|
78
78
|
default_action :create
|
79
79
|
|
80
80
|
action :create do
|
81
|
-
nested address do
|
81
|
+
nested new_resource.address do
|
82
82
|
recipients new_resource.recipients
|
83
83
|
end
|
84
84
|
end
|
@@ -149,8 +149,8 @@ describe "Accumulators" do
|
|
149
149
|
delayed_action :create
|
150
150
|
end
|
151
151
|
end
|
152
|
-
r.variables[:aliases][address] ||= []
|
153
|
-
r.variables[:aliases][address] += new_resource.recipients
|
152
|
+
r.variables[:aliases][new_resource.address] ||= []
|
153
|
+
r.variables[:aliases][new_resource.address] += new_resource.recipients
|
154
154
|
end
|
155
155
|
EOM
|
156
156
|
|
@@ -164,7 +164,7 @@ describe "Accumulators" do
|
|
164
164
|
default_action :create
|
165
165
|
|
166
166
|
action :create do
|
167
|
-
email_alias address do
|
167
|
+
email_alias new_resource.address do
|
168
168
|
recipients new_resource.recipients
|
169
169
|
end
|
170
170
|
end
|
@@ -180,7 +180,7 @@ describe "Accumulators" do
|
|
180
180
|
default_action :create
|
181
181
|
|
182
182
|
action :create do
|
183
|
-
nested address do
|
183
|
+
nested new_resource.address do
|
184
184
|
recipients new_resource.recipients
|
185
185
|
end
|
186
186
|
end
|
@@ -416,6 +416,7 @@ module ResourceActionSpec
|
|
416
416
|
attr_reader :x_warning_line
|
417
417
|
|
418
418
|
it "Using the enclosing resource to set x to x emits a warning that you're using the wrong x" do
|
419
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
419
420
|
recipe = converge do
|
420
421
|
resource_action_spec_also_with_x "hi" do
|
421
422
|
x 1
|
@@ -423,34 +424,43 @@ module ResourceActionSpec
|
|
423
424
|
end
|
424
425
|
end
|
425
426
|
warnings = recipe.logs.lines.select { |l| l =~ /warn/i }
|
426
|
-
expect(warnings.size).to eq
|
427
|
+
expect(warnings.size).to eq 2
|
427
428
|
expect(warnings[0]).to match(/property x is declared in both resource_action_spec_with_x\[hi\] and resource_action_spec_also_with_x\[hi\] action :set_x_to_x. Use new_resource.x instead. At #{__FILE__}:#{ResourceActionSpecAlsoWithX.x_warning_line}/)
|
428
429
|
end
|
429
430
|
|
430
431
|
it "Using the enclosing resource to set x to x outside the initializer emits no warning" do
|
431
|
-
|
432
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
433
|
+
recipe = converge do
|
432
434
|
resource_action_spec_also_with_x "hi" do
|
433
435
|
x 1
|
434
436
|
action :set_x_to_x_in_non_initializer
|
435
437
|
end
|
436
|
-
end
|
438
|
+
end
|
439
|
+
warnings = recipe.logs.lines.select { |l| l =~ /warn/i }
|
440
|
+
expect(warnings.size).to eq 1 # the deprecation warning, not the property masking one
|
437
441
|
end
|
438
442
|
|
439
443
|
it "Using the enclosing resource to set x to 10 emits no warning" do
|
440
|
-
|
444
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
445
|
+
recipe = converge do
|
441
446
|
resource_action_spec_also_with_x "hi" do
|
442
447
|
x 1
|
443
448
|
action :set_x_to_10
|
444
449
|
end
|
445
|
-
end
|
450
|
+
end
|
451
|
+
warnings = recipe.logs.lines.select { |l| l =~ /warn/i }
|
452
|
+
expect(warnings.size).to eq 1 # the deprecation warning, not the property masking one
|
446
453
|
end
|
447
454
|
|
448
455
|
it "Using the enclosing resource to set x to 10 emits no warning" do
|
449
|
-
|
456
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
457
|
+
recipe = converge do
|
450
458
|
r = resource_action_spec_also_with_x "hi"
|
451
459
|
r.x 1
|
452
460
|
r.action :set_x_to_10
|
453
|
-
end
|
461
|
+
end
|
462
|
+
warnings = recipe.logs.lines.select { |l| l =~ /warn/i }
|
463
|
+
expect(warnings.size).to eq 1 # the deprecation warning, not the property masking one
|
454
464
|
end
|
455
465
|
end
|
456
466
|
|
@@ -496,6 +506,7 @@ module ResourceActionSpec
|
|
496
506
|
end
|
497
507
|
|
498
508
|
it "Raises an error when attempting to use a template in the action" do
|
509
|
+
Chef::Config[:treat_deprecation_warnings_as_errors] = false
|
499
510
|
expect_converge do
|
500
511
|
has_property_named_template "hi"
|
501
512
|
end.to raise_error(/Property `template` of `has_property_named_template\[hi\]` was incorrectly passed a block. Possible property-resource collision. To call a resource named `template` either rename the property or else use `declare_resource\(:template, ...\)`/)
|
@@ -32,7 +32,7 @@ describe "Resource.load_current_value" do
|
|
32
32
|
@created
|
33
33
|
end
|
34
34
|
action :create do
|
35
|
-
new_resource.class.created_x = x
|
35
|
+
new_resource.class.created_x = new_resource.x
|
36
36
|
end
|
37
37
|
end
|
38
38
|
result.resource_name resource_name
|
@@ -45,10 +45,10 @@ describe "Resource.load_current_value" do
|
|
45
45
|
context "with a resource with load_current_value" do
|
46
46
|
before :each do
|
47
47
|
resource_class.load_current_value do
|
48
|
-
x "loaded #{Namer.incrementing_value} (#{self.class.properties.sort_by { |name, p| name }
|
49
|
-
select { |name, p| p.is_set?(self) }
|
50
|
-
map { |name, p| "#{name}=#{p.get(self)}" }
|
51
|
-
join(", ")})"
|
48
|
+
x "loaded #{Namer.incrementing_value} (#{self.class.properties.sort_by { |name, p| name }
|
49
|
+
.select { |name, p| p.is_set?(self) }
|
50
|
+
.map { |name, p| "#{name}=#{p.get(self)}" }
|
51
|
+
.join(", ")})"
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -119,22 +119,6 @@ describe "Resource.load_current_value" do
|
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
|
-
context "and a resource with no values set" do
|
123
|
-
let(:resource) do
|
124
|
-
e = self
|
125
|
-
r = nil
|
126
|
-
converge do
|
127
|
-
r = public_send(e.resource_name, "blah") do
|
128
|
-
end
|
129
|
-
end
|
130
|
-
r
|
131
|
-
end
|
132
|
-
|
133
|
-
it "the provider accesses values from load_current_value" do
|
134
|
-
expect(resource.class.created_x).to eq "loaded 1 (name=blah)"
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
122
|
let (:subresource_name) do
|
139
123
|
:"load_current_value_subresource_dsl#{Namer.current_index}"
|
140
124
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -149,6 +149,8 @@ RSpec.configure do |config|
|
|
149
149
|
config.filter_run_excluding :windows64_only => true unless windows64?
|
150
150
|
config.filter_run_excluding :windows32_only => true unless windows32?
|
151
151
|
config.filter_run_excluding :windows_nano_only => true unless windows_nano_server?
|
152
|
+
config.filter_run_excluding :windows_gte_10 => true unless windows_gte_10?
|
153
|
+
config.filter_run_excluding :windows_lt_10 => true if windows_gte_10?
|
152
154
|
config.filter_run_excluding :ruby64_only => true unless ruby_64bit?
|
153
155
|
config.filter_run_excluding :ruby32_only => true unless ruby_32bit?
|
154
156
|
config.filter_run_excluding :windows_powershell_dsc_only => true unless windows_powershell_dsc?
|
@@ -70,6 +70,11 @@ def windows_2012r2?
|
|
70
70
|
(host_version && host_version.start_with?("6.3"))
|
71
71
|
end
|
72
72
|
|
73
|
+
def windows_gte_10?
|
74
|
+
return false unless windows?
|
75
|
+
Gem::Requirement.new(">= 10").satisfied_by?(Gem::Version.new(host_version))
|
76
|
+
end
|
77
|
+
|
73
78
|
def host_version
|
74
79
|
@host_version ||= begin
|
75
80
|
wmi = WmiLite::Wmi.new
|
@@ -85,7 +85,7 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option
|
|
85
85
|
|
86
86
|
it "should combine all the possible options" do
|
87
87
|
combined_opts = []
|
88
|
-
supported_useradd_options.
|
88
|
+
supported_useradd_options.sort_by { |a| a[0] }.each do |attribute, option|
|
89
89
|
allow(@new_resource).to receive(attribute).and_return("hola")
|
90
90
|
combined_opts << option << "hola"
|
91
91
|
end
|
@@ -257,6 +257,7 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
|
|
257
257
|
before do
|
258
258
|
allow(@app).to receive(:interval_sleep).with(wait_secs).and_return true
|
259
259
|
allow(@app).to receive(:interval_sleep).with(0).and_call_original
|
260
|
+
allow(@app).to receive(:time_to_sleep).and_return(1)
|
260
261
|
end
|
261
262
|
|
262
263
|
it "sleeps for the amount of time passed" do
|
@@ -519,6 +520,7 @@ describe Chef::Application::Client, "run_application", :unix_only do
|
|
519
520
|
end
|
520
521
|
|
521
522
|
it "shouldn't sleep when sent USR1" do
|
523
|
+
allow(@app).to receive(:interval_sleep).and_return true
|
522
524
|
allow(@app).to receive(:interval_sleep).with(0).and_call_original
|
523
525
|
pid = fork do
|
524
526
|
@app.run_application
|
data/spec/unit/knife_spec.rb
CHANGED
@@ -439,6 +439,28 @@ describe Chef::Knife do
|
|
439
439
|
expect(stderr.string).to match(%r{Response: y u no administrator})
|
440
440
|
end
|
441
441
|
|
442
|
+
context "when proxy servers are set" do
|
443
|
+
before do
|
444
|
+
ENV["http_proxy"] = "xyz"
|
445
|
+
end
|
446
|
+
|
447
|
+
after do
|
448
|
+
ENV.delete("http_proxy")
|
449
|
+
end
|
450
|
+
|
451
|
+
it "formats proxy errors nicely" do
|
452
|
+
response = Net::HTTPForbidden.new("1.1", "403", "Forbidden")
|
453
|
+
response.instance_variable_set(:@read, true)
|
454
|
+
allow(response).to receive(:body).and_return(Chef::JSONCompat.to_json(:error => "y u no administrator"))
|
455
|
+
allow(knife).to receive(:run).and_raise(Net::HTTPServerException.new("403 Forbidden", response))
|
456
|
+
allow(knife).to receive(:username).and_return("sadpanda")
|
457
|
+
knife.run_with_pretty_exceptions
|
458
|
+
expect(stderr.string).to match(%r{ERROR: You authenticated successfully to http.+ as sadpanda but you are not authorized for this action})
|
459
|
+
expect(stderr.string).to match(%r{ERROR: There are proxy servers configured, your Chef server may need to be added to NO_PROXY.})
|
460
|
+
expect(stderr.string).to match(%r{Response: y u no administrator})
|
461
|
+
end
|
462
|
+
end
|
463
|
+
|
442
464
|
it "formats 400s nicely" do
|
443
465
|
response = Net::HTTPBadRequest.new("1.1", "400", "Bad Request")
|
444
466
|
response.instance_variable_set(:@read, true) # I hate you, net/http.
|
@@ -330,6 +330,56 @@ describe Chef::PolicyBuilder::Policyfile do
|
|
330
330
|
|
331
331
|
end
|
332
332
|
|
333
|
+
describe "#build_node" do
|
334
|
+
|
335
|
+
let(:node) do
|
336
|
+
node = Chef::Node.new
|
337
|
+
node.name(node_name)
|
338
|
+
node
|
339
|
+
end
|
340
|
+
|
341
|
+
before do
|
342
|
+
allow(policy_builder).to receive(:node).and_return(node)
|
343
|
+
end
|
344
|
+
|
345
|
+
context "when the run is successful" do
|
346
|
+
let(:run_list) do
|
347
|
+
["recipe[test::default]",
|
348
|
+
"recipe[test::other]"]
|
349
|
+
end
|
350
|
+
|
351
|
+
let(:version_hash) do
|
352
|
+
{
|
353
|
+
"version" => "0.1.0",
|
354
|
+
"identifier" => "012345678",
|
355
|
+
}
|
356
|
+
end
|
357
|
+
|
358
|
+
let(:run_list_for_data_collector) do
|
359
|
+
{
|
360
|
+
:id => "_policy_node",
|
361
|
+
:run_list => [
|
362
|
+
{ :type => "recipe", :name => "test::default", :skipped => false, :version => nil },
|
363
|
+
{ :type => "recipe", :name => "test::other", :skipped => false, :version => nil },
|
364
|
+
],
|
365
|
+
}
|
366
|
+
end
|
367
|
+
|
368
|
+
before do
|
369
|
+
allow(policy_builder).to receive(:run_list)
|
370
|
+
.and_return(run_list)
|
371
|
+
allow(policy_builder).to receive(:cookbook_lock_for)
|
372
|
+
.and_return(version_hash)
|
373
|
+
end
|
374
|
+
|
375
|
+
it "sends the run_list_expanded event" do
|
376
|
+
policy_builder.build_node
|
377
|
+
expect(policy_builder.run_list_expansion_ish.to_hash)
|
378
|
+
.to eq(run_list_for_data_collector)
|
379
|
+
end
|
380
|
+
end
|
381
|
+
end
|
382
|
+
|
333
383
|
describe "building the node object" do
|
334
384
|
|
335
385
|
let(:extra_chef_config) { {} }
|