chef-utils 18.0.161 → 18.0.169

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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +201 -201
  3. data/Rakefile +15 -15
  4. data/chef-utils.gemspec +50 -50
  5. data/lib/chef-utils/dist.rb +154 -154
  6. data/lib/chef-utils/dsl/architecture.rb +150 -150
  7. data/lib/chef-utils/dsl/cloud.rb +155 -155
  8. data/lib/chef-utils/dsl/default_paths.rb +60 -60
  9. data/lib/chef-utils/dsl/introspection.rb +134 -134
  10. data/lib/chef-utils/dsl/os.rb +58 -58
  11. data/lib/chef-utils/dsl/path_sanity.rb +39 -39
  12. data/lib/chef-utils/dsl/platform.rb +387 -387
  13. data/lib/chef-utils/dsl/platform_family.rb +360 -360
  14. data/lib/chef-utils/dsl/platform_version.rb +41 -41
  15. data/lib/chef-utils/dsl/service.rb +112 -112
  16. data/lib/chef-utils/dsl/train_helpers.rb +87 -87
  17. data/lib/chef-utils/dsl/virtualization.rb +272 -272
  18. data/lib/chef-utils/dsl/which.rb +123 -123
  19. data/lib/chef-utils/dsl/windows.rb +86 -86
  20. data/lib/chef-utils/internal.rb +114 -114
  21. data/lib/chef-utils/mash.rb +263 -263
  22. data/lib/chef-utils/parallel_map.rb +131 -131
  23. data/lib/chef-utils/version.rb +20 -20
  24. data/lib/chef-utils/version_string.rb +160 -160
  25. data/lib/chef-utils.rb +53 -53
  26. data/spec/spec_helper.rb +100 -100
  27. data/spec/unit/dsl/architecture_spec.rb +151 -151
  28. data/spec/unit/dsl/cloud_spec.rb +93 -93
  29. data/spec/unit/dsl/dsl_spec.rb +34 -34
  30. data/spec/unit/dsl/introspection_spec.rb +201 -201
  31. data/spec/unit/dsl/os_spec.rb +175 -175
  32. data/spec/unit/dsl/path_sanity_spec.rb +86 -86
  33. data/spec/unit/dsl/platform_family_spec.rb +235 -235
  34. data/spec/unit/dsl/platform_spec.rb +252 -252
  35. data/spec/unit/dsl/service_spec.rb +117 -117
  36. data/spec/unit/dsl/virtualization_spec.rb +75 -75
  37. data/spec/unit/dsl/which_spec.rb +171 -171
  38. data/spec/unit/dsl/windows_spec.rb +84 -84
  39. data/spec/unit/mash_spec.rb +51 -51
  40. data/spec/unit/parallel_map_spec.rb +156 -156
  41. metadata +3 -3
@@ -1,93 +1,93 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: Copyright (c) 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 "spec_helper"
20
- require "fauxhai"
21
-
22
- def cloud_reports_true_for(*args, node:)
23
- args.each do |method|
24
- it "reports true for #{method}" do
25
- expect(described_class.send(method, node)).to be true
26
- end
27
- end
28
- (CLOUD_HELPERS - args).each do |method|
29
- it "reports false for #{method}" do
30
- expect(described_class.send(method, node)).to be false
31
- end
32
- end
33
- end
34
-
35
- RSpec.describe ChefUtils::DSL::Cloud do
36
- ( HELPER_MODULES - [ described_class ] ).each do |klass|
37
- it "does not have methods that collide with #{klass}" do
38
- expect((klass.methods - Module.methods) & CLOUD_HELPERS).to be_empty
39
- end
40
- end
41
-
42
- CLOUD_HELPERS.each do |helper|
43
- it "has the #{helper} in the ChefUtils module" do
44
- expect(ChefUtils).to respond_to(helper)
45
- end
46
- end
47
-
48
- context "on alibaba" do
49
- cloud_reports_true_for(:cloud?, :alibaba?, node: { "alibaba" => {}, "cloud" => {} })
50
- end
51
-
52
- context "on ec2" do
53
- cloud_reports_true_for(:cloud?, :ec2?, node: { "ec2" => {}, "cloud" => {} })
54
- end
55
-
56
- context "on gce" do
57
- cloud_reports_true_for(:cloud?, :gce?, node: { "gce" => {}, "cloud" => {} })
58
- end
59
-
60
- context "on rackspace" do
61
- cloud_reports_true_for(:cloud?, :rackspace?, node: { "rackspace" => {}, "cloud" => {} })
62
- end
63
-
64
- context "on eucalyptus" do
65
- cloud_reports_true_for(:cloud?, :eucalyptus?, :euca?, node: { "eucalyptus" => {}, "cloud" => {} })
66
- end
67
-
68
- context "on linode" do
69
- cloud_reports_true_for(:cloud?, :linode?, node: { "linode" => {}, "cloud" => {} })
70
- end
71
-
72
- context "on openstack" do
73
- cloud_reports_true_for(:cloud?, :openstack?, node: { "openstack" => {}, "cloud" => {} })
74
- end
75
-
76
- context "on azure" do
77
- cloud_reports_true_for(:cloud?, :azure?, node: { "azure" => {}, "cloud" => {} })
78
- end
79
-
80
- context "on digital_ocean" do
81
- cloud_reports_true_for(:cloud?, :digital_ocean?, :digitalocean?, node: { "digital_ocean" => {}, "cloud" => {} })
82
- end
83
-
84
- context "on softlayer" do
85
- cloud_reports_true_for(:cloud?, :softlayer?, node: { "softlayer" => {}, "cloud" => {} })
86
- end
87
-
88
- context "on virtualbox" do
89
- it "does not return true for cloud?" do
90
- expect(described_class.cloud?({ "virtualbox" => {}, "cloud" => nil })).to be false
91
- end
92
- end
93
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright (c) 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 "spec_helper"
20
+ require "fauxhai"
21
+
22
+ def cloud_reports_true_for(*args, node:)
23
+ args.each do |method|
24
+ it "reports true for #{method}" do
25
+ expect(described_class.send(method, node)).to be true
26
+ end
27
+ end
28
+ (CLOUD_HELPERS - args).each do |method|
29
+ it "reports false for #{method}" do
30
+ expect(described_class.send(method, node)).to be false
31
+ end
32
+ end
33
+ end
34
+
35
+ RSpec.describe ChefUtils::DSL::Cloud do
36
+ ( HELPER_MODULES - [ described_class ] ).each do |klass|
37
+ it "does not have methods that collide with #{klass}" do
38
+ expect((klass.methods - Module.methods) & CLOUD_HELPERS).to be_empty
39
+ end
40
+ end
41
+
42
+ CLOUD_HELPERS.each do |helper|
43
+ it "has the #{helper} in the ChefUtils module" do
44
+ expect(ChefUtils).to respond_to(helper)
45
+ end
46
+ end
47
+
48
+ context "on alibaba" do
49
+ cloud_reports_true_for(:cloud?, :alibaba?, node: { "alibaba" => {}, "cloud" => {} })
50
+ end
51
+
52
+ context "on ec2" do
53
+ cloud_reports_true_for(:cloud?, :ec2?, node: { "ec2" => {}, "cloud" => {} })
54
+ end
55
+
56
+ context "on gce" do
57
+ cloud_reports_true_for(:cloud?, :gce?, node: { "gce" => {}, "cloud" => {} })
58
+ end
59
+
60
+ context "on rackspace" do
61
+ cloud_reports_true_for(:cloud?, :rackspace?, node: { "rackspace" => {}, "cloud" => {} })
62
+ end
63
+
64
+ context "on eucalyptus" do
65
+ cloud_reports_true_for(:cloud?, :eucalyptus?, :euca?, node: { "eucalyptus" => {}, "cloud" => {} })
66
+ end
67
+
68
+ context "on linode" do
69
+ cloud_reports_true_for(:cloud?, :linode?, node: { "linode" => {}, "cloud" => {} })
70
+ end
71
+
72
+ context "on openstack" do
73
+ cloud_reports_true_for(:cloud?, :openstack?, node: { "openstack" => {}, "cloud" => {} })
74
+ end
75
+
76
+ context "on azure" do
77
+ cloud_reports_true_for(:cloud?, :azure?, node: { "azure" => {}, "cloud" => {} })
78
+ end
79
+
80
+ context "on digital_ocean" do
81
+ cloud_reports_true_for(:cloud?, :digital_ocean?, :digitalocean?, node: { "digital_ocean" => {}, "cloud" => {} })
82
+ end
83
+
84
+ context "on softlayer" do
85
+ cloud_reports_true_for(:cloud?, :softlayer?, node: { "softlayer" => {}, "cloud" => {} })
86
+ end
87
+
88
+ context "on virtualbox" do
89
+ it "does not return true for cloud?" do
90
+ expect(described_class.cloud?({ "virtualbox" => {}, "cloud" => nil })).to be false
91
+ end
92
+ end
93
+ end
@@ -1,34 +1,34 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: Copyright (c) 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 "spec_helper"
20
-
21
- RSpec.describe ChefUtils do
22
- class ThingWithDSL
23
- extend ChefUtils
24
- end
25
-
26
- (OS_HELPERS + ARCH_HELPERS + PLATFORM_HELPERS + PLATFORM_FAMILY_HELPERS + INTROSPECTION_HELPERS).each do |helper|
27
- it "has the #{helper} in the ChefUtils module" do
28
- expect(ThingWithDSL).to respond_to(helper)
29
- end
30
- it "has the #{helper} class method in the ChefUtils module" do
31
- expect(ChefUtils).to respond_to(helper)
32
- end
33
- end
34
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright (c) 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 "spec_helper"
20
+
21
+ RSpec.describe ChefUtils do
22
+ class ThingWithDSL
23
+ extend ChefUtils
24
+ end
25
+
26
+ (OS_HELPERS + ARCH_HELPERS + PLATFORM_HELPERS + PLATFORM_FAMILY_HELPERS + INTROSPECTION_HELPERS).each do |helper|
27
+ it "has the #{helper} in the ChefUtils module" do
28
+ expect(ThingWithDSL).to respond_to(helper)
29
+ end
30
+ it "has the #{helper} class method in the ChefUtils module" do
31
+ expect(ChefUtils).to respond_to(helper)
32
+ end
33
+ end
34
+ end
@@ -1,201 +1,201 @@
1
- # frozen_string_literal: true
2
- #
3
- # Copyright:: Copyright (c) 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 "spec_helper"
20
-
21
- RSpec.describe ChefUtils::DSL::Introspection do
22
- class IntrospectionTestClass
23
- include ChefUtils::DSL::Introspection
24
- attr_accessor :node
25
-
26
- def initialize(node)
27
- @node = node
28
- end
29
- end
30
-
31
- let(:node) { double("node") }
32
-
33
- let(:test_instance) { IntrospectionTestClass.new(node) }
34
-
35
- context "#effortless?" do
36
- # FIXME: use a real VividMash for these tests instead of stubbing
37
- it "is false by default" do
38
- expect(node).to receive(:read).with("chef_packages", "chef", "chef_effortless").and_return(nil)
39
- expect(ChefUtils.effortless?(node)).to be false
40
- end
41
- it "is true when ohai reports a effortless" do
42
- expect(node).to receive(:read).with("chef_packages", "chef", "chef_effortless").and_return(true)
43
- expect(ChefUtils.effortless?(node)).to be true
44
- end
45
- end
46
-
47
- context "#docker?" do
48
- # FIXME: use a real VividMash for these tests instead of stubbing
49
- it "is false by default" do
50
- expect(node).to receive(:read).with("virtualization", "systems", "docker").and_return(nil)
51
- expect(ChefUtils.docker?(node)).to be false
52
- end
53
- it "is true when ohai reports a docker guest" do
54
- expect(node).to receive(:read).with("virtualization", "systems", "docker").and_return("guest")
55
- expect(ChefUtils.docker?(node)).to be true
56
- end
57
- it "is false for any other value other than guest" do
58
- expect(node).to receive(:read).with("virtualization", "systems", "docker").and_return("some nonsense")
59
- expect(ChefUtils.docker?(node)).to be false
60
- end
61
- end
62
-
63
- context "#systemd?" do
64
- # FIXME: somehow test the train helpers
65
- it "returns false if /proc/1/comm does not exist" do
66
- expect(File).to receive(:exist?).with("/proc/1/comm").and_return(false)
67
- expect(ChefUtils.systemd?(node)).to be false
68
- end
69
-
70
- it "returns false if /proc/1/comm is not systemd" do
71
- expect(File).to receive(:exist?).with("/proc/1/comm").and_return(true)
72
- expect(File).to receive(:open).with("/proc/1/comm").and_return(StringIO.new("upstart\n"))
73
- expect(ChefUtils.systemd?(node)).to be false
74
- end
75
-
76
- it "returns true if /proc/1/comm is systemd" do
77
- expect(File).to receive(:exist?).with("/proc/1/comm").and_return(true)
78
- expect(File).to receive(:open).with("/proc/1/comm").and_return(StringIO.new("systemd\n"))
79
- expect(ChefUtils.systemd?(node)).to be true
80
- end
81
- end
82
-
83
- context "#kitchen?" do
84
- before do
85
- @saved = ENV["TEST_KITCHEN"]
86
- end
87
- after do
88
- ENV["TEST_KITCHEN"] = @saved
89
- end
90
-
91
- it "return true if ENV['TEST_KITCHEN'] is not set" do
92
- ENV.delete("TEST_KITCHEN")
93
- expect(ChefUtils.kitchen?(node)).to be false
94
- end
95
-
96
- it "return true if ENV['TEST_KITCHEN'] is nil" do
97
- ENV["TEST_KITCHEN"] = nil
98
- expect(ChefUtils.kitchen?(node)).to be false
99
- end
100
-
101
- it "return true if ENV['TEST_KITCHEN'] is set" do
102
- ENV["TEST_KITCHEN"] = "1"
103
- expect(ChefUtils.kitchen?(node)).to be true
104
- end
105
- end
106
-
107
- context "#ci?" do
108
- before do
109
- @saved = ENV["CI"]
110
- end
111
- after do
112
- ENV["CI"] = @saved
113
- end
114
-
115
- it "return true if ENV['CI'] is not set" do
116
- ENV.delete("CI")
117
- expect(ChefUtils.ci?(node)).to be false
118
- end
119
-
120
- it "return true if ENV['CI'] is nil" do
121
- ENV["CI"] = nil
122
- expect(ChefUtils.ci?(node)).to be false
123
- end
124
-
125
- it "return true if ENV['CI'] is set" do
126
- ENV["CI"] = "1"
127
- expect(ChefUtils.ci?(node)).to be true
128
- end
129
- end
130
-
131
- context "#has_systemd_service_unit?" do
132
- # FIXME: test through train helpers
133
-
134
- before do
135
- %w{ /etc /usr/lib /lib /run }.each do |base|
136
- allow(File).to receive(:exist?).with("#{base}/systemd/system/example.service").and_return(false)
137
- allow(File).to receive(:exist?).with("#{base}/systemd/system/example@.service").and_return(false)
138
- end
139
- end
140
-
141
- it "is false if no unit is present" do
142
- expect(ChefUtils.has_systemd_service_unit?("example")).to be false
143
- end
144
-
145
- it "is false if no template is present" do
146
- expect(ChefUtils.has_systemd_service_unit?("example@instance1")).to be false
147
- end
148
-
149
- %w{ /etc /usr/lib /lib /run }.each do |base|
150
- it "finds a unit in #{base}" do
151
- expect(File).to receive(:exist?).with("#{base}/systemd/system/example.service").and_return(true)
152
- expect(ChefUtils.has_systemd_service_unit?("example")).to be true
153
- end
154
-
155
- it "finds a template in #{base}" do
156
- expect(File).to receive(:exist?).with("#{base}/systemd/system/example@.service").and_return(true)
157
- expect(ChefUtils.has_systemd_service_unit?("example@instance1")).to be true
158
- end
159
- end
160
- end
161
-
162
- context "#has_systemd_unit?" do
163
- # FIXME: test through train helpers
164
-
165
- before do
166
- %w{ /etc /usr/lib /lib /run }.each do |base|
167
- allow(File).to receive(:exist?).with("#{base}/systemd/system/example.mount").and_return(false)
168
- end
169
- end
170
-
171
- it "is false if no unit is present" do
172
- expect(ChefUtils.has_systemd_unit?("example.mount")).to be false
173
- end
174
-
175
- %w{ /etc /usr/lib /lib /run }.each do |base|
176
- it "finds a unit in #{base}" do
177
- expect(File).to receive(:exist?).with("#{base}/systemd/system/example.mount").and_return(true)
178
- expect(ChefUtils.has_systemd_unit?("example.mount")).to be true
179
- end
180
- end
181
- end
182
-
183
- context "#include_recipe?" do
184
- it "is true when the recipe has been seen by the node" do
185
- expect(node).to receive(:recipe?).with("myrecipe").and_return(true)
186
- expect(ChefUtils.include_recipe?("myrecipe", node)).to be true
187
- end
188
- it "is false when the recipe has not been seen by the node" do
189
- expect(node).to receive(:recipe?).with("myrecipe").and_return(false)
190
- expect(ChefUtils.include_recipe?("myrecipe", node)).to be false
191
- end
192
- it "the alias is true when the recipe has been seen by the node" do
193
- expect(node).to receive(:recipe?).with("myrecipe").and_return(true)
194
- expect(ChefUtils.includes_recipe?("myrecipe", node)).to be true
195
- end
196
- it "the alias is false when the recipe has not been seen by the node" do
197
- expect(node).to receive(:recipe?).with("myrecipe").and_return(false)
198
- expect(ChefUtils.includes_recipe?("myrecipe", node)).to be false
199
- end
200
- end
201
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright:: Copyright (c) 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 "spec_helper"
20
+
21
+ RSpec.describe ChefUtils::DSL::Introspection do
22
+ class IntrospectionTestClass
23
+ include ChefUtils::DSL::Introspection
24
+ attr_accessor :node
25
+
26
+ def initialize(node)
27
+ @node = node
28
+ end
29
+ end
30
+
31
+ let(:node) { double("node") }
32
+
33
+ let(:test_instance) { IntrospectionTestClass.new(node) }
34
+
35
+ context "#effortless?" do
36
+ # FIXME: use a real VividMash for these tests instead of stubbing
37
+ it "is false by default" do
38
+ expect(node).to receive(:read).with("chef_packages", "chef", "chef_effortless").and_return(nil)
39
+ expect(ChefUtils.effortless?(node)).to be false
40
+ end
41
+ it "is true when ohai reports a effortless" do
42
+ expect(node).to receive(:read).with("chef_packages", "chef", "chef_effortless").and_return(true)
43
+ expect(ChefUtils.effortless?(node)).to be true
44
+ end
45
+ end
46
+
47
+ context "#docker?" do
48
+ # FIXME: use a real VividMash for these tests instead of stubbing
49
+ it "is false by default" do
50
+ expect(node).to receive(:read).with("virtualization", "systems", "docker").and_return(nil)
51
+ expect(ChefUtils.docker?(node)).to be false
52
+ end
53
+ it "is true when ohai reports a docker guest" do
54
+ expect(node).to receive(:read).with("virtualization", "systems", "docker").and_return("guest")
55
+ expect(ChefUtils.docker?(node)).to be true
56
+ end
57
+ it "is false for any other value other than guest" do
58
+ expect(node).to receive(:read).with("virtualization", "systems", "docker").and_return("some nonsense")
59
+ expect(ChefUtils.docker?(node)).to be false
60
+ end
61
+ end
62
+
63
+ context "#systemd?" do
64
+ # FIXME: somehow test the train helpers
65
+ it "returns false if /proc/1/comm does not exist" do
66
+ expect(File).to receive(:exist?).with("/proc/1/comm").and_return(false)
67
+ expect(ChefUtils.systemd?(node)).to be false
68
+ end
69
+
70
+ it "returns false if /proc/1/comm is not systemd" do
71
+ expect(File).to receive(:exist?).with("/proc/1/comm").and_return(true)
72
+ expect(File).to receive(:open).with("/proc/1/comm").and_return(StringIO.new("upstart\n"))
73
+ expect(ChefUtils.systemd?(node)).to be false
74
+ end
75
+
76
+ it "returns true if /proc/1/comm is systemd" do
77
+ expect(File).to receive(:exist?).with("/proc/1/comm").and_return(true)
78
+ expect(File).to receive(:open).with("/proc/1/comm").and_return(StringIO.new("systemd\n"))
79
+ expect(ChefUtils.systemd?(node)).to be true
80
+ end
81
+ end
82
+
83
+ context "#kitchen?" do
84
+ before do
85
+ @saved = ENV["TEST_KITCHEN"]
86
+ end
87
+ after do
88
+ ENV["TEST_KITCHEN"] = @saved
89
+ end
90
+
91
+ it "return true if ENV['TEST_KITCHEN'] is not set" do
92
+ ENV.delete("TEST_KITCHEN")
93
+ expect(ChefUtils.kitchen?(node)).to be false
94
+ end
95
+
96
+ it "return true if ENV['TEST_KITCHEN'] is nil" do
97
+ ENV["TEST_KITCHEN"] = nil
98
+ expect(ChefUtils.kitchen?(node)).to be false
99
+ end
100
+
101
+ it "return true if ENV['TEST_KITCHEN'] is set" do
102
+ ENV["TEST_KITCHEN"] = "1"
103
+ expect(ChefUtils.kitchen?(node)).to be true
104
+ end
105
+ end
106
+
107
+ context "#ci?" do
108
+ before do
109
+ @saved = ENV["CI"]
110
+ end
111
+ after do
112
+ ENV["CI"] = @saved
113
+ end
114
+
115
+ it "return true if ENV['CI'] is not set" do
116
+ ENV.delete("CI")
117
+ expect(ChefUtils.ci?(node)).to be false
118
+ end
119
+
120
+ it "return true if ENV['CI'] is nil" do
121
+ ENV["CI"] = nil
122
+ expect(ChefUtils.ci?(node)).to be false
123
+ end
124
+
125
+ it "return true if ENV['CI'] is set" do
126
+ ENV["CI"] = "1"
127
+ expect(ChefUtils.ci?(node)).to be true
128
+ end
129
+ end
130
+
131
+ context "#has_systemd_service_unit?" do
132
+ # FIXME: test through train helpers
133
+
134
+ before do
135
+ %w{ /etc /usr/lib /lib /run }.each do |base|
136
+ allow(File).to receive(:exist?).with("#{base}/systemd/system/example.service").and_return(false)
137
+ allow(File).to receive(:exist?).with("#{base}/systemd/system/example@.service").and_return(false)
138
+ end
139
+ end
140
+
141
+ it "is false if no unit is present" do
142
+ expect(ChefUtils.has_systemd_service_unit?("example")).to be false
143
+ end
144
+
145
+ it "is false if no template is present" do
146
+ expect(ChefUtils.has_systemd_service_unit?("example@instance1")).to be false
147
+ end
148
+
149
+ %w{ /etc /usr/lib /lib /run }.each do |base|
150
+ it "finds a unit in #{base}" do
151
+ expect(File).to receive(:exist?).with("#{base}/systemd/system/example.service").and_return(true)
152
+ expect(ChefUtils.has_systemd_service_unit?("example")).to be true
153
+ end
154
+
155
+ it "finds a template in #{base}" do
156
+ expect(File).to receive(:exist?).with("#{base}/systemd/system/example@.service").and_return(true)
157
+ expect(ChefUtils.has_systemd_service_unit?("example@instance1")).to be true
158
+ end
159
+ end
160
+ end
161
+
162
+ context "#has_systemd_unit?" do
163
+ # FIXME: test through train helpers
164
+
165
+ before do
166
+ %w{ /etc /usr/lib /lib /run }.each do |base|
167
+ allow(File).to receive(:exist?).with("#{base}/systemd/system/example.mount").and_return(false)
168
+ end
169
+ end
170
+
171
+ it "is false if no unit is present" do
172
+ expect(ChefUtils.has_systemd_unit?("example.mount")).to be false
173
+ end
174
+
175
+ %w{ /etc /usr/lib /lib /run }.each do |base|
176
+ it "finds a unit in #{base}" do
177
+ expect(File).to receive(:exist?).with("#{base}/systemd/system/example.mount").and_return(true)
178
+ expect(ChefUtils.has_systemd_unit?("example.mount")).to be true
179
+ end
180
+ end
181
+ end
182
+
183
+ context "#include_recipe?" do
184
+ it "is true when the recipe has been seen by the node" do
185
+ expect(node).to receive(:recipe?).with("myrecipe").and_return(true)
186
+ expect(ChefUtils.include_recipe?("myrecipe", node)).to be true
187
+ end
188
+ it "is false when the recipe has not been seen by the node" do
189
+ expect(node).to receive(:recipe?).with("myrecipe").and_return(false)
190
+ expect(ChefUtils.include_recipe?("myrecipe", node)).to be false
191
+ end
192
+ it "the alias is true when the recipe has been seen by the node" do
193
+ expect(node).to receive(:recipe?).with("myrecipe").and_return(true)
194
+ expect(ChefUtils.includes_recipe?("myrecipe", node)).to be true
195
+ end
196
+ it "the alias is false when the recipe has not been seen by the node" do
197
+ expect(node).to receive(:recipe?).with("myrecipe").and_return(false)
198
+ expect(ChefUtils.includes_recipe?("myrecipe", node)).to be false
199
+ end
200
+ end
201
+ end