net-sftp 1.1.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|