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,327 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
require 'fakeetc'
|
4
|
+
require 'wright/provider'
|
5
|
+
require 'wright/provider/group'
|
6
|
+
|
7
|
+
describe Wright::Provider::User do
|
8
|
+
before(:each) do
|
9
|
+
username = 'johndoe'
|
10
|
+
@resource = OpenStruct.new(name: username)
|
11
|
+
@create_message = "INFO: create user: '#{username}'\n"
|
12
|
+
@create_message_dry = "INFO: (would) create user: '#{username}'\n"
|
13
|
+
@create_message_debug = "DEBUG: user already created: '#{username}'\n"
|
14
|
+
@remove_message = "INFO: remove user: '#{username}'\n"
|
15
|
+
@remove_message_dry = "INFO: (would) remove user: '#{username}'\n"
|
16
|
+
@remove_message_debug = "DEBUG: user already removed: '#{username}'\n"
|
17
|
+
end
|
18
|
+
|
19
|
+
after(:each) do
|
20
|
+
FakeEtc.clear_users
|
21
|
+
FakeEtc.clear_groups
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#uptodate?' do
|
25
|
+
before(:each) { Wright::Provider::User.send(:public, :uptodate?) }
|
26
|
+
after(:each) { Wright::Provider::User.send(:private, :uptodate?) }
|
27
|
+
|
28
|
+
it 'should return the correct status' do
|
29
|
+
provider = Wright::Provider::User.new(@resource)
|
30
|
+
|
31
|
+
FakeEtc.add_users('johndoe' => {})
|
32
|
+
FakeEtc do
|
33
|
+
provider.uptodate?(:create).must_equal true
|
34
|
+
provider.uptodate?(:remove).must_equal false
|
35
|
+
end
|
36
|
+
|
37
|
+
FakeEtc.clear_users
|
38
|
+
FakeEtc do
|
39
|
+
provider.uptodate?(:create).must_equal false
|
40
|
+
provider.uptodate?(:remove).must_equal true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should return the correct status when given a specific uid' do
|
45
|
+
uid = 52
|
46
|
+
@resource.uid = uid
|
47
|
+
provider = Wright::Provider::User.new(@resource)
|
48
|
+
|
49
|
+
FakeEtc.add_users('johndoe' => { uid: uid + 1 })
|
50
|
+
FakeEtc do
|
51
|
+
provider.uptodate?(:create).must_equal false
|
52
|
+
provider.uptodate?(:remove).must_equal false
|
53
|
+
end
|
54
|
+
|
55
|
+
FakeEtc.clear_users
|
56
|
+
FakeEtc.add_users('johndoe' => { uid: uid })
|
57
|
+
FakeEtc do
|
58
|
+
provider.uptodate?(:create).must_equal true
|
59
|
+
provider.uptodate?(:remove).must_equal false
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should return the correct status when given a specific group list' do
|
64
|
+
groups = %w(group1 group2)
|
65
|
+
@resource.groups = groups
|
66
|
+
provider = Wright::Provider::User.new(@resource)
|
67
|
+
|
68
|
+
FakeEtc.add_groups('group1' => { mem: [] },
|
69
|
+
'group2' => { mem: [] })
|
70
|
+
FakeEtc.add_users('johndoe' => {})
|
71
|
+
FakeEtc do
|
72
|
+
provider.uptodate?(:create).must_equal false
|
73
|
+
provider.uptodate?(:remove).must_equal false
|
74
|
+
end
|
75
|
+
|
76
|
+
FakeEtc.clear_groups
|
77
|
+
FakeEtc.add_groups('group1' => { mem: %w(johndoe) },
|
78
|
+
'group2' => { mem: %w(johndoe) })
|
79
|
+
FakeEtc do
|
80
|
+
provider.uptodate?(:create).must_equal true
|
81
|
+
provider.uptodate?(:remove).must_equal false
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'should return the correct status when given a full name' do
|
86
|
+
full_name = 'John Doe'
|
87
|
+
@resource.full_name = full_name
|
88
|
+
provider = Wright::Provider::User.new(@resource)
|
89
|
+
|
90
|
+
FakeEtc.add_users('johndoe' => { gecos: '' })
|
91
|
+
FakeEtc do
|
92
|
+
provider.uptodate?(:create).must_equal false
|
93
|
+
provider.uptodate?(:remove).must_equal false
|
94
|
+
end
|
95
|
+
|
96
|
+
FakeEtc.clear_users
|
97
|
+
FakeEtc.add_users('johndoe' => { gecos: "#{full_name},,," })
|
98
|
+
FakeEtc do
|
99
|
+
provider.uptodate?(:create).must_equal true
|
100
|
+
provider.uptodate?(:remove).must_equal false
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should return the correct status when given a shell' do
|
105
|
+
shell = '/bin/zsh'
|
106
|
+
@resource.shell = shell
|
107
|
+
provider = Wright::Provider::User.new(@resource)
|
108
|
+
|
109
|
+
FakeEtc.add_users('johndoe' => { shell: '' })
|
110
|
+
FakeEtc do
|
111
|
+
provider.uptodate?(:create).must_equal false
|
112
|
+
provider.uptodate?(:remove).must_equal false
|
113
|
+
end
|
114
|
+
|
115
|
+
FakeEtc.clear_users
|
116
|
+
FakeEtc.add_users('johndoe' => { shell: shell })
|
117
|
+
FakeEtc do
|
118
|
+
provider.uptodate?(:create).must_equal true
|
119
|
+
provider.uptodate?(:remove).must_equal false
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should return the correct status when given a home directory' do
|
124
|
+
home = '/home/johndoe'
|
125
|
+
@resource.home = home
|
126
|
+
provider = Wright::Provider::User.new(@resource)
|
127
|
+
|
128
|
+
FakeEtc.add_users('johndoe' => { dir: '' })
|
129
|
+
FakeEtc do
|
130
|
+
provider.uptodate?(:create).must_equal false
|
131
|
+
provider.uptodate?(:remove).must_equal false
|
132
|
+
end
|
133
|
+
|
134
|
+
FakeEtc.clear_users
|
135
|
+
FakeEtc.add_users('johndoe' => { dir: home })
|
136
|
+
FakeEtc do
|
137
|
+
provider.uptodate?(:create).must_equal true
|
138
|
+
provider.uptodate?(:remove).must_equal false
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'should return the correct status when given a primary group' do
|
143
|
+
group = { name: 'anonymous', gid: 42 }
|
144
|
+
@resource.primary_group = group[:name]
|
145
|
+
provider = Wright::Provider::User.new(@resource)
|
146
|
+
|
147
|
+
FakeEtc.add_groups(group[:name] => { gid: group[:gid] })
|
148
|
+
FakeEtc.add_users('johndoe' => { gid: group[:gid] + 1 })
|
149
|
+
FakeEtc do
|
150
|
+
provider.uptodate?(:create).must_equal false
|
151
|
+
provider.uptodate?(:remove).must_equal false
|
152
|
+
end
|
153
|
+
|
154
|
+
FakeEtc.clear_users
|
155
|
+
FakeEtc.add_users('johndoe' => { gid: group[:gid] })
|
156
|
+
FakeEtc do
|
157
|
+
provider.uptodate?(:create).must_equal true
|
158
|
+
provider.uptodate?(:remove).must_equal false
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'should return the correct status when given a primary group gid' do
|
163
|
+
group = { name: 'anonymous', gid: 42 }
|
164
|
+
@resource.primary_group = group[:gid]
|
165
|
+
provider = Wright::Provider::User.new(@resource)
|
166
|
+
|
167
|
+
FakeEtc.add_groups(group[:name] => { gid: group[:gid] })
|
168
|
+
FakeEtc.add_users('johndoe' => { gid: group[:gid] + 1 })
|
169
|
+
FakeEtc do
|
170
|
+
provider.uptodate?(:create).must_equal false
|
171
|
+
provider.uptodate?(:remove).must_equal false
|
172
|
+
end
|
173
|
+
|
174
|
+
FakeEtc.clear_users
|
175
|
+
FakeEtc.add_users('johndoe' => { gid: group[:gid] })
|
176
|
+
FakeEtc do
|
177
|
+
provider.uptodate?(:create).must_equal true
|
178
|
+
provider.uptodate?(:remove).must_equal false
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'should raise exceptions for invalid actions' do
|
183
|
+
provider = Wright::Provider::User.new(@resource)
|
184
|
+
e = -> { provider.uptodate?(:foobarbaz) }.must_raise ArgumentError
|
185
|
+
e.message.must_equal "invalid action 'foobarbaz'"
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
describe '#add_user' do
|
190
|
+
it 'should raise an exception' do
|
191
|
+
provider = Wright::Provider::User.new(@resource)
|
192
|
+
lambda do
|
193
|
+
provider.send(:add_user)
|
194
|
+
end.must_raise NotImplementedError
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
describe '#update_user' do
|
199
|
+
it 'should raise an exception' do
|
200
|
+
provider = Wright::Provider::User.new(@resource)
|
201
|
+
lambda do
|
202
|
+
provider.send(:update_user)
|
203
|
+
end.must_raise NotImplementedError
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
describe '#delete_user' do
|
208
|
+
it 'should raise an exception' do
|
209
|
+
provider = Wright::Provider::User.new(@resource)
|
210
|
+
lambda do
|
211
|
+
provider.send(:delete_user)
|
212
|
+
end.must_raise NotImplementedError
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
describe '#create' do
|
217
|
+
it 'should set the update status when the user is up-to-date' do
|
218
|
+
provider = Wright::Provider::User.new(@resource)
|
219
|
+
|
220
|
+
FakeEtc.add_users('johndoe' => {})
|
221
|
+
FakeEtc do
|
222
|
+
lambda do
|
223
|
+
reset_logger
|
224
|
+
provider.create
|
225
|
+
provider.updated?.must_equal false
|
226
|
+
end.must_output @create_message_debug
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
it 'should set the update status when the user has to be created' do
|
231
|
+
provider = Wright::Provider::User.new(@resource)
|
232
|
+
mock_provider = Minitest::Mock.new
|
233
|
+
|
234
|
+
mock_provider.expect(:add_user, nil)
|
235
|
+
provider.stub :add_user, -> { mock_provider.add_user } do
|
236
|
+
FakeEtc do
|
237
|
+
lambda do
|
238
|
+
reset_logger
|
239
|
+
provider.create
|
240
|
+
provider.updated?.must_equal true
|
241
|
+
end.must_output @create_message
|
242
|
+
end
|
243
|
+
end
|
244
|
+
mock_provider.verify
|
245
|
+
end
|
246
|
+
|
247
|
+
it 'should set the update status when the user has to be updated' do
|
248
|
+
@resource.shell = '/bin/csh'
|
249
|
+
provider = Wright::Provider::User.new(@resource)
|
250
|
+
mock_provider = Minitest::Mock.new
|
251
|
+
|
252
|
+
mock_provider.expect(:update_user, nil)
|
253
|
+
provider.stub :update_user, -> { mock_provider.update_user } do
|
254
|
+
FakeEtc.add_users('johndoe' => { shell: '/bin/bash' })
|
255
|
+
FakeEtc do
|
256
|
+
lambda do
|
257
|
+
reset_logger
|
258
|
+
provider.create
|
259
|
+
provider.updated?.must_equal true
|
260
|
+
end.must_output @create_message
|
261
|
+
end
|
262
|
+
end
|
263
|
+
mock_provider.verify
|
264
|
+
end
|
265
|
+
|
266
|
+
it 'should set the update status in dry-run mode' do
|
267
|
+
provider = Wright::Provider::User.new(@resource)
|
268
|
+
|
269
|
+
Wright.dry_run do
|
270
|
+
FakeEtc do
|
271
|
+
lambda do
|
272
|
+
reset_logger
|
273
|
+
provider.create
|
274
|
+
provider.updated?.must_equal true
|
275
|
+
end.must_output @create_message_dry
|
276
|
+
end
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
describe '#remove' do
|
282
|
+
it 'should set the update status when the user is already removed' do
|
283
|
+
provider = Wright::Provider::User.new(@resource)
|
284
|
+
|
285
|
+
FakeEtc do
|
286
|
+
lambda do
|
287
|
+
reset_logger
|
288
|
+
provider.remove
|
289
|
+
provider.updated?.must_equal false
|
290
|
+
end.must_output @remove_message_debug
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
it 'should set the update status when the user has to be removed' do
|
295
|
+
provider = Wright::Provider::User.new(@resource)
|
296
|
+
mock_provider = Minitest::Mock.new
|
297
|
+
|
298
|
+
mock_provider.expect(:delete_user, nil)
|
299
|
+
provider.stub :delete_user, -> { mock_provider.delete_user } do
|
300
|
+
FakeEtc.add_users('johndoe' => {})
|
301
|
+
FakeEtc do
|
302
|
+
lambda do
|
303
|
+
reset_logger
|
304
|
+
provider.remove
|
305
|
+
provider.updated?.must_equal true
|
306
|
+
end.must_output @remove_message
|
307
|
+
end
|
308
|
+
end
|
309
|
+
mock_provider.verify
|
310
|
+
end
|
311
|
+
|
312
|
+
it 'should set the update status in dry-run mode' do
|
313
|
+
provider = Wright::Provider::User.new(@resource)
|
314
|
+
|
315
|
+
Wright.dry_run do
|
316
|
+
FakeEtc.add_users('johndoe' => {})
|
317
|
+
FakeEtc do
|
318
|
+
lambda do
|
319
|
+
reset_logger
|
320
|
+
provider.remove
|
321
|
+
provider.updated?.must_equal true
|
322
|
+
end.must_output @remove_message_dry
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
require 'wright/resource/group'
|
4
|
+
|
5
|
+
describe Wright::Resource::Group do
|
6
|
+
before(:each) do
|
7
|
+
@group = Wright::Resource::Group.new('foo')
|
8
|
+
@provider = Minitest::Mock.new
|
9
|
+
@group.instance_variable_set(:@provider, @provider)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#create' do
|
13
|
+
it 'should ask the provider to create the group' do
|
14
|
+
@provider.expect(:create, nil)
|
15
|
+
@provider.expect(:updated?, true)
|
16
|
+
@group.create
|
17
|
+
@provider.verify
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#remove' do
|
22
|
+
it 'should ask the provider to remove the group' do
|
23
|
+
@provider.expect(:remove, nil)
|
24
|
+
@provider.expect(:updated?, true)
|
25
|
+
@group.remove
|
26
|
+
@provider.verify
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
require 'wright/resource/package'
|
4
|
+
|
5
|
+
describe Wright::Resource::Package do
|
6
|
+
before(:each) do
|
7
|
+
@package = Wright::Resource::Package.new('foo')
|
8
|
+
@provider = Minitest::Mock.new
|
9
|
+
@package.instance_variable_set(:@provider, @provider)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#installed_versions' do
|
13
|
+
it 'should ask the provider for installed versions' do
|
14
|
+
@provider.expect(:installed_versions, nil)
|
15
|
+
@package.installed_versions
|
16
|
+
@provider.verify
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#install' do
|
21
|
+
it 'should ask the provider to install the package' do
|
22
|
+
@provider.expect(:install, nil)
|
23
|
+
@provider.expect(:updated?, true)
|
24
|
+
@package.install
|
25
|
+
@provider.verify
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#remove' do
|
30
|
+
it 'should ask the provider to remove the package' do
|
31
|
+
@provider.expect(:remove, nil)
|
32
|
+
@provider.expect(:updated?, true)
|
33
|
+
@package.remove
|
34
|
+
@provider.verify
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
require 'wright/resource/user'
|
4
|
+
|
5
|
+
describe Wright::Resource::User do
|
6
|
+
before(:each) do
|
7
|
+
@user = Wright::Resource::User.new('johndoe')
|
8
|
+
@provider = Minitest::Mock.new
|
9
|
+
@user.instance_variable_set(:@provider, @provider)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#create' do
|
13
|
+
it 'should ask the provider to create the user' do
|
14
|
+
@provider.expect(:create, nil)
|
15
|
+
@provider.expect(:updated?, true)
|
16
|
+
@user.create
|
17
|
+
@provider.verify
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#remove' do
|
22
|
+
it 'should ask the provider to remove the user' do
|
23
|
+
@provider.expect(:remove, nil)
|
24
|
+
@provider.expect(:updated?, true)
|
25
|
+
@user.remove
|
26
|
+
@provider.verify
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,19 +1,12 @@
|
|
1
1
|
require_relative 'spec_helpers/fake_capture3'
|
2
|
+
require_relative 'spec_helpers/test_coverage'
|
2
3
|
|
3
4
|
require 'ostruct'
|
4
5
|
require 'fakefs/safe'
|
5
|
-
require 'wright/logger'
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
SimpleCov.start do
|
11
|
-
add_filter '/spec/'
|
12
|
-
add_filter '/vendor/'
|
13
|
-
add_filter '/.bundle/'
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
7
|
+
measure_coverage if coverage?
|
8
|
+
|
9
|
+
require 'wright/logger'
|
17
10
|
|
18
11
|
module Wright
|
19
12
|
# extend Wright::Config to pass on clear for tests
|
@@ -25,6 +18,7 @@ module Wright
|
|
25
18
|
end
|
26
19
|
|
27
20
|
def reset_logger(log_level = Wright::Logger::DEBUG)
|
21
|
+
Wright::Config[:log] = { colorize: false }
|
28
22
|
Wright.log = Wright::Logger.new
|
29
23
|
Wright.log.formatter = Wright::Logger::Formatter.new
|
30
24
|
Wright.log.level = log_level
|
@@ -4,17 +4,20 @@ require 'open3'
|
|
4
4
|
# Open3::capture3 replacement that reads stdout, stderr and return
|
5
5
|
# values from the filesystem
|
6
6
|
class FakeCapture3
|
7
|
-
def initialize(basedir, env)
|
7
|
+
def initialize(basedir, env = {})
|
8
8
|
@basedir = basedir
|
9
9
|
@env = env
|
10
10
|
@mock_open3 = Minitest::Mock.new
|
11
|
-
@capture3_stub = lambda do |stub_env, stub_command|
|
12
|
-
@mock_open3.capture3(stub_env, stub_command)
|
11
|
+
@capture3_stub = lambda do |stub_env, stub_command, *stub_args|
|
12
|
+
@mock_open3.capture3(stub_env, stub_command, *stub_args)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
def expect(
|
17
|
-
|
16
|
+
def expect(command_and_args, base_filename = nil)
|
17
|
+
command, *args = *command_and_args
|
18
|
+
@mock_open3.expect(:capture3,
|
19
|
+
return_values(command_and_args, base_filename),
|
20
|
+
[@env, command, *args])
|
18
21
|
end
|
19
22
|
|
20
23
|
def stub
|
@@ -26,8 +29,9 @@ class FakeCapture3
|
|
26
29
|
|
27
30
|
private
|
28
31
|
|
29
|
-
def return_values(
|
30
|
-
filename =
|
32
|
+
def return_values(command_and_args, base_filename)
|
33
|
+
filename = base_filename ||
|
34
|
+
command_and_args.join(' ').gsub(' ', '_').gsub('/', 'SLASH')
|
31
35
|
command_stdout = File.read("#{@basedir}/#{filename}.stdout")
|
32
36
|
command_stderr = File.read("#{@basedir}/#{filename}.stderr")
|
33
37
|
command_status = File.read("#{@basedir}/#{filename}.return").chomp == '0'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
def codeclimate?
|
2
|
+
ENV['CODECLIMATE_REPO_TOKEN']
|
3
|
+
end
|
4
|
+
|
5
|
+
def simplecov?
|
6
|
+
ENV['COVERAGE']
|
7
|
+
end
|
8
|
+
|
9
|
+
def coverage?
|
10
|
+
simplecov? || codeclimate?
|
11
|
+
end
|
12
|
+
|
13
|
+
def measure_coverage
|
14
|
+
require 'simplecov'
|
15
|
+
formatters = []
|
16
|
+
formatters << SimpleCov::Formatter::HTMLFormatter if simplecov?
|
17
|
+
|
18
|
+
if codeclimate?
|
19
|
+
require 'codeclimate-test-reporter'
|
20
|
+
formatters << CodeClimate::TestReporter::Formatter
|
21
|
+
end
|
22
|
+
|
23
|
+
ignored_directories = ['/spec/', '/vendor/', '/.bundle/']
|
24
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[*formatters]
|
25
|
+
SimpleCov.start { ignored_directories.each { |dir| add_filter(dir) } }
|
26
|
+
end
|
@@ -20,5 +20,6 @@ describe Util::ActiveSupport do
|
|
20
20
|
Util::ActiveSupport.constantize('Wright::Util').must_equal Wright::Util
|
21
21
|
-> { Util::ActiveSupport.constantize(nonexistent) }.must_raise(NameError)
|
22
22
|
Util::ActiveSupport.safe_constantize(nonexistent).must_be_nil
|
23
|
+
Util::ActiveSupport.safe_constantize(nil).must_be_nil
|
23
24
|
end
|
24
25
|
end
|
@@ -77,8 +77,8 @@ describe FilePermissions do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
it 'should update file owners' do
|
80
|
-
user1 = Etc.
|
81
|
-
user2 = Etc.
|
80
|
+
user1 = Etc.getpwuid(0)
|
81
|
+
user2 = Etc.getpwuid(1)
|
82
82
|
FakeFS do
|
83
83
|
FileUtils.touch(@file_permissions.filename)
|
84
84
|
FileUtils.chown(user1.name, nil, @file_permissions.filename)
|
data/spec/util/file_spec.rb
CHANGED