kanrisuru 0.9.2 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CONTRIBUTING.md +9 -9
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +7 -8
  4. data/.rspec +1 -1
  5. data/CHANGELOG.md +125 -96
  6. data/CODE_OF_CONDUCT.md +10 -10
  7. data/README.md +19 -90
  8. data/kanrisuru.gemspec +2 -1
  9. data/lib/kanrisuru/command.rb +7 -0
  10. data/lib/kanrisuru/core/archive.rb +13 -36
  11. data/lib/kanrisuru/core/disk.rb +0 -3
  12. data/lib/kanrisuru/core/dmi.rb +1 -1
  13. data/lib/kanrisuru/core/file.rb +4 -11
  14. data/lib/kanrisuru/core/find.rb +6 -11
  15. data/lib/kanrisuru/core/mount.rb +14 -15
  16. data/lib/kanrisuru/core/socket.rb +2 -1
  17. data/lib/kanrisuru/core/stream.rb +1 -2
  18. data/lib/kanrisuru/core/zypper.rb +6 -23
  19. data/lib/kanrisuru/os_package/collection.rb +58 -0
  20. data/lib/kanrisuru/os_package/define.rb +34 -0
  21. data/lib/kanrisuru/os_package/include.rb +163 -0
  22. data/lib/kanrisuru/os_package.rb +3 -245
  23. data/lib/kanrisuru/remote/cpu.rb +5 -1
  24. data/lib/kanrisuru/remote/env.rb +8 -0
  25. data/lib/kanrisuru/remote/fstab.rb +5 -5
  26. data/lib/kanrisuru/result.rb +5 -4
  27. data/lib/kanrisuru/util.rb +1 -1
  28. data/lib/kanrisuru/version.rb +1 -1
  29. data/spec/functional/core/apt_spec.rb +22 -30
  30. data/spec/functional/core/archive_spec.rb +170 -0
  31. data/spec/functional/core/find_spec.rb +94 -113
  32. data/spec/functional/core/mount_spec.rb +121 -0
  33. data/spec/functional/core/socket_spec.rb +23 -28
  34. data/spec/functional/core/stream_spec.rb +12 -12
  35. data/spec/functional/core/transfer_spec.rb +108 -131
  36. data/spec/functional/core/yum_spec.rb +58 -83
  37. data/spec/functional/remote/cluster_spec.rb +11 -2
  38. data/spec/functional/remote/cpu_spec.rb +104 -0
  39. data/spec/functional/remote/env_spec.rb +48 -0
  40. data/spec/helper/stub_network.rb +49 -14
  41. data/spec/helper/test_hosts.rb +11 -1
  42. data/spec/integration/core/apt_spec.rb +2 -3
  43. data/spec/integration/core/archive_spec.rb +8 -13
  44. data/spec/integration/core/disk_spec.rb +2 -3
  45. data/spec/integration/core/dmi_spec.rb +2 -3
  46. data/spec/integration/core/file_spec.rb +4 -14
  47. data/spec/integration/core/find_spec.rb +3 -3
  48. data/spec/integration/core/group_spec.rb +2 -3
  49. data/spec/integration/core/ip_spec.rb +2 -3
  50. data/spec/integration/core/path_spec.rb +2 -3
  51. data/spec/integration/core/socket_spec.rb +2 -4
  52. data/spec/integration/core/stat_spec.rb +2 -3
  53. data/spec/integration/core/stream_spec.rb +6 -9
  54. data/spec/integration/core/system_spec.rb +2 -4
  55. data/spec/integration/core/transfer_spec.rb +4 -9
  56. data/spec/integration/core/user_spec.rb +2 -4
  57. data/spec/integration/core/yum_spec.rb +2 -3
  58. data/spec/integration/core/zypper_spec.rb +5 -6
  59. data/spec/{functional → integration}/os_package_spec.rb +0 -0
  60. data/spec/integration/remote/cpu_spec.rb +2 -3
  61. data/spec/integration/remote/env_spec.rb +2 -3
  62. data/spec/integration/remote/fstab_spec.rb +2 -3
  63. data/spec/integration/remote/host_spec.rb +2 -3
  64. data/spec/integration/remote/memory_spec.rb +2 -2
  65. data/spec/integration/remote/os_spec.rb +2 -3
  66. data/spec/integration/remote/remote_file_spec.rb +9 -15
  67. data/spec/spec_helper.rb +12 -3
  68. data/spec/unit/command_spec.rb +49 -0
  69. data/spec/unit/core/find_spec.rb +1 -1
  70. data/spec/unit/core/yum_spec.rb +1 -1
  71. data/spec/unit/mode_spec.rb +33 -2
  72. data/spec/unit/remote/cluster_spec.rb +3 -1
  73. data/spec/unit/remote/cpu_spec.rb +1 -2
  74. data/spec/unit/remote/env_spec.rb +17 -0
  75. data/spec/unit/util_spec.rb +13 -0
  76. metadata +28 -5
@@ -20,150 +20,131 @@ RSpec.describe Kanrisuru::Core::Find do
20
20
  end
21
21
 
22
22
  it 'prepares find command' do
23
- expect_command(host.find, "find")
23
+ expect_command(host.find, 'find')
24
24
 
25
- expect_command(host.find(follow: 'never'), "find -P")
26
- expect_command(host.find(follow: 'always'), "find -L")
27
- expect_command(host.find(follow: 'command'), "find -H")
25
+ expect_command(host.find(follow: 'never'), 'find -P')
26
+ expect_command(host.find(follow: 'always'), 'find -L')
27
+ expect_command(host.find(follow: 'command'), 'find -H')
28
28
 
29
- expect_command(host.find(paths: '/etc'), "find /etc")
30
- expect_command(host.find(paths: ['/etc', '/var', '/home']), "find /etc /var /home")
29
+ expect_command(host.find(paths: '/etc'), 'find /etc')
30
+ expect_command(host.find(paths: ['/etc', '/var', '/home']), 'find /etc /var /home')
31
31
 
32
- expect {
32
+ expect do
33
33
  host.find(paths: 1)
34
- }.to raise_error(ArgumentError)
35
-
36
- expect_command(host.find(paths: '/',
37
- executable: true,
38
- empty: true,
39
- readable: true,
40
- writeable: true,
41
- nogroup: true,
42
- nouser: true,
43
- mount: true
44
- ),
45
- "find / -executable -empty -readable -nogroup -nouser -mount"
46
- )
47
-
48
- expect_command(host.find(paths: '/',
49
- path: "/lib",
50
- name: '*.so',
51
- gid: 0,
52
- uid: 0,
53
- user: 'root',
54
- group: 'root',
55
- links: 2,
56
- mindepth: 0,
57
- maxdepth: 100
58
- ),
59
- "find / -path /lib -name *.so -gid 0 -uid 0 -user root -group root -links 2 -maxdepth 100 -mindepth 0"
60
- )
34
+ end.to raise_error(ArgumentError)
35
+
36
+ expect_command(host.find(paths: '/',
37
+ executable: true,
38
+ empty: true,
39
+ readable: true,
40
+ writeable: true,
41
+ nogroup: true,
42
+ nouser: true,
43
+ mount: true),
44
+ 'find / -executable -empty -readable -nogroup -nouser -mount')
45
+
46
+ expect_command(host.find(paths: '/',
47
+ path: '/lib',
48
+ name: '*.so',
49
+ gid: 0,
50
+ uid: 0,
51
+ user: 'root',
52
+ group: 'root',
53
+ links: 2,
54
+ mindepth: 0,
55
+ maxdepth: 100),
56
+ 'find / -path /lib -name *.so -gid 0 -uid 0 -user root -group root -links 2 -maxdepth 100 -mindepth 0')
61
57
 
62
58
  expect_command(host.find(paths: '/var/log',
63
- atime: '+1',
64
- ctime: '+2',
65
- mtime: '+3',
66
- amin: '100',
67
- cmin: '200',
68
- mmin: '300'
69
- ),
70
- "find /var/log -atime +1 -ctime +2 -mtime +3 -amin 100 -cmin 200 -mmin 300"
71
- )
59
+ atime: '+1',
60
+ ctime: '+2',
61
+ mtime: '+3',
62
+ amin: '100',
63
+ cmin: '200',
64
+ mmin: '300'),
65
+ 'find /var/log -atime +1 -ctime +2 -mtime +3 -amin 100 -cmin 200 -mmin 300')
72
66
 
73
67
  expect_command(host.find(
74
- paths: '/dev',
75
- regex: '/dev/tty[0-9]*'
76
- ),
77
- "find /dev -regex '/dev/tty[0-9]*'"
78
- )
68
+ paths: '/dev',
69
+ regex: '/dev/tty[0-9]*'
70
+ ),
71
+ "find /dev -regex '/dev/tty[0-9]*'")
79
72
 
80
73
  expect_command(host.find(
81
- paths: '/dev',
82
- regex_type: 'posix-egrep',
83
- regex: '/dev/tty[0-9]*'
84
- ),
85
- "find /dev -regextype posix-egrep -regex '/dev/tty[0-9]*'"
86
- )
74
+ paths: '/dev',
75
+ regex_type: 'posix-egrep',
76
+ regex: '/dev/tty[0-9]*'
77
+ ),
78
+ "find /dev -regextype posix-egrep -regex '/dev/tty[0-9]*'")
87
79
 
88
80
  expect_command(host.find(
89
- paths: '/var/log',
90
- size: 100
91
- ),
92
- "find /var/log -size 100"
93
- )
81
+ paths: '/var/log',
82
+ size: 100
83
+ ),
84
+ 'find /var/log -size 100')
94
85
 
95
86
  expect_command(host.find(
96
- paths: '/var/log',
97
- size: "100"
98
- ),
99
- "find /var/log -size 100"
100
- )
101
-
102
- expect {
103
- host.find(size: "100n")
104
- }.to raise_error(ArgumentError)
87
+ paths: '/var/log',
88
+ size: '100'
89
+ ),
90
+ 'find /var/log -size 100')
91
+
92
+ expect do
93
+ host.find(size: '100n')
94
+ end.to raise_error(ArgumentError)
105
95
 
106
96
  expect_command(host.find(
107
- paths: '/var/log',
108
- size: "-100k"
109
- ),
110
- "find /var/log -size -100k"
111
- )
97
+ paths: '/var/log',
98
+ size: '-100k'
99
+ ),
100
+ 'find /var/log -size -100k')
112
101
 
113
102
  expect_command(host.find(
114
- paths: '/var/log',
115
- size: "+10M"
116
- ),
117
- "find /var/log -size +10M"
118
- )
103
+ paths: '/var/log',
104
+ size: '+10M'
105
+ ),
106
+ 'find /var/log -size +10M')
119
107
 
120
108
  expect_command(host.find(
121
- paths: "/dev",
122
- type: 'directory'
123
- ),
124
- "find /dev -type d"
125
- )
109
+ paths: '/dev',
110
+ type: 'directory'
111
+ ),
112
+ 'find /dev -type d')
126
113
 
127
114
  expect_command(host.find(
128
- paths: "/dev",
129
- type: 'file'
130
- ),
131
- "find /dev -type f"
132
- )
115
+ paths: '/dev',
116
+ type: 'file'
117
+ ),
118
+ 'find /dev -type f')
133
119
 
134
120
  expect_command(host.find(
135
- paths: "/dev",
136
- type: 'symlinks'
137
- ),
138
- "find /dev -type l"
139
- )
121
+ paths: '/dev',
122
+ type: 'symlinks'
123
+ ),
124
+ 'find /dev -type l')
140
125
 
141
126
  expect_command(host.find(
142
- paths: "/dev",
143
- type: 'block'
144
- ),
145
- "find /dev -type b"
146
- )
127
+ paths: '/dev',
128
+ type: 'block'
129
+ ),
130
+ 'find /dev -type b')
147
131
 
148
132
  expect_command(host.find(
149
- paths: "/dev",
150
- type: 'character'
151
- ),
152
- "find /dev -type c"
153
- )
133
+ paths: '/dev',
134
+ type: 'character'
135
+ ),
136
+ 'find /dev -type c')
154
137
 
155
138
  expect_command(host.find(
156
- paths: "/dev",
157
- type: 'pipe'
158
- ),
159
- "find /dev -type p"
160
- )
139
+ paths: '/dev',
140
+ type: 'pipe'
141
+ ),
142
+ 'find /dev -type p')
161
143
 
162
144
  expect_command(host.find(
163
- paths: "/dev",
164
- type: 'socket'
165
- ),
166
- "find /dev -type s"
167
- )
145
+ paths: '/dev',
146
+ type: 'socket'
147
+ ),
148
+ 'find /dev -type s')
168
149
  end
169
150
  end
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Kanrisuru::Core::Mount 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 mount command' do
23
+ expect_command(host.mount, 'mount')
24
+ expect_command(host.mount(bind_old: '/mnt/dira', bind_new: '/mnt/dirb'), 'mount --bind /mnt/dira /mnt/dirb')
25
+ expect_command(host.mount(rbind_old: '/mnt/dira', rbind_new: '/mnt/dirb'), 'mount --rbind /mnt/dira /mnt/dirb')
26
+ expect_command(host.mount(move_old: '/mnt/dira', move_new: '/mnt/dirb'), 'mount --move /mnt/dira /mnt/dirb')
27
+ expect_command(host.mount(
28
+ label: 'cloudimg-rootfs',
29
+ uuid: '5fbaea960d09e2ad',
30
+ sloppy: true,
31
+ internal_only: true,
32
+ fake: true,
33
+ no_mtab: true,
34
+ no_canonicalize: true,
35
+ device: '/dev/vda9',
36
+ directory: '/mnt/dir1'
37
+ ), 'mount -L cloudimg-rootfs -U 5fbaea960d09e2ad -f -i -s --no-mtab --no-canonicalize /dev/vda9 /mnt/dir1')
38
+
39
+ expect_command(host.mount(
40
+ fs_opts: { async: true, auto: true, group: true, relatime: true, owner: true },
41
+ device: '/dev/tty',
42
+ directory: '/mnt/dir2'
43
+ ), 'mount -o async,auto,group,relatime,owner /dev/tty /mnt/dir2')
44
+
45
+ expect do
46
+ host.mount(fs_opts: { value: true }, device: '/home/ubuntu/dir', directory: '/mnt/dir3')
47
+ end.to raise_error(ArgumentError)
48
+
49
+ expect_command(host.mount(
50
+ type: 'ext2',
51
+ device: '/dev/tty',
52
+ directory: '/mnt/dir2'
53
+ ), 'mount -t ext2 /dev/tty /mnt/dir2')
54
+
55
+ expect_command(host.mount(
56
+ type: 'ext4',
57
+ fs_opts: { acl: true, journal: 'update', usrquota: true, async: true, owner: true, group: true },
58
+ device: '/dev/tty',
59
+ directory: '/mnt/dir2'
60
+ ), 'mount -t ext4 -o acl,journal=update,usrquota,async,owner,group /dev/tty /mnt/dir2')
61
+
62
+ expect_command(host.mount(type: 'nontfs,xfs', all: true), 'mount -t nontfs,xfs -a')
63
+ expect_command(host.mount(type: 'fat,xfs', all: true), 'mount -t fat,xfs -a')
64
+
65
+ expect do
66
+ host.mount(
67
+ type: 'ext2',
68
+ fs_opts: { acl: true, journal: 'update', usrquota: true, async: true, owner: true, group: true },
69
+ device: '/dev/tty',
70
+ directory: '/mnt/dir2'
71
+ )
72
+ end.to raise_error(ArgumentError)
73
+
74
+ expect do
75
+ host.mount(
76
+ type: 'ext4',
77
+ fs_opts: { acl: true, journal: true, usrquota: true, async: true, owner: true, group: true },
78
+ device: '/dev/tty',
79
+ directory: '/mnt/dir2'
80
+ )
81
+ end.to raise_error(ArgumentError)
82
+
83
+ expect_command(host.mount(all: true, test_opts: { _netdev: true }), 'mount -a -O _netdev')
84
+ expect_command(host.mount(all: true, test_opts: { async: true, blocksize: 512, uid: 0, gid: 0, dots: true }, type: 'fat'),
85
+ 'mount -t fat -a -O async,blocksize=512,uid=0,gid=0,dots')
86
+
87
+ expect_command(host.mount(
88
+ type: 'loop',
89
+ fs_opts: { loop: '/dev/loop3' },
90
+ device: '/mnt',
91
+ directory: '/tmp/fdimage'
92
+ ),
93
+ 'mount -t loop -o loop=/dev/loop3 /mnt /tmp/fdimage')
94
+ end
95
+
96
+ it 'prepares umount command' do
97
+ expect_command(host.umount, 'umount')
98
+ expect_command(host.umount(
99
+ fake: true,
100
+ no_canonicalize: true,
101
+ no_mtab: true,
102
+ fail_remount_readonly: true,
103
+ free_loopback: true,
104
+ lazy: true,
105
+ force: true,
106
+ device: '/dev/vda1'
107
+ ),
108
+ 'umount --fake --no-canonicalize -n -r -d -l -f /dev/vda1')
109
+
110
+ expect_command(host.umount(
111
+ all: true,
112
+ type: 'ext4,nofat'
113
+ ), 'umount -a -t ext4,nofat')
114
+
115
+ expect_command(host.umount(
116
+ all: true,
117
+ type: 'ext4',
118
+ test_opts: { barrier: 1, nouid32: true }
119
+ ), 'umount -a -t ext4 -O barrier=1,nouid32')
120
+ end
121
+ end
@@ -23,45 +23,40 @@ RSpec.describe Kanrisuru::Core::Socket do
23
23
  expect_command(host.ss, 'ss -a -m')
24
24
 
25
25
  expect_command(host.ss(
26
- numeric: true,
27
- tcp: true,
28
- udp: true,
29
- unix: true,
30
- raw: true
31
- ),
32
- 'ss -a -m -n -t -u -x -w'
33
- )
26
+ numeric: true,
27
+ tcp: true,
28
+ udp: true,
29
+ unix: true,
30
+ raw: true
31
+ ),
32
+ 'ss -a -m -n -t -u -x -w')
34
33
 
35
34
  expect_command(host.ss(
36
- family: 'inet'
37
- ),
38
- 'ss -a -m -f inet'
39
- )
35
+ family: 'inet'
36
+ ),
37
+ 'ss -a -m -f inet')
40
38
 
41
- expect {
39
+ expect do
42
40
  host.ss(family: 'inet5')
43
- }.to raise_error(ArgumentError)
41
+ end.to raise_error(ArgumentError)
44
42
 
45
43
  expect_command(host.ss(
46
- state: 'established'
47
- ),
48
- 'ss -a -m state established'
49
- )
44
+ state: 'established'
45
+ ),
46
+ 'ss -a -m state established')
50
47
 
51
48
  expect_command(host.ss(
52
- state: 'connected'
53
- ),
54
- 'ss -a -m state connected'
55
- )
49
+ state: 'connected'
50
+ ),
51
+ 'ss -a -m state connected')
56
52
 
57
- expect {
53
+ expect do
58
54
  host.ss(state: 'test')
59
- }.to raise_error(ArgumentError)
55
+ end.to raise_error(ArgumentError)
60
56
 
61
57
  expect_command(host.ss(
62
- expression: "'( dport = :ssh or sport = :ssh )'"
63
- ),
64
- "ss -a -m '( dport = :ssh or sport = :ssh )'"
65
- )
58
+ expression: "'( dport = :ssh or sport = :ssh )'"
59
+ ),
60
+ "ss -a -m '( dport = :ssh or sport = :ssh )'")
66
61
  end
67
62
  end
@@ -85,30 +85,30 @@ RSpec.describe Kanrisuru::Core::Stream do
85
85
  expect_command(host.echo('Hello\\n world', backslash: true), "echo -e 'Hello\\n world'")
86
86
 
87
87
  expect_command(host.echo('Hello world', new_file: '~/file1.txt', mode: 'write'),
88
- "echo 'Hello world' > ~/file1.txt")
89
-
88
+ "echo 'Hello world' > ~/file1.txt")
89
+
90
90
  expect_command(host.echo('Goodbye', new_file: '~/file1.txt', mode: 'append'),
91
- "echo 'Goodbye' >> ~/file1.txt")
91
+ "echo 'Goodbye' >> ~/file1.txt")
92
92
  end
93
93
 
94
94
  it 'prepares cat command' do
95
95
  expect_command(host.cat('/etc/group'), 'cat /etc/group')
96
96
  expect_command(host.cat('/etc/group', show_all: true), 'cat -A /etc/group')
97
97
  expect_command(host.cat('/etc/group',
98
- show_tabs: true,
99
- number: true,
100
- squeeze_blank: true,
101
- show_nonprinting: true,
102
- show_ends: true,
103
- number_nonblank: true), 'cat -T -n -s -v -E -b /etc/group')
98
+ show_tabs: true,
99
+ number: true,
100
+ squeeze_blank: true,
101
+ show_nonprinting: true,
102
+ show_ends: true,
103
+ number_nonblank: true), 'cat -T -n -s -v -E -b /etc/group')
104
104
 
105
105
  expect_command(host.cat(['~/file1.txt', '~/file2.txt', '~/file3.txt']),
106
- 'cat ~/file1.txt ~/file2.txt ~/file3.txt')
106
+ 'cat ~/file1.txt ~/file2.txt ~/file3.txt')
107
107
 
108
108
  expect_command(host.cat(['~/file1.txt', '~/file2.txt', '~/file3.txt'], mode: 'write', new_file: 'combined.txt'),
109
- 'cat ~/file1.txt ~/file2.txt ~/file3.txt > combined.txt')
109
+ 'cat ~/file1.txt ~/file2.txt ~/file3.txt > combined.txt')
110
110
 
111
111
  expect_command(host.cat(['~/file1.txt', '~/file2.txt', '~/file3.txt'], mode: 'append', new_file: 'combined.txt'),
112
- 'cat ~/file1.txt ~/file2.txt ~/file3.txt >> combined.txt')
112
+ 'cat ~/file1.txt ~/file2.txt ~/file3.txt >> combined.txt')
113
113
  end
114
114
  end