chef-utils 0.0.1 → 15.5.9

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.
@@ -0,0 +1,116 @@
1
+ #
2
+ # Copyright:: Copyright 2018-2019, 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
+
18
+ require "spec_helper"
19
+
20
+ RSpec.describe ChefUtils::DSL::Service do
21
+ class ServiceTestClass
22
+ include ChefUtils::DSL::Service
23
+ end
24
+
25
+ let(:test_instance) { ServiceTestClass.new }
26
+
27
+ context "#debianrcd?" do
28
+ it "is true if the binary is installed" do
29
+ expect(File).to receive(:exist?).with("/usr/sbin/update-rc.d").and_return(true)
30
+ expect(test_instance.debianrcd?).to be true
31
+ end
32
+ it "is false if the binary is not installed" do
33
+ expect(File).to receive(:exist?).with("/usr/sbin/update-rc.d").and_return(false)
34
+ expect(test_instance.debianrcd?).to be false
35
+ end
36
+ end
37
+
38
+ context "#invokercd?" do
39
+ it "is true if the binary is installed" do
40
+ expect(File).to receive(:exist?).with("/usr/sbin/invoke-rc.d").and_return(true)
41
+ expect(test_instance.invokercd?).to be true
42
+ end
43
+ it "is false if the binary is not installed" do
44
+ expect(File).to receive(:exist?).with("/usr/sbin/invoke-rc.d").and_return(false)
45
+ expect(test_instance.invokercd?).to be false
46
+ end
47
+ end
48
+
49
+ context "#upstart?" do
50
+ it "is true if the binary is installed" do
51
+ expect(File).to receive(:exist?).with("/sbin/initctl").and_return(true)
52
+ expect(test_instance.upstart?).to be true
53
+ end
54
+ it "is false if the binary is not installed" do
55
+ expect(File).to receive(:exist?).with("/sbin/initctl").and_return(false)
56
+ expect(test_instance.upstart?).to be false
57
+ end
58
+ end
59
+
60
+ context "#insserv?" do
61
+ it "is true if the binary is installed" do
62
+ expect(File).to receive(:exist?).with("/sbin/insserv").and_return(true)
63
+ expect(test_instance.insserv?).to be true
64
+ end
65
+ it "is false if the binary is not installed" do
66
+ expect(File).to receive(:exist?).with("/sbin/insserv").and_return(false)
67
+ expect(test_instance.insserv?).to be false
68
+ end
69
+ end
70
+
71
+ context "#redhatrcd?" do
72
+ it "is true if the binary is installed" do
73
+ expect(File).to receive(:exist?).with("/sbin/chkconfig").and_return(true)
74
+ expect(test_instance.redhatrcd?).to be true
75
+ end
76
+ it "is false if the binary is not installed" do
77
+ expect(File).to receive(:exist?).with("/sbin/chkconfig").and_return(false)
78
+ expect(test_instance.redhatrcd?).to be false
79
+ end
80
+ end
81
+
82
+ context "#service_script_exist?" do
83
+ it "is true if the type is :initd and /etc/init.d script exists" do
84
+ expect(File).to receive(:exist?).with("/etc/init.d/example").and_return(true)
85
+ expect(test_instance.service_script_exist?(:initd, "example")).to be true
86
+ end
87
+ it "is false if the type is :initd and /etc/init.d script does not exist" do
88
+ expect(File).to receive(:exist?).with("/etc/init.d/example").and_return(false)
89
+ expect(test_instance.service_script_exist?(:initd, "example")).to be false
90
+ end
91
+ it "is true if the type is :upstart and /etc/init script exists" do
92
+ expect(File).to receive(:exist?).with("/etc/init/example.conf").and_return(true)
93
+ expect(test_instance.service_script_exist?(:upstart, "example")).to be true
94
+ end
95
+ it "is false if the type is :upstart and /etc/init script does not exist" do
96
+ expect(File).to receive(:exist?).with("/etc/init/example.conf").and_return(false)
97
+ expect(test_instance.service_script_exist?(:upstart, "example")).to be false
98
+ end
99
+ it "is true if the type is :xinetd and /etc/xinetd.d script exists" do
100
+ expect(File).to receive(:exist?).with("/etc/xinetd.d/example").and_return(true)
101
+ expect(test_instance.service_script_exist?(:xinetd, "example")).to be true
102
+ end
103
+ it "is false if the type is :xinetd and /etc/xinetd.d script does not exist" do
104
+ expect(File).to receive(:exist?).with("/etc/xinetd.d/example").and_return(false)
105
+ expect(test_instance.service_script_exist?(:xinetd, "example")).to be false
106
+ end
107
+ it "is true if the type is :etc_rcd and /etc/rc.d script exists" do
108
+ expect(File).to receive(:exist?).with("/etc/rc.d/example").and_return(true)
109
+ expect(test_instance.service_script_exist?(:etc_rcd, "example")).to be true
110
+ end
111
+ it "is false if the type is :etc_rcd and /etc/rc.d script does not exist" do
112
+ expect(File).to receive(:exist?).with("/etc/rc.d/example").and_return(false)
113
+ expect(test_instance.service_script_exist?(:etc_rcd, "example")).to be false
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,168 @@
1
+ #
2
+ # Copyright:: Copyright 2018-2019, 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
+
18
+ require "spec_helper"
19
+
20
+ RSpec.describe ChefUtils::DSL::Which do
21
+
22
+ class WhichTestClass
23
+ include ChefUtils::DSL::Which
24
+ end
25
+
26
+ let(:test) { WhichTestClass.new }
27
+
28
+ describe "#which" do
29
+ def self.test_which(description, *args, path: ["/dir1", "/dir2" ].join(File::PATH_SEPARATOR), finds: nil, others: [], directory: false, &block)
30
+ it description do
31
+ # stub the ENV['PATH']
32
+ expect(ENV).to receive(:[]).with("PATH").and_return(path)
33
+
34
+ # most files should not be found
35
+ allow(File).to receive(:executable?).and_return(false)
36
+ allow(File).to receive(:directory?).and_return(false)
37
+
38
+ # stub the expectation
39
+ expect(File).to receive(:executable?).with(finds).and_return(true) if finds
40
+
41
+ # if the file we find is a directory
42
+ expect(File).to receive(:directory?).with(finds).and_return(true) if finds && directory
43
+
44
+ # allow for stubbing other paths to exist that we should not find
45
+ others.each do |other|
46
+ allow(File).to receive(:executable?).with(other).and_return(true)
47
+ end
48
+
49
+ # setup the actual expectation on the return value
50
+ if finds && !directory
51
+ expect(test.which(*args, &block)).to eql(finds)
52
+ else
53
+ expect(test.which(*args, &block)).to eql(false)
54
+ end
55
+ end
56
+ end
57
+
58
+ context "simple usage" do
59
+ test_which("returns false when it does not find anything", "foo1")
60
+
61
+ ["/dir1", "/dir2" ].each do |dir|
62
+ test_which("finds `foo1` in #{dir} when it is stubbed", "foo1", finds: "#{dir}/foo1")
63
+ end
64
+
65
+ test_which("does not find an executable directory", "foo1", finds: "/dir1/foo1", directory: true)
66
+ end
67
+
68
+ context "with an array of args" do
69
+ test_which("finds the first arg", "foo1", "foo2", finds: "/dir2/foo1")
70
+
71
+ test_which("finds the second arg", "foo1", "foo2", finds: "/dir2/foo2")
72
+
73
+ test_which("finds the first arg when there's both", "foo1", "foo2", finds: "/dir2/foo1", others: [ "/dir1/foo2" ])
74
+
75
+ test_which("and the directory order can be reversed", "foo1", "foo2", finds: "/dir1/foo1", others: [ "/dir2/foo2" ])
76
+
77
+ test_which("or be the same", "foo1", "foo2", finds: "/dir1/foo1", others: [ "/dir1/foo2" ])
78
+ end
79
+
80
+ context "with a block" do
81
+ test_which("doesnt find it if its false", "foo1", others: [ "/dir1/foo1" ]) do |f|
82
+ false
83
+ end
84
+
85
+ test_which("finds it if its true", "foo1", finds: "/dir1/foo1") do |f|
86
+ true
87
+ end
88
+
89
+ test_which("passes in the filename as the arg", "foo1", finds: "/dir1/foo1") do |f|
90
+ raise "bad arg to block" unless f == "/dir1/foo1"
91
+
92
+ true
93
+ end
94
+
95
+ test_which("arrays with blocks", "foo1", "foo2", finds: "/dir2/foo1", others: [ "/dir1/foo2" ]) do |f|
96
+ raise "bad arg to block" unless f == "/dir2/foo1" || f == "/dir1/foo2"
97
+
98
+ true
99
+ end
100
+ end
101
+
102
+ context "nil path" do
103
+ test_which("returns false when it does not find anything", "foo1", path: nil)
104
+ end
105
+ end
106
+
107
+ describe "#where" do
108
+ def self.test_where(description, *args, path: ["/dir1", "/dir2" ].join(File::PATH_SEPARATOR), finds: [], others: [], &block)
109
+ it description do
110
+ # stub the ENV['PATH']
111
+ expect(ENV).to receive(:[]).with("PATH").and_return(path)
112
+
113
+ # most files should not be found
114
+ allow(File).to receive(:executable?).and_return(false)
115
+ allow(File).to receive(:directory?).and_return(false)
116
+
117
+ # allow for stubbing other paths to exist that we should not return
118
+ others.each do |other|
119
+ allow(File).to receive(:executable?).with(other).and_return(true)
120
+ end
121
+
122
+ # stub the expectation
123
+ finds.each do |path|
124
+ expect(File).to receive(:executable?).with(path).and_return(true)
125
+ end
126
+
127
+ # setup the actual expectation on the return value
128
+ expect(test.where(*args, &block)).to eql(finds)
129
+ end
130
+ end
131
+
132
+ context "simple usage" do
133
+ test_where("returns empty array when it doesn't find anything", "foo1")
134
+
135
+ ["/dir1", "/dir2" ].each do |dir|
136
+ test_where("finds `foo1` in #{dir} when it is stubbed", "foo1", finds: [ "#{dir}/foo1" ])
137
+ end
138
+
139
+ test_where("finds `foo1` in all directories", "foo1", finds: [ "/dir1/foo1", "/dir2/foo1" ])
140
+ end
141
+
142
+ context "with an array of args" do
143
+ test_where("finds the first arg", "foo1", "foo2", finds: [ "/dir2/foo1" ])
144
+
145
+ test_where("finds the second arg", "foo1", "foo2", finds: [ "/dir2/foo2" ])
146
+
147
+ test_where("finds foo1 before foo2 if the dirs are reversed", "foo1", "foo2", finds: [ "/dir1/foo1", "/dir2/foo2" ])
148
+
149
+ test_where("finds them both in the same directory", "foo1", "foo2", finds: [ "/dir1/foo1", "/dir1/foo2" ])
150
+
151
+ test_where("finds foo2 first if they're reversed", "foo2", "foo1", finds: [ "/dir1/foo2", "/dir1/foo1" ])
152
+ end
153
+
154
+ context "with a block do" do
155
+ test_where("finds foo1 and foo2 if they exist and the block is true", "foo1", "foo2", finds: [ "/dir1/foo2", "/dir2/foo2" ]) do
156
+ true
157
+ end
158
+
159
+ test_where("does not finds foo1 and foo2 if they exist and the block is false", "foo1", "foo2", others: [ "/dir1/foo2", "/dir2/foo2" ]) do
160
+ false
161
+ end
162
+ end
163
+
164
+ context "with a nil path" do
165
+ test_where("returns empty array when it doesn't find anything", "foo1", path: nil)
166
+ end
167
+ end
168
+ end
@@ -0,0 +1,50 @@
1
+ #
2
+ # Author:: Matthew Kent (<mkent@magoazul.com>)
3
+ # Copyright:: Copyright 2011-2016, 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::Mash do
22
+ it "should duplicate a simple key/value mash to a new mash" do
23
+ data = { x: "one", y: "two", z: "three" }
24
+ @orig = ChefUtils::Mash.new(data)
25
+ @copy = @orig.dup
26
+ expect(@copy.to_hash).to eq(ChefUtils::Mash.new(data).to_hash)
27
+ @copy[:x] = "four"
28
+ expect(@orig[:x]).to eq("one")
29
+ end
30
+
31
+ it "should duplicate a mash with an array to a new mash" do
32
+ data = { x: "one", y: "two", z: [1, 2, 3] }
33
+ @orig = ChefUtils::Mash.new(data)
34
+ @copy = @orig.dup
35
+ expect(@copy.to_hash).to eq(ChefUtils::Mash.new(data).to_hash)
36
+ @copy[:z] << 4
37
+ expect(@orig[:z]).to eq([1, 2, 3])
38
+ end
39
+
40
+ it "should duplicate a nested mash to a new mash" do
41
+ data = { x: "one", y: "two", z: ChefUtils::Mash.new({ a: [1, 2, 3] }) }
42
+ @orig = ChefUtils::Mash.new(data)
43
+ @copy = @orig.dup
44
+ expect(@copy.to_hash).to eq(ChefUtils::Mash.new(data).to_hash)
45
+ @copy[:z][:a] << 4
46
+ expect(@orig[:z][:a]).to eq([1, 2, 3])
47
+ end
48
+
49
+ # add more!
50
+ end
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 15.5.9
5
5
  platform: ruby
6
6
  authors:
7
- - Adam Jacob
7
+ - Chef Software, Inc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-15 00:00:00.000000000 Z
11
+ date: 2019-11-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
15
- - adam@chef.io
15
+ - oss@chef.io
16
16
  executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
@@ -20,11 +20,39 @@ files:
20
20
  - LICENSE
21
21
  - Rakefile
22
22
  - chef-utils.gemspec
23
+ - lib/chef-utils.rb
24
+ - lib/chef-utils/dsl/architecture.rb
25
+ - lib/chef-utils/dsl/introspection.rb
26
+ - lib/chef-utils/dsl/os.rb
27
+ - lib/chef-utils/dsl/path_sanity.rb
28
+ - lib/chef-utils/dsl/platform.rb
29
+ - lib/chef-utils/dsl/platform_family.rb
30
+ - lib/chef-utils/dsl/service.rb
31
+ - lib/chef-utils/dsl/train_helpers.rb
32
+ - lib/chef-utils/dsl/which.rb
33
+ - lib/chef-utils/internal.rb
34
+ - lib/chef-utils/mash.rb
23
35
  - lib/chef-utils/version.rb
24
- homepage: https://github.com/chef/chef
36
+ - spec/spec_helper.rb
37
+ - spec/unit/dsl/architecture_spec.rb
38
+ - spec/unit/dsl/dsl_spec.rb
39
+ - spec/unit/dsl/introspection_spec.rb
40
+ - spec/unit/dsl/os_spec.rb
41
+ - spec/unit/dsl/path_sanity_spec.rb
42
+ - spec/unit/dsl/platform_family_spec.rb
43
+ - spec/unit/dsl/platform_spec.rb
44
+ - spec/unit/dsl/service_spec.rb
45
+ - spec/unit/dsl/which_spec.rb
46
+ - spec/unit/mash_spec.rb
47
+ homepage: https://github.com/chef/chef/tree/master/chef-utils
25
48
  licenses:
26
49
  - Apache-2.0
27
- metadata: {}
50
+ metadata:
51
+ bug_tracker_uri: https://github.com/chef/chef/issues
52
+ changelog_uri: https://github.com/chef/chef/CHANGELOG.md
53
+ documentation_uri: https://github.com/chef/chef/tree/master/chef-utils/README.md
54
+ homepage_uri: https://github.com/chef/chef/tree/master/chef-utils
55
+ source_code_uri: https://github.com/chef/chef/tree/master/chef-utils
28
56
  post_install_message:
29
57
  rdoc_options: []
30
58
  require_paths:
@@ -40,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
40
68
  - !ruby/object:Gem::Version
41
69
  version: '0'
42
70
  requirements: []
43
- rubygems_version: 3.0.2
71
+ rubygems_version: 3.0.3
44
72
  signing_key:
45
73
  specification_version: 4
46
74
  summary: Basic utility functions for Core Chef development