kanrisuru 0.14.0 → 0.16.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -0
- data/README.md +5 -5
- data/kanrisuru.gemspec +7 -3
- data/lib/kanrisuru/command.rb +16 -3
- data/lib/kanrisuru/core/apt/parsers/base.rb +1 -1
- data/lib/kanrisuru/core/disk/commands/lsblk.rb +6 -11
- data/lib/kanrisuru/core/disk/constants.rb +9 -0
- data/lib/kanrisuru/core/disk/parser.rb +1 -0
- data/lib/kanrisuru/core/disk/parsers/lsblk_version.rb +21 -0
- data/lib/kanrisuru/core/disk.rb +1 -0
- data/lib/kanrisuru/core/dmi/commands/dmi.rb +1 -1
- data/lib/kanrisuru/core/file/commands/chmod.rb +1 -1
- data/lib/kanrisuru/core/file/commands/copy.rb +1 -3
- data/lib/kanrisuru/core/file/commands/mkdir.rb +11 -6
- data/lib/kanrisuru/core/file/commands/rm.rb +4 -1
- data/lib/kanrisuru/core/file/commands/touch.rb +2 -1
- data/lib/kanrisuru/core/ip/commands/address.rb +64 -47
- data/lib/kanrisuru/core/ip/commands/address_label.rb +32 -16
- data/lib/kanrisuru/core/ip/commands/link.rb +96 -54
- data/lib/kanrisuru/core/ip/commands/link_set_opts.rb +61 -0
- data/lib/kanrisuru/core/ip/commands/link_type_opts.rb +313 -0
- data/lib/kanrisuru/core/ip/commands/maddress.rb +22 -13
- data/lib/kanrisuru/core/ip/commands/neighbour.rb +49 -32
- data/lib/kanrisuru/core/ip/commands/route.rb +130 -93
- data/lib/kanrisuru/core/ip/commands/rule.rb +37 -22
- data/lib/kanrisuru/core/ip/commands.rb +5 -3
- data/lib/kanrisuru/core/ip/constants.rb +12 -0
- data/lib/kanrisuru/core/ip/parser.rb +1 -0
- data/lib/kanrisuru/core/ip/parsers/version.rb +15 -0
- data/lib/kanrisuru/core/ip.rb +10 -7
- data/lib/kanrisuru/core/system/commands/kill.rb +1 -1
- data/lib/kanrisuru/core/user/commands/create_user.rb +9 -17
- data/lib/kanrisuru/core/user/commands/delete_user.rb +1 -1
- data/lib/kanrisuru/core/user/commands/update_user.rb +14 -23
- data/lib/kanrisuru/core/zypper/commands/add_repo.rb +1 -8
- data/lib/kanrisuru/core/zypper/commands/add_service.rb +4 -2
- data/lib/kanrisuru/core/zypper/commands/info.rb +1 -2
- data/lib/kanrisuru/core/zypper/commands/install.rb +2 -3
- data/lib/kanrisuru/core/zypper/commands/modify_repo.rb +1 -7
- data/lib/kanrisuru/core/zypper/commands/modify_service.rb +3 -1
- data/lib/kanrisuru/core/zypper/commands/remove.rb +1 -2
- data/lib/kanrisuru/core/zypper/commands/remove_repo.rb +3 -3
- data/lib/kanrisuru/core/zypper/commands/remove_service.rb +6 -1
- data/lib/kanrisuru/core/zypper/commands/search.rb +1 -3
- data/lib/kanrisuru/core/zypper/commands/source_install.rb +2 -0
- data/lib/kanrisuru/core/zypper/commands.rb +10 -1
- data/lib/kanrisuru/os_package.rb +2 -0
- data/lib/kanrisuru/remote/host.rb +1 -3
- data/lib/kanrisuru/result.rb +15 -0
- data/lib/kanrisuru/version.rb +1 -1
- data/spec/functional/core/archive_spec.rb +1 -1
- data/spec/functional/core/disk_spec.rb +77 -0
- data/spec/functional/core/dmi_spec.rb +78 -0
- data/spec/functional/core/file_spec.rb +284 -0
- data/spec/functional/core/group_spec.rb +62 -0
- data/spec/functional/core/ip_address_label_spec.rb +81 -0
- data/spec/functional/core/ip_address_spec.rb +95 -0
- data/spec/functional/core/ip_link_spec.rb +814 -0
- data/spec/functional/core/ip_maddress_spec.rb +78 -0
- data/spec/functional/core/ip_neighbour_spec.rb +119 -0
- data/spec/functional/core/ip_route_spec.rb +174 -0
- data/spec/functional/core/ip_rule_spec.rb +75 -0
- data/spec/functional/core/ip_spec.rb +27 -0
- data/spec/functional/core/system_spec.rb +135 -0
- data/spec/functional/core/user_spec.rb +97 -0
- data/spec/functional/core/zypper_spec.rb +708 -0
- data/spec/functional/result_spec.rb +91 -44
- data/spec/helper/stub_network.rb +7 -3
- data/spec/support/shared_examples/integration/core/transfer.rb +1 -1
- data/spec/unit/command_spec.rb +2 -0
- data/spec/unit/core/ip_spec.rb +12 -0
- metadata +25 -4
@@ -0,0 +1,284 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kanrisuru::Core::File do
|
6
|
+
before(:all) do
|
7
|
+
StubNetwork.stub!
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
StubNetwork.unstub!
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:host) do
|
15
|
+
Kanrisuru::Remote::Host.new(
|
16
|
+
host: 'localhost',
|
17
|
+
username: 'ubuntu',
|
18
|
+
keys: ['id_rsa']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'prepares chmod command' do
|
23
|
+
expect_command(host.chmod('/home/ubuntu/file1.txt', '-rwxrwxrwx'), 'chmod 777 /home/ubuntu/file1.txt')
|
24
|
+
expect_command(host.chmod('/home/ubuntu/dir', 'drwxrwxrwx', recursive: true), 'chmod 777 /home/ubuntu/dir -R')
|
25
|
+
expect_command(host.chmod('/home/ubuntu/dir', '600', recursive: true), 'chmod 600 /home/ubuntu/dir -R')
|
26
|
+
expect_command(host.chmod('/home/ubuntu/file2.conf', Kanrisuru::Mode.new('-rwxr--r--')),
|
27
|
+
'chmod 744 /home/ubuntu/file2.conf')
|
28
|
+
expect_command(host.chmod('/home/ubuntu/file2.conf', 'g+x'), 'chmod g+x /home/ubuntu/file2.conf')
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'with user and group stubs' do
|
32
|
+
before(:all) do
|
33
|
+
StubNetwork.stub_command!(:get_uid) do
|
34
|
+
1000
|
35
|
+
end
|
36
|
+
|
37
|
+
StubNetwork.stub_command!(:get_gid) do
|
38
|
+
1000
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
after(:all) do
|
43
|
+
StubNetwork.unstub_command!(:get_uid)
|
44
|
+
StubNetwork.unstub_command!(:get_gid)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'prepares chown command' do
|
48
|
+
expect_command(host.chown('/home/ubuntu/file1.text', owner: 'ubuntu', group: 'ubuntu'),
|
49
|
+
'chown 1000:1000 /home/ubuntu/file1.text')
|
50
|
+
expect_command(host.chown('/home/ubuntu/file1.text', owner: 'ubuntu'), 'chown 1000 /home/ubuntu/file1.text')
|
51
|
+
expect_command(host.chown('/home/ubuntu/file1.text', group: 'ubuntu'), 'chown :1000 /home/ubuntu/file1.text')
|
52
|
+
expect(host.chown('/home/ubuntu/file1.txt')).to be_falsey
|
53
|
+
expect_command(host.chown('/home/ubuntu/dir', owner: 1000, group: 1000, recursive: true),
|
54
|
+
'chown 1000:1000 -R /home/ubuntu/dir')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'prepares copy command' do
|
59
|
+
expect_command(host.copy('~/fileA', '~/fileB'), 'cp ~/fileA ~/fileB')
|
60
|
+
expect_command(host.copy('~/fileA', '~/fileB'), 'cp ~/fileA ~/fileB')
|
61
|
+
expect_command(host.copy('~/dir1', '~/dir2', {
|
62
|
+
recursive: true,
|
63
|
+
one_file_system: true,
|
64
|
+
update: true,
|
65
|
+
no_clobber: true,
|
66
|
+
strip_trailing_slashes: true
|
67
|
+
}), 'cp -R -x -u -n --strip-trailing-slashes ~/dir1 ~/dir2')
|
68
|
+
|
69
|
+
expect_command(host.copy('~/file1', '~/file1.copy', {
|
70
|
+
backup: true
|
71
|
+
}), 'cp -b ~/file1 ~/file1.copy')
|
72
|
+
|
73
|
+
expect_command(host.copy('~/file1', '~/file1.copy', {
|
74
|
+
backup: 'simple'
|
75
|
+
}), 'cp --backup=simple ~/file1 ~/file1.copy')
|
76
|
+
|
77
|
+
expect do
|
78
|
+
host.cp('~/file1', '~/file1.copy', { backup: 'forever' })
|
79
|
+
end.to raise_error(ArgumentError)
|
80
|
+
|
81
|
+
expect_command(host.cp('~/file1', '~/file2', { preserve: true }), 'cp -p ~/file1 ~/file2')
|
82
|
+
expect_command(host.cp('~/file1', '~/file2', { preserve: 'mode' }), 'cp --preserve=mode ~/file1 ~/file2')
|
83
|
+
expect_command(host.cp('~/file1', '~/file2', { preserve: %w[timestamps links] }),
|
84
|
+
'cp --preserve=timestamps,links ~/file1 ~/file2')
|
85
|
+
expect_command(host.copy('~/fileA', '~/fileB', { no_target_directory: true }), 'cp -T ~/fileA ~/fileB')
|
86
|
+
expect_command(host.copy('~/fileA', '~/dirB', { target_directory: true }), 'cp -t ~/dirB ~/fileA')
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'with dir stubs' do
|
90
|
+
before(:all) do
|
91
|
+
StubNetwork.stub_command!(:dir?, { return_value: true })
|
92
|
+
end
|
93
|
+
|
94
|
+
after(:all) do
|
95
|
+
StubNetwork.unstub_command!(:dir?)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'prepares link command' do
|
99
|
+
expect(host.ln('/home/ubuntu/dir', '/home/ubuntu/file1')).to be_falsey
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'with dir stubs false' do
|
104
|
+
before(:all) do
|
105
|
+
StubNetwork.stub_command!(:dir?, { return_value: false })
|
106
|
+
end
|
107
|
+
|
108
|
+
after(:all) do
|
109
|
+
StubNetwork.unstub_command!(:dir?)
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'prepares link command' do
|
113
|
+
expect_command(host.link('/home/ubuntu/file1', '/home/ubuntu/dir/file1'),
|
114
|
+
'ln /home/ubuntu/file1 /home/ubuntu/dir/file1')
|
115
|
+
|
116
|
+
expect_command(host.ln('/home/ubuntu/file1', '/home/ubuntu/dir/file1', { force: true }),
|
117
|
+
'ln /home/ubuntu/file1 /home/ubuntu/dir/file1 -f')
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'prepares mkdir command' do
|
122
|
+
expect_command(host.mkdir('/home/ubuntu/dir1'), 'mkdir /home/ubuntu/dir1')
|
123
|
+
expect_command(host.mkdir(['~/dir1', '~/dir2', '~/dir3'], { silent: true }), 'mkdir ~/dir1 ~/dir2 ~/dir3 -p')
|
124
|
+
expect_command(host.mkdir('dir', { mode: '644' }), 'mkdir dir -m 644')
|
125
|
+
expect_command(host.mkdir(['dir2', '/etc/ddir'], { mode: Kanrisuru::Mode.new('dr--r--r--') }),
|
126
|
+
'mkdir dir2 /etc/ddir -m 444')
|
127
|
+
expect_command(host.mkdir(['dir2', '/etc/ddir'], { mode: 'o+w' }), 'mkdir dir2 /etc/ddir -m o+w')
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'prepares move command' do
|
131
|
+
expect_command(host.mv('~/fileA', '~/fileB'), 'mv ~/fileA ~/fileB')
|
132
|
+
expect_command(host.move('~/fileA', '~/fileB', { force: true }), 'mv -f ~/fileA ~/fileB')
|
133
|
+
expect_command(host.mv('~/fileA', '~/fileB', { no_clobber: true }), 'mv -n ~/fileA ~/fileB')
|
134
|
+
expect_command(host.mv('~/fileA', '~/fileB', { strip_trailing_slashes: true, force: true }),
|
135
|
+
'mv --strip-trailing-slashes -f ~/fileA ~/fileB')
|
136
|
+
expect_command(host.mv('~/fileA', '~/fileB', { backup: true }), 'mv -b ~/fileA ~/fileB')
|
137
|
+
expect_command(host.mv('~/fileA', '~/fileB', { backup: 'numbered' }), 'mv --backup=numbered ~/fileA ~/fileB')
|
138
|
+
|
139
|
+
expect do
|
140
|
+
host.mv('~/fileA', '~/fileB', { backup: 'null' })
|
141
|
+
end.to raise_error(ArgumentError)
|
142
|
+
|
143
|
+
expect_command(host.mv('~/fileA', '~/fileB', { no_target_directory: true }), 'mv -T ~/fileA ~/fileB')
|
144
|
+
expect_command(host.mv(['~/fileA', '~/fileB'], '~/dir1', { target_directory: true }),
|
145
|
+
'mv -t ~/dir1 ~/fileA ~/fileB')
|
146
|
+
expect_command(host.mv(['~/fileA', '~/fileB'], '~/dir1'), 'mv ~/fileA ~/fileB ~/dir1')
|
147
|
+
end
|
148
|
+
|
149
|
+
context 'with realpath non root' do
|
150
|
+
before(:all) do
|
151
|
+
StubNetwork.stub_command!(:realpath) do
|
152
|
+
Kanrisuru::Core::Path::FilePath.new('/home/ubuntu/fileA')
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
after(:all) do
|
157
|
+
StubNetwork.unstub_command!(:realpath)
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'prepares rm command' do
|
161
|
+
expect_command(host.rm('~/fileA'), 'rm ~/fileA --preserve-root')
|
162
|
+
expect_command(host.rm('~/fileA', { force: true }), 'rm ~/fileA --preserve-root -f')
|
163
|
+
expect_command(host.rm('~/dirA', { force: true, recursive: true }), 'rm ~/dirA --preserve-root -f -r')
|
164
|
+
expect_command(host.rm(['~/dirA', '~/dirB'], { force: true, recursive: true }),
|
165
|
+
'rm ~/dirA ~/dirB --preserve-root -f -r')
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'prepares rmdir command' do
|
169
|
+
expect_command(host.rmdir('~/dir1'), 'rmdir ~/dir1')
|
170
|
+
expect_command(host.rmdir(['~/dir1', '~/dir2'], { silent: true, parents: true }),
|
171
|
+
'rmdir ~/dir1 ~/dir2 --ignore-fail-on-non-empty --parents')
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context 'with realpath root' do
|
176
|
+
before(:all) do
|
177
|
+
StubNetwork.stub_command!(:realpath) do
|
178
|
+
Kanrisuru::Core::Path::FilePath.new('/')
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
after(:all) do
|
183
|
+
StubNetwork.unstub_command!(:realpath)
|
184
|
+
end
|
185
|
+
|
186
|
+
it 'prepares rm command' do
|
187
|
+
expect do
|
188
|
+
host.rm('/', { force: true, recursive: true })
|
189
|
+
end.to raise_error(ArgumentError)
|
190
|
+
|
191
|
+
expect do
|
192
|
+
host.rm('/etc/..', { force: true, recursive: true })
|
193
|
+
end.to raise_error(ArgumentError)
|
194
|
+
end
|
195
|
+
|
196
|
+
it 'prepares rmdir command' do
|
197
|
+
expect do
|
198
|
+
host.rmdir('/etc/..', { silent: true })
|
199
|
+
end.to raise_error(ArgumentError)
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
context 'with stub' do
|
204
|
+
before(:all) do
|
205
|
+
StubNetwork.stub_command!(:realpath) do |cmd|
|
206
|
+
result = cmd[0].gsub('~', '/home/ubuntu')
|
207
|
+
Kanrisuru::Core::Path::FilePath.new(result)
|
208
|
+
end
|
209
|
+
|
210
|
+
StubNetwork.stub_command!(:inode?, { return_value: true })
|
211
|
+
StubNetwork.stub_command!(:symlink?, { return_value: false })
|
212
|
+
end
|
213
|
+
|
214
|
+
after(:all) do
|
215
|
+
StubNetwork.unstub_command!(:realpath)
|
216
|
+
StubNetwork.unstub_command!(:inode?)
|
217
|
+
StubNetwork.unstub_command!(:symlink?)
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'prepares symlink command' do
|
221
|
+
StubNetwork.stub_command!(:dir?, { return_value: false })
|
222
|
+
expect_command(host.ln_s('~/fileA', '/etc/fileA'), 'ln -s /home/ubuntu/fileA /etc/fileA')
|
223
|
+
expect_command(host.ln_s('~/fileA', '/etc/fileA', { force: true }), 'ln -s /home/ubuntu/fileA /etc/fileA -f')
|
224
|
+
StubNetwork.unstub_command!(:dir?)
|
225
|
+
|
226
|
+
StubNetwork.stub_command!(:dir?, { return_value: true })
|
227
|
+
expect_command(host.symlink('~/fileA', '~/dirA', { force: true }),
|
228
|
+
'ln -s /home/ubuntu/fileA /home/ubuntu/dirA -f')
|
229
|
+
StubNetwork.unstub_command!(:dir?)
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
context 'with broken stub' do
|
234
|
+
it 'prepares symlink command' do
|
235
|
+
StubNetwork.stub_command!(:inode?, { return_value: true })
|
236
|
+
StubNetwork.stub_command!(:realpath) do |_cmd|
|
237
|
+
Kanrisuru::Core::Path::FilePath.new('/')
|
238
|
+
end
|
239
|
+
|
240
|
+
expect do
|
241
|
+
host.symlink('/', '~/fileB')
|
242
|
+
end.to raise_error(ArgumentError)
|
243
|
+
|
244
|
+
expect do
|
245
|
+
host.symlink('/var/..', '~/fileB')
|
246
|
+
end.to raise_error(ArgumentError)
|
247
|
+
|
248
|
+
StubNetwork.unstub_command!(:inode?)
|
249
|
+
StubNetwork.unstub_command!(:realpath)
|
250
|
+
|
251
|
+
StubNetwork.stub_command!(:inode?, { return_value: false })
|
252
|
+
StubNetwork.stub_command!(:realpath) do |_cmd|
|
253
|
+
Kanrisuru::Core::Path::FilePath.new('')
|
254
|
+
end
|
255
|
+
|
256
|
+
expect do
|
257
|
+
host.symlink('', '~/fileB')
|
258
|
+
end.to raise_error(ArgumentError)
|
259
|
+
|
260
|
+
expect do
|
261
|
+
host.symlink('/home', '~/fileB')
|
262
|
+
end.to raise_error(ArgumentError)
|
263
|
+
|
264
|
+
StubNetwork.unstub_command!(:inode?)
|
265
|
+
StubNetwork.unstub_command!(:realpath)
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
it 'prepares touch command' do
|
270
|
+
expect_command(host.touch('file.conf'), 'touch file.conf')
|
271
|
+
expect_command(host.touch(['file1.conf', 'file2.conf']), 'touch file1.conf file2.conf')
|
272
|
+
expect_command(host.touch('file.conf', { atime: true, mtime: true, nofiles: true }), 'touch file.conf -a -m -c')
|
273
|
+
expect_command(host.touch('file.conf', { date: '2021-12-31' }), 'touch file.conf -d 2021-12-31')
|
274
|
+
expect_command(host.touch('file.conf', { reference: '~/otherfile.conf' }), 'touch file.conf -r ~/otherfile.conf')
|
275
|
+
end
|
276
|
+
|
277
|
+
it 'prepares unlink command' do
|
278
|
+
expect_command(host.unlink('/home/ubuntu/file1'), 'unlink /home/ubuntu/file1')
|
279
|
+
end
|
280
|
+
|
281
|
+
it 'prepares wc command' do
|
282
|
+
expect_command(host.wc('/var/log/syslog'), 'wc /var/log/syslog')
|
283
|
+
end
|
284
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kanrisuru::Core::Group do
|
6
|
+
before(:all) do
|
7
|
+
StubNetwork.stub!
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
StubNetwork.unstub!
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:host) do
|
15
|
+
Kanrisuru::Remote::Host.new(
|
16
|
+
host: 'localhost',
|
17
|
+
username: 'ubuntu',
|
18
|
+
keys: ['id_rsa']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'prepares create_group command' do
|
23
|
+
expect_command(host.create_group('admin'), 'groupadd admin')
|
24
|
+
expect_command(host.create_group('admin', { gid: 9000 }), 'groupadd admin -g 9000')
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'prepares delete_group command' do
|
28
|
+
StubNetwork.stub_command!(:group?, { return_value: true })
|
29
|
+
expect_command(host.delete_group('admin'), 'groupdel admin')
|
30
|
+
StubNetwork.unstub_command!(:group?)
|
31
|
+
StubNetwork.stub_command!(:group?, { return_value: false })
|
32
|
+
expect(host.delete_group('admin')).to be_falsey
|
33
|
+
StubNetwork.unstub_command!(:group?)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'prepares get_gid command' do
|
37
|
+
expect_command(host.get_gid('ubuntu'), 'getent group ubuntu')
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'prepares get_group command' do
|
41
|
+
expect_command(host.get_group('ubuntu'), 'getent group ubuntu | cut -d: -f4')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'prepares group? command' do
|
45
|
+
StubNetwork.stub_command!(:get_gid) do
|
46
|
+
1000
|
47
|
+
end
|
48
|
+
expect(host).to be_group('ubuntu')
|
49
|
+
StubNetwork.unstub_command!(:get_gid)
|
50
|
+
|
51
|
+
StubNetwork.stub_command!(:get_gid, { status: 1 })
|
52
|
+
expect(host).not_to be_group('ubuntu')
|
53
|
+
StubNetwork.unstub_command!(:get_gid)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'prepares update_group command' do
|
57
|
+
expect_command(host.update_group('www-data', { gid: 34, new_name: 'web' }), 'groupmod www-data -g 34 -n web')
|
58
|
+
expect(host.update_group('www-data')).to be_nil
|
59
|
+
expect(host.update_group('www-data', { gid: 0, new_name: '' })).to be_nil
|
60
|
+
expect(host.update_group('www-data', { gid: '', new_name: 'test' })).to be_nil
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kanrisuru::Core::IP do
|
6
|
+
before(:all) do
|
7
|
+
StubNetwork.stub!
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
StubNetwork.unstub!
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:host) do
|
15
|
+
Kanrisuru::Remote::Host.new(
|
16
|
+
host: 'localhost',
|
17
|
+
username: 'ubuntu',
|
18
|
+
keys: ['id_rsa']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
%w[addrlabel addrl].each do |object_variant|
|
23
|
+
context "with ip #{object_variant}" do
|
24
|
+
context 'with json support' do
|
25
|
+
before(:all) do
|
26
|
+
StubNetwork.stub_command!(:ip_version) do
|
27
|
+
Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
after(:all) do
|
32
|
+
StubNetwork.unstub_command!(:ip_version)
|
33
|
+
end
|
34
|
+
|
35
|
+
%w[show list].each do |action_variant|
|
36
|
+
it "prepares #{action_variant} command" do
|
37
|
+
expect_command(host.ip(object_variant, action_variant), 'ip -json addrlabel list')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'without json support' do
|
43
|
+
before(:all) do
|
44
|
+
StubNetwork.stub_command!(:ip_version) do
|
45
|
+
Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION - 10
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
after(:all) do
|
50
|
+
StubNetwork.unstub_command!(:ip_version)
|
51
|
+
end
|
52
|
+
|
53
|
+
%w[show list].each do |action_variant|
|
54
|
+
it "prepares #{action_variant} command" do
|
55
|
+
expect_command(host.ip(object_variant, action_variant), 'ip addrlabel list')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'prepares flush command' do
|
61
|
+
expect_command(host.ip(object_variant, 'flush'), 'ip addrlabel flush')
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'prepares add command' do
|
65
|
+
expect_command(host.ip(object_variant, 'add', {
|
66
|
+
prefix: '0.0.0.0/96',
|
67
|
+
dev: 'eno2',
|
68
|
+
label: 'eno2'
|
69
|
+
}), 'ip addrlabel add prefix 0.0.0.0/96 dev eno2 label eno2')
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'prepares del command' do
|
73
|
+
expect_command(host.ip(object_variant, 'del', {
|
74
|
+
prefix: '0.0.0.0/96',
|
75
|
+
dev: 'eno2',
|
76
|
+
label: 'eno2'
|
77
|
+
}), 'ip addrlabel del prefix 0.0.0.0/96 dev eno2 label eno2')
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kanrisuru::Core::IP do
|
6
|
+
before(:all) do
|
7
|
+
StubNetwork.stub!
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
StubNetwork.unstub!
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:host) do
|
15
|
+
Kanrisuru::Remote::Host.new(
|
16
|
+
host: 'localhost',
|
17
|
+
username: 'ubuntu',
|
18
|
+
keys: ['id_rsa']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
%w[address addr a].each do |object_variant|
|
23
|
+
context "with ip #{object_variant}" do
|
24
|
+
before(:all) do
|
25
|
+
StubNetwork.stub_command!(:ip_version) do
|
26
|
+
Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
after(:all) do
|
31
|
+
StubNetwork.unstub_command!(:ip_version)
|
32
|
+
end
|
33
|
+
|
34
|
+
%w[show list].each do |action_variant|
|
35
|
+
it "prepares #{action_variant} command" do
|
36
|
+
expect_command(host.ip(object_variant, action_variant), 'ip -json address show')
|
37
|
+
expect_command(host.ip(object_variant, action_variant, {
|
38
|
+
stats: true,
|
39
|
+
family: 'inet',
|
40
|
+
dev: 'lo',
|
41
|
+
scope: 'host',
|
42
|
+
prefix: '127.0.0.1',
|
43
|
+
label: 'lo'
|
44
|
+
}), 'ip -json -s -family inet address show dev lo scope host to 127.0.0.1 label lo')
|
45
|
+
|
46
|
+
expect_command(host.ip(object_variant, action_variant, {
|
47
|
+
dynamic: true,
|
48
|
+
permanent: true,
|
49
|
+
deprecated: true,
|
50
|
+
primary: true,
|
51
|
+
secondary: true,
|
52
|
+
up: true
|
53
|
+
}), 'ip -json address show dynamic permanent deprecated primary secondary up')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'prepares add command' do
|
58
|
+
expect_command(host.ip(object_variant, 'add', {
|
59
|
+
address: '10.0.0.1',
|
60
|
+
dev: 'eno1',
|
61
|
+
label: 'eno1',
|
62
|
+
scope: 'link'
|
63
|
+
}), 'ip address add 10.0.0.1 dev eno1 label eno1 scope link')
|
64
|
+
end
|
65
|
+
|
66
|
+
%w[del delete].each do |action_variant|
|
67
|
+
it "prepares #{action_variant} command" do
|
68
|
+
expect_command(host.ip(object_variant, action_variant, {
|
69
|
+
address: '10.0.0.1',
|
70
|
+
dev: 'eno1',
|
71
|
+
label: 'eno1',
|
72
|
+
scope: 'link'
|
73
|
+
}), 'ip address del 10.0.0.1 dev eno1 label eno1 scope link')
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'prepares flush command' do
|
78
|
+
expect_command(host.ip(object_variant, 'flush', {
|
79
|
+
dev: 'eno1',
|
80
|
+
scope: 'link',
|
81
|
+
prefix: 'eno1',
|
82
|
+
label: 'eno1'
|
83
|
+
}), 'ip address flush dev eno1 scope link to eno1 label eno1')
|
84
|
+
|
85
|
+
expect_command(host.ip(object_variant, 'flush', {
|
86
|
+
dynamic: true,
|
87
|
+
permanent: true,
|
88
|
+
deprecated: true,
|
89
|
+
primary: true,
|
90
|
+
secondary: true
|
91
|
+
}), 'ip address flush dynamic permanent deprecated primary secondary')
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|