wright 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/NEWS.md +7 -0
- data/README.md +60 -54
- data/lib/wright/cli.rb +44 -18
- data/lib/wright/dry_run.rb +7 -0
- data/lib/wright/provider/directory.rb +26 -30
- data/lib/wright/provider/file.rb +34 -34
- data/lib/wright/provider/group/darwin_directory_service.rb +8 -7
- data/lib/wright/provider/group/gnu_passwd.rb +5 -5
- data/lib/wright/provider/group.rb +53 -36
- data/lib/wright/provider/package/apt.rb +32 -8
- data/lib/wright/provider/package/homebrew.rb +6 -5
- data/lib/wright/provider/package/yum.rb +39 -0
- data/lib/wright/provider/package.rb +30 -16
- data/lib/wright/provider/symlink.rb +32 -33
- data/lib/wright/provider/user/darwin_directory_service.rb +14 -17
- data/lib/wright/provider/user/gnu_passwd.rb +20 -21
- data/lib/wright/provider/user.rb +58 -41
- data/lib/wright/resource/group.rb +1 -0
- data/lib/wright/resource/package.rb +16 -3
- data/lib/wright/resource/user.rb +1 -0
- data/lib/wright/resource.rb +4 -2
- data/lib/wright/util/user.rb +34 -2
- data/lib/wright/version.rb +1 -1
- data/man/wright.1 +15 -11
- data/spec/cli_spec.rb +18 -0
- data/spec/provider/group/darwin_directory_service_spec.rb +76 -220
- data/spec/provider/group/gnu_passwd_spec.rb +36 -189
- data/spec/provider/group_spec.rb +180 -27
- data/spec/provider/package/apt/apt-cache_policy_dmenu.return +1 -0
- data/spec/provider/package/apt/apt-cache_policy_dmenu.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_policy_dmenu.stdout +4 -0
- data/spec/provider/package/apt/apt-cache_policy_htop.stdout +3 -3
- data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.return +1 -0
- data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_policy_linux-image-3.2.0-4-amd64.stdout +6 -0
- data/spec/provider/package/apt/apt-cache_policy_linux-image.return +1 -0
- data/spec/provider/package/apt/apt-cache_policy_linux-image.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_policy_linux-image.stdout +4 -0
- data/spec/provider/package/apt/apt-cache_policy_suckless-tools.return +1 -0
- data/spec/provider/package/apt/apt-cache_policy_suckless-tools.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_policy_suckless-tools.stdout +6 -0
- data/spec/provider/package/apt/apt-cache_showpkg_dmenu.return +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_dmenu.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_showpkg_dmenu.stdout +9 -0
- data/spec/provider/package/apt/apt-cache_showpkg_htop.return +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_htop.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_showpkg_htop.stdout +20 -0
- data/spec/provider/package/apt/apt-cache_showpkg_linux-image.return +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_linux-image.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_showpkg_linux-image.stdout +11 -0
- data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.return +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_showpkg_not-a-real-package.stdout +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.return +1 -0
- data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.stderr +0 -0
- data/spec/provider/package/apt/apt-cache_showpkg_suckless-tools.stdout +26 -0
- data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.return +1 -0
- data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.stderr +0 -0
- data/spec/provider/package/apt/apt-get_--purge_remove_-qy_abcde.stdout +15 -0
- data/spec/provider/package/apt_spec.rb +82 -14
- data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.return +1 -0
- data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.stderr +0 -0
- data/spec/provider/package/homebrew/brew_install_--with-default-names_gnu-units.stdout +7 -0
- data/spec/provider/package/homebrew/brew_uninstall_--force_lame.return +1 -0
- data/spec/provider/package/homebrew/brew_uninstall_--force_lame.stderr +0 -0
- data/spec/provider/package/homebrew/brew_uninstall_--force_lame.stdout +1 -0
- data/spec/provider/package/homebrew_spec.rb +33 -6
- data/spec/provider/package/yum/rpm_-q_httpd.return +1 -0
- data/spec/provider/package/yum/rpm_-q_httpd.stderr +0 -0
- data/spec/provider/package/yum/rpm_-q_httpd.stdout +1 -0
- data/spec/provider/package/yum/rpm_-q_zsh.return +1 -0
- data/spec/provider/package/yum/rpm_-q_zsh.stderr +0 -0
- data/spec/provider/package/yum/rpm_-q_zsh.stdout +1 -0
- data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.return +1 -0
- data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.stderr +0 -0
- data/spec/provider/package/yum/yum_install_-y_mc-4.8.7-8.el7.stdout +37 -0
- data/spec/provider/package/yum/yum_install_-y_nano.return +1 -0
- data/spec/provider/package/yum/yum_install_-y_nano.stderr +0 -0
- data/spec/provider/package/yum/yum_install_-y_nano.stdout +36 -0
- data/spec/provider/package/yum/yum_install_-y_not-a-real-package.return +1 -0
- data/spec/provider/package/yum/yum_install_-y_not-a-real-package.stderr +1 -0
- data/spec/provider/package/yum/yum_install_-y_not-a-real-package.stdout +6 -0
- data/spec/provider/package/yum/yum_install_with_options.return +1 -0
- data/spec/provider/package/yum/yum_install_with_options.stderr +0 -0
- data/spec/provider/package/yum/yum_install_with_options.stdout +53 -0
- data/spec/provider/package/yum/yum_remove_-y_screen.return +1 -0
- data/spec/provider/package/yum/yum_remove_-y_screen.stderr +0 -0
- data/spec/provider/package/yum/yum_remove_-y_screen.stdout +31 -0
- data/spec/provider/package/yum/yum_remove_with_options.return +1 -0
- data/spec/provider/package/yum/yum_remove_with_options.stderr +0 -0
- data/spec/provider/package/yum/yum_remove_with_options.stdout +30 -0
- data/spec/provider/package/yum_spec.rb +130 -0
- data/spec/provider/user/darwin_directory_service_spec.rb +12 -10
- data/spec/provider/user/gnu_passwd_spec.rb +9 -9
- data/spec/provider/user_spec.rb +26 -18
- data/spec/resource/package_spec.rb +8 -0
- data/spec/resource_spec.rb +17 -9
- metadata +153 -16
data/spec/provider/group_spec.rb
CHANGED
@@ -6,18 +6,20 @@ require 'wright/provider'
|
|
6
6
|
require 'wright/provider/group'
|
7
7
|
|
8
8
|
describe Wright::Provider::Group do
|
9
|
-
before(:each)
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
after(:each) do
|
14
|
-
Wright::Provider::Group.send(:private, :uptodate?)
|
15
|
-
end
|
9
|
+
before(:each) { @resource = OpenStruct.new(name: 'foo') }
|
10
|
+
after(:each) { FakeEtc.clear_groups }
|
16
11
|
|
17
12
|
describe '#uptodate?' do
|
13
|
+
before(:each) do
|
14
|
+
Wright::Provider::Group.send(:public, :uptodate?)
|
15
|
+
end
|
16
|
+
|
17
|
+
after(:each) do
|
18
|
+
Wright::Provider::Group.send(:private, :uptodate?)
|
19
|
+
end
|
20
|
+
|
18
21
|
it 'should return the correct status' do
|
19
|
-
|
20
|
-
provider = Wright::Provider::Group.new(resource)
|
22
|
+
provider = Wright::Provider::Group.new(@resource)
|
21
23
|
|
22
24
|
FakeEtc.add_groups('foo' => { gid: 42, mem: %w(user1 user2) })
|
23
25
|
FakeEtc do
|
@@ -33,9 +35,8 @@ describe Wright::Provider::Group do
|
|
33
35
|
end
|
34
36
|
|
35
37
|
it 'should return the correct status when given a specific gid' do
|
36
|
-
gid = 52
|
37
|
-
|
38
|
-
provider = Wright::Provider::Group.new(resource)
|
38
|
+
@resource.gid = 52
|
39
|
+
provider = Wright::Provider::Group.new(@resource)
|
39
40
|
|
40
41
|
FakeEtc.add_groups('foo' => { gid: 42, mem: [] })
|
41
42
|
FakeEtc do
|
@@ -44,7 +45,7 @@ describe Wright::Provider::Group do
|
|
44
45
|
end
|
45
46
|
|
46
47
|
FakeEtc.clear_groups
|
47
|
-
FakeEtc.add_groups('foo' => { gid: gid, mem: [] })
|
48
|
+
FakeEtc.add_groups('foo' => { gid: @resource.gid, mem: [] })
|
48
49
|
FakeEtc do
|
49
50
|
provider.uptodate?(:create).must_equal true
|
50
51
|
provider.uptodate?(:remove).must_equal false
|
@@ -52,9 +53,8 @@ describe Wright::Provider::Group do
|
|
52
53
|
end
|
53
54
|
|
54
55
|
it 'should return the correct status when given a specific member list' do
|
55
|
-
members = %w(user1 user2)
|
56
|
-
|
57
|
-
provider = Wright::Provider::Group.new(resource)
|
56
|
+
@resource.members = %w(user1 user2)
|
57
|
+
provider = Wright::Provider::Group.new(@resource)
|
58
58
|
|
59
59
|
FakeEtc.add_groups('foo' => { gid: 42, mem: [] })
|
60
60
|
FakeEtc do
|
@@ -63,7 +63,7 @@ describe Wright::Provider::Group do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
FakeEtc.clear_groups
|
66
|
-
FakeEtc.add_groups('foo' => { gid: 42, mem: members })
|
66
|
+
FakeEtc.add_groups('foo' => { gid: 42, mem: @resource.members })
|
67
67
|
FakeEtc do
|
68
68
|
provider.uptodate?(:create).must_equal true
|
69
69
|
provider.uptodate?(:remove).must_equal false
|
@@ -71,17 +71,145 @@ describe Wright::Provider::Group do
|
|
71
71
|
end
|
72
72
|
|
73
73
|
it 'should raise exceptions for invalid actions' do
|
74
|
-
|
75
|
-
provider = Wright::Provider::Group.new(resource)
|
74
|
+
provider = Wright::Provider::Group.new(@resource)
|
76
75
|
e = -> { provider.uptodate?(:foobarbaz) }.must_raise ArgumentError
|
77
76
|
e.message.must_equal "invalid action 'foobarbaz'"
|
78
77
|
end
|
79
78
|
end
|
80
79
|
|
80
|
+
describe '#create' do
|
81
|
+
before(:each) do
|
82
|
+
group = @resource.name
|
83
|
+
@create_message = "INFO: create group: '#{group}'\n"
|
84
|
+
@create_message_dry = "INFO: (would) create group: '#{group}'\n"
|
85
|
+
@create_message_debug = "DEBUG: group already created: '#{group}'\n"
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should set the update status when the group is up-to-date' do
|
89
|
+
provider = Wright::Provider::Group.new(@resource)
|
90
|
+
|
91
|
+
FakeEtc.add_groups('foo' => {})
|
92
|
+
FakeEtc do
|
93
|
+
lambda do
|
94
|
+
reset_logger
|
95
|
+
provider.create
|
96
|
+
provider.updated?.must_equal false
|
97
|
+
end.must_output @create_message_debug
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'should set the update status when the group has to be created' do
|
102
|
+
provider = Wright::Provider::Group.new(@resource)
|
103
|
+
mock_provider = Minitest::Mock.new
|
104
|
+
|
105
|
+
mock_provider.expect(:create_group, nil)
|
106
|
+
provider.stub :create_group, -> { mock_provider.create_group } do
|
107
|
+
FakeEtc do
|
108
|
+
lambda do
|
109
|
+
reset_logger
|
110
|
+
provider.create
|
111
|
+
provider.updated?.must_equal true
|
112
|
+
end.must_output @create_message
|
113
|
+
end
|
114
|
+
mock_provider.verify
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'should set the update status when the group has to be updated' do
|
119
|
+
@resource.gid = 123
|
120
|
+
@resource.members = %w(johndoe janedoe)
|
121
|
+
provider = Wright::Provider::Group.new(@resource)
|
122
|
+
mock_provider = Minitest::Mock.new
|
123
|
+
|
124
|
+
mock_provider.expect(:set_gid, nil)
|
125
|
+
mock_provider.expect(:set_members, nil)
|
126
|
+
provider.stub :set_gid, -> { mock_provider.set_gid } do
|
127
|
+
provider.stub :set_members, -> { mock_provider.set_members } do
|
128
|
+
FakeEtc.add_groups(@resource.name => { mem: [] })
|
129
|
+
FakeEtc do
|
130
|
+
lambda do
|
131
|
+
reset_logger
|
132
|
+
provider.create
|
133
|
+
provider.updated?.must_equal true
|
134
|
+
end.must_output @create_message
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
mock_provider.verify
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'should set the update status in dry-run mode' do
|
142
|
+
provider = Wright::Provider::Group.new(@resource)
|
143
|
+
|
144
|
+
Wright.dry_run do
|
145
|
+
FakeEtc do
|
146
|
+
lambda do
|
147
|
+
reset_logger
|
148
|
+
provider.create
|
149
|
+
provider.updated?.must_equal true
|
150
|
+
end.must_output @create_message_dry
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
describe '#remove' do
|
157
|
+
before(:each) do
|
158
|
+
group = @resource.name
|
159
|
+
@remove_message = "INFO: remove group: '#{group}'\n"
|
160
|
+
@remove_message_dry = "INFO: (would) remove group: '#{group}'\n"
|
161
|
+
@remove_message_debug = "DEBUG: group already removed: '#{group}'\n"
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'should set the update status when the group is already removed' do
|
165
|
+
provider = Wright::Provider::Group.new(@resource)
|
166
|
+
|
167
|
+
FakeEtc do
|
168
|
+
lambda do
|
169
|
+
reset_logger
|
170
|
+
provider.remove
|
171
|
+
provider.updated?.must_equal false
|
172
|
+
end.must_output @remove_message_debug
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
it 'should set the update status when the group has to be removed' do
|
177
|
+
provider = Wright::Provider::Group.new(@resource)
|
178
|
+
mock_provider = Minitest::Mock.new
|
179
|
+
|
180
|
+
mock_provider.expect(:remove_group, nil)
|
181
|
+
provider.stub :remove_group, -> { mock_provider.remove_group } do
|
182
|
+
FakeEtc.add_groups(@resource.name => {})
|
183
|
+
FakeEtc do
|
184
|
+
lambda do
|
185
|
+
reset_logger
|
186
|
+
provider.remove
|
187
|
+
provider.updated?.must_equal true
|
188
|
+
end.must_output @remove_message
|
189
|
+
end
|
190
|
+
end
|
191
|
+
mock_provider.verify
|
192
|
+
end
|
193
|
+
|
194
|
+
it 'should set the update status in dry-run mode' do
|
195
|
+
provider = Wright::Provider::Group.new(@resource)
|
196
|
+
|
197
|
+
Wright.dry_run do
|
198
|
+
FakeEtc.add_groups(@resource.name => {})
|
199
|
+
FakeEtc do
|
200
|
+
lambda do
|
201
|
+
reset_logger
|
202
|
+
provider.remove
|
203
|
+
provider.updated?.must_equal true
|
204
|
+
end.must_output @remove_message_dry
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
81
210
|
describe '#add_member' do
|
82
211
|
it 'should raise an exception' do
|
83
|
-
|
84
|
-
provider = Wright::Provider::Group.new(resource)
|
212
|
+
provider = Wright::Provider::Group.new(@resource)
|
85
213
|
lambda do
|
86
214
|
provider.send(:add_member, 'member', 'group')
|
87
215
|
end.must_raise NotImplementedError
|
@@ -90,8 +218,7 @@ describe Wright::Provider::Group do
|
|
90
218
|
|
91
219
|
describe '#remove_member' do
|
92
220
|
it 'should raise an exception' do
|
93
|
-
|
94
|
-
provider = Wright::Provider::Group.new(resource)
|
221
|
+
provider = Wright::Provider::Group.new(@resource)
|
95
222
|
lambda do
|
96
223
|
provider.send(:remove_member, 'member', 'group')
|
97
224
|
end.must_raise NotImplementedError
|
@@ -100,12 +227,11 @@ describe Wright::Provider::Group do
|
|
100
227
|
|
101
228
|
describe '#set_members' do
|
102
229
|
it 'should use add_member and remove_member to update the member list' do
|
103
|
-
group_name =
|
230
|
+
group_name = @resource.name
|
104
231
|
current_members = %w(user1 user2 user3)
|
105
232
|
target_members = %w(user3 user4 user5)
|
106
|
-
resource =
|
107
|
-
|
108
|
-
provider = Wright::Provider::Group.new(resource)
|
233
|
+
@resource.members = target_members
|
234
|
+
provider = Wright::Provider::Group.new(@resource)
|
109
235
|
Wright::Provider::Group.send(:public, :set_members)
|
110
236
|
|
111
237
|
mock_provider = Minitest::Mock.new
|
@@ -129,4 +255,31 @@ describe Wright::Provider::Group do
|
|
129
255
|
Wright::Provider::Group.send(:private, :set_members)
|
130
256
|
end
|
131
257
|
end
|
258
|
+
|
259
|
+
describe '#create_group' do
|
260
|
+
it 'should raise an exception' do
|
261
|
+
provider = Wright::Provider::Group.new(@resource)
|
262
|
+
lambda do
|
263
|
+
provider.send(:create_group)
|
264
|
+
end.must_raise NotImplementedError
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
describe '#remove_group' do
|
269
|
+
it 'should raise an exception' do
|
270
|
+
provider = Wright::Provider::Group.new(@resource)
|
271
|
+
lambda do
|
272
|
+
provider.send(:remove_group)
|
273
|
+
end.must_raise NotImplementedError
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
describe '#set_gid' do
|
278
|
+
it 'should raise an exception' do
|
279
|
+
provider = Wright::Provider::Group.new(@resource)
|
280
|
+
lambda do
|
281
|
+
provider.send(:set_gid)
|
282
|
+
end.must_raise NotImplementedError
|
283
|
+
end
|
284
|
+
end
|
132
285
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Package: htop
|
2
|
+
Versions:
|
3
|
+
1.0.3-1 (/var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_binary-amd64_Packages) (/var/lib/dpkg/status)
|
4
|
+
Description Language:
|
5
|
+
File: /var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_binary-amd64_Packages
|
6
|
+
MD5: 8eb5aa19b3c92a975dc78e2165f6688d
|
7
|
+
Description Language: en
|
8
|
+
File: /var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_i18n_Translation-en
|
9
|
+
MD5: 8eb5aa19b3c92a975dc78e2165f6688d
|
10
|
+
|
11
|
+
|
12
|
+
Reverse Depends:
|
13
|
+
util-vserver,htop
|
14
|
+
lava-dispatcher,htop
|
15
|
+
education-common,htop
|
16
|
+
Dependencies:
|
17
|
+
1.0.3-1 - libc6 (2 2.15) libncursesw5 (2 5.6+20070908) libtinfo5 (0 (null)) strace (0 (null)) ltrace (0 (null))
|
18
|
+
Provides:
|
19
|
+
1.0.3-1 -
|
20
|
+
Reverse Provides:
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
N: Unable to locate package not-a-real-package
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Package: suckless-tools
|
2
|
+
Versions:
|
3
|
+
40-1 (/var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_binary-amd64_Packages)
|
4
|
+
Description Language:
|
5
|
+
File: /var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_binary-amd64_Packages
|
6
|
+
MD5: d19175bb7582a6f06fe2a6daa5910d10
|
7
|
+
Description Language: en
|
8
|
+
File: /var/lib/apt/lists/debian.inode.at_debian_dists_jessie_main_i18n_Translation-en
|
9
|
+
MD5: d19175bb7582a6f06fe2a6daa5910d10
|
10
|
+
|
11
|
+
|
12
|
+
Reverse Depends:
|
13
|
+
wmii,suckless-tools
|
14
|
+
uzbl,suckless-tools
|
15
|
+
surf,suckless-tools
|
16
|
+
spectrwm,suckless-tools
|
17
|
+
ncurses-term,suckless-tools 39
|
18
|
+
ncurses-term,suckless-tools 39
|
19
|
+
i3,suckless-tools
|
20
|
+
herbstluftwm,suckless-tools
|
21
|
+
dwm,suckless-tools
|
22
|
+
Dependencies:
|
23
|
+
40-1 - libc6 (2 2.14) libfontconfig1 (2 2.11) libfreetype6 (2 2.2.1) libx11-6 (0 (null)) libxext6 (0 (null)) libxft2 (4 2.1.1) libxinerama1 (0 (null)) libxrender1 (0 (null)) libxss1 (0 (null)) zlib1g (2 1:1.1.4) dwm (0 (null)) stterm (0 (null)) surf (0 (null))
|
24
|
+
Provides:
|
25
|
+
40-1 - xssstate wmname tabbed swarp ssid sselp sprop slock lsx lsw dmenu
|
26
|
+
Reverse Provides:
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Reading package lists...
|
2
|
+
Building dependency tree...
|
3
|
+
Reading state information...
|
4
|
+
The following packages were automatically installed and are no longer required:
|
5
|
+
cd-discid cdparanoia libmusicbrainz-discid-perl
|
6
|
+
libwebservice-musicbrainz-perl vorbis-tools
|
7
|
+
Use 'apt-get autoremove' to remove them.
|
8
|
+
The following packages will be REMOVED:
|
9
|
+
abcde*
|
10
|
+
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
|
11
|
+
After this operation, 295 kB disk space will be freed.
|
12
|
+
(Reading database ...
|
13
|
+
Removing abcde (2.6-2) ...
|
14
|
+
Purging configuration files for abcde (2.6-2) ...
|
15
|
+
Processing triggers for man-db (2.7.0.2-5) ...
|
@@ -3,17 +3,21 @@ require_relative '../../spec_helper'
|
|
3
3
|
require 'wright/provider/package/apt'
|
4
4
|
|
5
5
|
describe Wright::Provider::Package::Apt do
|
6
|
-
def apt_cache(pkg_name)
|
7
|
-
['apt-cache',
|
6
|
+
def apt_cache(cmd, pkg_name)
|
7
|
+
['apt-cache', cmd.to_s, pkg_name]
|
8
8
|
end
|
9
9
|
|
10
|
-
def apt_get(action, pkg_name,
|
11
|
-
version =
|
12
|
-
|
10
|
+
def apt_get(action, pkg_name, args = {})
|
11
|
+
version = args[:version].nil? ? '' : "=#{args[:version]}"
|
12
|
+
options = args[:options]
|
13
|
+
['apt-get', *options, action.to_s, '-qy', pkg_name + version]
|
13
14
|
end
|
14
15
|
|
15
|
-
def package_provider(pkg_name,
|
16
|
-
|
16
|
+
def package_provider(pkg_name, args = {})
|
17
|
+
properties = { name: pkg_name,
|
18
|
+
version: args[:version],
|
19
|
+
options: args[:options] }
|
20
|
+
pkg_resource = OpenStruct.new(properties)
|
17
21
|
Wright::Provider::Package::Apt.new(pkg_resource)
|
18
22
|
end
|
19
23
|
|
@@ -28,7 +32,7 @@ describe Wright::Provider::Package::Apt do
|
|
28
32
|
pkg_name = 'abcde'
|
29
33
|
pkg_versions = ['2.5.3-1']
|
30
34
|
pkg_provider = package_provider(pkg_name)
|
31
|
-
apt_cache_cmd = apt_cache(pkg_name)
|
35
|
+
apt_cache_cmd = apt_cache(:policy, pkg_name)
|
32
36
|
|
33
37
|
@fake_capture3.expect(apt_cache_cmd)
|
34
38
|
@fake_capture3.stub do
|
@@ -40,9 +44,47 @@ describe Wright::Provider::Package::Apt do
|
|
40
44
|
pkg_name = 'htop'
|
41
45
|
pkg_versions = []
|
42
46
|
pkg_provider = package_provider(pkg_name)
|
43
|
-
|
47
|
+
apt_cache_policy_cmd = apt_cache(:policy, pkg_name)
|
48
|
+
apt_cache_showpkg_cmd = apt_cache(:showpkg, pkg_name)
|
44
49
|
|
45
|
-
@fake_capture3.expect(
|
50
|
+
@fake_capture3.expect(apt_cache_policy_cmd)
|
51
|
+
@fake_capture3.expect(apt_cache_showpkg_cmd)
|
52
|
+
@fake_capture3.stub do
|
53
|
+
pkg_provider.installed_versions.must_equal pkg_versions
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should handle virtual packages for which providers are installed' do
|
58
|
+
pkg_name = 'linux-image'
|
59
|
+
provider_name = 'linux-image-3.2.0-4-amd64'
|
60
|
+
pkg_versions = ['virtual']
|
61
|
+
pkg_provider = package_provider(pkg_name)
|
62
|
+
apt_cache_policy_cmd = apt_cache(:policy, pkg_name)
|
63
|
+
apt_cache_showpkg_cmd = apt_cache(:showpkg, pkg_name)
|
64
|
+
apt_cache_policy_provider_cmd = apt_cache(:policy, provider_name)
|
65
|
+
|
66
|
+
@fake_capture3.expect(apt_cache_policy_cmd)
|
67
|
+
@fake_capture3.expect(apt_cache_showpkg_cmd)
|
68
|
+
@fake_capture3.expect(apt_cache_policy_provider_cmd)
|
69
|
+
@fake_capture3.stub do
|
70
|
+
pkg_provider.installed_versions.must_equal pkg_versions
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should handle virtual packages for which no providers are installed' do
|
75
|
+
pkg_name = 'dmenu'
|
76
|
+
provider_name = 'suckless-tools'
|
77
|
+
pkg_versions = []
|
78
|
+
pkg_provider = package_provider(pkg_name)
|
79
|
+
apt_cache_policy_cmd = apt_cache(:policy, pkg_name)
|
80
|
+
apt_cache_showpkg_cmd = apt_cache(:showpkg, pkg_name)
|
81
|
+
apt_cache_policy_provider_cmd = apt_cache(:policy, provider_name)
|
82
|
+
apt_cache_showpkg_provider_cmd = apt_cache(:showpkg, provider_name)
|
83
|
+
|
84
|
+
@fake_capture3.expect(apt_cache_policy_cmd)
|
85
|
+
@fake_capture3.expect(apt_cache_showpkg_cmd)
|
86
|
+
@fake_capture3.expect(apt_cache_policy_provider_cmd)
|
87
|
+
@fake_capture3.expect(apt_cache_showpkg_provider_cmd)
|
46
88
|
@fake_capture3.stub do
|
47
89
|
pkg_provider.installed_versions.must_equal pkg_versions
|
48
90
|
end
|
@@ -52,9 +94,11 @@ describe Wright::Provider::Package::Apt do
|
|
52
94
|
pkg_name = 'not-a-real-package'
|
53
95
|
pkg_versions = []
|
54
96
|
pkg_provider = package_provider(pkg_name)
|
55
|
-
|
97
|
+
apt_cache_policy_cmd = apt_cache(:policy, pkg_name)
|
98
|
+
apt_cache_showpkg_cmd = apt_cache(:showpkg, pkg_name)
|
56
99
|
|
57
|
-
@fake_capture3.expect(
|
100
|
+
@fake_capture3.expect(apt_cache_policy_cmd)
|
101
|
+
@fake_capture3.expect(apt_cache_showpkg_cmd)
|
58
102
|
@fake_capture3.stub do
|
59
103
|
pkg_provider.installed_versions.must_equal pkg_versions
|
60
104
|
end
|
@@ -76,8 +120,8 @@ describe Wright::Provider::Package::Apt do
|
|
76
120
|
it 'should install specific package versions' do
|
77
121
|
pkg_name = 'abcde'
|
78
122
|
pkg_version = '2.5.4-1'
|
79
|
-
pkg_provider = package_provider(pkg_name, pkg_version)
|
80
|
-
apt_cmd = apt_get(:install, pkg_name, pkg_version)
|
123
|
+
pkg_provider = package_provider(pkg_name, version: pkg_version)
|
124
|
+
apt_cmd = apt_get(:install, pkg_name, version: pkg_version)
|
81
125
|
|
82
126
|
@fake_capture3.expect(apt_cmd)
|
83
127
|
@fake_capture3.stub do
|
@@ -85,6 +129,18 @@ describe Wright::Provider::Package::Apt do
|
|
85
129
|
end
|
86
130
|
end
|
87
131
|
|
132
|
+
it 'should pass options to the package manager' do
|
133
|
+
pkg_name = 'htop'
|
134
|
+
pkg_options = ['--no-install-recommends']
|
135
|
+
pkg_provider = package_provider(pkg_name, options: pkg_options)
|
136
|
+
apt_cmd = apt_get(:install, pkg_name, options: pkg_options)
|
137
|
+
|
138
|
+
@fake_capture3.expect(apt_cmd, 'apt-get_install_-qy_htop')
|
139
|
+
@fake_capture3.stub do
|
140
|
+
pkg_provider.send(:install_package)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
88
144
|
it 'should raise exceptions for unknown packages' do
|
89
145
|
pkg_name = 'not-a-real-package'
|
90
146
|
pkg_provider = package_provider(pkg_name)
|
@@ -111,5 +167,17 @@ describe Wright::Provider::Package::Apt do
|
|
111
167
|
pkg_provider.send(:remove_package)
|
112
168
|
end
|
113
169
|
end
|
170
|
+
|
171
|
+
it 'should pass options to the package manager' do
|
172
|
+
pkg_name = 'abcde'
|
173
|
+
pkg_options = ['--purge']
|
174
|
+
pkg_provider = package_provider(pkg_name, options: pkg_options)
|
175
|
+
apt_cmd = apt_get(:remove, pkg_name, options: pkg_options)
|
176
|
+
|
177
|
+
@fake_capture3.expect(apt_cmd)
|
178
|
+
@fake_capture3.stub do
|
179
|
+
pkg_provider.send(:remove_package)
|
180
|
+
end
|
181
|
+
end
|
114
182
|
end
|
115
183
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1,7 @@
|
|
1
|
+
==> Downloading http://ftpmirror.gnu.org/units/units-2.02.tar.gz
|
2
|
+
Already downloaded: /Library/Caches/Homebrew/gnu-units-2.02.tar.gz
|
3
|
+
==> Patching
|
4
|
+
patching file definitions.units
|
5
|
+
==> ./configure --prefix=/usr/local/Cellar/gnu-units/2.02
|
6
|
+
==> make install
|
7
|
+
🍺 /usr/local/Cellar/gnu-units/2.02: 12 files, 624K, built in 11 seconds
|
@@ -0,0 +1 @@
|
|
1
|
+
0
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
Uninstalling lame... (25 files, 2.1M)
|