wright 0.2.0 → 0.3.0
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.
- checksums.yaml +4 -4
- data/NEWS.md +8 -0
- data/README.md +2 -0
- data/Rakefile +6 -0
- data/bin/wright +6 -0
- data/lib/wright/cli.rb +68 -0
- data/lib/wright/dsl.rb +1 -1
- data/lib/wright/provider/directory.rb +17 -12
- data/lib/wright/provider/file.rb +24 -17
- data/lib/wright/provider/group/darwin_directory_service.rb +1 -8
- data/lib/wright/provider/group/gnu_passwd.rb +0 -1
- data/lib/wright/provider/group.rb +6 -12
- data/lib/wright/provider/package/apt.rb +9 -21
- data/lib/wright/provider/package/homebrew.rb +5 -18
- data/lib/wright/provider/package.rb +22 -11
- data/lib/wright/provider/symlink.rb +17 -22
- data/lib/wright/provider/user/darwin_directory_service.rb +65 -0
- data/lib/wright/provider/user/gnu_passwd.rb +6 -7
- data/lib/wright/provider/user.rb +6 -12
- data/lib/wright/provider.rb +20 -2
- data/lib/wright/resource/directory.rb +19 -20
- data/lib/wright/resource/file.rb +19 -15
- data/lib/wright/resource/symlink.rb +1 -0
- data/lib/wright/resource/user.rb +2 -1
- data/lib/wright/resource.rb +1 -1
- data/lib/wright/util/file_owner.rb +61 -0
- data/lib/wright/util/file_permissions.rb +21 -30
- data/lib/wright/util/stolen_from_activesupport.rb +1 -1
- data/lib/wright/util/user.rb +48 -23
- data/lib/wright/util.rb +10 -6
- data/lib/wright/version.rb +1 -1
- data/lib/wright.rb +1 -0
- data/man/wright.1 +202 -0
- data/spec/cli/shebang.rb +3 -0
- data/spec/cli_spec.rb +64 -0
- data/spec/dsl_spec.rb +8 -3
- data/spec/provider/group/darwin_directory_service_spec.rb +3 -2
- data/spec/provider/package/apt/apt-cache_policy_abcde.stdout +7 -0
- data/spec/provider/package/apt/apt-cache_policy_htop.stdout +6 -0
- data/spec/provider/package/apt/apt-cache_policy_not-a-real-package.return +1 -0
- data/spec/provider/package/apt_spec.rb +17 -211
- data/spec/provider/package/homebrew_spec.rb +11 -164
- data/spec/provider/package_spec.rb +151 -7
- data/spec/provider/user/darwin_directory_service/dscl-delete-user.return +1 -0
- data/spec/provider/user/darwin_directory_service/dscl-delete-user.stderr +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-delete-user.stdout +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-full-name.return +1 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-full-name.stderr +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-full-name.stdout +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-home.return +1 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-home.stderr +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-home.stdout +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-password.return +1 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-password.stderr +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-password.stdout +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-primary-group.return +1 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-primary-group.stderr +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-primary-group.stdout +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-shell.return +1 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-shell.stderr +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-shell.stdout +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-uid.return +1 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-uid.stderr +0 -0
- data/spec/provider/user/darwin_directory_service/dscl-new-user-uid.stdout +0 -0
- data/spec/provider/user/darwin_directory_service_spec.rb +167 -0
- data/spec/provider/user/gnu_passwd_spec.rb +5 -5
- data/spec/resource/directory_spec.rb +17 -15
- data/spec/resource/file_spec.rb +17 -15
- data/spec/resource_spec.rb +1 -1
- data/spec/spec_helpers/test_coverage.rb +1 -1
- data/spec/util/file_owner_spec.rb +36 -0
- data/spec/util/file_permissions_spec.rb +6 -6
- data/spec/util/user_spec.rb +0 -17
- data/spec/util_spec.rb +64 -5
- metadata +91 -41
- data/spec/provider/package/apt/dpkg-query_-s_abcde.stdout +0 -23
- data/spec/provider/package/apt/dpkg-query_-s_htop.stdout +0 -19
- data/spec/provider/package/apt/dpkg-query_-s_not-a-real-package.return +0 -1
- data/spec/provider/package/apt/dpkg-query_-s_not-a-real-package.stderr +0 -3
- data/spec/provider/package/apt/dpkg-query_-s_vlc.return +0 -1
- data/spec/provider/package/apt/dpkg-query_-s_vlc.stderr +0 -3
- /data/spec/provider/group/darwin_directory_service/{dseditgroup_-o_create_-i_499_newgroup.return → dseditgroup_-o_create_-i_2_newgroup.return} +0 -0
- /data/spec/provider/group/darwin_directory_service/{dseditgroup_-o_create_-i_499_newgroup.stderr → dseditgroup_-o_create_-i_2_newgroup.stderr} +0 -0
- /data/spec/provider/group/darwin_directory_service/{dseditgroup_-o_create_-i_499_newgroup.stdout → dseditgroup_-o_create_-i_2_newgroup.stdout} +0 -0
- /data/spec/provider/package/apt/{dpkg-query_-s_abcde.return → apt-cache_policy_abcde.return} +0 -0
- /data/spec/provider/package/apt/{dpkg-query_-s_abcde.stderr → apt-cache_policy_abcde.stderr} +0 -0
- /data/spec/provider/package/apt/{dpkg-query_-s_htop.return → apt-cache_policy_htop.return} +0 -0
- /data/spec/provider/package/apt/{dpkg-query_-s_htop.stderr → apt-cache_policy_htop.stderr} +0 -0
- /data/spec/provider/package/apt/{dpkg-query_-s_not-a-real-package.stdout → apt-cache_policy_not-a-real-package.stderr} +0 -0
- /data/spec/provider/package/apt/{dpkg-query_-s_vlc.stdout → apt-cache_policy_not-a-real-package.stdout} +0 -0
|
@@ -16,23 +16,6 @@ describe Wright::Provider::Package::Homebrew do
|
|
|
16
16
|
before :each do
|
|
17
17
|
homebrew_dir = File.join(File.dirname(__FILE__), 'homebrew')
|
|
18
18
|
@fake_capture3 = FakeCapture3.new(homebrew_dir)
|
|
19
|
-
@install_message = ->(pkg) { "INFO: install package: '#{pkg}'\n" }
|
|
20
|
-
@install_message_dry = lambda do |pkg|
|
|
21
|
-
"INFO: (would) install package: '#{pkg}'\n"
|
|
22
|
-
end
|
|
23
|
-
@install_message_debug = lambda do |pkg|
|
|
24
|
-
"DEBUG: package already installed: '#{pkg}'\n"
|
|
25
|
-
end
|
|
26
|
-
@remove_message = ->(pkg) { "INFO: remove package: '#{pkg}'\n" }
|
|
27
|
-
@remove_message_dry = lambda do |pkg|
|
|
28
|
-
"INFO: (would) remove package: '#{pkg}'\n"
|
|
29
|
-
end
|
|
30
|
-
@remove_message_debug = lambda do |pkg|
|
|
31
|
-
"DEBUG: package already removed: '#{pkg}'\n"
|
|
32
|
-
end
|
|
33
|
-
@version_warning = lambda do |pkg, version|
|
|
34
|
-
"WARN: ignoring package version: '#{pkg} (#{version})'"
|
|
35
|
-
end
|
|
36
19
|
end
|
|
37
20
|
|
|
38
21
|
describe '#installed_versions' do
|
|
@@ -73,36 +56,15 @@ describe Wright::Provider::Package::Homebrew do
|
|
|
73
56
|
end
|
|
74
57
|
end
|
|
75
58
|
|
|
76
|
-
describe '#
|
|
77
|
-
it 'should install packages
|
|
59
|
+
describe '#install_package' do
|
|
60
|
+
it 'should install packages' do
|
|
78
61
|
pkg_name = 'cd-discid'
|
|
79
62
|
pkg_provider = package_provider(pkg_name)
|
|
80
|
-
brew_info_cmd = brew(:info, pkg_name)
|
|
81
63
|
brew_install_cmd = brew(:install, pkg_name)
|
|
82
64
|
|
|
83
|
-
@fake_capture3.expect(brew_info_cmd)
|
|
84
65
|
@fake_capture3.expect(brew_install_cmd)
|
|
85
66
|
@fake_capture3.stub do
|
|
86
|
-
|
|
87
|
-
reset_logger
|
|
88
|
-
pkg_provider.install
|
|
89
|
-
pkg_provider.updated?.must_equal true
|
|
90
|
-
end.must_output @install_message.call(pkg_name)
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
it 'should not try to install packages that are already installed' do
|
|
95
|
-
pkg_name = 'lame'
|
|
96
|
-
pkg_provider = package_provider(pkg_name)
|
|
97
|
-
brew_info_cmd = brew(:info, pkg_name)
|
|
98
|
-
|
|
99
|
-
@fake_capture3.expect(brew_info_cmd)
|
|
100
|
-
@fake_capture3.stub do
|
|
101
|
-
lambda do
|
|
102
|
-
reset_logger
|
|
103
|
-
pkg_provider.install
|
|
104
|
-
pkg_provider.updated?.must_equal false
|
|
105
|
-
end.must_output @install_message_debug.call(pkg_name)
|
|
67
|
+
pkg_provider.send(:install_package)
|
|
106
68
|
end
|
|
107
69
|
end
|
|
108
70
|
|
|
@@ -110,34 +72,27 @@ describe Wright::Provider::Package::Homebrew do
|
|
|
110
72
|
pkg_name = 'cd-discid'
|
|
111
73
|
pkg_version = '1.1'
|
|
112
74
|
pkg_provider = package_provider(pkg_name, pkg_version)
|
|
113
|
-
brew_info_cmd = brew(:info, pkg_name)
|
|
114
75
|
brew_install_cmd = brew(:install, pkg_name)
|
|
76
|
+
version_warning =
|
|
77
|
+
"WARN: ignoring package version: '#{pkg_name} (#{pkg_version})'\n"
|
|
115
78
|
|
|
116
|
-
install_message_with_warning =
|
|
117
|
-
@install_message.call(pkg_name) +
|
|
118
|
-
@version_warning.call(pkg_name, pkg_version) + "\n"
|
|
119
|
-
|
|
120
|
-
@fake_capture3.expect(brew_info_cmd)
|
|
121
79
|
@fake_capture3.expect(brew_install_cmd)
|
|
122
80
|
@fake_capture3.stub do
|
|
123
81
|
lambda do
|
|
124
82
|
reset_logger
|
|
125
|
-
pkg_provider.
|
|
126
|
-
|
|
127
|
-
end.must_output install_message_with_warning
|
|
83
|
+
pkg_provider.send(:install_package)
|
|
84
|
+
end.must_output version_warning
|
|
128
85
|
end
|
|
129
86
|
end
|
|
130
87
|
|
|
131
88
|
it 'should raise exceptions for unavailable packages' do
|
|
132
89
|
pkg_name = 'not-a-real-package'
|
|
133
90
|
pkg_provider = package_provider(pkg_name)
|
|
134
|
-
brew_info_cmd = brew(:info, pkg_name)
|
|
135
91
|
brew_install_cmd = brew(:install, pkg_name)
|
|
136
92
|
|
|
137
|
-
@fake_capture3.expect(brew_info_cmd)
|
|
138
93
|
@fake_capture3.expect(brew_install_cmd)
|
|
139
94
|
@fake_capture3.stub do
|
|
140
|
-
e = -> { pkg_provider.
|
|
95
|
+
e = -> { pkg_provider.send(:install_package) }.must_raise RuntimeError
|
|
141
96
|
wright_error = "cannot install package '#{pkg_name}'"
|
|
142
97
|
brew_error = "Error: No available formula for #{pkg_name} "
|
|
143
98
|
e.message.must_equal %(#{wright_error}: "#{brew_error}")
|
|
@@ -145,123 +100,15 @@ describe Wright::Provider::Package::Homebrew do
|
|
|
145
100
|
end
|
|
146
101
|
end
|
|
147
102
|
|
|
148
|
-
describe '#
|
|
149
|
-
it 'should remove packages
|
|
103
|
+
describe '#remove_package' do
|
|
104
|
+
it 'should remove packages' do
|
|
150
105
|
pkg_name = 'lame'
|
|
151
106
|
pkg_provider = package_provider(pkg_name)
|
|
152
|
-
brew_info_cmd = brew(:info, pkg_name)
|
|
153
107
|
brew_uninstall_cmd = brew(:uninstall, pkg_name)
|
|
154
108
|
|
|
155
|
-
@fake_capture3.expect(brew_info_cmd)
|
|
156
109
|
@fake_capture3.expect(brew_uninstall_cmd)
|
|
157
110
|
@fake_capture3.stub do
|
|
158
|
-
|
|
159
|
-
reset_logger
|
|
160
|
-
pkg_provider.remove
|
|
161
|
-
pkg_provider.updated?.must_equal true
|
|
162
|
-
end.must_output @remove_message.call(pkg_name)
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
it 'should not try to remove packages that are already removed' do
|
|
167
|
-
pkg_name = 'cd-discid'
|
|
168
|
-
pkg_provider = package_provider(pkg_name)
|
|
169
|
-
brew_info_cmd = brew(:info, pkg_name)
|
|
170
|
-
|
|
171
|
-
@fake_capture3.expect(brew_info_cmd)
|
|
172
|
-
@fake_capture3.stub do
|
|
173
|
-
lambda do
|
|
174
|
-
reset_logger
|
|
175
|
-
pkg_provider.remove
|
|
176
|
-
pkg_provider.updated?.must_equal false
|
|
177
|
-
end.must_output @remove_message_debug.call(pkg_name)
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
it 'should remove package versions that are currently installed' do
|
|
182
|
-
pkg_name = 'lame'
|
|
183
|
-
pkg_version = '3.99.5'
|
|
184
|
-
pkg_provider = package_provider(pkg_name, pkg_version)
|
|
185
|
-
brew_info_cmd = brew(:info, pkg_name)
|
|
186
|
-
brew_uninstall_cmd = brew(:uninstall, pkg_name)
|
|
187
|
-
|
|
188
|
-
@fake_capture3.expect(brew_info_cmd)
|
|
189
|
-
@fake_capture3.expect(brew_uninstall_cmd)
|
|
190
|
-
|
|
191
|
-
@fake_capture3.stub do
|
|
192
|
-
lambda do
|
|
193
|
-
reset_logger
|
|
194
|
-
pkg_provider.remove
|
|
195
|
-
pkg_provider.updated?.must_equal true
|
|
196
|
-
end.must_output @remove_message.call(pkg_name)
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
describe 'dry_run' do
|
|
202
|
-
it 'should not actually install packages' do
|
|
203
|
-
pkg_name = 'cd-discid'
|
|
204
|
-
pkg_provider = package_provider(pkg_name)
|
|
205
|
-
brew_cmd = brew(:info, pkg_name)
|
|
206
|
-
|
|
207
|
-
Wright.dry_run do
|
|
208
|
-
@fake_capture3.expect(brew_cmd)
|
|
209
|
-
@fake_capture3.stub do
|
|
210
|
-
lambda do
|
|
211
|
-
reset_logger
|
|
212
|
-
pkg_provider.install
|
|
213
|
-
end.must_output @install_message_dry.call(pkg_name)
|
|
214
|
-
end
|
|
215
|
-
end
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
it 'should not try to install packages that are already installed' do
|
|
219
|
-
pkg_name = 'lame'
|
|
220
|
-
pkg_provider = package_provider(pkg_name)
|
|
221
|
-
brew_cmd = brew(:info, pkg_name)
|
|
222
|
-
|
|
223
|
-
Wright.dry_run do
|
|
224
|
-
@fake_capture3.expect(brew_cmd)
|
|
225
|
-
@fake_capture3.stub do
|
|
226
|
-
lambda do
|
|
227
|
-
reset_logger
|
|
228
|
-
pkg_provider.install
|
|
229
|
-
pkg_provider.updated?.must_equal false
|
|
230
|
-
end.must_output @install_message_debug.call(pkg_name)
|
|
231
|
-
end
|
|
232
|
-
end
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
it 'should not actually remove packages' do
|
|
236
|
-
pkg_name = 'lame'
|
|
237
|
-
pkg_provider = package_provider(pkg_name)
|
|
238
|
-
brew_cmd = brew(:info, pkg_name)
|
|
239
|
-
|
|
240
|
-
Wright.dry_run do
|
|
241
|
-
@fake_capture3.expect(brew_cmd)
|
|
242
|
-
@fake_capture3.stub do
|
|
243
|
-
lambda do
|
|
244
|
-
reset_logger
|
|
245
|
-
pkg_provider.remove
|
|
246
|
-
end.must_output @remove_message_dry.call(pkg_name)
|
|
247
|
-
end
|
|
248
|
-
end
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
it 'should not try to remove packages that are already removed' do
|
|
252
|
-
pkg_name = 'cd-discid'
|
|
253
|
-
pkg_provider = package_provider(pkg_name)
|
|
254
|
-
brew_cmd = brew(:info, pkg_name)
|
|
255
|
-
|
|
256
|
-
Wright.dry_run do
|
|
257
|
-
@fake_capture3.expect(brew_cmd)
|
|
258
|
-
@fake_capture3.stub do
|
|
259
|
-
lambda do
|
|
260
|
-
reset_logger
|
|
261
|
-
pkg_provider.remove
|
|
262
|
-
pkg_provider.updated?.must_equal false
|
|
263
|
-
end.must_output @remove_message_debug.call(pkg_name)
|
|
264
|
-
end
|
|
111
|
+
pkg_provider.send(:remove_package)
|
|
265
112
|
end
|
|
266
113
|
end
|
|
267
114
|
end
|
|
@@ -4,15 +4,15 @@ require 'wright/provider'
|
|
|
4
4
|
require 'wright/provider/package'
|
|
5
5
|
|
|
6
6
|
describe Wright::Provider::Package do
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
describe '#uptodate?' do
|
|
8
|
+
before(:each) do
|
|
9
|
+
Wright::Provider::Package.send(:public, :uptodate?)
|
|
10
|
+
end
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
after(:each) do
|
|
13
|
+
Wright::Provider::Package.send(:private, :uptodate?)
|
|
14
|
+
end
|
|
14
15
|
|
|
15
|
-
describe '#uptodate?' do
|
|
16
16
|
it 'should return the correct status' do
|
|
17
17
|
pkg_resource = OpenStruct.new(name: 'foo')
|
|
18
18
|
pkg_provider = Wright::Provider::Package.new(pkg_resource)
|
|
@@ -60,4 +60,148 @@ describe Wright::Provider::Package do
|
|
|
60
60
|
e.message.must_equal "invalid action 'foobarbaz'"
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
|
+
|
|
64
|
+
describe '#install' do
|
|
65
|
+
before(:each) do
|
|
66
|
+
pkg = 'foo'
|
|
67
|
+
@resource = OpenStruct.new(name: pkg)
|
|
68
|
+
@package = Wright::Provider::Package.new(@resource)
|
|
69
|
+
@mock_provider = Minitest::Mock.new
|
|
70
|
+
@installed_versions_stub = -> { @mock_provider.installed_versions }
|
|
71
|
+
@install_package_stub = -> { @mock_provider.install_package }
|
|
72
|
+
|
|
73
|
+
@install_message = "INFO: install package: '#{pkg}'\n"
|
|
74
|
+
@install_message_dry = "INFO: (would) install package: '#{pkg}'\n"
|
|
75
|
+
@install_message_debug = "DEBUG: package already installed: '#{pkg}'\n"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'should install packages that are not yet installed' do
|
|
79
|
+
@mock_provider.expect(:installed_versions, [])
|
|
80
|
+
@mock_provider.expect(:install_package, true)
|
|
81
|
+
|
|
82
|
+
@package.stub(:installed_versions, @installed_versions_stub) do
|
|
83
|
+
@package.stub(:install_package, @install_package_stub) do
|
|
84
|
+
lambda do
|
|
85
|
+
reset_logger
|
|
86
|
+
@package.install
|
|
87
|
+
@package.updated?.must_equal true
|
|
88
|
+
end.must_output @install_message
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
@mock_provider.verify
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it 'should not try to install packages that already installed' do
|
|
95
|
+
@mock_provider.expect(:installed_versions, ['1.2.3'])
|
|
96
|
+
|
|
97
|
+
@package.stub(:installed_versions, @installed_versions_stub) do
|
|
98
|
+
@package.stub(:install_package, @install_package_stub) do
|
|
99
|
+
lambda do
|
|
100
|
+
reset_logger
|
|
101
|
+
@package.install
|
|
102
|
+
@package.updated?.must_equal false
|
|
103
|
+
end.must_output @install_message_debug
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
@mock_provider.verify
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it 'should not try to install packages in dry-run mode' do
|
|
110
|
+
@mock_provider.expect(:installed_versions, [])
|
|
111
|
+
|
|
112
|
+
@package.stub(:installed_versions, @installed_versions_stub) do
|
|
113
|
+
lambda do
|
|
114
|
+
reset_logger
|
|
115
|
+
Wright.dry_run { @package.install }
|
|
116
|
+
@package.updated?.must_equal true
|
|
117
|
+
end.must_output @install_message_dry
|
|
118
|
+
end
|
|
119
|
+
@mock_provider.verify
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
describe '#remove' do
|
|
124
|
+
before(:each) do
|
|
125
|
+
pkg = 'foo'
|
|
126
|
+
@resource = OpenStruct.new(name: pkg)
|
|
127
|
+
@package = Wright::Provider::Package.new(@resource)
|
|
128
|
+
@mock_provider = Minitest::Mock.new
|
|
129
|
+
@installed_versions_stub = -> { @mock_provider.installed_versions }
|
|
130
|
+
@remove_package_stub = -> { @mock_provider.remove_package }
|
|
131
|
+
|
|
132
|
+
@remove_message = "INFO: remove package: '#{pkg}'\n"
|
|
133
|
+
@remove_message_dry = "INFO: (would) remove package: '#{pkg}'\n"
|
|
134
|
+
@remove_message_debug = "DEBUG: package already removed: '#{pkg}'\n"
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it 'should remove packages that are currently installed' do
|
|
138
|
+
@mock_provider.expect(:installed_versions, ['1.2.3'])
|
|
139
|
+
@mock_provider.expect(:remove_package, true)
|
|
140
|
+
|
|
141
|
+
@package.stub(:installed_versions, @installed_versions_stub) do
|
|
142
|
+
@package.stub(:remove_package, @remove_package_stub) do
|
|
143
|
+
lambda do
|
|
144
|
+
reset_logger
|
|
145
|
+
@package.remove
|
|
146
|
+
@package.updated?.must_equal true
|
|
147
|
+
end.must_output @remove_message
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
@mock_provider.verify
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it 'should not try to remove packages that are already removed' do
|
|
154
|
+
@mock_provider.expect(:installed_versions, [])
|
|
155
|
+
|
|
156
|
+
@package.stub(:installed_versions, @installed_versions_stub) do
|
|
157
|
+
@package.stub(:remove_package, @remove_package_stub) do
|
|
158
|
+
lambda do
|
|
159
|
+
reset_logger
|
|
160
|
+
@package.remove
|
|
161
|
+
@package.updated?.must_equal false
|
|
162
|
+
end.must_output @remove_message_debug
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
@mock_provider.verify
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it 'should not try to remove packages in dry-run mode' do
|
|
169
|
+
@mock_provider.expect(:installed_versions, ['1.2.3'])
|
|
170
|
+
|
|
171
|
+
@package.stub(:installed_versions, @installed_versions_stub) do
|
|
172
|
+
@package.stub(:remove_package, @remove_package_stub) do
|
|
173
|
+
lambda do
|
|
174
|
+
reset_logger
|
|
175
|
+
Wright.dry_run { @package.remove }
|
|
176
|
+
@package.updated?.must_equal true
|
|
177
|
+
end.must_output @remove_message_dry
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
@mock_provider.verify
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
describe '#installed_versions' do
|
|
185
|
+
it 'should raise an exception' do
|
|
186
|
+
resource = OpenStruct.new(name: 'foo')
|
|
187
|
+
provider = Wright::Provider::Package.new(resource)
|
|
188
|
+
-> { provider.installed_versions }.must_raise(NotImplementedError)
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
describe '#install_package' do
|
|
193
|
+
it 'should raise an exception' do
|
|
194
|
+
resource = OpenStruct.new(name: 'foo')
|
|
195
|
+
provider = Wright::Provider::Package.new(resource)
|
|
196
|
+
-> { provider.send(:install_package) }.must_raise(NotImplementedError)
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
describe '#remove_package' do
|
|
201
|
+
it 'should raise an exception' do
|
|
202
|
+
resource = OpenStruct.new(name: 'foo')
|
|
203
|
+
provider = Wright::Provider::Package.new(resource)
|
|
204
|
+
-> { provider.send(:remove_package) }.must_raise(NotImplementedError)
|
|
205
|
+
end
|
|
206
|
+
end
|
|
63
207
|
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
require_relative '../../spec_helper'
|
|
2
|
+
|
|
3
|
+
require 'fakeetc'
|
|
4
|
+
require 'wright/provider'
|
|
5
|
+
require 'wright/provider/user'
|
|
6
|
+
require 'wright/provider/user/darwin_directory_service'
|
|
7
|
+
|
|
8
|
+
describe Wright::Provider::User::DarwinDirectoryService do
|
|
9
|
+
def dscl(command, user, key, value)
|
|
10
|
+
%W(dscl . -#{command} /Users/#{user} #{key} #{value})
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
before(:each) do
|
|
14
|
+
darwin_directory_service_dir =
|
|
15
|
+
File.join(File.dirname(__FILE__), 'darwin_directory_service')
|
|
16
|
+
@fake_capture3 = FakeCapture3.new(darwin_directory_service_dir, {})
|
|
17
|
+
@staff_gid = 20
|
|
18
|
+
@resource = OpenStruct.new(name: 'johndoe')
|
|
19
|
+
FakeEtc.add_users('dummy' => { uid: 23 })
|
|
20
|
+
FakeEtc.add_groups('staff' => { gid: @staff_gid },
|
|
21
|
+
'anonymous' => { gid: 123 })
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
after(:each) do
|
|
25
|
+
FakeEtc.clear_users
|
|
26
|
+
FakeEtc.clear_groups
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '#add_user' do
|
|
30
|
+
before(:each) do
|
|
31
|
+
Wright::Provider::User::DarwinDirectoryService.send(:public, :add_user)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
after(:each) do
|
|
35
|
+
Wright::Provider::User::DarwinDirectoryService.send(:private, :add_user)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'should add users' do
|
|
39
|
+
provider = Wright::Provider::User::DarwinDirectoryService.new(@resource)
|
|
40
|
+
user = @resource.name
|
|
41
|
+
|
|
42
|
+
@fake_capture3.expect(dscl(:create, user, 'UniqueID', 500),
|
|
43
|
+
'dscl-new-user-uid')
|
|
44
|
+
@fake_capture3.expect(dscl(:create, user, 'UserShell', '/bin/bash'),
|
|
45
|
+
'dscl-new-user-shell')
|
|
46
|
+
@fake_capture3.expect(dscl(:create, user, 'RealName', ''),
|
|
47
|
+
'dscl-new-user-full-name')
|
|
48
|
+
@fake_capture3.expect(dscl(:create,
|
|
49
|
+
user,
|
|
50
|
+
'NFSHomeDirectory',
|
|
51
|
+
"/Users/#{user}"),
|
|
52
|
+
'dscl-new-user-home')
|
|
53
|
+
@fake_capture3.expect(dscl(:create, user, 'PrimaryGroupID', @staff_gid),
|
|
54
|
+
'dscl-new-user-primary-group')
|
|
55
|
+
@fake_capture3.expect(dscl(:create, user, 'Password', '*'),
|
|
56
|
+
'dscl-new-user-password')
|
|
57
|
+
@fake_capture3.stub do
|
|
58
|
+
FakeEtc { provider.add_user }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it 'should add system users' do
|
|
63
|
+
user = @resource.name
|
|
64
|
+
resource = OpenStruct.new(name: user, system: true)
|
|
65
|
+
provider = Wright::Provider::User::DarwinDirectoryService.new(resource)
|
|
66
|
+
|
|
67
|
+
@fake_capture3.expect(dscl(:create, user, 'UniqueID', 1),
|
|
68
|
+
'dscl-new-user-uid')
|
|
69
|
+
@fake_capture3.expect(dscl(:create, user, 'UserShell', '/bin/bash'),
|
|
70
|
+
'dscl-new-user-shell')
|
|
71
|
+
@fake_capture3.expect(dscl(:create, user, 'RealName', ''),
|
|
72
|
+
'dscl-new-user-full-name')
|
|
73
|
+
@fake_capture3.expect(dscl(:create,
|
|
74
|
+
user,
|
|
75
|
+
'NFSHomeDirectory',
|
|
76
|
+
"/Users/#{user}"),
|
|
77
|
+
'dscl-new-user-home')
|
|
78
|
+
@fake_capture3.expect(dscl(:create, user, 'PrimaryGroupID', @staff_gid),
|
|
79
|
+
'dscl-new-user-primary-group')
|
|
80
|
+
@fake_capture3.expect(dscl(:create, user, 'Password', '*'),
|
|
81
|
+
'dscl-new-user-password')
|
|
82
|
+
@fake_capture3.stub do
|
|
83
|
+
FakeEtc { provider.add_user }
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'should add users with options' do
|
|
88
|
+
user = @resource.name
|
|
89
|
+
resource = OpenStruct.new(name: user,
|
|
90
|
+
uid: 42,
|
|
91
|
+
primary_group: 'anonymous',
|
|
92
|
+
full_name: 'John Doe',
|
|
93
|
+
groups: [],
|
|
94
|
+
shell: '/bin/zsh',
|
|
95
|
+
home: "/home/#{user}",
|
|
96
|
+
system: true)
|
|
97
|
+
provider = Wright::Provider::User::DarwinDirectoryService.new(resource)
|
|
98
|
+
|
|
99
|
+
@fake_capture3.expect(dscl(:create, user, 'UniqueID', 42),
|
|
100
|
+
'dscl-new-user-uid')
|
|
101
|
+
@fake_capture3.expect(dscl(:create, user, 'UserShell', '/bin/zsh'),
|
|
102
|
+
'dscl-new-user-shell')
|
|
103
|
+
@fake_capture3.expect(dscl(:create, user, 'RealName', 'John Doe'),
|
|
104
|
+
'dscl-new-user-full-name')
|
|
105
|
+
@fake_capture3.expect(dscl(:create,
|
|
106
|
+
user,
|
|
107
|
+
'NFSHomeDirectory',
|
|
108
|
+
"/home/#{user}"),
|
|
109
|
+
'dscl-new-user-home')
|
|
110
|
+
@fake_capture3.expect(dscl(:create, user, 'PrimaryGroupID', 123),
|
|
111
|
+
'dscl-new-user-primary-group')
|
|
112
|
+
@fake_capture3.expect(dscl(:create, user, 'Password', '*'),
|
|
113
|
+
'dscl-new-user-password')
|
|
114
|
+
@fake_capture3.stub do
|
|
115
|
+
FakeEtc { provider.add_user }
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
describe '#update_user' do
|
|
121
|
+
before(:each) do
|
|
122
|
+
Wright::Provider::User::DarwinDirectoryService.send(:public,
|
|
123
|
+
:update_user)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
after(:each) do
|
|
127
|
+
Wright::Provider::User::DarwinDirectoryService.send(:private,
|
|
128
|
+
:update_user)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it 'should update users' do
|
|
132
|
+
user = @resource.name
|
|
133
|
+
@resource.uid = 42
|
|
134
|
+
provider = Wright::Provider::User::DarwinDirectoryService.new(@resource)
|
|
135
|
+
|
|
136
|
+
FakeEtc.add_users(@resource.name => { uid: @resource.uid + 1 })
|
|
137
|
+
@fake_capture3.expect(dscl(:create, user, 'UniqueID', @resource.uid),
|
|
138
|
+
'dscl-new-user-uid')
|
|
139
|
+
@fake_capture3.stub do
|
|
140
|
+
FakeEtc { provider.update_user }
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
describe '#delete_user' do
|
|
146
|
+
before(:each) do
|
|
147
|
+
Wright::Provider::User::DarwinDirectoryService.send(:public,
|
|
148
|
+
:delete_user)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
after(:each) do
|
|
152
|
+
Wright::Provider::User::DarwinDirectoryService.send(:private,
|
|
153
|
+
:delete_user)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it 'should delete users' do
|
|
157
|
+
provider = Wright::Provider::User::DarwinDirectoryService.new(@resource)
|
|
158
|
+
|
|
159
|
+
FakeEtc.add_users(@resource.name => {})
|
|
160
|
+
@fake_capture3.expect(%W(dscl . -delete /Users/#{@resource.name}),
|
|
161
|
+
'dscl-delete-user')
|
|
162
|
+
@fake_capture3.stub do
|
|
163
|
+
FakeEtc { provider.delete_user }
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
@@ -5,7 +5,7 @@ require 'wright/provider'
|
|
|
5
5
|
require 'wright/provider/user'
|
|
6
6
|
require 'wright/provider/user/gnu_passwd'
|
|
7
7
|
|
|
8
|
-
describe Wright::Provider::User do
|
|
8
|
+
describe Wright::Provider::User::GnuPasswd do
|
|
9
9
|
before(:each) do
|
|
10
10
|
username = 'johndoe'
|
|
11
11
|
@resource = OpenStruct.new(name: username)
|
|
@@ -24,7 +24,7 @@ describe Wright::Provider::User do
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
after(:each) do
|
|
27
|
-
Wright::Provider::User.send(:private, :add_user)
|
|
27
|
+
Wright::Provider::User::GnuPasswd.send(:private, :add_user)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
it 'should add users' do
|
|
@@ -70,7 +70,7 @@ describe Wright::Provider::User do
|
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
after(:each) do
|
|
73
|
-
Wright::Provider::User.send(:private, :update_user)
|
|
73
|
+
Wright::Provider::User::GnuPasswd.send(:private, :update_user)
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
it 'should update users' do
|
|
@@ -85,13 +85,13 @@ describe Wright::Provider::User do
|
|
|
85
85
|
end
|
|
86
86
|
end
|
|
87
87
|
|
|
88
|
-
describe '#
|
|
88
|
+
describe '#delete_user' do
|
|
89
89
|
before(:each) do
|
|
90
90
|
Wright::Provider::User::GnuPasswd.send(:public, :delete_user)
|
|
91
91
|
end
|
|
92
92
|
|
|
93
93
|
after(:each) do
|
|
94
|
-
Wright::Provider::User.send(:private, :delete_user)
|
|
94
|
+
Wright::Provider::User::GnuPasswd.send(:private, :delete_user)
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
it 'should delete users' do
|