net-sftp 1.1.1 → 2.0.0
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.
- data/CHANGELOG.rdoc +23 -0
- data/Manifest +55 -0
- data/README.rdoc +96 -0
- data/Rakefile +30 -0
- data/lib/net/sftp.rb +53 -38
- data/lib/net/sftp/constants.rb +187 -0
- data/lib/net/sftp/errors.rb +34 -20
- data/lib/net/sftp/operations/dir.rb +93 -0
- data/lib/net/sftp/operations/download.rb +364 -0
- data/lib/net/sftp/operations/file.rb +176 -0
- data/lib/net/sftp/operations/file_factory.rb +60 -0
- data/lib/net/sftp/operations/upload.rb +387 -0
- data/lib/net/sftp/packet.rb +21 -0
- data/lib/net/sftp/protocol.rb +32 -0
- data/lib/net/sftp/protocol/01/attributes.rb +265 -96
- data/lib/net/sftp/protocol/01/base.rb +268 -0
- data/lib/net/sftp/protocol/01/name.rb +43 -0
- data/lib/net/sftp/protocol/02/base.rb +31 -0
- data/lib/net/sftp/protocol/03/base.rb +35 -0
- data/lib/net/sftp/protocol/04/attributes.rb +120 -195
- data/lib/net/sftp/protocol/04/base.rb +94 -0
- data/lib/net/sftp/protocol/04/name.rb +67 -0
- data/lib/net/sftp/protocol/05/base.rb +66 -0
- data/lib/net/sftp/protocol/06/attributes.rb +107 -0
- data/lib/net/sftp/protocol/06/base.rb +63 -0
- data/lib/net/sftp/protocol/base.rb +50 -0
- data/lib/net/sftp/request.rb +91 -0
- data/lib/net/sftp/response.rb +76 -0
- data/lib/net/sftp/session.rb +914 -238
- data/lib/net/sftp/version.rb +14 -21
- data/net-sftp.gemspec +60 -0
- data/setup.rb +1331 -0
- data/test/common.rb +173 -0
- data/test/protocol/01/test_attributes.rb +97 -0
- data/test/protocol/01/test_base.rb +210 -0
- data/test/protocol/01/test_name.rb +27 -0
- data/test/protocol/02/test_base.rb +26 -0
- data/test/protocol/03/test_base.rb +27 -0
- data/test/protocol/04/test_attributes.rb +148 -0
- data/test/protocol/04/test_base.rb +74 -0
- data/test/protocol/04/test_name.rb +49 -0
- data/test/protocol/05/test_base.rb +62 -0
- data/test/protocol/06/test_attributes.rb +124 -0
- data/test/protocol/06/test_base.rb +51 -0
- data/test/protocol/test_base.rb +42 -0
- data/test/test_all.rb +3 -0
- data/test/test_dir.rb +47 -0
- data/test/test_download.rb +252 -0
- data/test/test_file.rb +159 -0
- data/test/test_file_factory.rb +48 -0
- data/test/test_packet.rb +9 -0
- data/test/test_protocol.rb +17 -0
- data/test/test_request.rb +71 -0
- data/test/test_response.rb +53 -0
- data/test/test_session.rb +741 -0
- data/test/test_upload.rb +219 -0
- metadata +59 -111
- data/doc/LICENSE-BSD +0 -27
- data/doc/LICENSE-GPL +0 -280
- data/doc/LICENSE-RUBY +0 -56
- data/doc/faq/faq.html +0 -298
- data/doc/faq/faq.rb +0 -154
- data/doc/faq/faq.yml +0 -183
- data/examples/asynchronous.rb +0 -57
- data/examples/get-put.rb +0 -45
- data/examples/sftp-open-uri.rb +0 -30
- data/examples/ssh-service.rb +0 -30
- data/examples/synchronous.rb +0 -131
- data/lib/net/sftp/operations/abstract.rb +0 -108
- data/lib/net/sftp/operations/close.rb +0 -31
- data/lib/net/sftp/operations/errors.rb +0 -76
- data/lib/net/sftp/operations/fsetstat.rb +0 -36
- data/lib/net/sftp/operations/fstat.rb +0 -32
- data/lib/net/sftp/operations/lstat.rb +0 -31
- data/lib/net/sftp/operations/mkdir.rb +0 -33
- data/lib/net/sftp/operations/open.rb +0 -32
- data/lib/net/sftp/operations/opendir.rb +0 -32
- data/lib/net/sftp/operations/read.rb +0 -88
- data/lib/net/sftp/operations/readdir.rb +0 -55
- data/lib/net/sftp/operations/realpath.rb +0 -37
- data/lib/net/sftp/operations/remove.rb +0 -31
- data/lib/net/sftp/operations/rename.rb +0 -32
- data/lib/net/sftp/operations/rmdir.rb +0 -31
- data/lib/net/sftp/operations/services.rb +0 -42
- data/lib/net/sftp/operations/setstat.rb +0 -33
- data/lib/net/sftp/operations/stat.rb +0 -31
- data/lib/net/sftp/operations/write.rb +0 -63
- data/lib/net/sftp/protocol/01/impl.rb +0 -251
- data/lib/net/sftp/protocol/01/packet-assistant.rb +0 -82
- data/lib/net/sftp/protocol/01/services.rb +0 -47
- data/lib/net/sftp/protocol/02/impl.rb +0 -39
- data/lib/net/sftp/protocol/02/packet-assistant.rb +0 -32
- data/lib/net/sftp/protocol/02/services.rb +0 -44
- data/lib/net/sftp/protocol/03/impl.rb +0 -42
- data/lib/net/sftp/protocol/03/packet-assistant.rb +0 -35
- data/lib/net/sftp/protocol/03/services.rb +0 -44
- data/lib/net/sftp/protocol/04/impl.rb +0 -86
- data/lib/net/sftp/protocol/04/packet-assistant.rb +0 -45
- data/lib/net/sftp/protocol/04/services.rb +0 -44
- data/lib/net/sftp/protocol/05/impl.rb +0 -90
- data/lib/net/sftp/protocol/05/packet-assistant.rb +0 -34
- data/lib/net/sftp/protocol/05/services.rb +0 -44
- data/lib/net/sftp/protocol/constants.rb +0 -60
- data/lib/net/sftp/protocol/driver.rb +0 -235
- data/lib/net/sftp/protocol/packet-assistant.rb +0 -84
- data/lib/net/sftp/protocol/services.rb +0 -55
- data/lib/uri/open-sftp.rb +0 -54
- data/lib/uri/sftp.rb +0 -42
- data/test/ALL-TESTS.rb +0 -23
- data/test/operations/tc_abstract.rb +0 -124
- data/test/operations/tc_close.rb +0 -40
- data/test/operations/tc_fsetstat.rb +0 -48
- data/test/operations/tc_fstat.rb +0 -40
- data/test/operations/tc_lstat.rb +0 -40
- data/test/operations/tc_mkdir.rb +0 -48
- data/test/operations/tc_open.rb +0 -42
- data/test/operations/tc_opendir.rb +0 -40
- data/test/operations/tc_read.rb +0 -103
- data/test/operations/tc_readdir.rb +0 -88
- data/test/operations/tc_realpath.rb +0 -54
- data/test/operations/tc_remove.rb +0 -40
- data/test/operations/tc_rmdir.rb +0 -40
- data/test/operations/tc_setstat.rb +0 -48
- data/test/operations/tc_stat.rb +0 -40
- data/test/operations/tc_write.rb +0 -91
- data/test/protocol/01/tc_attributes.rb +0 -138
- data/test/protocol/01/tc_impl.rb +0 -294
- data/test/protocol/01/tc_packet_assistant.rb +0 -81
- data/test/protocol/02/tc_impl.rb +0 -41
- data/test/protocol/02/tc_packet_assistant.rb +0 -31
- data/test/protocol/03/tc_impl.rb +0 -48
- data/test/protocol/03/tc_packet_assistant.rb +0 -34
- data/test/protocol/04/tc_attributes.rb +0 -174
- data/test/protocol/04/tc_impl.rb +0 -91
- data/test/protocol/04/tc_packet_assistant.rb +0 -38
- data/test/protocol/05/tc_impl.rb +0 -61
- data/test/protocol/05/tc_packet_assistant.rb +0 -32
- data/test/protocol/tc_driver.rb +0 -219
@@ -1,40 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
-
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "../../lib"
|
18
|
-
|
19
|
-
require 'test/unit'
|
20
|
-
require 'net/sftp/operations/remove'
|
21
|
-
require 'flexmock'
|
22
|
-
|
23
|
-
class TC_Operations_Remove < Test::Unit::TestCase
|
24
|
-
|
25
|
-
def setup
|
26
|
-
@log = FlexMock.new
|
27
|
-
@session = FlexMock.new
|
28
|
-
@driver = FlexMock.new
|
29
|
-
@operation = Net::SFTP::Operations::Remove.new( @log, @session, @driver )
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_perform
|
33
|
-
id = filename = nil
|
34
|
-
@driver.mock_handle( :remove ) { |i,f,m| id, filename = i, f; 10 }
|
35
|
-
assert_equal 10, @operation.perform( "foo" )
|
36
|
-
assert_nil id
|
37
|
-
assert_equal "foo", filename
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
data/test/operations/tc_rmdir.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
-
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "../../lib"
|
18
|
-
|
19
|
-
require 'test/unit'
|
20
|
-
require 'net/sftp/operations/rmdir'
|
21
|
-
require 'flexmock'
|
22
|
-
|
23
|
-
class TC_Operations_Rmdir < Test::Unit::TestCase
|
24
|
-
|
25
|
-
def setup
|
26
|
-
@log = FlexMock.new
|
27
|
-
@session = FlexMock.new
|
28
|
-
@driver = FlexMock.new
|
29
|
-
@operation = Net::SFTP::Operations::Rmdir.new( @log, @session, @driver )
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_perform
|
33
|
-
id = path = nil
|
34
|
-
@driver.mock_handle( :rmdir ) { |i,p| id, path = i, p; 10 }
|
35
|
-
assert_equal 10, @operation.perform( "foo" )
|
36
|
-
assert_nil id
|
37
|
-
assert_equal "foo", path
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
-
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "../../lib"
|
18
|
-
|
19
|
-
require 'test/unit'
|
20
|
-
require 'net/sftp/operations/setstat'
|
21
|
-
require 'flexmock'
|
22
|
-
|
23
|
-
class TC_Operations_setstat < Test::Unit::TestCase
|
24
|
-
|
25
|
-
def setup
|
26
|
-
@log = FlexMock.new
|
27
|
-
@session = FlexMock.new
|
28
|
-
@attr_factory = FlexMock.new
|
29
|
-
@driver = FlexMock.new
|
30
|
-
@driver.mock_handle( :attr_factory ) { @attr_factory }
|
31
|
-
@operation = Net::SFTP::Operations::Setstat.new( @log, @session, @driver )
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_perform
|
35
|
-
hash = nil
|
36
|
-
@attr_factory.mock_handle( :from_hash ) { |h| hash = h; :foo }
|
37
|
-
|
38
|
-
id = path = attrs = nil
|
39
|
-
@driver.mock_handle( :setstat ) { |i,p,a| id, path, attrs = i, p, a; 10 }
|
40
|
-
|
41
|
-
assert_equal 10, @operation.perform( "foo", "bar" )
|
42
|
-
assert_nil id
|
43
|
-
assert_equal "foo", path
|
44
|
-
assert_equal "bar", hash
|
45
|
-
assert_equal :foo, attrs
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
data/test/operations/tc_stat.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
-
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "../../lib"
|
18
|
-
|
19
|
-
require 'test/unit'
|
20
|
-
require 'net/sftp/operations/stat'
|
21
|
-
require 'flexmock'
|
22
|
-
|
23
|
-
class TC_Operations_Stat < Test::Unit::TestCase
|
24
|
-
|
25
|
-
def setup
|
26
|
-
@log = FlexMock.new
|
27
|
-
@session = FlexMock.new
|
28
|
-
@driver = FlexMock.new
|
29
|
-
@operation = Net::SFTP::Operations::Stat.new( @log, @session, @driver )
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_perform
|
33
|
-
id = path = nil
|
34
|
-
@driver.mock_handle( :stat ) { |i,p| id, path = i, p; 10 }
|
35
|
-
assert_equal 10, @operation.perform( "foo" )
|
36
|
-
assert_nil id
|
37
|
-
assert_equal "foo", path
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
data/test/operations/tc_write.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
-
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "../../lib"
|
18
|
-
|
19
|
-
require 'test/unit'
|
20
|
-
require 'net/sftp/operations/write'
|
21
|
-
require 'flexmock'
|
22
|
-
|
23
|
-
class TC_Operations_Write < Test::Unit::TestCase
|
24
|
-
|
25
|
-
def setup
|
26
|
-
@log = FlexMock.new
|
27
|
-
@log.mock_handle( :debug? )
|
28
|
-
@log.mock_handle( :debug )
|
29
|
-
|
30
|
-
@session = FlexMock.new
|
31
|
-
@driver = FlexMock.new
|
32
|
-
@operation = Net::SFTP::Operations::Write.new( @log, @session, @driver )
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_perform_defaults
|
36
|
-
id = handle = offset = data = nil
|
37
|
-
@driver.mock_handle( :write ) { |i,h,o,d| id, handle, offset, data = i, h, o, d; 10 }
|
38
|
-
assert_equal 10, @operation.perform( "foo", "data" )
|
39
|
-
assert_nil id
|
40
|
-
assert_equal "foo", handle
|
41
|
-
assert_equal "data", data
|
42
|
-
assert_equal 0, offset
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_perform_explicit
|
46
|
-
id = handle = offset = data = nil
|
47
|
-
@driver.mock_handle( :write ) { |i,h,o,d| id, handle, offset, data = i, h, o, d; 10 }
|
48
|
-
assert_equal 10, @operation.perform( "foo", "data", 15 )
|
49
|
-
assert_nil id
|
50
|
-
assert_equal "foo", handle
|
51
|
-
assert_equal "data", data
|
52
|
-
assert_equal 15, offset
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_do_status_bad
|
56
|
-
assert_raise( Net::SFTP::Operations::StatusException ) do
|
57
|
-
@operation.do_status( 5, nil, nil )
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_do_status_ok_more_chunks
|
62
|
-
@log.mock_handle :debug?
|
63
|
-
@log.mock_handle :debug
|
64
|
-
@session.mock_handle :register
|
65
|
-
@session.mock_handle :status=
|
66
|
-
@session.mock_handle :loop
|
67
|
-
@driver.mock_handle :write
|
68
|
-
|
69
|
-
@operation.execute( "foo", "1234567890" * 7000 )
|
70
|
-
@operation.do_status( 0, :a, :b )
|
71
|
-
assert_equal 2, @driver.mock_count( :write )
|
72
|
-
assert_equal 2, @session.mock_count( :register )
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_do_status_ok_done
|
76
|
-
@log.mock_handle :debug?
|
77
|
-
@log.mock_handle :debug
|
78
|
-
@session.mock_handle :register
|
79
|
-
@session.mock_handle :status=
|
80
|
-
@session.mock_handle :loop
|
81
|
-
@driver.mock_handle :write
|
82
|
-
|
83
|
-
called = false
|
84
|
-
@operation.execute( "foo", "1234567890" ) { called = true }
|
85
|
-
@operation.do_status( 0, :a, :b )
|
86
|
-
assert_equal 1, @driver.mock_count( :write )
|
87
|
-
assert_equal 1, @session.mock_count( :register )
|
88
|
-
assert called
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
@@ -1,138 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
-
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "../../../lib"
|
18
|
-
|
19
|
-
require 'test/unit'
|
20
|
-
require 'net/sftp/protocol/01/attributes'
|
21
|
-
|
22
|
-
require 'net/ssh'
|
23
|
-
require 'net/ssh/util/buffer'
|
24
|
-
|
25
|
-
class TC_01_Attributes < Test::Unit::TestCase
|
26
|
-
|
27
|
-
class Buffers
|
28
|
-
def writer
|
29
|
-
Net::SSH::Util::WriterBuffer.new
|
30
|
-
end
|
31
|
-
def reader( text )
|
32
|
-
Net::SSH::Util::ReaderBuffer.new( text )
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def setup
|
37
|
-
@factory = Net::SFTP::Protocol::V_01::Attributes.init( Buffers.new )
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_empty
|
41
|
-
empty = @factory.empty
|
42
|
-
assert_nil empty.size
|
43
|
-
assert_nil empty.uid
|
44
|
-
assert_nil empty.gid
|
45
|
-
assert_nil empty.permissions
|
46
|
-
assert_nil empty.atime
|
47
|
-
assert_nil empty.mtime
|
48
|
-
assert_nil empty.extended
|
49
|
-
assert_equal "\0\0\0\0", empty.to_s
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_from_buffer_empty
|
53
|
-
buffer = @factory.buffers.reader( "\0\0\0\0" )
|
54
|
-
attrs = @factory.from_buffer( buffer )
|
55
|
-
assert_nil attrs.size
|
56
|
-
assert_nil attrs.uid
|
57
|
-
assert_nil attrs.gid
|
58
|
-
assert_nil attrs.permissions
|
59
|
-
assert_nil attrs.atime
|
60
|
-
assert_nil attrs.mtime
|
61
|
-
assert_nil attrs.extended
|
62
|
-
assert_equal "\0\0\0\0", attrs.to_s
|
63
|
-
end
|
64
|
-
|
65
|
-
ATTRIBUTES =
|
66
|
-
[ [ 1, "\1\2\3\4\5\6\7\10", :size, 0x0102030405060708 ],
|
67
|
-
[ 2, "\11\12\13\14\15\16\17\20", :uid, 0x090A0B0C ],
|
68
|
-
[ 2, "\11\12\13\14\15\16\17\20", :gid, 0x0D0E0F10 ],
|
69
|
-
[ 4, "\21\22\23\24", :permissions, 0x11121314 ],
|
70
|
-
[ 8, "\25\26\27\30\31\32\33\34", :atime, 0x15161718 ],
|
71
|
-
[ 8, "\25\26\27\30\31\32\33\34", :mtime, 0x191A1B1C ],
|
72
|
-
[ 0x80000000,
|
73
|
-
"\0\0\0\4" +
|
74
|
-
"\0\0\0\01a\0\0\0\01b" +
|
75
|
-
"\0\0\0\01c\0\0\0\01d" +
|
76
|
-
"\0\0\0\01e\0\0\0\01f" +
|
77
|
-
"\0\0\0\01g\0\0\0\01h",
|
78
|
-
:extended,
|
79
|
-
{ "a" => "b", "c" => "d", "e" => "f", "g" => "h" } ] ]
|
80
|
-
|
81
|
-
# find all possible combinations of the elements of ATTRIBUTES
|
82
|
-
# (i.e., 'n' choose k, for k in [1..ATTRIBUTES.length]).
|
83
|
-
def self.choose( from, k )
|
84
|
-
result = []
|
85
|
-
( from.length - k + 1 ).times do |i|
|
86
|
-
if i+1 < from.length && k > 1
|
87
|
-
choose( from[i+1..-1], k-1 ).each do |chosen|
|
88
|
-
result << [ from[i], *chosen ]
|
89
|
-
end
|
90
|
-
else
|
91
|
-
result << [ from[i] ]
|
92
|
-
end
|
93
|
-
end
|
94
|
-
result
|
95
|
-
end
|
96
|
-
|
97
|
-
method_id = 0
|
98
|
-
ATTRIBUTES.length.times do |k|
|
99
|
-
choose( ATTRIBUTES, k+1 ).each do |attrs|
|
100
|
-
define_method( "test_attributes_%03d" % method_id ) do
|
101
|
-
flags = 0
|
102
|
-
buffer = ""
|
103
|
-
attrs.each do |a|
|
104
|
-
if ( flags & a[0] ) == 0
|
105
|
-
flags |= a[0]
|
106
|
-
buffer += a[1]
|
107
|
-
end
|
108
|
-
end
|
109
|
-
buffer = [ flags, buffer ].pack( "NA*" )
|
110
|
-
input = @factory.buffers.reader( buffer )
|
111
|
-
obj = @factory.from_buffer( input )
|
112
|
-
attrs.each { |a| assert_equal a[3], obj.__send__( a[2] ) }
|
113
|
-
assert_equal buffer, obj.to_s
|
114
|
-
end
|
115
|
-
method_id += 1
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
require 'etc'
|
120
|
-
[
|
121
|
-
[ { :size => 1000 }, :size, 1000, :uid ],
|
122
|
-
[ { :uid => 1000 }, :uid, 1000 ],
|
123
|
-
[ { :gid => 1000 }, :gid, 1000 ],
|
124
|
-
[ { :permissions => 0600 }, :permissions, 0600 ],
|
125
|
-
[ { :atime => 123456 }, :atime, 123456 ],
|
126
|
-
[ { :mtime => 789012 }, :mtime, 789012 ],
|
127
|
-
[ { :extended => { "foo" => "bar" } }, :extended, { "foo" => "bar" } ],
|
128
|
-
[ { :owner => ENV['USER'] }, :uid, Etc.getpwnam(ENV['USER']).uid ],
|
129
|
-
[ { :group => 'wheel' }, :gid, Etc.getgrnam('wheel').gid ]
|
130
|
-
].each do |fixture|
|
131
|
-
define_method( "test_from_hash_#{fixture[1]}" ) do
|
132
|
-
attrs = @factory.from_hash( fixture[0] )
|
133
|
-
assert_equal fixture[2], attrs.__send__( fixture[1] )
|
134
|
-
assert_nil attrs.__send__( fixture[3] || :size )
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
end
|
data/test/protocol/01/tc_impl.rb
DELETED
@@ -1,294 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SFTP Secure FTP Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-sftp website: http://net-ssh.rubyforge.org/sftp
|
13
|
-
# project website : http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
$:.unshift "../../../lib"
|
18
|
-
|
19
|
-
require 'test/unit'
|
20
|
-
require 'net/sftp/protocol/constants'
|
21
|
-
require 'net/sftp/protocol/01/impl'
|
22
|
-
require 'flexmock'
|
23
|
-
require 'net/ssh/util/buffer'
|
24
|
-
|
25
|
-
class TC_01_Impl < Test::Unit::TestCase
|
26
|
-
|
27
|
-
class Buffers
|
28
|
-
def reader( text )
|
29
|
-
Net::SSH::Util::ReaderBuffer.new( text )
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def setup
|
34
|
-
@sent_data = []
|
35
|
-
@permissions = nil
|
36
|
-
|
37
|
-
@driver = FlexMock.new
|
38
|
-
@driver.mock_handle( :send_data ) { |*a| @sent_data << a }
|
39
|
-
|
40
|
-
@assistant = FlexMock.new
|
41
|
-
|
42
|
-
@attr_factory = FlexMock.new
|
43
|
-
@attr_factory.mock_handle( :empty ) do
|
44
|
-
o = FlexMock.new
|
45
|
-
o.mock_handle( :permissions= ) { |p| @permissions = p }
|
46
|
-
o
|
47
|
-
end
|
48
|
-
@attr_factory.mock_handle( :from_buffer ) do |b|
|
49
|
-
b.read_long
|
50
|
-
end
|
51
|
-
|
52
|
-
@impl = impl_class.new( Buffers.new, @driver, @assistant, @attr_factory )
|
53
|
-
end
|
54
|
-
|
55
|
-
def impl_class
|
56
|
-
Net::SFTP::Protocol::V_01::Impl
|
57
|
-
end
|
58
|
-
|
59
|
-
def self.operation( name, the_alias=name )
|
60
|
-
class_eval <<-EOF, __FILE__, __LINE__+1
|
61
|
-
def test_#{the_alias}
|
62
|
-
@assistant.mock_handle( :#{name} ) { |*a| [ a[0], a[1..-1] ] }
|
63
|
-
id = @impl.#{the_alias}( 14, :a, :b, :c )
|
64
|
-
assert_equal 14, id
|
65
|
-
assert_equal 1, @assistant.mock_count( :#{name} )
|
66
|
-
assert_equal 1, @driver.mock_count( :send_data )
|
67
|
-
assert_equal [
|
68
|
-
[ Net::SFTP::Protocol::Constants::FXP_#{name.to_s.upcase},
|
69
|
-
[ :a, :b, :c ]] ], @sent_data
|
70
|
-
end
|
71
|
-
EOF
|
72
|
-
end
|
73
|
-
|
74
|
-
operation :open, :open_raw
|
75
|
-
operation :close
|
76
|
-
operation :close, :close_handle
|
77
|
-
operation :read
|
78
|
-
operation :write
|
79
|
-
operation :opendir
|
80
|
-
operation :readdir
|
81
|
-
operation :remove
|
82
|
-
operation :stat, :stat_raw
|
83
|
-
operation :lstat, :lstat_raw
|
84
|
-
operation :fstat, :fstat_raw
|
85
|
-
operation :setstat
|
86
|
-
operation :fsetstat
|
87
|
-
operation :mkdir
|
88
|
-
operation :rmdir
|
89
|
-
operation :realpath
|
90
|
-
|
91
|
-
unless defined?( IO_FLAGS )
|
92
|
-
IO_FLAGS = [ IO::RDONLY, IO::WRONLY, IO::RDWR, IO::APPEND ]
|
93
|
-
OTHER_FLAGS = [ 0, IO::CREAT, IO::TRUNC, IO::EXCL ]
|
94
|
-
MAP = { IO::RDONLY => 1, IO::WRONLY => 2, IO::RDWR => 3, IO::APPEND => 4,
|
95
|
-
IO::CREAT => 8, IO::TRUNC => 0x10, IO::EXCL => 0x20 }
|
96
|
-
|
97
|
-
IO_FLAGS.each do |flag|
|
98
|
-
OTHER_FLAGS.each do |oflag|
|
99
|
-
[ nil, 0400 ].each do |mode|
|
100
|
-
define_method( "test_open_#{flag}_#{oflag}_#{mode||"nil"}" ) do
|
101
|
-
@assistant.mock_handle( :open ) { |*a| [ a[0], a[1..-1] ] }
|
102
|
-
args = [ 14, "a path", flag | oflag ]
|
103
|
-
args << mode if mode
|
104
|
-
assert_equal 14, @impl.open( *args )
|
105
|
-
assert_equal 1, @assistant.mock_count( :open )
|
106
|
-
assert_equal( ( mode || 0660 ), @permissions )
|
107
|
-
sftp_flag = MAP[flag] | ( oflag == 0 ? 0 : MAP[oflag] )
|
108
|
-
assert_equal Net::SFTP::Protocol::Constants::FXP_OPEN,
|
109
|
-
@sent_data.first[0]
|
110
|
-
assert_equal [ "a path", sftp_flag ], @sent_data.first[1][0,2]
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_stat_flags
|
118
|
-
@assistant.mock_handle( :stat ) { |*a| [ a[0], a[1..-1] ] }
|
119
|
-
id = @impl.stat( 14, :a, :b )
|
120
|
-
assert_equal 14, id
|
121
|
-
assert_equal 1, @assistant.mock_count( :stat )
|
122
|
-
assert_equal 1, @driver.mock_count( :send_data )
|
123
|
-
assert_equal [
|
124
|
-
[ Net::SFTP::Protocol::Constants::FXP_STAT, [ :a ]] ], @sent_data
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_lstat_flags
|
128
|
-
@assistant.mock_handle( :lstat ) { |*a| [ a[0], a[1..-1] ] }
|
129
|
-
id = @impl.lstat( 14, :a, :b )
|
130
|
-
assert_equal 14, id
|
131
|
-
assert_equal 1, @assistant.mock_count( :lstat )
|
132
|
-
assert_equal 1, @driver.mock_count( :send_data )
|
133
|
-
assert_equal [
|
134
|
-
[ Net::SFTP::Protocol::Constants::FXP_LSTAT, [ :a ]] ], @sent_data
|
135
|
-
end
|
136
|
-
|
137
|
-
def test_fstat_flags
|
138
|
-
@assistant.mock_handle( :fstat ) { |*a| [ a[0], a[1..-1] ] }
|
139
|
-
id = @impl.fstat( 14, :a, :b )
|
140
|
-
assert_equal 14, id
|
141
|
-
assert_equal 1, @assistant.mock_count( :fstat )
|
142
|
-
assert_equal 1, @driver.mock_count( :send_data )
|
143
|
-
assert_equal [
|
144
|
-
[ Net::SFTP::Protocol::Constants::FXP_FSTAT, [ :a ]] ], @sent_data
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_dispatch_bad
|
148
|
-
assert_raise( Net::SFTP::Exception ) do
|
149
|
-
@impl.dispatch( nil, -5, "blah" )
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
def test_do_status_without_callback
|
154
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\2" )
|
155
|
-
@impl.do_status( nil, buffer )
|
156
|
-
assert_equal 0, buffer.position
|
157
|
-
end
|
158
|
-
|
159
|
-
def test_do_status_with_callback
|
160
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\2" )
|
161
|
-
called = false
|
162
|
-
@impl.on_status do |d,i,c,a,b|
|
163
|
-
called = true
|
164
|
-
assert_equal 1, i
|
165
|
-
assert_equal 2, c
|
166
|
-
assert_nil a
|
167
|
-
assert_nil b
|
168
|
-
end
|
169
|
-
@impl.do_status nil, buffer
|
170
|
-
assert called
|
171
|
-
end
|
172
|
-
|
173
|
-
def test_do_handle_without_callback
|
174
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\2ab" )
|
175
|
-
@impl.do_handle( nil, buffer )
|
176
|
-
assert_equal 0, buffer.position
|
177
|
-
end
|
178
|
-
|
179
|
-
def test_do_handle_with_callback
|
180
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\2ab" )
|
181
|
-
called = false
|
182
|
-
@impl.on_handle do |d,i,h|
|
183
|
-
called = true
|
184
|
-
assert_equal 1, i
|
185
|
-
assert_equal "ab", h
|
186
|
-
end
|
187
|
-
@impl.do_handle nil, buffer
|
188
|
-
assert called
|
189
|
-
end
|
190
|
-
|
191
|
-
def test_do_data_without_callback
|
192
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\7\0\0\0\3abc" )
|
193
|
-
@impl.do_data( nil, buffer )
|
194
|
-
assert_equal 0, buffer.position
|
195
|
-
end
|
196
|
-
|
197
|
-
def test_do_data_with_callback
|
198
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\7\0\0\0\3abc" )
|
199
|
-
called = false
|
200
|
-
@impl.on_data do |d,id,data|
|
201
|
-
called = true
|
202
|
-
assert_equal 1, id
|
203
|
-
assert_equal "\0\0\0\3abc", data
|
204
|
-
end
|
205
|
-
@impl.do_data nil, buffer
|
206
|
-
assert called
|
207
|
-
end
|
208
|
-
|
209
|
-
def test_do_name_without_callback
|
210
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\2" +
|
211
|
-
"\0\0\0\1a\0\0\0\1b\0\0\0\0" )
|
212
|
-
@impl.do_name( nil, buffer )
|
213
|
-
assert_equal 0, buffer.position
|
214
|
-
end
|
215
|
-
|
216
|
-
def test_do_name_with_callback
|
217
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\2" +
|
218
|
-
"\0\0\0\1a\0\0\0\1b\0\0\0\0" +
|
219
|
-
"\0\0\0\1c\0\0\0\1d\0\0\0\0" )
|
220
|
-
called = false
|
221
|
-
@impl.on_name do |d,i,names|
|
222
|
-
called = true
|
223
|
-
assert_equal 1, i
|
224
|
-
assert_equal 2, names.length
|
225
|
-
assert_equal "a", names.first.filename
|
226
|
-
assert_equal "b", names.first.longname
|
227
|
-
assert_equal 0, names.first.attributes
|
228
|
-
assert_equal "c", names.last.filename
|
229
|
-
assert_equal "d", names.last.longname
|
230
|
-
assert_equal 0, names.last.attributes
|
231
|
-
end
|
232
|
-
@impl.do_name nil, buffer
|
233
|
-
assert called
|
234
|
-
end
|
235
|
-
|
236
|
-
def test_do_attrs_without_callback
|
237
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\0" )
|
238
|
-
@impl.do_attrs( nil, buffer )
|
239
|
-
assert_equal 0, buffer.position
|
240
|
-
end
|
241
|
-
|
242
|
-
def test_do_attrs_with_callback
|
243
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\0" )
|
244
|
-
called = false
|
245
|
-
@impl.on_attrs do |d,i,a|
|
246
|
-
called = true
|
247
|
-
assert_equal 1, i
|
248
|
-
assert_equal 0, a
|
249
|
-
end
|
250
|
-
@impl.do_attrs nil, buffer
|
251
|
-
assert called
|
252
|
-
end
|
253
|
-
|
254
|
-
def test_dispatch_status
|
255
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "" )
|
256
|
-
called = false
|
257
|
-
@impl.on_status { called = true }
|
258
|
-
@impl.dispatch( nil, Net::SFTP::Protocol::Constants::FXP_STATUS, buffer )
|
259
|
-
assert called
|
260
|
-
end
|
261
|
-
|
262
|
-
def test_dispatch_handle
|
263
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "" )
|
264
|
-
called = false
|
265
|
-
@impl.on_handle { called = true }
|
266
|
-
@impl.dispatch( nil, Net::SFTP::Protocol::Constants::FXP_HANDLE, buffer )
|
267
|
-
assert called
|
268
|
-
end
|
269
|
-
|
270
|
-
def test_dispatch_data
|
271
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "" )
|
272
|
-
called = false
|
273
|
-
@impl.on_data { called = true }
|
274
|
-
@impl.dispatch( nil, Net::SFTP::Protocol::Constants::FXP_DATA, buffer )
|
275
|
-
assert called
|
276
|
-
end
|
277
|
-
|
278
|
-
def test_dispatch_name
|
279
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\0\0\0\0\0" )
|
280
|
-
called = false
|
281
|
-
@impl.on_name { called = true }
|
282
|
-
@impl.dispatch( nil, Net::SFTP::Protocol::Constants::FXP_NAME, buffer )
|
283
|
-
assert called
|
284
|
-
end
|
285
|
-
|
286
|
-
def test_dispatch_attrs
|
287
|
-
buffer = Net::SSH::Util::ReaderBuffer.new( "" )
|
288
|
-
called = false
|
289
|
-
@impl.on_attrs { called = true }
|
290
|
-
@impl.dispatch( nil, Net::SFTP::Protocol::Constants::FXP_ATTRS, buffer )
|
291
|
-
assert called
|
292
|
-
end
|
293
|
-
|
294
|
-
end
|