net-sftp 0.5.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/doc/LICENSE-BSD +27 -0
- data/doc/LICENSE-GPL +280 -0
- data/doc/LICENSE-RUBY +56 -0
- data/examples/asynchronous.rb +57 -0
- data/examples/ssh-service.rb +31 -0
- data/examples/synchronous.rb +120 -0
- data/lib/net/sftp.rb +39 -0
- data/lib/net/sftp/errors.rb +25 -0
- data/lib/net/sftp/operations/abstract.rb +103 -0
- data/lib/net/sftp/operations/close.rb +31 -0
- data/lib/net/sftp/operations/errors.rb +76 -0
- data/lib/net/sftp/operations/fsetstat.rb +36 -0
- data/lib/net/sftp/operations/fstat.rb +32 -0
- data/lib/net/sftp/operations/lstat.rb +31 -0
- data/lib/net/sftp/operations/mkdir.rb +33 -0
- data/lib/net/sftp/operations/open.rb +32 -0
- data/lib/net/sftp/operations/opendir.rb +32 -0
- data/lib/net/sftp/operations/read.rb +84 -0
- data/lib/net/sftp/operations/readdir.rb +55 -0
- data/lib/net/sftp/operations/realpath.rb +37 -0
- data/lib/net/sftp/operations/remove.rb +31 -0
- data/lib/net/sftp/operations/rename.rb +32 -0
- data/lib/net/sftp/operations/rmdir.rb +31 -0
- data/lib/net/sftp/operations/services.rb +42 -0
- data/lib/net/sftp/operations/setstat.rb +33 -0
- data/lib/net/sftp/operations/stat.rb +31 -0
- data/lib/net/sftp/operations/write.rb +63 -0
- data/lib/net/sftp/protocol/01/attributes.rb +146 -0
- data/lib/net/sftp/protocol/01/impl.rb +251 -0
- data/lib/net/sftp/protocol/01/packet-assistant.rb +82 -0
- data/lib/net/sftp/protocol/01/services.rb +47 -0
- data/lib/net/sftp/protocol/02/impl.rb +39 -0
- data/lib/net/sftp/protocol/02/packet-assistant.rb +32 -0
- data/lib/net/sftp/protocol/02/services.rb +44 -0
- data/lib/net/sftp/protocol/03/impl.rb +42 -0
- data/lib/net/sftp/protocol/03/packet-assistant.rb +35 -0
- data/lib/net/sftp/protocol/03/services.rb +44 -0
- data/lib/net/sftp/protocol/04/attributes.rb +227 -0
- data/lib/net/sftp/protocol/04/impl.rb +134 -0
- data/lib/net/sftp/protocol/04/packet-assistant.rb +51 -0
- data/lib/net/sftp/protocol/04/services.rb +44 -0
- data/lib/net/sftp/protocol/05/services.rb +44 -0
- data/lib/net/sftp/protocol/constants.rb +60 -0
- data/lib/net/sftp/protocol/driver.rb +232 -0
- data/lib/net/sftp/protocol/packet-assistant.rb +84 -0
- data/lib/net/sftp/protocol/services.rb +55 -0
- data/lib/net/sftp/session.rb +215 -0
- data/lib/net/sftp/version.rb +25 -0
- data/test/ALL-TESTS.rb +21 -0
- data/test/operations/tc_abstract.rb +124 -0
- data/test/operations/tc_close.rb +40 -0
- data/test/operations/tc_fsetstat.rb +48 -0
- data/test/operations/tc_fstat.rb +40 -0
- data/test/operations/tc_lstat.rb +40 -0
- data/test/operations/tc_mkdir.rb +48 -0
- data/test/operations/tc_open.rb +42 -0
- data/test/operations/tc_opendir.rb +40 -0
- data/test/operations/tc_read.rb +103 -0
- data/test/operations/tc_readdir.rb +88 -0
- data/test/operations/tc_realpath.rb +54 -0
- data/test/operations/tc_remove.rb +40 -0
- data/test/operations/tc_rmdir.rb +40 -0
- data/test/operations/tc_setstat.rb +48 -0
- data/test/operations/tc_stat.rb +40 -0
- data/test/operations/tc_write.rb +91 -0
- data/test/protocol/01/tc_attributes.rb +138 -0
- data/test/protocol/01/tc_impl.rb +294 -0
- data/test/protocol/01/tc_packet_assistant.rb +81 -0
- data/test/protocol/02/tc_impl.rb +41 -0
- data/test/protocol/02/tc_packet_assistant.rb +31 -0
- data/test/protocol/03/tc_impl.rb +48 -0
- data/test/protocol/03/tc_packet_assistant.rb +34 -0
- data/test/protocol/04/tc_attributes.rb +174 -0
- data/test/protocol/04/tc_impl.rb +102 -0
- data/test/protocol/04/tc_packet_assistant.rb +41 -0
- data/test/protocol/tc_driver.rb +219 -0
- metadata +137 -0
@@ -0,0 +1,294 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
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
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
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/packet-assistant'
|
21
|
+
require 'flexmock'
|
22
|
+
require 'net/ssh/util/buffer'
|
23
|
+
|
24
|
+
class TC_01_PacketAssistant < Test::Unit::TestCase
|
25
|
+
|
26
|
+
class Buffers
|
27
|
+
def writer
|
28
|
+
Net::SSH::Util::WriterBuffer.new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def setup
|
33
|
+
@driver = FlexMock.new
|
34
|
+
@driver.mock_handle( :next_request_id ) { 14 }
|
35
|
+
@packets = packet_assistant_class.new( Buffers.new, @driver )
|
36
|
+
end
|
37
|
+
|
38
|
+
def packet_assistant_class
|
39
|
+
Net::SFTP::Protocol::V_01::PacketAssistant
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.packet( name, args, expect )
|
43
|
+
define_method( "test_#{name}" ) do
|
44
|
+
id, packet = @packets.__send__( name, *[ nil, *args ] )
|
45
|
+
assert_equal 14, id
|
46
|
+
assert_equal "\0\0\0\16" + expect, packet
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
packet :open, [ "a path", 1, "attrs" ], "\0\0\0\6a path\0\0\0\1attrs"
|
51
|
+
|
52
|
+
packet :close, [ "handle" ], "\0\0\0\6handle"
|
53
|
+
|
54
|
+
packet :read, [ "handle", 0, 16 ], "\0\0\0\6handle\0\0\0\0\0\0\0\0\0\0\0\20"
|
55
|
+
|
56
|
+
packet :write, [ "handle", 0, "data" ],
|
57
|
+
"\0\0\0\6handle\0\0\0\0\0\0\0\0\0\0\0\4data"
|
58
|
+
|
59
|
+
packet :opendir, [ "a path" ], "\0\0\0\6a path"
|
60
|
+
|
61
|
+
packet :readdir, [ "handle" ], "\0\0\0\6handle"
|
62
|
+
|
63
|
+
packet :remove, [ "a path" ], "\0\0\0\6a path"
|
64
|
+
|
65
|
+
packet :stat, [ "a path" ], "\0\0\0\6a path"
|
66
|
+
|
67
|
+
packet :lstat, [ "a path" ], "\0\0\0\6a path"
|
68
|
+
|
69
|
+
packet :fstat, [ "handle" ], "\0\0\0\6handle"
|
70
|
+
|
71
|
+
packet :setstat, [ "a path", "attrs" ], "\0\0\0\6a pathattrs"
|
72
|
+
|
73
|
+
packet :fsetstat, [ "handle", "attrs" ], "\0\0\0\6handleattrs"
|
74
|
+
|
75
|
+
packet :mkdir, [ "a path", "attrs" ], "\0\0\0\6a pathattrs"
|
76
|
+
|
77
|
+
packet :rmdir, [ "a path" ], "\0\0\0\6a path"
|
78
|
+
|
79
|
+
packet :realpath, [ "a path" ], "\0\0\0\6a path"
|
80
|
+
|
81
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
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
|
+
$:.unshift File.join( File.dirname( __FILE__ ), ".." )
|
19
|
+
|
20
|
+
require '01/tc_impl.rb'
|
21
|
+
require 'net/sftp/protocol/02/impl'
|
22
|
+
|
23
|
+
class TC_02_Impl < TC_01_Impl
|
24
|
+
|
25
|
+
def impl_class
|
26
|
+
Net::SFTP::Protocol::V_02::Impl
|
27
|
+
end
|
28
|
+
|
29
|
+
operation :rename, :rename_raw
|
30
|
+
|
31
|
+
def test_rename_flags
|
32
|
+
@assistant.mock_handle( :rename ) { |*a| [ a[0], a[1..-1] ] }
|
33
|
+
id = @impl.rename( 14, :a, :b, :c )
|
34
|
+
assert_equal 14, id
|
35
|
+
assert_equal 1, @assistant.mock_count( :rename )
|
36
|
+
assert_equal 1, @driver.mock_count( :send_data )
|
37
|
+
assert_equal [
|
38
|
+
[ Net::SFTP::Protocol::Constants::FXP_RENAME, [ :a, :b ]] ], @sent_data
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#--
|
2
|
+
# =============================================================================
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
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
|
+
$:.unshift File.join( File.dirname( __FILE__ ), ".." )
|
19
|
+
|
20
|
+
require '01/tc_packet_assistant'
|
21
|
+
require 'net/sftp/protocol/02/packet-assistant'
|
22
|
+
|
23
|
+
class TC_02_PacketAssistant < TC_01_PacketAssistant
|
24
|
+
|
25
|
+
def packet_assistant_class
|
26
|
+
Net::SFTP::Protocol::V_02::PacketAssistant
|
27
|
+
end
|
28
|
+
|
29
|
+
packet :rename, [ "a path", "new path" ], "\0\0\0\6a path\0\0\0\10new path"
|
30
|
+
|
31
|
+
end
|