vx-lib-shell 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/vx/lib/shell/process.rb +4 -14
- data/lib/vx/lib/shell/ssh.rb +2 -11
- data/lib/vx/lib/shell/version.rb +1 -1
- data/spec/lib/process_spec.rb +7 -14
- data/spec/lib/ssh_spec.rb +0 -7
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2b7d6fc28b5070948dd75094444b620d57f1163
|
4
|
+
data.tar.gz: 5987143de05073b0b25008041dc9896994cdf87a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd2eca44bf45eb1a9814f8e55861b1fec627c8c28fc71fae42e6792a63d39109a5b73723c8fecc79a18989d70ca384d15fd77495e955057e299849b4919316ef
|
7
|
+
data.tar.gz: d249cb474a35de4a6a80ed9e5fe329c1f83dcc88bee6006da656ebc32385351b907cda5545d4672326e0a645f148a187ea3b48f16173225d1b510e9434fdd22d
|
data/lib/vx/lib/shell/process.rb
CHANGED
@@ -18,11 +18,7 @@ module Vx
|
|
18
18
|
read_timeout = Shell::ReadTimeout.new options.delete(:read_timeout)
|
19
19
|
|
20
20
|
prefix = "/usr/bin/env - TERM=ansi USER=$USER HOME=#{home} SHELL=/bin/bash /bin/bash -l"
|
21
|
-
|
22
|
-
command = "#{prefix} -c #{Shellwords.escape command}"
|
23
|
-
else
|
24
|
-
command = prefix
|
25
|
-
end
|
21
|
+
command = "#{prefix} -c #{Shellwords.escape command}"
|
26
22
|
|
27
23
|
status = spawn_command_internal(command, options) do |r|
|
28
24
|
read_loop r, timeout, read_timeout, select_timeout, &block
|
@@ -35,25 +31,20 @@ module Vx
|
|
35
31
|
|
36
32
|
def request_pipes(options)
|
37
33
|
m,s = PTY.open
|
38
|
-
r1,w1 = IO.pipe
|
39
34
|
|
40
35
|
s.raw! # disable newline conversion.
|
41
36
|
m.sync = true
|
42
37
|
s.sync = true
|
43
38
|
|
44
|
-
[m, s
|
39
|
+
[m, s]
|
45
40
|
end
|
46
41
|
|
47
42
|
def spawn_command_internal(command, options)
|
48
|
-
r1, w1
|
43
|
+
r1, w1 = request_pipes(options)
|
49
44
|
|
50
|
-
pid = ::Process.spawn(command,
|
45
|
+
pid = ::Process.spawn(command, out: w1, err: w1)
|
51
46
|
|
52
47
|
begin
|
53
|
-
if i = options[:stdin]
|
54
|
-
IO.copy_stream i, w2
|
55
|
-
end
|
56
|
-
w2.close
|
57
48
|
w1.close
|
58
49
|
|
59
50
|
yield r1
|
@@ -64,7 +55,6 @@ module Vx
|
|
64
55
|
_, status = ::Process.wait2(pid)
|
65
56
|
|
66
57
|
r1.close
|
67
|
-
r2.close
|
68
58
|
|
69
59
|
status
|
70
60
|
end
|
data/lib/vx/lib/shell/ssh.rb
CHANGED
@@ -23,11 +23,7 @@ module Vx
|
|
23
23
|
read_timeout = Shell::ReadTimeout.new options.delete(:read_timeout)
|
24
24
|
|
25
25
|
prefix = "/usr/bin/env - TERM=ansi USER=$USER HOME=#{home} SHELL=/bin/bash /bin/bash -l"
|
26
|
-
|
27
|
-
command = "#{prefix} -c #{Shellwords.escape command}"
|
28
|
-
else
|
29
|
-
command = prefix
|
30
|
-
end
|
26
|
+
command = "#{prefix} -c #{Shellwords.escape command}"
|
31
27
|
|
32
28
|
channel = spawn_channel command, read_timeout, options, &block
|
33
29
|
|
@@ -47,7 +43,7 @@ module Vx
|
|
47
43
|
private
|
48
44
|
|
49
45
|
def request_pty(channel, options)
|
50
|
-
channel.request_pty
|
46
|
+
channel.request_pty do |_, pty_status|
|
51
47
|
raise StandardError, "could not obtain pty (ssh.channel.request_pty)" unless pty_status
|
52
48
|
yield if block_given?
|
53
49
|
end
|
@@ -87,11 +83,6 @@ module Vx
|
|
87
83
|
raise StandardError, "FAILED: couldn't execute command (ssh.channel.exec)"
|
88
84
|
end
|
89
85
|
|
90
|
-
if i = options[:stdin]
|
91
|
-
channel.send_data i.read
|
92
|
-
channel.eof!
|
93
|
-
end
|
94
|
-
|
95
86
|
channel.on_data do |_, data|
|
96
87
|
yield data if block_given?
|
97
88
|
read_timeout.reset
|
data/lib/vx/lib/shell/version.rb
CHANGED
data/spec/lib/process_spec.rb
CHANGED
@@ -23,13 +23,13 @@ describe Vx::Lib::Shell::Process do
|
|
23
23
|
context "timeout" do
|
24
24
|
it 'run command with timeout' do
|
25
25
|
expect {
|
26
|
-
run("echo $USER && sleep 0.5", timeout: 0.2
|
26
|
+
run("echo $USER && sleep 0.5", timeout: 0.2)
|
27
27
|
}.to raise_error(::Vx::Lib::Shell::TimeoutError)
|
28
28
|
expect(subject.strip).to eq "#{user}"
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'run command with timeout successfuly' do
|
32
|
-
code = run("echo BAR && sleep 0.1", timeout: 0.5
|
32
|
+
code = run("echo BAR && sleep 0.1", timeout: 0.5)
|
33
33
|
expect(subject.strip).to eq "BAR"
|
34
34
|
expect(code).to eq 0
|
35
35
|
end
|
@@ -45,43 +45,36 @@ describe Vx::Lib::Shell::Process do
|
|
45
45
|
|
46
46
|
it 'run command with read timeout in loop' do
|
47
47
|
expect{
|
48
|
-
run('sleep 0.1 ; echo $USER ; sleep 0.5', read_timeout: 0.3
|
48
|
+
run('sleep 0.1 ; echo $USER ; sleep 0.5', read_timeout: 0.3)
|
49
49
|
}.to raise_error(Vx::Lib::Shell::ReadTimeoutError)
|
50
50
|
expect(collected.strip).to eq "#{user}"
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'run command with read timeout successfuly' do
|
54
|
-
code = run('echo $USER; sleep 0.1', read_timeout: 0.5
|
54
|
+
code = run('echo $USER; sleep 0.1', read_timeout: 0.5)
|
55
55
|
expect(collected.strip).to eq "#{user}"
|
56
56
|
expect(code).to eq 0
|
57
57
|
end
|
58
58
|
|
59
59
|
it 'run command with read timeout in loop successfuly' do
|
60
|
-
code = run('sleep 0.3 ; echo $USER; sleep 0.3 ; echo $USER', read_timeout: 0.5
|
60
|
+
code = run('sleep 0.3 ; echo $USER; sleep 0.3 ; echo $USER', read_timeout: 0.5)
|
61
61
|
expect(collected).to eq "#{user}\n#{user}\n"
|
62
62
|
expect(code).to eq 0
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
it 'run and kill process' do
|
67
|
-
code = run( "echo $USER; kill -KILL $$"
|
67
|
+
code = run( "echo $USER; kill -KILL $$")
|
68
68
|
expect(subject).to eq "#{user}\n"
|
69
69
|
expect(code).to eq(-9)
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'run and interupt process' do
|
73
|
-
code = run( "echo $USER; kill -INT $$"
|
73
|
+
code = run( "echo $USER; kill -INT $$")
|
74
74
|
expect(subject).to eq "#{user}\n"
|
75
75
|
expect(code).to eq(-2)
|
76
76
|
end
|
77
77
|
|
78
|
-
it "should copy stdin" do
|
79
|
-
io = StringIO.new("echo foo ; exit")
|
80
|
-
code = run(stdin: io)
|
81
|
-
expect(subject).to eq "foo\n"
|
82
|
-
expect(code).to eq 0
|
83
|
-
end
|
84
|
-
|
85
78
|
def run(*args, &block)
|
86
79
|
@proxy ||= ShellTest.new
|
87
80
|
timeout do
|
data/spec/lib/ssh_spec.rb
CHANGED
@@ -87,13 +87,6 @@ describe Vx::Lib::Shell::SSH, ssh: true do
|
|
87
87
|
expect(code).to eq(-4)
|
88
88
|
end
|
89
89
|
|
90
|
-
it "should copy stdin" do
|
91
|
-
io = StringIO.new("echo foo ; exit\n")
|
92
|
-
code = run_ssh(stdin: io)
|
93
|
-
expect(collected).to match "foo\r\n"
|
94
|
-
expect(code).to eq 0
|
95
|
-
end
|
96
|
-
|
97
90
|
def open_ssh(&block)
|
98
91
|
described_class.open(host, user, password: pass, paranoid: false, verbose: 2, port: port, &block)
|
99
92
|
end
|