wright 0.1.2 → 0.2.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/CONTRIBUTING.md +34 -0
- data/NEWS.md +22 -0
- data/README.md +56 -40
- data/lib/wright/dsl.rb +1 -2
- data/lib/wright/provider/directory.rb +2 -9
- data/lib/wright/provider/file.rb +6 -13
- data/lib/wright/provider/group/darwin_directory_service.rb +61 -0
- data/lib/wright/provider/group/gnu_passwd.rb +42 -0
- data/lib/wright/provider/group.rb +111 -0
- data/lib/wright/provider/package/apt.rb +9 -43
- data/lib/wright/provider/package/homebrew.rb +68 -0
- data/lib/wright/provider/package.rb +26 -0
- data/lib/wright/provider/symlink.rb +4 -9
- data/lib/wright/provider/user/gnu_passwd.rb +55 -0
- data/lib/wright/provider/user.rb +137 -0
- data/lib/wright/provider.rb +40 -0
- data/lib/wright/resource/file.rb +1 -1
- data/lib/wright/resource/group.rb +64 -0
- data/lib/wright/resource/package.rb +6 -6
- data/lib/wright/resource/user.rb +76 -0
- data/lib/wright/util/recursive_autoloader.rb +1 -1
- data/lib/wright/util/stolen_from_activesupport.rb +2 -0
- data/lib/wright/util.rb +17 -2
- data/lib/wright/version.rb +1 -1
- data/lib/wright.rb +3 -2
- data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership.return +1 -0
- data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership.stdout +0 -0
- data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_permission-denied-user.return +1 -0
- data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_permission-denied-user.stderr +2 -0
- data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_permission-denied-user.stdout +0 -0
- data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_user1_user2.return +1 -0
- data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_user1_user2.stderr +0 -0
- data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_user1_user2.stdout +0 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_1234_newgroup.return +1 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_1234_newgroup.stderr +0 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_1234_newgroup.stdout +0 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_499_newgroup.return +1 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_499_newgroup.stderr +0 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_499_newgroup.stdout +0 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_ERROR_newgroup.return +1 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_ERROR_newgroup.stderr +0 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_ERROR_newgroup.stdout +1 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_bazqux.return +1 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_bazqux.stderr +1 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_bazqux.stdout +0 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_foobar.return +1 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_foobar.stderr +1 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_foobar.stdout +10 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_52_foobar.return +1 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_52_foobar.stderr +0 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_52_foobar.stdout +0 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_ERROR_foobar.return +1 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_ERROR_foobar.stderr +0 -0
- data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_ERROR_foobar.stdout +1 -0
- data/spec/provider/group/darwin_directory_service_spec.rb +381 -0
- data/spec/provider/group/gnu_passwd/gpasswd_-M_''_foobar.return +1 -0
- data/spec/provider/group/gnu_passwd/gpasswd_-M_''_foobar.stderr +0 -0
- data/spec/provider/group/gnu_passwd/gpasswd_-M_''_foobar.stdout +0 -0
- data/spec/provider/group/gnu_passwd/gpasswd_-M_'not-a-user'_foobar.return +1 -0
- data/spec/provider/group/gnu_passwd/gpasswd_-M_'not-a-user'_foobar.stderr +1 -0
- data/spec/provider/group/gnu_passwd/gpasswd_-M_'not-a-user'_foobar.stdout +0 -0
- data/spec/provider/group/gnu_passwd/gpasswd_-M_'user1,user2'_foobar.return +1 -0
- data/spec/provider/group/gnu_passwd/gpasswd_-M_'user1,user2'_foobar.stderr +0 -0
- data/spec/provider/group/gnu_passwd/gpasswd_-M_'user1,user2'_foobar.stdout +0 -0
- data/spec/provider/group/gnu_passwd/groupadd_--system_newgroup.return +1 -0
- data/spec/provider/group/gnu_passwd/groupadd_--system_newgroup.stderr +0 -0
- data/spec/provider/group/gnu_passwd/groupadd_--system_newgroup.stdout +0 -0
- data/spec/provider/group/gnu_passwd/groupadd_-g_1234_newgroup.return +1 -0
- data/spec/provider/group/gnu_passwd/groupadd_-g_1234_newgroup.stderr +0 -0
- data/spec/provider/group/gnu_passwd/groupadd_-g_1234_newgroup.stdout +0 -0
- data/spec/provider/group/gnu_passwd/groupadd_-g_ERROR_newgroup.return +1 -0
- data/spec/provider/group/gnu_passwd/groupadd_-g_ERROR_newgroup.stderr +1 -0
- data/spec/provider/group/gnu_passwd/groupadd_-g_ERROR_newgroup.stdout +0 -0
- data/spec/provider/group/gnu_passwd/groupdel_bazqux.return +1 -0
- data/spec/provider/group/gnu_passwd/groupdel_bazqux.stderr +1 -0
- data/spec/provider/group/gnu_passwd/groupdel_bazqux.stdout +0 -0
- data/spec/provider/group/gnu_passwd/groupdel_foobar.return +1 -0
- data/spec/provider/group/gnu_passwd/groupdel_foobar.stderr +0 -0
- data/spec/provider/group/gnu_passwd/groupdel_foobar.stdout +0 -0
- data/spec/provider/group/gnu_passwd/groupmod_-g_52_foobar.return +1 -0
- data/spec/provider/group/gnu_passwd/groupmod_-g_52_foobar.stderr +0 -0
- data/spec/provider/group/gnu_passwd/groupmod_-g_52_foobar.stdout +0 -0
- data/spec/provider/group/gnu_passwd/groupmod_-g_ERROR_foobar.return +1 -0
- data/spec/provider/group/gnu_passwd/groupmod_-g_ERROR_foobar.stderr +1 -0
- data/spec/provider/group/gnu_passwd/groupmod_-g_ERROR_foobar.stdout +0 -0
- data/spec/provider/group/gnu_passwd_spec.rb +382 -0
- data/spec/provider/group_spec.rb +132 -0
- data/spec/provider/package/apt/apt-get_install_-qy_not-a-real-package.stderr +1 -0
- data/spec/provider/package/apt/{dpkg-query_-s_unknown-package.stderr → dpkg-query_-s_not-a-real-package.stderr} +1 -1
- data/spec/provider/package/apt/dpkg-query_-s_not-a-real-package.stdout +0 -0
- data/spec/provider/package/apt_spec.rb +27 -15
- data/spec/provider/package/homebrew/brew_info_--json=v1_cd-discid.return +1 -0
- data/spec/provider/package/homebrew/brew_info_--json=v1_cd-discid.stderr +0 -0
- data/spec/provider/package/homebrew/brew_info_--json=v1_cd-discid.stdout +1 -0
- data/spec/provider/package/homebrew/brew_info_--json=v1_lame.return +1 -0
- data/spec/provider/package/homebrew/brew_info_--json=v1_lame.stderr +0 -0
- data/spec/provider/package/homebrew/brew_info_--json=v1_lame.stdout +1 -0
- data/spec/provider/package/homebrew/brew_info_--json=v1_not-a-real-package.return +1 -0
- data/spec/provider/package/homebrew/brew_info_--json=v1_not-a-real-package.stderr +1 -0
- data/spec/provider/package/homebrew/brew_info_--json=v1_not-a-real-package.stdout +0 -0
- data/spec/provider/package/homebrew/brew_install_cd-discid.return +1 -0
- data/spec/provider/package/homebrew/brew_install_cd-discid.stderr +0 -0
- data/spec/provider/package/homebrew/brew_install_cd-discid.stdout +9 -0
- data/spec/provider/package/homebrew/brew_install_not-a-real-package.return +1 -0
- data/spec/provider/package/homebrew/brew_install_not-a-real-package.stderr +1 -0
- data/spec/provider/package/homebrew/brew_install_not-a-real-package.stdout +2 -0
- data/spec/provider/package/homebrew/brew_uninstall_lame.return +1 -0
- data/spec/provider/package/homebrew/brew_uninstall_lame.stderr +0 -0
- data/spec/provider/package/homebrew/brew_uninstall_lame.stdout +1 -0
- data/spec/provider/package/homebrew_spec.rb +268 -0
- data/spec/provider/user/gnu_passwd/useradd_johndoe.return +1 -0
- data/spec/provider/user/gnu_passwd/useradd_johndoe.stderr +0 -0
- data/spec/provider/user/gnu_passwd/useradd_johndoe.stdout +0 -0
- data/spec/provider/user/gnu_passwd/useradd_with_options.return +1 -0
- data/spec/provider/user/gnu_passwd/useradd_with_options.stderr +0 -0
- data/spec/provider/user/gnu_passwd/useradd_with_options.stdout +0 -0
- data/spec/provider/user/gnu_passwd/userdel_johndoe.return +1 -0
- data/spec/provider/user/gnu_passwd/userdel_johndoe.stderr +0 -0
- data/spec/provider/user/gnu_passwd/userdel_johndoe.stdout +0 -0
- data/spec/provider/user/gnu_passwd/usermod_-u_42_johndoe.return +1 -0
- data/spec/provider/user/gnu_passwd/usermod_-u_42_johndoe.stderr +0 -0
- data/spec/provider/user/gnu_passwd/usermod_-u_42_johndoe.stdout +0 -0
- data/spec/provider/user/gnu_passwd_spec.rb +107 -0
- data/spec/provider/user_spec.rb +327 -0
- data/spec/resource/group_spec.rb +29 -0
- data/spec/resource/package_spec.rb +37 -0
- data/spec/resource/user_spec.rb +29 -0
- data/spec/spec_helper.rb +5 -11
- data/spec/spec_helpers/fake_capture3.rb +11 -7
- data/spec/spec_helpers/test_coverage.rb +26 -0
- data/spec/util/activesupport_spec.rb +1 -0
- data/spec/util/file_permissions_spec.rb +2 -2
- data/spec/util/file_spec.rb +1 -0
- data/spec/util/user_spec.rb +2 -0
- metadata +246 -23
- data/NEWS +0 -18
- data/spec/provider/package/apt/apt-get_install_-qy_unknown-package.stderr +0 -1
- /data/spec/provider/{package/apt/dpkg-query_-s_unknown-package.stdout → group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership.stderr} +0 -0
- /data/spec/provider/package/apt/{apt-get_install_-qy_unknown-package.return → apt-get_install_-qy_not-a-real-package.return} +0 -0
- /data/spec/provider/package/apt/{apt-get_install_-qy_unknown-package.stdout → apt-get_install_-qy_not-a-real-package.stdout} +0 -0
- /data/spec/provider/package/apt/{dpkg-query_-s_unknown-package.return → dpkg-query_-s_not-a-real-package.return} +0 -0
@@ -0,0 +1,381 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
|
3
|
+
require 'wright/provider/group/darwin_directory_service'
|
4
|
+
require 'fakeetc'
|
5
|
+
|
6
|
+
describe Wright::Provider::Group::DarwinDirectoryService do
|
7
|
+
def dseditgroup(command, group_name, gid = nil, system = false)
|
8
|
+
if command != :delete
|
9
|
+
gid ||= 499 if system
|
10
|
+
options = gid.nil? ? [] : ['-i', gid.to_s]
|
11
|
+
['dseditgroup', '-o', command.to_s, *options, group_name]
|
12
|
+
else
|
13
|
+
['dseditgroup', '-o', command.to_s, group_name]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def dscl_set_members(group_name, members)
|
18
|
+
options = ['GroupMembership', *members]
|
19
|
+
['dscl', '.', 'create', "/Groups/#{group_name}", *options]
|
20
|
+
end
|
21
|
+
|
22
|
+
def group_provider(group_name, gid = nil, members = nil, system = false)
|
23
|
+
group_resource = OpenStruct.new(name: group_name,
|
24
|
+
gid: gid,
|
25
|
+
members: members,
|
26
|
+
system: system)
|
27
|
+
Wright::Provider::Group::DarwinDirectoryService.new(group_resource)
|
28
|
+
end
|
29
|
+
|
30
|
+
before :each do
|
31
|
+
darwin_directory_service_dir = File.join(File.dirname(__FILE__),
|
32
|
+
'darwin_directory_service')
|
33
|
+
@fake_capture3 = FakeCapture3.new(darwin_directory_service_dir)
|
34
|
+
@create_message = ->(group) { "INFO: create group: '#{group}'\n" }
|
35
|
+
@create_message_dry = lambda do |group|
|
36
|
+
"INFO: (would) create group: '#{group}'\n"
|
37
|
+
end
|
38
|
+
@create_message_debug = lambda do |group|
|
39
|
+
"DEBUG: group already created: '#{group}'\n"
|
40
|
+
end
|
41
|
+
@remove_message = ->(group) { "INFO: remove group: '#{group}'\n" }
|
42
|
+
@remove_message_dry = lambda do |group|
|
43
|
+
"INFO: (would) remove group: '#{group}'\n"
|
44
|
+
end
|
45
|
+
@remove_message_debug = lambda do |group|
|
46
|
+
"DEBUG: group already removed: '#{group}'\n"
|
47
|
+
end
|
48
|
+
@groups = { 'foobar' => { gid: 42, mem: %w(foo bar) },
|
49
|
+
'bazqux' => { gid: 43, mem: %w(baz qux) } }
|
50
|
+
FakeEtc.add_groups(@groups)
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#create' do
|
54
|
+
it 'should create new groups' do
|
55
|
+
gid = 1234
|
56
|
+
group_name = 'newgroup'
|
57
|
+
group_provider = group_provider(group_name, gid)
|
58
|
+
dseditgroup_cmd = dseditgroup(:create, group_name, gid)
|
59
|
+
|
60
|
+
@fake_capture3.expect(dseditgroup_cmd)
|
61
|
+
@fake_capture3.stub do
|
62
|
+
FakeEtc do
|
63
|
+
lambda do
|
64
|
+
reset_logger
|
65
|
+
group_provider.create
|
66
|
+
group_provider.updated?.must_equal true
|
67
|
+
end.must_output @create_message.call(group_name)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should create new system groups' do
|
73
|
+
group_name = 'newgroup'
|
74
|
+
gid = nil
|
75
|
+
members = nil
|
76
|
+
system = true
|
77
|
+
group_provider = group_provider(group_name, gid, members, system)
|
78
|
+
dseditgroup_cmd = dseditgroup(:create, group_name, gid, system)
|
79
|
+
|
80
|
+
@fake_capture3.expect(dseditgroup_cmd)
|
81
|
+
@fake_capture3.stub do
|
82
|
+
FakeEtc do
|
83
|
+
lambda do
|
84
|
+
reset_logger
|
85
|
+
group_provider.create
|
86
|
+
group_provider.updated?.must_equal true
|
87
|
+
end.must_output @create_message.call(group_name)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should not try to create existing groups' do
|
93
|
+
group_name = 'foobar'
|
94
|
+
gid = @groups[group_name][:gid]
|
95
|
+
members = @groups[group_name][:mem]
|
96
|
+
group_provider = group_provider(group_name, gid, members)
|
97
|
+
|
98
|
+
@fake_capture3.stub do
|
99
|
+
FakeEtc do
|
100
|
+
lambda do
|
101
|
+
reset_logger
|
102
|
+
group_provider.create
|
103
|
+
group_provider.updated?.must_equal false
|
104
|
+
end.must_output @create_message_debug.call(group_name)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'should clear member lists for existing groups' do
|
110
|
+
group_name = 'foobar'
|
111
|
+
gid = @groups[group_name][:gid]
|
112
|
+
members = []
|
113
|
+
group_provider = group_provider(group_name, gid, members)
|
114
|
+
dscl_cmd = dscl_set_members(group_name, members)
|
115
|
+
|
116
|
+
@fake_capture3.expect(dscl_cmd)
|
117
|
+
@fake_capture3.stub do
|
118
|
+
FakeEtc do
|
119
|
+
lambda do
|
120
|
+
reset_logger
|
121
|
+
group_provider.create
|
122
|
+
group_provider.updated?.must_equal true
|
123
|
+
end.must_output @create_message.call(group_name)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'should update member lists for existing groups' do
|
129
|
+
group_name = 'foobar'
|
130
|
+
gid = @groups[group_name][:gid]
|
131
|
+
members = %w(user1 user2)
|
132
|
+
group_provider = group_provider(group_name, gid, members)
|
133
|
+
dscl_cmd = dscl_set_members(group_name, members)
|
134
|
+
|
135
|
+
@fake_capture3.expect(dscl_cmd)
|
136
|
+
@fake_capture3.stub do
|
137
|
+
FakeEtc do
|
138
|
+
lambda do
|
139
|
+
reset_logger
|
140
|
+
group_provider.create
|
141
|
+
group_provider.updated?.must_equal true
|
142
|
+
end.must_output @create_message.call(group_name)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'should update the gid for existing groups' do
|
148
|
+
group_name = 'foobar'
|
149
|
+
gid = @groups[group_name][:gid] + 10
|
150
|
+
group_provider = group_provider(group_name, gid)
|
151
|
+
dseditgroup_cmd = dseditgroup(:edit, group_name, gid)
|
152
|
+
|
153
|
+
@fake_capture3.expect(dseditgroup_cmd)
|
154
|
+
@fake_capture3.stub do
|
155
|
+
FakeEtc do
|
156
|
+
lambda do
|
157
|
+
reset_logger
|
158
|
+
group_provider.create
|
159
|
+
group_provider.updated?.must_equal true
|
160
|
+
end.must_output @create_message.call(group_name)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'should report group creation errors by dseditgroup' do
|
166
|
+
gid = 'ERROR'
|
167
|
+
group_name = 'newgroup'
|
168
|
+
group_provider = group_provider(group_name, gid)
|
169
|
+
dseditgroup_cmd = dseditgroup(:create, group_name, gid)
|
170
|
+
|
171
|
+
@fake_capture3.expect(dseditgroup_cmd)
|
172
|
+
@fake_capture3.stub do
|
173
|
+
FakeEtc do
|
174
|
+
e = -> { group_provider.create }.must_raise RuntimeError
|
175
|
+
wright_error = "cannot create group '#{group_name}'"
|
176
|
+
dseditgroup_error = 'GID contains non-numeric characters'
|
177
|
+
e.message.must_equal %(#{wright_error}: "#{dseditgroup_error}")
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'should report gid changing errors by dseditgroup' do
|
183
|
+
gid = 'ERROR'
|
184
|
+
group_name = 'foobar'
|
185
|
+
group_provider = group_provider(group_name, gid)
|
186
|
+
dseditgroup_cmd = dseditgroup(:edit, group_name, gid)
|
187
|
+
|
188
|
+
@fake_capture3.expect(dseditgroup_cmd)
|
189
|
+
@fake_capture3.stub do
|
190
|
+
FakeEtc do
|
191
|
+
e = -> { group_provider.create }.must_raise RuntimeError
|
192
|
+
wright_error = "cannot create group '#{group_name}'"
|
193
|
+
dseditgroup_error = 'GID contains non-numeric characters'
|
194
|
+
e.message.must_equal %(#{wright_error}: "#{dseditgroup_error}")
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'should report errors by dscl' do
|
200
|
+
# simulate a "permission denied" error
|
201
|
+
members = %w(permission-denied-user)
|
202
|
+
group_name = 'foobar'
|
203
|
+
group_provider = group_provider(group_name, nil, members)
|
204
|
+
dscl_cmd = dscl_set_members(group_name, members)
|
205
|
+
|
206
|
+
@fake_capture3.expect(dscl_cmd)
|
207
|
+
@fake_capture3.stub do
|
208
|
+
FakeEtc do
|
209
|
+
e = -> { group_provider.create }.must_raise RuntimeError
|
210
|
+
wright_error = "cannot create group '#{group_name}'"
|
211
|
+
dscl_error = <<EOS.chomp
|
212
|
+
<main> attribute status: eDSPermissionError
|
213
|
+
<dscl_cmd> DS Error: -14120 (eDSPermissionError)
|
214
|
+
EOS
|
215
|
+
e.message.must_equal %(#{wright_error}: "#{dscl_error}")
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
describe '#remove' do
|
222
|
+
it 'should remove existing groups' do
|
223
|
+
group_name = 'foobar'
|
224
|
+
group_provider = group_provider(group_name)
|
225
|
+
dseditgroup_cmd = dseditgroup(:delete, group_name)
|
226
|
+
|
227
|
+
@fake_capture3.expect(dseditgroup_cmd)
|
228
|
+
@fake_capture3.stub do
|
229
|
+
FakeEtc do
|
230
|
+
lambda do
|
231
|
+
reset_logger
|
232
|
+
group_provider.remove
|
233
|
+
group_provider.updated?.must_equal true
|
234
|
+
end.must_output @remove_message.call(group_name)
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'should not try to remove groups that are already removed' do
|
240
|
+
group_name = 'not-a-group'
|
241
|
+
group_provider = group_provider(group_name)
|
242
|
+
|
243
|
+
@fake_capture3.stub do
|
244
|
+
FakeEtc do
|
245
|
+
lambda do
|
246
|
+
reset_logger
|
247
|
+
group_provider.remove
|
248
|
+
group_provider.updated?.must_equal false
|
249
|
+
end.must_output @remove_message_debug.call(group_name)
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
it 'should report errors by dseditgroup' do
|
255
|
+
group_name = 'bazqux'
|
256
|
+
group_provider = group_provider(group_name)
|
257
|
+
dseditgroup_cmd = dseditgroup(:delete, group_name)
|
258
|
+
|
259
|
+
@fake_capture3.expect(dseditgroup_cmd)
|
260
|
+
@fake_capture3.stub do
|
261
|
+
FakeEtc do
|
262
|
+
e = -> { group_provider.remove }.must_raise RuntimeError
|
263
|
+
wright_error = "cannot remove group '#{group_name}'"
|
264
|
+
dseditgroup_error = 'Group not found.'
|
265
|
+
e.message.must_equal %(#{wright_error}: "#{dseditgroup_error}")
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
describe 'dry_run' do
|
272
|
+
it 'should not actually create new groups' do
|
273
|
+
gid = 1234
|
274
|
+
group_name = 'newgroup'
|
275
|
+
group_provider = group_provider(group_name, gid)
|
276
|
+
|
277
|
+
@fake_capture3.stub do
|
278
|
+
Wright.dry_run do
|
279
|
+
FakeEtc do
|
280
|
+
lambda do
|
281
|
+
reset_logger
|
282
|
+
group_provider.create
|
283
|
+
group_provider.updated?.must_equal true
|
284
|
+
end.must_output @create_message_dry.call(group_name)
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
it 'should not actually update existing groups' do
|
291
|
+
gid = 1234
|
292
|
+
group_name = 'foobar'
|
293
|
+
members = %w(user1 user2)
|
294
|
+
group_provider = group_provider(group_name, gid, members)
|
295
|
+
|
296
|
+
@fake_capture3.stub do
|
297
|
+
Wright.dry_run do
|
298
|
+
FakeEtc do
|
299
|
+
lambda do
|
300
|
+
reset_logger
|
301
|
+
group_provider.create
|
302
|
+
group_provider.updated?.must_equal true
|
303
|
+
end.must_output @create_message_dry.call(group_name)
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
it 'should not try to create existing groups' do
|
310
|
+
group_name = 'foobar'
|
311
|
+
gid = @groups[group_name][:gid]
|
312
|
+
members = @groups[group_name][:mem]
|
313
|
+
group_provider = group_provider(group_name, gid, members)
|
314
|
+
|
315
|
+
@fake_capture3.stub do
|
316
|
+
Wright.dry_run do
|
317
|
+
FakeEtc do
|
318
|
+
lambda do
|
319
|
+
reset_logger
|
320
|
+
group_provider.create
|
321
|
+
group_provider.updated?.must_equal false
|
322
|
+
end.must_output @create_message_debug.call(group_name)
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
it 'should not actually update existing groups' do
|
329
|
+
group_name = 'foobar'
|
330
|
+
gid = @groups[group_name][:gid] + 10
|
331
|
+
members = %w(user1 user2)
|
332
|
+
group_provider = group_provider(group_name, gid, members)
|
333
|
+
|
334
|
+
@fake_capture3.stub do
|
335
|
+
Wright.dry_run do
|
336
|
+
FakeEtc do
|
337
|
+
lambda do
|
338
|
+
reset_logger
|
339
|
+
group_provider.create
|
340
|
+
group_provider.updated?.must_equal true
|
341
|
+
end.must_output @create_message_dry.call(group_name)
|
342
|
+
end
|
343
|
+
end
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
it 'should not actually remove groups' do
|
348
|
+
group_name = 'foobar'
|
349
|
+
group_provider = group_provider(group_name)
|
350
|
+
|
351
|
+
@fake_capture3.stub do
|
352
|
+
Wright.dry_run do
|
353
|
+
FakeEtc do
|
354
|
+
lambda do
|
355
|
+
reset_logger
|
356
|
+
group_provider.remove
|
357
|
+
group_provider.updated?.must_equal true
|
358
|
+
end.must_output @remove_message_dry.call(group_name)
|
359
|
+
end
|
360
|
+
end
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
it 'should not try to remove groups that are already removed' do
|
365
|
+
group_name = 'not-a-group'
|
366
|
+
group_provider = group_provider(group_name)
|
367
|
+
|
368
|
+
@fake_capture3.stub do
|
369
|
+
Wright.dry_run do
|
370
|
+
FakeEtc do
|
371
|
+
lambda do
|
372
|
+
reset_logger
|
373
|
+
group_provider.remove
|
374
|
+
group_provider.updated?.must_equal false
|
375
|
+
end.must_output @remove_message_debug.call(group_name)
|
376
|
+
end
|
377
|
+
end
|
378
|
+
end
|
379
|
+
end
|
380
|
+
end
|
381
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
3
|
@@ -0,0 +1 @@
|
|
1
|
+
gpasswd: user 'not-a-user' does not exist
|
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
|
+
3
|
@@ -0,0 +1 @@
|
|
1
|
+
groupadd: invalid group ID 'ERROR'
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
8
|
@@ -0,0 +1 @@
|
|
1
|
+
groupdel: cannot remove the primary group of user 'quux'
|
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
|
+
3
|
@@ -0,0 +1 @@
|
|
1
|
+
groupmod: invalid group ID 'ERROR'
|
File without changes
|