kanrisuru 0.8.16 → 0.8.20

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c2110c3bfef603ff4d09ade3a4fabf81b34e2f5ca51ff9f120d382963542f7f
4
- data.tar.gz: 6ef4e848168e93b37a06e0d0cbfffd9138d979e125d7a151e77c594539aba85d
3
+ metadata.gz: '0969518ec2898fe5ceaa74c897cdb0df384541d8cd8cd51e311e7f4915ce4155'
4
+ data.tar.gz: b57d0acd7d23116f2bf6934feaa77d83f007eede49a48f93efb47a241baf0434
5
5
  SHA512:
6
- metadata.gz: 3444e7a640af911e1f0eb67181503e0b87677847adacd6c0bf3a45c13ce8c8287b2b17ad56ba36d4fe301fe3a19aaf5b17856d3f9bceb1175002ed199d1eb774
7
- data.tar.gz: d5a76df5b4ffd4f7483c6953d5c36479755f30efb3e19c822f1df41e459e6213c555c64324f6412df2a9b1ac5a4f003d5e525110c9e6f8e92389d655666fd5d7
6
+ metadata.gz: de82086f075e8deb1fcec6b8ca3205c384192a3dcf9a24d5852a75dcbaf1127e65c2121cc247cc64ac86647735447bfb3e5065f1aa808f0d0f279cf34e6ec3bd
7
+ data.tar.gz: e6944d4a4727ced09f581e10e5a55aba3f32147fc65d5ffa7857cbfa73e4e448b0ecaacaadd0bb332cf572f17771f7225ea74dcd2ada656ff10f8320f5e09a81
data/CHANGELOG.md CHANGED
@@ -1,4 +1,22 @@
1
- ## Kanrisuru 0.8.16 (October 14, 20201)
1
+ ## Kanrisuru 0.8.20 (November 13, 2021)
2
+ * Unstub network requests for full rspec test-suite run
3
+
4
+ ## Kanrisuru 0.8.19 (October 31, 2021)
5
+ * Add functional test cases for `ss` command.
6
+ * Enforce contraints on `family` parameter for `ss` command.
7
+ * Deprecating `string_join_array` in favor of `array_join_string`. Both methods do the same thing, and the `array_join_string` has a better nameing interface; will be removed in the next major release.
8
+ * Replace `string_join_array` method calls in `apt`, `transfer`, `yum`, and `zypper` with `array_join_string`.
9
+
10
+ ## Kanrisuru 0.8.18 (October 19, 2021)
11
+ * Add functional test cases for `find` commmand.
12
+ * Add `regex_type` option for `find` command.
13
+ * Fix bug with `size` option when using number in a string format, regex testing has been simplified on matching correctness for size with options like `100`, `+100`, `-100M` for comparitive fields.
14
+
15
+ ## Kanrisuru 0.8.17 (October 16, 2021)
16
+ * Add functional test cases for `transfer` module
17
+ * Update wget command to accept hash for `headers` opt.
18
+
19
+ ## Kanrisuru 0.8.16 (October 14, 2021)
2
20
  * Add functional test cases for `stream` and `path` modules
3
21
  * Create `expect_command` helper for quick testing on raw command result
4
22
 
@@ -142,7 +142,7 @@ module Kanrisuru
142
142
  command = Kanrisuru::Command.new('apt-get purge')
143
143
  command.append_flag('-y')
144
144
 
145
- packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
145
+ packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
146
146
  command << packages
147
147
 
148
148
  execute_shell(command)
@@ -153,7 +153,7 @@ module Kanrisuru
153
153
  command = Kanrisuru::Command.new('apt-get remove')
154
154
  command.append_flag('-y')
155
155
 
156
- packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
156
+ packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
157
157
  command << packages
158
158
 
159
159
  execute_shell(command)
@@ -168,7 +168,7 @@ module Kanrisuru
168
168
  command.append_flag('--only-upgrade', opts[:only_upgrade])
169
169
  command.append_flag('--reinstall', opts[:reinstall])
170
170
 
171
- packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
171
+ packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
172
172
  command << packages
173
173
 
174
174
  execute_shell(command)
@@ -200,7 +200,7 @@ module Kanrisuru
200
200
  command = Kanrisuru::Command.new('apt show')
201
201
  command.append_flag('-a')
202
202
 
203
- packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
203
+ packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
204
204
  command << packages
205
205
 
206
206
  execute_shell(command)
@@ -23,7 +23,7 @@ module Kanrisuru
23
23
  :name, :label, :uuid, :type, :uuid_sub, :label_fatboot, :version, :usage,
24
24
  :part_uuid, :part_entry_scheme, :part_entry_uuid, :part_entry_type,
25
25
  :part_entry_number, :part_entry_offset, :part_entry_size, :part_entry_disk,
26
- :minimum_io_size, :physical_sector_size, :logical_sector_size,
26
+ :minimum_io_size, :physical_sector_size, :logical_sector_size
27
27
  )
28
28
 
29
29
  def du(opts = {})
@@ -10,6 +10,7 @@ module Kanrisuru
10
10
  os_define :linux, :find
11
11
 
12
12
  FilePath = Struct.new(:path)
13
+ REGEX_TYPES = ['emacs', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix-extended']
13
14
 
14
15
  def find(opts = {})
15
16
  paths = opts[:paths]
@@ -32,7 +33,7 @@ module Kanrisuru
32
33
  if paths.instance_of?(Array)
33
34
  paths = paths.join(' ')
34
35
  elsif paths.class != String
35
- raise 'Invalid paths type'
36
+ raise ArgumentError, 'Invalid paths type'
36
37
  end
37
38
 
38
39
  command << paths
@@ -64,13 +65,19 @@ module Kanrisuru
64
65
  command.append_arg('-cmin', opts[:cmin])
65
66
  command.append_arg('-mmin', opts[:mmin])
66
67
 
67
- command.append_arg('-regex', "'#{regex}'") if Kanrisuru::Util.present?(regex)
68
+ if Kanrisuru::Util.present?(opts[:regex_type])
69
+ unless REGEX_TYPES.include?(opts[:regex_type])
70
+ raise ArgumentError, 'invalid regex type'
71
+ end
68
72
 
69
- if size.instance_of?(String)
70
- match = Regexp.new(/^([-+]+)\s*?(\d+)([bcwkMG])$/).match(size)
73
+ command.append_arg('-regextype', opts[:regex_type])
74
+ end
71
75
 
72
- raise ArgumentError, "invalid size string: '#{@size}'" if match.nil? || match.captures.include?(nil)
76
+ command.append_arg('-regex', "'#{regex}'") if Kanrisuru::Util.present?(regex)
73
77
 
78
+ if size.instance_of?(String)
79
+ regex = Regexp.new(/^([-+])?(\d+)([bcwkMG])*$/)
80
+ raise ArgumentError, "invalid size string: '#{@size}'" unless regex.match?(size)
74
81
  command.append_arg('-size', size)
75
82
  elsif size.instance_of?(Integer)
76
83
  command.append_arg('-size', size)
@@ -38,9 +38,14 @@ module Kanrisuru
38
38
  'LAST-ACK' => 'last-ack', 'CLOSING' => 'closing'
39
39
  }.freeze
40
40
 
41
+ NETWORK_FAMILIES = %w[
42
+ unix inet inet6 link netlink
43
+ ].freeze
44
+
41
45
  def ss(opts = {})
42
46
  state = opts[:state]
43
47
  expression = opts[:expression]
48
+ family = opts[:family]
44
49
 
45
50
  command = Kanrisuru::Command.new('ss')
46
51
 
@@ -53,7 +58,10 @@ module Kanrisuru
53
58
  command.append_flag('-x', opts[:unix])
54
59
  command.append_flag('-w', opts[:raw])
55
60
 
56
- command.append_arg('-f', opts[:family])
61
+ if Kanrisuru::Util.present?(family)
62
+ raise ArgumentError, 'invalid family type' if !NETWORK_FAMILIES.include?(family)
63
+ command.append_arg('-f', family)
64
+ end
57
65
 
58
66
  if Kanrisuru::Util.present?(state)
59
67
  raise ArgumentError, 'invalid filter state' if !TCP_STATES.include?(state) && !OTHER_STATES.include?(state)
@@ -87,7 +87,7 @@ module Kanrisuru
87
87
  command.append_arg('--quota', opts[:quota])
88
88
 
89
89
  if Kanrisuru::Util.present?(opts[:restrict_file_names])
90
- command.append_arg('--restrict-file-names', Kanrisuru::Util.string_join_array(opts[:restrict_file_names]))
90
+ command.append_arg('--restrict-file-names', Kanrisuru::Util.array_join_string(opts[:restrict_file_names]))
91
91
  end
92
92
 
93
93
  case opts[:family]
@@ -124,7 +124,6 @@ module Kanrisuru
124
124
  command.append_flag('--no-cookies', opts[:no_cookies])
125
125
  command.append_flag('--keep-session-cookies', opts[:keep_session_cookies])
126
126
  command.append_flag('--ignore-length', opts[:ignore_length])
127
- command.append_arg('--header', opts[:header])
128
127
  command.append_arg('--max-redirect', opts[:max_redirect])
129
128
  command.append_arg('--proxy-user', opts[:proxy_user])
130
129
  command.append_arg('--proxy-password', opts[:proxy_password])
@@ -132,6 +131,18 @@ module Kanrisuru
132
131
  command.append_flag('--save-headers', opts[:save_headers])
133
132
  command.append_arg('--user-agent', opts[:user_agent])
134
133
 
134
+ headers = opts[:headers]
135
+ if Kanrisuru::Util.present?(headers)
136
+ if headers.instance_of?(Hash)
137
+ headers.each do |key, value|
138
+ header = "'#{key}: #{value}'"
139
+ command.append_arg('--header', header)
140
+ end
141
+ elsif headers.instance_of?(String)
142
+ command.append_arg('--header', headers)
143
+ end
144
+ end
145
+
135
146
  post_data = opts[:post_data]
136
147
 
137
148
  if Kanrisuru::Util.present?(post_data)
@@ -78,7 +78,7 @@ module Kanrisuru
78
78
  command = Kanrisuru::Command.new('yum install')
79
79
  command.append_flag('-y')
80
80
 
81
- packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
81
+ packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
82
82
  command << packages
83
83
 
84
84
  execute_shell(command)
@@ -91,7 +91,7 @@ module Kanrisuru
91
91
  command.append_flag('-y')
92
92
 
93
93
  if Kanrisuru::Util.present?(opts[:repos])
94
- repos = Kanrisuru::Util.string_join_array(opts[:repos], ' ')
94
+ repos = Kanrisuru::Util.array_join_string(opts[:repos], ' ')
95
95
  command << repos
96
96
  end
97
97
 
@@ -136,7 +136,7 @@ module Kanrisuru
136
136
  command = Kanrisuru::Command.new('yum remove')
137
137
  command.append_flag('-y')
138
138
 
139
- packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
139
+ packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
140
140
  raise ArugmentError, "can't remove yum" if packages.include?('yum')
141
141
 
142
142
  command << packages
@@ -172,7 +172,7 @@ module Kanrisuru
172
172
  command = Kanrisuru::Command.new('yum erase')
173
173
  command.append_flag('-y')
174
174
 
175
- packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
175
+ packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
176
176
  raise ArugmentError, "can't erase yum" if packages.include?('yum')
177
177
 
178
178
  command << packages
@@ -198,7 +198,7 @@ module Kanrisuru
198
198
  def yum_search(opts)
199
199
  command = Kanrisuru::Command.new('yum search')
200
200
  command.append_flag('all', opts[:all])
201
- command << Kanrisuru::Util.string_join_array(opts[:packages], ' ')
201
+ command << Kanrisuru::Util.array_join_string(opts[:packages], ' ')
202
202
 
203
203
  pipe_output_newline(command)
204
204
 
@@ -228,7 +228,7 @@ module Kanrisuru
228
228
  command = Kanrisuru::Command.new('yum repolist')
229
229
  command.append_flag('--verbose')
230
230
 
231
- command << Kanrisuru::Util.string_join_array(opts[:repos], ' ') if opts[:repos]
231
+ command << Kanrisuru::Util.array_join_string(opts[:repos], ' ') if opts[:repos]
232
232
 
233
233
  execute_shell(command)
234
234
 
@@ -287,7 +287,7 @@ module Kanrisuru
287
287
  command.append_flag('--quiet')
288
288
  command.append_flag('installed', opts[:installed])
289
289
 
290
- command << Kanrisuru::Util.string_join_array(opts[:packages], ' ') if opts[:packages]
290
+ command << Kanrisuru::Util.array_join_string(opts[:packages], ' ') if opts[:packages]
291
291
 
292
292
  execute_shell(command)
293
293
 
@@ -567,7 +567,7 @@ module Kanrisuru
567
567
  zypper_repos_opt(command, opts)
568
568
  zypper_package_type_opt(command, opts)
569
569
 
570
- packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
570
+ packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
571
571
  command << packages
572
572
 
573
573
  execute_shell(command)
@@ -663,7 +663,7 @@ module Kanrisuru
663
663
  zypper_download_and_install_opts(command, opts)
664
664
  zypper_expert_opts(command, opts)
665
665
 
666
- packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
666
+ packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
667
667
  command << packages
668
668
 
669
669
  execute_shell(command)
@@ -714,7 +714,7 @@ module Kanrisuru
714
714
  zypper_package_type_opt(command, opts)
715
715
  zypper_solver_opts(command, opts)
716
716
 
717
- packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
717
+ packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
718
718
  command << packages
719
719
 
720
720
  execute_shell(command)
@@ -783,7 +783,7 @@ module Kanrisuru
783
783
  zypper_repos_opt(command, opts)
784
784
  zypper_package_type_opt(command, opts)
785
785
 
786
- packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
786
+ packages = Kanrisuru::Util.array_join_string(opts[:packages], ' ')
787
787
  command << packages
788
788
 
789
789
  execute_shell(command)
@@ -21,6 +21,10 @@ module Kanrisuru
21
21
  end
22
22
 
23
23
  def self.string_join_array(arg, field = ',')
24
+ Kanrisuru.logger.info do
25
+ 'DEPRECATION WARNING: string_join_array will be removed in the upcoming major release. Use array_join_string instead.'
26
+ end
27
+
24
28
  array = arg.instance_of?(String) ? [arg] : arg
25
29
  array.join(field)
26
30
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kanrisuru
4
- VERSION = '0.8.16'
4
+ VERSION = '0.8.20'
5
5
  end
@@ -0,0 +1,169 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Kanrisuru::Core::Find 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 find command' do
23
+ expect_command(host.find, "find")
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")
28
+
29
+ expect_command(host.find(paths: '/etc'), "find /etc")
30
+ expect_command(host.find(paths: ['/etc', '/var', '/home']), "find /etc /var /home")
31
+
32
+ expect {
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
+ )
61
+
62
+ 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
+ )
72
+
73
+ expect_command(host.find(
74
+ paths: '/dev',
75
+ regex: '/dev/tty[0-9]*'
76
+ ),
77
+ "find /dev -regex '/dev/tty[0-9]*'"
78
+ )
79
+
80
+ 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
+ )
87
+
88
+ expect_command(host.find(
89
+ paths: '/var/log',
90
+ size: 100
91
+ ),
92
+ "find /var/log -size 100"
93
+ )
94
+
95
+ 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)
105
+
106
+ expect_command(host.find(
107
+ paths: '/var/log',
108
+ size: "-100k"
109
+ ),
110
+ "find /var/log -size -100k"
111
+ )
112
+
113
+ expect_command(host.find(
114
+ paths: '/var/log',
115
+ size: "+10M"
116
+ ),
117
+ "find /var/log -size +10M"
118
+ )
119
+
120
+ expect_command(host.find(
121
+ paths: "/dev",
122
+ type: 'directory'
123
+ ),
124
+ "find /dev -type d"
125
+ )
126
+
127
+ expect_command(host.find(
128
+ paths: "/dev",
129
+ type: 'file'
130
+ ),
131
+ "find /dev -type f"
132
+ )
133
+
134
+ expect_command(host.find(
135
+ paths: "/dev",
136
+ type: 'symlinks'
137
+ ),
138
+ "find /dev -type l"
139
+ )
140
+
141
+ expect_command(host.find(
142
+ paths: "/dev",
143
+ type: 'block'
144
+ ),
145
+ "find /dev -type b"
146
+ )
147
+
148
+ expect_command(host.find(
149
+ paths: "/dev",
150
+ type: 'character'
151
+ ),
152
+ "find /dev -type c"
153
+ )
154
+
155
+ expect_command(host.find(
156
+ paths: "/dev",
157
+ type: 'pipe'
158
+ ),
159
+ "find /dev -type p"
160
+ )
161
+
162
+ expect_command(host.find(
163
+ paths: "/dev",
164
+ type: 'socket'
165
+ ),
166
+ "find /dev -type s"
167
+ )
168
+ end
169
+ end
@@ -2,13 +2,19 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- StubNetwork.stub!
6
-
7
5
  RSpec.describe Kanrisuru::Core::Path do
6
+ before(:all) do
7
+ StubNetwork.stub!
8
+ end
9
+
10
+ after(:all) do
11
+ StubNetwork.unstub!
12
+ end
13
+
8
14
  let(:host) do
9
15
  Kanrisuru::Remote::Host.new(
10
16
  host: 'localhost',
11
- username: 'ubuntu',
17
+ username: 'ubuntu',
12
18
  keys: ['id_rsa']
13
19
  )
14
20
  end
@@ -42,5 +48,4 @@ RSpec.describe Kanrisuru::Core::Path do
42
48
  expect_command(host.readlink('/etc/os-release', canonicalize_existing: true), 'readlink -e /etc/os-release')
43
49
  expect_command(host.readlink('/etc/os-release', canonicalize_missing: true), 'readlink -m /etc/os-release')
44
50
  end
45
-
46
51
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Kanrisuru::Core::Socket 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 ss command' do
23
+ expect_command(host.ss, 'ss -a -m')
24
+
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
+ )
34
+
35
+ expect_command(host.ss(
36
+ family: 'inet'
37
+ ),
38
+ 'ss -a -m -f inet'
39
+ )
40
+
41
+ expect {
42
+ host.ss(family: 'inet5')
43
+ }.to raise_error(ArgumentError)
44
+
45
+ expect_command(host.ss(
46
+ state: 'established'
47
+ ),
48
+ 'ss -a -m state established'
49
+ )
50
+
51
+ expect_command(host.ss(
52
+ state: 'connected'
53
+ ),
54
+ 'ss -a -m state connected'
55
+ )
56
+
57
+ expect {
58
+ host.ss(state: 'test')
59
+ }.to raise_error(ArgumentError)
60
+
61
+ expect_command(host.ss(
62
+ expression: "'( dport = :ssh or sport = :ssh )'"
63
+ ),
64
+ "ss -a -m '( dport = :ssh or sport = :ssh )'"
65
+ )
66
+ end
67
+ end
@@ -2,25 +2,28 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- StubNetwork.stub!
6
-
7
5
  RSpec.describe Kanrisuru::Core::Stat do
6
+ before(:all) do
7
+ StubNetwork.stub!
8
+ end
9
+
10
+ after(:all) do
11
+ StubNetwork.unstub!
12
+ end
13
+
8
14
  let(:host) do
9
15
  Kanrisuru::Remote::Host.new(
10
16
  host: 'localhost',
11
- username: 'ubuntu',
17
+ username: 'ubuntu',
12
18
  keys: ['id_rsa']
13
19
  )
14
20
  end
15
21
 
16
22
  it 'prepares stat command' do
17
- expect_command(host.stat('~/file1.txt'),
18
- 'stat -c %A,%b,%D,%F,%g,%G,%h,%i,%n,%s,%u,%U,%x,%y,%z ~/file1.txt'
19
- )
23
+ expect_command(host.stat('~/file1.txt'),
24
+ 'stat -c %A,%b,%D,%F,%g,%G,%h,%i,%n,%s,%u,%U,%x,%y,%z ~/file1.txt')
20
25
 
21
26
  expect_command(host.stat('~/file2.txt', follow: true),
22
- 'stat -L -c %A,%b,%D,%F,%g,%G,%h,%i,%n,%s,%u,%U,%x,%y,%z ~/file2.txt'
23
- )
27
+ 'stat -L -c %A,%b,%D,%F,%g,%G,%h,%i,%n,%s,%u,%U,%x,%y,%z ~/file2.txt')
24
28
  end
25
-
26
29
  end
@@ -2,13 +2,19 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- StubNetwork.stub!
6
-
7
5
  RSpec.describe Kanrisuru::Core::Stream do
6
+ before(:all) do
7
+ StubNetwork.stub!
8
+ end
9
+
10
+ after(:all) do
11
+ StubNetwork.unstub!
12
+ end
13
+
8
14
  let(:host) do
9
15
  Kanrisuru::Remote::Host.new(
10
16
  host: 'localhost',
11
- username: 'ubuntu',
17
+ username: 'ubuntu',
12
18
  keys: ['id_rsa']
13
19
  )
14
20
  end
@@ -26,13 +32,13 @@ RSpec.describe Kanrisuru::Core::Stream do
26
32
 
27
33
  it 'prepares tail command' do
28
34
  result = host.tail('/var/log/syslog')
29
- expect_command(result, 'tail /var/log/syslog' )
35
+ expect_command(result, 'tail /var/log/syslog')
30
36
 
31
37
  result = host.tail('/var/log/syslog', bytes: 1024)
32
38
  expect_command(result, 'tail -c 1024 /var/log/syslog')
33
39
 
34
40
  result = host.tail('/var/log/syslog', lines: 50)
35
- expect_command(result, 'tail -n 50 /var/log/syslog' )
41
+ expect_command(result, 'tail -n 50 /var/log/syslog')
36
42
  end
37
43
 
38
44
  it 'prepares read_file_chunk command' do
@@ -42,59 +48,59 @@ RSpec.describe Kanrisuru::Core::Stream do
42
48
  result = host.read_file_chunk('/var/log/apache2/access.log', 0, 0)
43
49
  expect_command(result, 'tail -n +0 /var/log/apache2/access.log | head -n 1')
44
50
 
45
- expect {
51
+ expect do
46
52
  host.read_file_chunk('file.log', 10, '20')
47
- }.to raise_error(ArgumentError)
53
+ end.to raise_error(ArgumentError)
48
54
 
49
- expect {
55
+ expect do
50
56
  host.read_file_chunk('file.log', '10', 20)
51
- }.to raise_error(ArgumentError)
57
+ end.to raise_error(ArgumentError)
52
58
 
53
- expect {
59
+ expect do
54
60
  host.read_file_chunk('file.log', 10, 9)
55
- }.to raise_error(ArgumentError)
61
+ end.to raise_error(ArgumentError)
56
62
 
57
- expect {
63
+ expect do
58
64
  host.read_file_chunk('file.log', -1, 1)
59
- }.to raise_error(ArgumentError)
65
+ end.to raise_error(ArgumentError)
60
66
 
61
- expect {
67
+ expect do
62
68
  host.read_file_chunk('file.log', 10, -2)
63
- }.to raise_error(ArgumentError)
69
+ end.to raise_error(ArgumentError)
64
70
  end
65
71
 
66
72
  it 'prepares sed command' do
67
- result = host.sed("~/file.txt", 'Cat', 'Dog')
73
+ result = host.sed('~/file.txt', 'Cat', 'Dog')
68
74
  expect_command(result, "sed 's/Cat/Dog/g' '~/file.txt'")
69
75
 
70
- result = host.sed("~/file.txt", 'Cat', 'Doggz', in_place: true, new_file: '~/file2.txt', mode: 'write')
76
+ result = host.sed('~/file.txt', 'Cat', 'Doggz', in_place: true, new_file: '~/file2.txt', mode: 'write')
71
77
  expect_command(result, "sed -i 's/Cat/Doggz/g' '~/file.txt' > ~/file2.txt")
72
78
 
73
- result = host.sed("~/file.txt", 'Cat', 'Dogo', regexp_extended: true, new_file: '~/file2.txt', mode: 'append')
79
+ result = host.sed('~/file.txt', 'Cat', 'Dogo', regexp_extended: true, new_file: '~/file2.txt', mode: 'append')
74
80
  expect_command(result, "sed -r 's/Cat/Dogo/g' '~/file.txt' >> ~/file2.txt")
75
81
  end
76
82
 
77
83
  it 'prepares echo command' do
78
- expect_command(host.echo('Hello world') , "echo 'Hello world'")
79
- expect_command(host.echo("Hello\\n world", backslash: true), "echo -e 'Hello\\n world'")
84
+ expect_command(host.echo('Hello world'), "echo 'Hello world'")
85
+ expect_command(host.echo('Hello\\n world', backslash: true), "echo -e 'Hello\\n world'")
80
86
 
81
87
  expect_command(host.echo('Hello world', new_file: '~/file1.txt', mode: 'write'),
82
88
  "echo 'Hello world' > ~/file1.txt")
83
- expect_command(host.echo("Goodbye", new_file: '~/file1.txt', mode: 'append'),
89
+
90
+ expect_command(host.echo('Goodbye', new_file: '~/file1.txt', mode: 'append'),
84
91
  "echo 'Goodbye' >> ~/file1.txt")
85
92
  end
86
93
 
87
94
  it 'prepares cat command' do
88
95
  expect_command(host.cat('/etc/group'), 'cat /etc/group')
89
96
  expect_command(host.cat('/etc/group', show_all: true), 'cat -A /etc/group')
90
- expect_command(host.cat('/etc/group',
91
- show_tabs: true,
92
- number: true,
93
- squeeze_blank: true,
97
+ expect_command(host.cat('/etc/group',
98
+ show_tabs: true,
99
+ number: true,
100
+ squeeze_blank: true,
94
101
  show_nonprinting: true,
95
102
  show_ends: true,
96
- number_nonblank: true
97
- ), 'cat -T -n -s -v -E -b /etc/group')
103
+ number_nonblank: true), 'cat -T -n -s -v -E -b /etc/group')
98
104
 
99
105
  expect_command(host.cat(['~/file1.txt', '~/file2.txt', '~/file3.txt']),
100
106
  'cat ~/file1.txt ~/file2.txt ~/file3.txt')
@@ -105,5 +111,4 @@ RSpec.describe Kanrisuru::Core::Stream do
105
111
  expect_command(host.cat(['~/file1.txt', '~/file2.txt', '~/file3.txt'], mode: 'append', new_file: 'combined.txt'),
106
112
  'cat ~/file1.txt ~/file2.txt ~/file3.txt >> combined.txt')
107
113
  end
108
-
109
114
  end
@@ -0,0 +1,187 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Kanrisuru::Core::Stat 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 wget command' do
23
+ url = 'https://rubygems.org'
24
+
25
+ expect_command(host.wget(url),
26
+ "wget #{url}"
27
+ )
28
+
29
+ ## Output options
30
+ expect_command(host.wget(url,
31
+ quiet: true, verbose: false, log_file: '/var/log/wget.log'),
32
+ "wget --quiet --no-verbose --output-file /var/log/wget.log #{url}"
33
+ )
34
+
35
+ expect_command(host.wget(url,
36
+ verbose: true, append_log_file: '/var/log/wget.log'),
37
+ "wget --verbose --append-output /var/log/wget.log #{url}"
38
+ )
39
+
40
+ ## Download options
41
+ expect_command(host.wget(url,
42
+ bind_address: '0.0.0.0',
43
+ retries: 3,
44
+ output_document: '/home/ubuntu/index.html',
45
+ no_clobber: true,
46
+ timeout: 30,
47
+ dns_timeout: 60,
48
+ connect_timeout: 60,
49
+ read_timeout: 15,
50
+ limit_rate: '120k',
51
+ wait: 5,
52
+ waitretry: 15,
53
+ random_wait: true,
54
+ no_proxy: true,
55
+ no_dns_cache: true
56
+ ),
57
+ "wget --bind-address 0.0.0.0 --tries 3 --output-document /home/ubuntu/index.html --no-clobber --timeout 30 --dns-timeout 60 --connect-timeout 60 --read-timeout 15 --limit-rate 120k --wait 5 --waitretry 15 --random-wait --no-proxy --no-dns-cache https://rubygems.org"
58
+ )
59
+
60
+ ## Other Options
61
+ expect_command(host.wget(url,
62
+ quota: 'inf',
63
+ family: 'inet',
64
+ restrict_file_names: ['unix', 'ascii', 'lowercase', 'uppercase'],
65
+ retry_connrefused: true,
66
+ user: 'admin',
67
+ password: 'admin',
68
+ no_iri: true,
69
+ ),
70
+ "wget --quota inf --restrict-file-names unix,ascii,lowercase,uppercase --inet4-only --retry-connrefused --user admin --password admin --no-iri #{url}"
71
+ )
72
+
73
+ ## Directories
74
+ expect_command(host.wget(url,
75
+ no_directories: true,
76
+ no_host_directories: true,
77
+ cut_dirs: 3,
78
+ directory_prefix: '~/downloads/'
79
+ ),
80
+ "wget --no-directories --no-host-directories --cut-dirs 3 --directory-prefix ~/downloads/ #{url}"
81
+ )
82
+
83
+ ## HTTP
84
+ expect_command(host.wget(url,
85
+ default_page: 'index.html',
86
+ adjust_extension: true,
87
+ http_user: 'admin',
88
+ http_password: 'admin',
89
+ load_cookies: '~/cookies.txt',
90
+ save_cookies: '~/cookies.txt',
91
+ no_cache: true,
92
+ keep_session_cookies: true,
93
+ ignore_length: true,
94
+ headers: {
95
+ 'Accept-Language' => 'hr',
96
+ 'Authorization' => 'Bearer 1234'
97
+ },
98
+ max_redirect: 5,
99
+ proxy_user: 'admin',
100
+ proxy_password: '12345678'
101
+ ),
102
+ "wget --default-page index.html --adjust-extension --http-user admin --http-password admin --load-cookies ~/cookies.txt --save-cookies ~/cookies.txt --no-cache --keep-session-cookies --ignore-length --max-redirect 5 --proxy-user admin --proxy-password 12345678 --header 'Accept-Language: hr' --header 'Authorization: Bearer 1234' #{url}"
103
+ )
104
+
105
+ expect_command(host.wget(url,
106
+ post_data: {
107
+ url: "https://example.com?param=123"
108
+ },
109
+ content_disposition: true,
110
+ secure_protocol: 'SSLv3',
111
+ no_check_certificate: true,
112
+ ),
113
+ "wget --post-data url=https%3A%2F%2Fexample.com%3Fparam%3D123 --content-disposition --secure-protocol SSLv3 --no-check-certificate #{url}"
114
+ )
115
+
116
+ expect {
117
+ host.wget(url, secure_protocol: 'SSL')
118
+ }.to raise_error(ArgumentError)
119
+
120
+ expect_command(host.wget(url,
121
+ certificate: '~/cert.pem',
122
+ certificate_type: 'PEM',
123
+ private_key: '~/key.pem',
124
+ private_key_type: 'PEM',
125
+ ca_certificate: '~/ca.pem',
126
+ random_file: '~/random'
127
+ ),
128
+ "wget --certificate ~/cert.pem --certificate-type PEM --private-key ~/key.pem --private-key-type PEM --ca-certificate ~/ca.pem --random-file ~/random #{url}"
129
+ )
130
+
131
+ expect_command(host.wget(url,
132
+ certificate: '~/cert.pem',
133
+ certificate_type: 'PEM',
134
+ private_key: '~/key.pem',
135
+ private_key_type: 'PEM',
136
+ ca_certificate: '~/ca.pem',
137
+ random_file: '~/random'
138
+ ),
139
+ "wget --certificate ~/cert.pem --certificate-type PEM --private-key ~/key.pem --private-key-type PEM --ca-certificate ~/ca.pem --random-file ~/random #{url}"
140
+ )
141
+
142
+ ## FTP
143
+ expect_command(host.wget(url,
144
+ ftp_user: 'admin',
145
+ ftp_password: '12345678',
146
+ no_remove_listing: true,
147
+ no_glob: true,
148
+ no_passive_ftp: true,
149
+ retr_symlinks: true
150
+ ),
151
+ "wget --ftp-user admin --ftp-password 12345678 --no-remove-listing --no-glob --no-passive-ftp --retr-symlinks #{url}"
152
+ )
153
+
154
+ ## Recursive Retrieval
155
+ expect_command(host.wget(url,
156
+ recursive: true,
157
+ depth: 10,
158
+ delete_after: true,
159
+ convert_links: true,
160
+ backup_converted: true,
161
+ mirror: true,
162
+ page_requisites: true,
163
+ strict_comments: true
164
+ ),
165
+ "wget --recursive --level 10 --delete-after --convert-links --backup-converted --mirror --page-requisites --strict-comments #{url}"
166
+ )
167
+
168
+ ## Recursive Accept/Reject
169
+ expect_command(host.wget(url,
170
+ accept_list: ['.txt', '.html'],
171
+ reject_list: ['.csv'],
172
+ domain_list: ['example.com'],
173
+ exclude_domain_list: ['hackernews.com'],
174
+ follow_tags: ['a', 'div', 'span'],
175
+ ignore_tags: ['area', 'link'],
176
+ include_directories: ['/gems'],
177
+ exclude_directories: ['/releases'],
178
+ follow_ftp: true,
179
+ ignore_case: true,
180
+ span_hosts: true,
181
+ relative: true,
182
+ no_parent: true
183
+ ),
184
+ "wget --accept .txt,.html --reject .csv --domains example.com --exclude-domains hackernews.com --follow-tags a,div,span --ignore-tags area,link --include-directories /gems --exclude-directories /releases --follow-ftp --ignore-case --span-hosts --relative --no-parent #{url}"
185
+ )
186
+ end
187
+ end
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  def expect_command(result, string)
4
+ # puts result.command.raw_command
4
5
  expect(result.command.raw_command).to eq(
5
6
  string
6
7
  )
7
- end
8
+ end
@@ -2,44 +2,62 @@
2
2
 
3
3
  class StubNetwork
4
4
  class << self
5
-
6
5
  def stub!
7
- ## Stub out the execute_with_retries method to
8
- ## test functionality of host commands
9
- Kanrisuru::Remote::Host.class_eval do
10
- private
6
+ unless Kanrisuru::Remote::Host.instance_methods(false).include?(:execute_with_retries_alias)
7
+ Kanrisuru::Remote::Host.class_eval do
8
+ alias_method :execute_with_retries_alias, :execute_with_retries
9
+ def execute_with_retries(command)
10
+ command.handle_status(0)
11
+ command.handle_data(nil)
12
+
13
+ command
14
+ end
15
+ end
16
+ end
17
+
18
+ unless Kanrisuru::Remote::Os.instance_methods(false).include?(:initialize_alias)
19
+ Kanrisuru::Remote::Os.class_eval do
20
+ alias_method :initialize_alias, :initialize
21
+ def initialize(host)
22
+ @host = host
23
+
24
+ @kernel_name = 'Linux'
25
+ @kernel_version = '#91-Ubuntu SMP Thu Jul 15 19:09:17 UTC 2021'
26
+ @operating_system = 'GNU/Linux'
27
+ @hardware_platform = 'x86_64'
28
+ @processor = 'x86_64'
29
+ @release = 'ubuntu'
30
+ @version = 20.0
31
+ end
32
+ end
33
+ end
11
34
 
12
- def execute_with_retries(command)
13
- command.handle_status(0)
14
- command.handle_data(nil)
35
+ unless Kanrisuru::Result.instance_methods(false).include?(:initialize_alias)
36
+ Kanrisuru::Result.class_eval do
37
+ alias_method :initialize_alias, :initialize
38
+ def initialize(command)
39
+ @command = command
40
+ @data = nil
15
41
 
16
- command
42
+ @error = @command.to_a if @command.failure?
43
+ end
17
44
  end
18
45
  end
46
+ end
47
+
48
+ def unstub!
49
+ Kanrisuru::Remote::Host.class_eval do
50
+ alias_method :execute_with_retries, :execute_with_retries_alias
51
+ end
19
52
 
20
53
  Kanrisuru::Remote::Os.class_eval do
21
- def initialize(host)
22
- @host = host
23
-
24
- @kernel_name = 'Linux'
25
- @kernel_version = '#91-Ubuntu SMP Thu Jul 15 19:09:17 UTC 2021'
26
- @operating_system = 'GNU/Linux'
27
- @hardware_platform = "x86_64"
28
- @processor = "x86_64"
29
- @release = "ubuntu"
30
- @version = 20.0
31
- end
54
+ alias_method :initialize, :initialize_alias
32
55
  end
33
56
 
34
57
  Kanrisuru::Result.class_eval do
35
- def initialize(command, &block)
36
- @command = command
37
- @data = nil
38
-
39
- @error = @command.to_a if @command.failure?
40
- end
58
+ alias_method :initialize, :initialize_alias
41
59
  end
42
- end
60
+ end
43
61
 
44
62
  end
45
63
  end
@@ -41,7 +41,7 @@ RSpec.describe Kanrisuru::Core::Disk do
41
41
  :name, :label, :uuid, :type, :uuid_sub, :label_fatboot, :version, :usage,
42
42
  :part_uuid, :part_entry_scheme, :part_entry_uuid, :part_entry_type,
43
43
  :part_entry_number, :part_entry_offset, :part_entry_size, :part_entry_disk,
44
- :minimum_io_size, :physical_sector_size, :logical_sector_size,
44
+ :minimum_io_size, :physical_sector_size, :logical_sector_size
45
45
  )
46
46
  end
47
47
 
@@ -41,7 +41,10 @@ RSpec.describe Kanrisuru::Core::File do
41
41
  )
42
42
 
43
43
  host.rm("#{host_json['home']}/.kanrisuru_spec_files", force: true, recursive: true)
44
- host.rm("#{host_json['home']}/extract-tar-files", force: true, recursive: true) if host.dir?("#{host_json['home']}/extract-tar-files")
44
+ if host.dir?("#{host_json['home']}/extract-tar-files")
45
+ host.rm("#{host_json['home']}/extract-tar-files", force: true,
46
+ recursive: true)
47
+ end
45
48
  host.disconnect
46
49
  end
47
50
 
@@ -68,9 +71,9 @@ RSpec.describe Kanrisuru::Core::File do
68
71
  expect(mode.symbolic).to eq('-rwxr--r--')
69
72
  expect(mode.to_i).to eq(0o744)
70
73
 
71
- expect {
74
+ expect do
72
75
  host.chmod(path, 600)
73
- }.to raise_error(ArgumentError)
76
+ end.to raise_error(ArgumentError)
74
77
  end
75
78
 
76
79
  it 'changes file owner and group' do
@@ -338,7 +341,7 @@ RSpec.describe Kanrisuru::Core::File do
338
341
  ## Can't delete non empty dir
339
342
  result = host.rmdir("#{spec_dir}/directory")
340
343
  expect(result).to be_failure
341
-
344
+
342
345
  result = host.rmdir("#{spec_dir}/directory/3")
343
346
  expect(result).to be_success
344
347
  end
@@ -355,7 +358,7 @@ RSpec.describe Kanrisuru::Core::File do
355
358
 
356
359
  lines = doc.length
357
360
  words = doc.map(&:split).flatten
358
- chars = doc.map(&:length).flatten
361
+ chars = doc.map(&:length).flatten
359
362
 
360
363
  expect(result.lines).to eq(doc.length)
361
364
  expect(result.words).to eq(words.length)
data/spec/spec_helper.rb CHANGED
@@ -21,4 +21,4 @@ RSpec.configure do |config|
21
21
  config.expect_with :rspec do |c|
22
22
  c.syntax = :expect
23
23
  end
24
- end
24
+ end
@@ -5,5 +5,8 @@ require 'spec_helper'
5
5
  RSpec.describe Kanrisuru::Core::Find do
6
6
  it 'responds to find fields' do
7
7
  expect(Kanrisuru::Core::Find::FilePath.new).to respond_to(:path)
8
+ expect(Kanrisuru::Core::Find::REGEX_TYPES).to(
9
+ eq(['emacs', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix-extended'])
10
+ )
8
11
  end
9
12
  end
@@ -20,6 +20,11 @@ RSpec.describe Kanrisuru::Core::Socket do
20
20
  closed close-wait last-ack listening closing
21
21
  ]
22
22
  )
23
+ expect(Kanrisuru::Core::Socket::NETWORK_FAMILIES).to eq(
24
+ %w[
25
+ unix inet inet6 link netlink
26
+ ]
27
+ )
23
28
  expect(Kanrisuru::Core::Socket::OTHER_STATES).to eq(
24
29
  %w[
25
30
  all connected synchronized bucket syn-recv
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kanrisuru
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.16
4
+ version: 0.8.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Mammina
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-14 00:00:00.000000000 Z
11
+ date: 2021-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -173,9 +173,12 @@ files:
173
173
  - lib/kanrisuru/util/os_family.rb
174
174
  - lib/kanrisuru/util/signal.rb
175
175
  - lib/kanrisuru/version.rb
176
+ - spec/functional/core/find_spec.rb
176
177
  - spec/functional/core/path_spec.rb
178
+ - spec/functional/core/socket_spec.rb
177
179
  - spec/functional/core/stat_spec.rb
178
180
  - spec/functional/core/stream_spec.rb
181
+ - spec/functional/core/transfer_spec.rb
179
182
  - spec/functional/os_package_spec.rb
180
183
  - spec/helper/expect_helpers.rb
181
184
  - spec/helper/stub_network.rb