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.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +34 -0
  3. data/NEWS.md +22 -0
  4. data/README.md +56 -40
  5. data/lib/wright/dsl.rb +1 -2
  6. data/lib/wright/provider/directory.rb +2 -9
  7. data/lib/wright/provider/file.rb +6 -13
  8. data/lib/wright/provider/group/darwin_directory_service.rb +61 -0
  9. data/lib/wright/provider/group/gnu_passwd.rb +42 -0
  10. data/lib/wright/provider/group.rb +111 -0
  11. data/lib/wright/provider/package/apt.rb +9 -43
  12. data/lib/wright/provider/package/homebrew.rb +68 -0
  13. data/lib/wright/provider/package.rb +26 -0
  14. data/lib/wright/provider/symlink.rb +4 -9
  15. data/lib/wright/provider/user/gnu_passwd.rb +55 -0
  16. data/lib/wright/provider/user.rb +137 -0
  17. data/lib/wright/provider.rb +40 -0
  18. data/lib/wright/resource/file.rb +1 -1
  19. data/lib/wright/resource/group.rb +64 -0
  20. data/lib/wright/resource/package.rb +6 -6
  21. data/lib/wright/resource/user.rb +76 -0
  22. data/lib/wright/util/recursive_autoloader.rb +1 -1
  23. data/lib/wright/util/stolen_from_activesupport.rb +2 -0
  24. data/lib/wright/util.rb +17 -2
  25. data/lib/wright/version.rb +1 -1
  26. data/lib/wright.rb +3 -2
  27. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership.return +1 -0
  28. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership.stdout +0 -0
  29. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_permission-denied-user.return +1 -0
  30. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_permission-denied-user.stderr +2 -0
  31. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_permission-denied-user.stdout +0 -0
  32. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_user1_user2.return +1 -0
  33. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_user1_user2.stderr +0 -0
  34. data/spec/provider/group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership_user1_user2.stdout +0 -0
  35. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_1234_newgroup.return +1 -0
  36. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_1234_newgroup.stderr +0 -0
  37. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_1234_newgroup.stdout +0 -0
  38. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_499_newgroup.return +1 -0
  39. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_499_newgroup.stderr +0 -0
  40. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_499_newgroup.stdout +0 -0
  41. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_ERROR_newgroup.return +1 -0
  42. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_ERROR_newgroup.stderr +0 -0
  43. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_create_-i_ERROR_newgroup.stdout +1 -0
  44. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_bazqux.return +1 -0
  45. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_bazqux.stderr +1 -0
  46. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_bazqux.stdout +0 -0
  47. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_foobar.return +1 -0
  48. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_foobar.stderr +1 -0
  49. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_delete_foobar.stdout +10 -0
  50. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_52_foobar.return +1 -0
  51. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_52_foobar.stderr +0 -0
  52. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_52_foobar.stdout +0 -0
  53. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_ERROR_foobar.return +1 -0
  54. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_ERROR_foobar.stderr +0 -0
  55. data/spec/provider/group/darwin_directory_service/dseditgroup_-o_edit_-i_ERROR_foobar.stdout +1 -0
  56. data/spec/provider/group/darwin_directory_service_spec.rb +381 -0
  57. data/spec/provider/group/gnu_passwd/gpasswd_-M_''_foobar.return +1 -0
  58. data/spec/provider/group/gnu_passwd/gpasswd_-M_''_foobar.stderr +0 -0
  59. data/spec/provider/group/gnu_passwd/gpasswd_-M_''_foobar.stdout +0 -0
  60. data/spec/provider/group/gnu_passwd/gpasswd_-M_'not-a-user'_foobar.return +1 -0
  61. data/spec/provider/group/gnu_passwd/gpasswd_-M_'not-a-user'_foobar.stderr +1 -0
  62. data/spec/provider/group/gnu_passwd/gpasswd_-M_'not-a-user'_foobar.stdout +0 -0
  63. data/spec/provider/group/gnu_passwd/gpasswd_-M_'user1,user2'_foobar.return +1 -0
  64. data/spec/provider/group/gnu_passwd/gpasswd_-M_'user1,user2'_foobar.stderr +0 -0
  65. data/spec/provider/group/gnu_passwd/gpasswd_-M_'user1,user2'_foobar.stdout +0 -0
  66. data/spec/provider/group/gnu_passwd/groupadd_--system_newgroup.return +1 -0
  67. data/spec/provider/group/gnu_passwd/groupadd_--system_newgroup.stderr +0 -0
  68. data/spec/provider/group/gnu_passwd/groupadd_--system_newgroup.stdout +0 -0
  69. data/spec/provider/group/gnu_passwd/groupadd_-g_1234_newgroup.return +1 -0
  70. data/spec/provider/group/gnu_passwd/groupadd_-g_1234_newgroup.stderr +0 -0
  71. data/spec/provider/group/gnu_passwd/groupadd_-g_1234_newgroup.stdout +0 -0
  72. data/spec/provider/group/gnu_passwd/groupadd_-g_ERROR_newgroup.return +1 -0
  73. data/spec/provider/group/gnu_passwd/groupadd_-g_ERROR_newgroup.stderr +1 -0
  74. data/spec/provider/group/gnu_passwd/groupadd_-g_ERROR_newgroup.stdout +0 -0
  75. data/spec/provider/group/gnu_passwd/groupdel_bazqux.return +1 -0
  76. data/spec/provider/group/gnu_passwd/groupdel_bazqux.stderr +1 -0
  77. data/spec/provider/group/gnu_passwd/groupdel_bazqux.stdout +0 -0
  78. data/spec/provider/group/gnu_passwd/groupdel_foobar.return +1 -0
  79. data/spec/provider/group/gnu_passwd/groupdel_foobar.stderr +0 -0
  80. data/spec/provider/group/gnu_passwd/groupdel_foobar.stdout +0 -0
  81. data/spec/provider/group/gnu_passwd/groupmod_-g_52_foobar.return +1 -0
  82. data/spec/provider/group/gnu_passwd/groupmod_-g_52_foobar.stderr +0 -0
  83. data/spec/provider/group/gnu_passwd/groupmod_-g_52_foobar.stdout +0 -0
  84. data/spec/provider/group/gnu_passwd/groupmod_-g_ERROR_foobar.return +1 -0
  85. data/spec/provider/group/gnu_passwd/groupmod_-g_ERROR_foobar.stderr +1 -0
  86. data/spec/provider/group/gnu_passwd/groupmod_-g_ERROR_foobar.stdout +0 -0
  87. data/spec/provider/group/gnu_passwd_spec.rb +382 -0
  88. data/spec/provider/group_spec.rb +132 -0
  89. data/spec/provider/package/apt/apt-get_install_-qy_not-a-real-package.stderr +1 -0
  90. data/spec/provider/package/apt/{dpkg-query_-s_unknown-package.stderr → dpkg-query_-s_not-a-real-package.stderr} +1 -1
  91. data/spec/provider/package/apt/dpkg-query_-s_not-a-real-package.stdout +0 -0
  92. data/spec/provider/package/apt_spec.rb +27 -15
  93. data/spec/provider/package/homebrew/brew_info_--json=v1_cd-discid.return +1 -0
  94. data/spec/provider/package/homebrew/brew_info_--json=v1_cd-discid.stderr +0 -0
  95. data/spec/provider/package/homebrew/brew_info_--json=v1_cd-discid.stdout +1 -0
  96. data/spec/provider/package/homebrew/brew_info_--json=v1_lame.return +1 -0
  97. data/spec/provider/package/homebrew/brew_info_--json=v1_lame.stderr +0 -0
  98. data/spec/provider/package/homebrew/brew_info_--json=v1_lame.stdout +1 -0
  99. data/spec/provider/package/homebrew/brew_info_--json=v1_not-a-real-package.return +1 -0
  100. data/spec/provider/package/homebrew/brew_info_--json=v1_not-a-real-package.stderr +1 -0
  101. data/spec/provider/package/homebrew/brew_info_--json=v1_not-a-real-package.stdout +0 -0
  102. data/spec/provider/package/homebrew/brew_install_cd-discid.return +1 -0
  103. data/spec/provider/package/homebrew/brew_install_cd-discid.stderr +0 -0
  104. data/spec/provider/package/homebrew/brew_install_cd-discid.stdout +9 -0
  105. data/spec/provider/package/homebrew/brew_install_not-a-real-package.return +1 -0
  106. data/spec/provider/package/homebrew/brew_install_not-a-real-package.stderr +1 -0
  107. data/spec/provider/package/homebrew/brew_install_not-a-real-package.stdout +2 -0
  108. data/spec/provider/package/homebrew/brew_uninstall_lame.return +1 -0
  109. data/spec/provider/package/homebrew/brew_uninstall_lame.stderr +0 -0
  110. data/spec/provider/package/homebrew/brew_uninstall_lame.stdout +1 -0
  111. data/spec/provider/package/homebrew_spec.rb +268 -0
  112. data/spec/provider/user/gnu_passwd/useradd_johndoe.return +1 -0
  113. data/spec/provider/user/gnu_passwd/useradd_johndoe.stderr +0 -0
  114. data/spec/provider/user/gnu_passwd/useradd_johndoe.stdout +0 -0
  115. data/spec/provider/user/gnu_passwd/useradd_with_options.return +1 -0
  116. data/spec/provider/user/gnu_passwd/useradd_with_options.stderr +0 -0
  117. data/spec/provider/user/gnu_passwd/useradd_with_options.stdout +0 -0
  118. data/spec/provider/user/gnu_passwd/userdel_johndoe.return +1 -0
  119. data/spec/provider/user/gnu_passwd/userdel_johndoe.stderr +0 -0
  120. data/spec/provider/user/gnu_passwd/userdel_johndoe.stdout +0 -0
  121. data/spec/provider/user/gnu_passwd/usermod_-u_42_johndoe.return +1 -0
  122. data/spec/provider/user/gnu_passwd/usermod_-u_42_johndoe.stderr +0 -0
  123. data/spec/provider/user/gnu_passwd/usermod_-u_42_johndoe.stdout +0 -0
  124. data/spec/provider/user/gnu_passwd_spec.rb +107 -0
  125. data/spec/provider/user_spec.rb +327 -0
  126. data/spec/resource/group_spec.rb +29 -0
  127. data/spec/resource/package_spec.rb +37 -0
  128. data/spec/resource/user_spec.rb +29 -0
  129. data/spec/spec_helper.rb +5 -11
  130. data/spec/spec_helpers/fake_capture3.rb +11 -7
  131. data/spec/spec_helpers/test_coverage.rb +26 -0
  132. data/spec/util/activesupport_spec.rb +1 -0
  133. data/spec/util/file_permissions_spec.rb +2 -2
  134. data/spec/util/file_spec.rb +1 -0
  135. data/spec/util/user_spec.rb +2 -0
  136. metadata +246 -23
  137. data/NEWS +0 -18
  138. data/spec/provider/package/apt/apt-get_install_-qy_unknown-package.stderr +0 -1
  139. /data/spec/provider/{package/apt/dpkg-query_-s_unknown-package.stdout → group/darwin_directory_service/dscl_._create_SLASHGroupsSLASHfoobar_GroupMembership.stderr} +0 -0
  140. /data/spec/provider/package/apt/{apt-get_install_-qy_unknown-package.return → apt-get_install_-qy_not-a-real-package.return} +0 -0
  141. /data/spec/provider/package/apt/{apt-get_install_-qy_unknown-package.stdout → apt-get_install_-qy_not-a-real-package.stdout} +0 -0
  142. /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
+ gpasswd: user 'not-a-user' does not exist
@@ -0,0 +1 @@
1
+ groupadd: invalid group ID 'ERROR'
@@ -0,0 +1 @@
1
+ groupdel: cannot remove the primary group of user 'quux'
@@ -0,0 +1 @@
1
+ groupmod: invalid group ID 'ERROR'