net-sftp 2.1.2 → 4.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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/ci.yml +35 -0
- data/.gitignore +6 -0
- data/CHANGES.txt +4 -0
- data/Gemfile +15 -0
- data/README.rdoc +7 -4
- data/Rakefile +24 -30
- data/lib/net/sftp/operations/dir.rb +3 -3
- data/lib/net/sftp/operations/download.rb +8 -7
- data/lib/net/sftp/operations/file.rb +32 -9
- data/lib/net/sftp/operations/upload.rb +3 -3
- data/lib/net/sftp/session.rb +7 -5
- data/lib/net/sftp/version.rb +63 -13
- data/lib/net/sftp.rb +12 -4
- data/net-sftp-public_cert.pem +20 -0
- data/net-sftp.gemspec +35 -93
- data.tar.gz.sig +0 -0
- metadata +53 -82
- metadata.gz.sig +0 -0
- data/gem-public_cert.pem +0 -20
- data/test/common.rb +0 -184
- data/test/protocol/01/test_attributes.rb +0 -97
- data/test/protocol/01/test_base.rb +0 -210
- data/test/protocol/01/test_name.rb +0 -27
- data/test/protocol/02/test_base.rb +0 -26
- data/test/protocol/03/test_base.rb +0 -27
- data/test/protocol/04/test_attributes.rb +0 -148
- data/test/protocol/04/test_base.rb +0 -74
- data/test/protocol/04/test_name.rb +0 -53
- data/test/protocol/05/test_base.rb +0 -62
- data/test/protocol/06/test_attributes.rb +0 -124
- data/test/protocol/06/test_base.rb +0 -51
- data/test/protocol/test_base.rb +0 -42
- data/test/test_all.rb +0 -7
- data/test/test_dir.rb +0 -47
- data/test/test_download.rb +0 -287
- data/test/test_file.rb +0 -159
- data/test/test_file_factory.rb +0 -48
- data/test/test_packet.rb +0 -9
- data/test/test_protocol.rb +0 -17
- data/test/test_request.rb +0 -71
- data/test/test_response.rb +0 -53
- data/test/test_session.rb +0 -741
- data/test/test_upload.rb +0 -233
@@ -1,210 +0,0 @@
|
|
1
|
-
require 'common'
|
2
|
-
|
3
|
-
# NOTE: these tests assume that the interface to Net::SFTP::Session#send_packet
|
4
|
-
# will remain constant. If that interface ever changes, these tests will need
|
5
|
-
# to be updated!
|
6
|
-
|
7
|
-
class Protocol::V01::TestBase < Net::SFTP::TestCase
|
8
|
-
include Net::SFTP::Constants
|
9
|
-
include Net::SFTP::Constants::PacketTypes
|
10
|
-
include Net::SFTP::Constants::OpenFlags
|
11
|
-
|
12
|
-
def setup
|
13
|
-
@session = stub('session', :logger => nil)
|
14
|
-
@base = driver.new(@session)
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_version
|
18
|
-
assert_equal 1, @base.version
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_parse_handle_packet_should_read_string_from_packet_and_return_handle_in_hash
|
22
|
-
packet = Net::SSH::Buffer.from(:string, "here is a string")
|
23
|
-
assert_equal({ :handle => "here is a string" }, @base.parse_handle_packet(packet))
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_parse_status_packet_should_read_long_from_packet_and_return_code_in_hash
|
27
|
-
packet = Net::SSH::Buffer.from(:long, 15)
|
28
|
-
assert_equal({ :code => 15 }, @base.parse_status_packet(packet))
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_parse_data_packet_should_read_string_from_packet_and_return_data_in_hash
|
32
|
-
packet = Net::SSH::Buffer.from(:string, "here is a string")
|
33
|
-
assert_equal({ :data => "here is a string" }, @base.parse_data_packet(packet))
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_parse_attrs_packet_should_use_correct_attributes_class
|
37
|
-
Net::SFTP::Protocol::V01::Attributes.expects(:from_buffer).with(:packet).returns(:result)
|
38
|
-
assert_equal({ :attrs => :result }, @base.parse_attrs_packet(:packet))
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_parse_name_packet_should_use_correct_name_class
|
42
|
-
packet = Net::SSH::Buffer.from(:long, 2,
|
43
|
-
:string, "name1", :string, "long1", :long, 0x4, :long, 0755,
|
44
|
-
:string, "name2", :string, "long2", :long, 0x4, :long, 0550)
|
45
|
-
names = @base.parse_name_packet(packet)[:names]
|
46
|
-
|
47
|
-
assert_not_nil names
|
48
|
-
assert_equal 2, names.length
|
49
|
-
assert_instance_of Net::SFTP::Protocol::V01::Name, names.first
|
50
|
-
|
51
|
-
assert_equal "name1", names.first.name
|
52
|
-
assert_equal "long1", names.first.longname
|
53
|
-
assert_equal 0755, names.first.attributes.permissions
|
54
|
-
|
55
|
-
assert_equal "name2", names.last.name
|
56
|
-
assert_equal "long2", names.last.longname
|
57
|
-
assert_equal 0550, names.last.attributes.permissions
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_open_with_numeric_flag_should_accept_IO_constants
|
61
|
-
@session.expects(:send_packet).with(FXP_OPEN, :long, 0,
|
62
|
-
:string, "/path/to/file",
|
63
|
-
:long, FV1::READ | FV1::WRITE | FV1::CREAT | FV1::EXCL,
|
64
|
-
:raw, attributes.new.to_s)
|
65
|
-
|
66
|
-
assert_equal 0, @base.open("/path/to/file", IO::RDWR | IO::CREAT | IO::EXCL, {})
|
67
|
-
end
|
68
|
-
|
69
|
-
{ "r" => FV1::READ,
|
70
|
-
"rb" => FV1::READ,
|
71
|
-
"r+" => FV1::READ | FV1::WRITE,
|
72
|
-
"w" => FV1::WRITE | FV1::TRUNC | FV1::CREAT,
|
73
|
-
"w+" => FV1::WRITE | FV1::READ | FV1::TRUNC | FV1::CREAT,
|
74
|
-
"a" => FV1::APPEND | FV1::WRITE | FV1::CREAT,
|
75
|
-
"a+" => FV1::APPEND | FV1::WRITE | FV1::READ | FV1::CREAT
|
76
|
-
}.each do |flags, options|
|
77
|
-
safe_name = flags.sub(/\+/, "_plus")
|
78
|
-
define_method("test_open_with_#{safe_name}_should_translate_correctly") do
|
79
|
-
@session.expects(:send_packet).with(FXP_OPEN, :long, 0,
|
80
|
-
:string, "/path/to/file", :long, options, :raw, attributes.new.to_s)
|
81
|
-
|
82
|
-
assert_equal 0, @base.open("/path/to/file", flags, {})
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_open_with_attributes_converts_hash_to_attribute_packet
|
87
|
-
@session.expects(:send_packet).with(FXP_OPEN, :long, 0,
|
88
|
-
:string, "/path/to/file", :long, FV1::READ, :raw, attributes.new(:permissions => 0755).to_s)
|
89
|
-
@base.open("/path/to/file", "r", :permissions => 0755)
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_close_should_send_close_packet
|
93
|
-
@session.expects(:send_packet).with(FXP_CLOSE, :long, 0, :string, "handle")
|
94
|
-
assert_equal 0, @base.close("handle")
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_read_should_send_read_packet
|
98
|
-
@session.expects(:send_packet).with(FXP_READ, :long, 0, :string, "handle", :int64, 1234, :long, 5678)
|
99
|
-
assert_equal 0, @base.read("handle", 1234, 5678)
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_write_should_send_write_packet
|
103
|
-
@session.expects(:send_packet).with(FXP_WRITE, :long, 0, :string, "handle", :int64, 1234, :string, "data")
|
104
|
-
assert_equal 0, @base.write("handle", 1234, "data")
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_lstat_should_send_lstat_packet
|
108
|
-
@session.expects(:send_packet).with(FXP_LSTAT, :long, 0, :string, "/path/to/file")
|
109
|
-
assert_equal 0, @base.lstat("/path/to/file")
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_lstat_should_ignore_flags_parameter
|
113
|
-
@session.expects(:send_packet).with(FXP_LSTAT, :long, 0, :string, "/path/to/file")
|
114
|
-
assert_equal 0, @base.lstat("/path/to/file", 12345)
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_fstat_should_send_fstat_packet
|
118
|
-
@session.expects(:send_packet).with(FXP_FSTAT, :long, 0, :string, "handle")
|
119
|
-
assert_equal 0, @base.fstat("handle")
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_fstat_should_ignore_flags_parameter
|
123
|
-
@session.expects(:send_packet).with(FXP_FSTAT, :long, 0, :string, "handle")
|
124
|
-
assert_equal 0, @base.fstat("handle", 12345)
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_setstat_should_translate_hash_to_attributes_and_send_setstat_packet
|
128
|
-
@session.expects(:send_packet).with(FXP_SETSTAT, :long, 0, :string, "/path/to/file", :raw, attributes.new(:atime => 1, :mtime => 2, :permissions => 0755).to_s)
|
129
|
-
assert_equal 0, @base.setstat("/path/to/file", :atime => 1, :mtime => 2, :permissions => 0755)
|
130
|
-
end
|
131
|
-
|
132
|
-
def test_fsetstat_should_translate_hash_to_attributes_and_send_fsetstat_packet
|
133
|
-
@session.expects(:send_packet).with(FXP_FSETSTAT, :long, 0, :string, "handle", :raw, attributes.new(:atime => 1, :mtime => 2, :permissions => 0755).to_s)
|
134
|
-
assert_equal 0, @base.fsetstat("handle", :atime => 1, :mtime => 2, :permissions => 0755)
|
135
|
-
end
|
136
|
-
|
137
|
-
def test_opendir_should_send_opendir_packet
|
138
|
-
@session.expects(:send_packet).with(FXP_OPENDIR, :long, 0, :string, "/path/to/dir")
|
139
|
-
assert_equal 0, @base.opendir("/path/to/dir")
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_readdir_should_send_readdir_packet
|
143
|
-
@session.expects(:send_packet).with(FXP_READDIR, :long, 0, :string, "handle")
|
144
|
-
assert_equal 0, @base.readdir("handle")
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_remove_should_send_remove_packet
|
148
|
-
@session.expects(:send_packet).with(FXP_REMOVE, :long, 0, :string, "/path/to/file")
|
149
|
-
assert_equal 0, @base.remove("/path/to/file")
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_mkdir_should_translate_hash_to_attributes_and_send_mkdir_packet
|
153
|
-
@session.expects(:send_packet).with(FXP_MKDIR, :long, 0, :string, "/path/to/dir", :raw, attributes.new(:atime => 1, :mtime => 2, :permissions => 0755).to_s)
|
154
|
-
assert_equal 0, @base.mkdir("/path/to/dir", :atime => 1, :mtime => 2, :permissions => 0755)
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_rmdir_should_send_rmdir_packet
|
158
|
-
@session.expects(:send_packet).with(FXP_RMDIR, :long, 0, :string, "/path/to/dir")
|
159
|
-
assert_equal 0, @base.rmdir("/path/to/dir")
|
160
|
-
end
|
161
|
-
|
162
|
-
def test_realpath_should_send_realpath_packet
|
163
|
-
@session.expects(:send_packet).with(FXP_REALPATH, :long, 0, :string, "/path/to/file")
|
164
|
-
assert_equal 0, @base.realpath("/path/to/file")
|
165
|
-
end
|
166
|
-
|
167
|
-
def test_stat_should_send_stat_packet
|
168
|
-
@session.expects(:send_packet).with(FXP_STAT, :long, 0, :string, "/path/to/file")
|
169
|
-
assert_equal 0, @base.stat("/path/to/file")
|
170
|
-
end
|
171
|
-
|
172
|
-
def test_stat_should_ignore_flags_parameter
|
173
|
-
@session.expects(:send_packet).with(FXP_STAT, :long, 0, :string, "/path/to/file")
|
174
|
-
assert_equal 0, @base.stat("/path/to/file", 12345)
|
175
|
-
end
|
176
|
-
|
177
|
-
def test_rename_should_raise_not_implemented_error
|
178
|
-
assert_raises(NotImplementedError) { @base.rename("/path/to/old", "/path/to/new") }
|
179
|
-
end
|
180
|
-
|
181
|
-
def test_readlink_should_raise_not_implemented_error
|
182
|
-
assert_raises(NotImplementedError) { @base.readlink("/path/to/link") }
|
183
|
-
end
|
184
|
-
|
185
|
-
def test_symlink_should_raise_not_implemented_error
|
186
|
-
assert_raises(NotImplementedError) { @base.symlink("/path/to/link", "/path/to/file") }
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_link_should_raise_not_implemented_error
|
190
|
-
assert_raises(NotImplementedError) { @base.link("/path/to/link", "/path/to/file", true) }
|
191
|
-
end
|
192
|
-
|
193
|
-
def test_block_should_raise_not_implemented_error
|
194
|
-
assert_raises(NotImplementedError) { @base.block("handle", 100, 200, 0) }
|
195
|
-
end
|
196
|
-
|
197
|
-
def test_unblock_should_raise_not_implemented_error
|
198
|
-
assert_raises(NotImplementedError) { @base.unblock("handle", 100, 200) }
|
199
|
-
end
|
200
|
-
|
201
|
-
private
|
202
|
-
|
203
|
-
def driver
|
204
|
-
Net::SFTP::Protocol::V01::Base
|
205
|
-
end
|
206
|
-
|
207
|
-
def attributes
|
208
|
-
Net::SFTP::Protocol::V01::Attributes
|
209
|
-
end
|
210
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'common'
|
2
|
-
|
3
|
-
class Protocol::V01::TestName < Net::SFTP::TestCase
|
4
|
-
def setup
|
5
|
-
@directory = Net::SFTP::Protocol::V01::Name.new("test", "drwxr-x-r-x 89 test test 3026 Mar 10 17:45 test", Net::SFTP::Protocol::V01::Attributes.new(:permissions => 040755))
|
6
|
-
@link = Net::SFTP::Protocol::V01::Name.new("test", "lrwxr-x-r-x 89 test test 3026 Mar 10 17:45 test", Net::SFTP::Protocol::V01::Attributes.new(:permissions => 0120755))
|
7
|
-
@file = Net::SFTP::Protocol::V01::Name.new("test", "-rwxr-x-r-x 89 test test 3026 Mar 10 17:45 test", Net::SFTP::Protocol::V01::Attributes.new(:permissions => 0100755))
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_directory?
|
11
|
-
assert @directory.directory?
|
12
|
-
assert !@link.directory?
|
13
|
-
assert !@file.directory?
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_symlink?
|
17
|
-
assert !@directory.symlink?
|
18
|
-
assert @link.symlink?
|
19
|
-
assert !@file.symlink?
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_file?
|
23
|
-
assert !@directory.file?
|
24
|
-
assert !@link.file?
|
25
|
-
assert @file.file?
|
26
|
-
end
|
27
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'common'
|
2
|
-
require 'protocol/01/test_base'
|
3
|
-
|
4
|
-
class Protocol::V02::TestBase < Protocol::V01::TestBase
|
5
|
-
def test_version
|
6
|
-
assert_equal 2, @base.version
|
7
|
-
end
|
8
|
-
|
9
|
-
undef test_rename_should_raise_not_implemented_error
|
10
|
-
|
11
|
-
def test_rename_should_send_rename_packet
|
12
|
-
@session.expects(:send_packet).with(FXP_RENAME, :long, 0, :string, "/old/file", :string, "/new/file")
|
13
|
-
assert_equal 0, @base.rename("/old/file", "/new/file")
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_rename_should_ignore_flags_parameter
|
17
|
-
@session.expects(:send_packet).with(FXP_RENAME, :long, 0, :string, "/old/file", :string, "/new/file")
|
18
|
-
assert_equal 0, @base.rename("/old/file", "/new/file", 1234)
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def driver
|
24
|
-
Net::SFTP::Protocol::V02::Base
|
25
|
-
end
|
26
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'common'
|
2
|
-
require 'protocol/02/test_base'
|
3
|
-
|
4
|
-
class Protocol::V03::TestBase < Protocol::V02::TestBase
|
5
|
-
def test_version
|
6
|
-
assert_equal 3, @base.version
|
7
|
-
end
|
8
|
-
|
9
|
-
undef test_readlink_should_raise_not_implemented_error
|
10
|
-
undef test_symlink_should_raise_not_implemented_error
|
11
|
-
|
12
|
-
def test_readlink_should_send_readlink_packet
|
13
|
-
@session.expects(:send_packet).with(FXP_READLINK, :long, 0, :string, "/path/to/link")
|
14
|
-
assert_equal 0, @base.readlink("/path/to/link")
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_symlink_should_send_symlink_packet
|
18
|
-
@session.expects(:send_packet).with(FXP_SYMLINK, :long, 0, :string, "/path/to/link", :string, "/path/to/file")
|
19
|
-
assert_equal 0, @base.symlink("/path/to/link", "/path/to/file")
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def driver
|
25
|
-
Net::SFTP::Protocol::V03::Base
|
26
|
-
end
|
27
|
-
end
|
@@ -1,148 +0,0 @@
|
|
1
|
-
require 'common'
|
2
|
-
|
3
|
-
module Etc; end
|
4
|
-
|
5
|
-
class Protocol::V04::TestAttributes < Net::SFTP::TestCase
|
6
|
-
def setup
|
7
|
-
@directory = attributes_factory.new(:type => attributes_factory::T_DIRECTORY)
|
8
|
-
@symlink = attributes_factory.new(:type => attributes_factory::T_SYMLINK)
|
9
|
-
@file = attributes_factory.new(:type => attributes_factory::T_REGULAR)
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_from_buffer_should_correctly_parse_buffer_and_return_attribute_object
|
13
|
-
attributes = attributes_factory.from_buffer(full_buffer)
|
14
|
-
|
15
|
-
assert_equal 9, attributes.type
|
16
|
-
assert_equal 1234567890, attributes.size
|
17
|
-
assert_equal "jamis", attributes.owner
|
18
|
-
assert_equal "users", attributes.group
|
19
|
-
assert_equal 0755, attributes.permissions
|
20
|
-
assert_equal 1234567890, attributes.atime
|
21
|
-
assert_equal 12345, attributes.atime_nseconds
|
22
|
-
assert_equal 2345678901, attributes.createtime
|
23
|
-
assert_equal 23456, attributes.createtime_nseconds
|
24
|
-
assert_equal 3456789012, attributes.mtime
|
25
|
-
assert_equal 34567, attributes.mtime_nseconds
|
26
|
-
|
27
|
-
assert_equal 2, attributes.acl.length
|
28
|
-
|
29
|
-
assert_equal 1, attributes.acl.first.type
|
30
|
-
assert_equal 2, attributes.acl.first.flag
|
31
|
-
assert_equal 3, attributes.acl.first.mask
|
32
|
-
assert_equal "foo", attributes.acl.first.who
|
33
|
-
|
34
|
-
assert_equal 4, attributes.acl.last.type
|
35
|
-
assert_equal 5, attributes.acl.last.flag
|
36
|
-
assert_equal 6, attributes.acl.last.mask
|
37
|
-
assert_equal "bar", attributes.acl.last.who
|
38
|
-
|
39
|
-
assert_equal "second", attributes.extended["first"]
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_from_buffer_should_correctly_parse_buffer_with_attribute_subset_and_return_attribute_object
|
43
|
-
buffer = Net::SSH::Buffer.from(:long, 0x4, :byte, 1, :long, 0755)
|
44
|
-
|
45
|
-
attributes = attributes_factory.from_buffer(buffer)
|
46
|
-
|
47
|
-
assert_equal 1, attributes.type
|
48
|
-
assert_equal 0755, attributes.permissions
|
49
|
-
|
50
|
-
assert_nil attributes.size
|
51
|
-
assert_nil attributes.owner
|
52
|
-
assert_nil attributes.group
|
53
|
-
assert_nil attributes.atime
|
54
|
-
assert_nil attributes.atime_nseconds
|
55
|
-
assert_nil attributes.createtime
|
56
|
-
assert_nil attributes.createtime_nseconds
|
57
|
-
assert_nil attributes.mtime
|
58
|
-
assert_nil attributes.mtime_nseconds
|
59
|
-
assert_nil attributes.acl
|
60
|
-
assert_nil attributes.extended
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_attributes_to_s_should_build_binary_representation
|
64
|
-
attributes = attributes_factory.new(
|
65
|
-
:type => 9,
|
66
|
-
:size => 1234567890,
|
67
|
-
:owner => "jamis", :group => "users",
|
68
|
-
:permissions => 0755,
|
69
|
-
:atime => 1234567890, :atime_nseconds => 12345,
|
70
|
-
:createtime => 2345678901, :createtime_nseconds => 23456,
|
71
|
-
:mtime => 3456789012, :mtime_nseconds => 34567,
|
72
|
-
:acl => [attributes_factory::ACL.new(1,2,3,"foo"),
|
73
|
-
attributes_factory::ACL.new(4,5,6,"bar")],
|
74
|
-
:extended => { "first" => "second" })
|
75
|
-
|
76
|
-
assert_equal full_buffer.to_s, attributes.to_s
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_attributes_to_s_should_build_binary_representation_when_subset_is_present
|
80
|
-
attributes = attributes_factory.new(:permissions => 0755)
|
81
|
-
assert_equal Net::SSH::Buffer.from(:long, 0x4, :byte, 1, :long, 0755).to_s, attributes.to_s
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_attributes_to_s_with_uid_and_gid_should_translate_to_owner_and_group
|
85
|
-
attributes = attributes_factory.new(:uid => 100, :gid => 200)
|
86
|
-
attributes.expects(:require).with("etc").times(2)
|
87
|
-
Etc.expects(:getpwuid).with(100).returns(mock('user', :name => "jamis"))
|
88
|
-
Etc.expects(:getgrgid).with(200).returns(mock('group', :name => "sftp"))
|
89
|
-
assert_equal Net::SSH::Buffer.from(:long, 0x80, :byte, 1, :string, "jamis", :string, "sftp").to_s, attributes.to_s
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_uid_should_translate_from_owner
|
93
|
-
attributes = attributes_factory.new(:owner => "jamis")
|
94
|
-
attributes.expects(:require).with("etc")
|
95
|
-
Etc.expects(:getpwnam).with("jamis").returns(mock('user', :uid => 100))
|
96
|
-
assert_equal 100, attributes.uid
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_gid_should_translate_from_group
|
100
|
-
attributes = attributes_factory.new(:group => "sftp")
|
101
|
-
attributes.expects(:require).with("etc")
|
102
|
-
Etc.expects(:getgrnam).with("sftp").returns(mock('group', :gid => 200))
|
103
|
-
assert_equal 200, attributes.gid
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_attributes_without_subsecond_times_should_serialize_without_subsecond_times
|
107
|
-
attributes = attributes_factory.new(:atime => 100)
|
108
|
-
assert_equal Net::SSH::Buffer.from(:long, 0x8, :byte, 1, :int64, 100).to_s, attributes.to_s
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_directory_should_be_true_only_when_type_is_directory
|
112
|
-
assert @directory.directory?
|
113
|
-
assert !@symlink.directory?
|
114
|
-
assert !@file.directory?
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_symlink_should_be_true_only_when_type_is_symlink
|
118
|
-
assert !@directory.symlink?
|
119
|
-
assert @symlink.symlink?
|
120
|
-
assert !@file.symlink?
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_file_should_be_true_only_when_type_is_file
|
124
|
-
assert !@directory.file?
|
125
|
-
assert !@symlink.file?
|
126
|
-
assert @file.file?
|
127
|
-
end
|
128
|
-
|
129
|
-
private
|
130
|
-
|
131
|
-
def full_buffer
|
132
|
-
Net::SSH::Buffer.from(:long, 0x800001fd,
|
133
|
-
:byte, 9, :int64, 1234567890,
|
134
|
-
:string, "jamis", :string, "users",
|
135
|
-
:long, 0755,
|
136
|
-
:int64, 1234567890, :long, 12345,
|
137
|
-
:int64, 2345678901, :long, 23456,
|
138
|
-
:int64, 3456789012, :long, 34567,
|
139
|
-
:string, raw(:long, 2,
|
140
|
-
:long, 1, :long, 2, :long, 3, :string, "foo",
|
141
|
-
:long, 4, :long, 5, :long, 6, :string, "bar"),
|
142
|
-
:long, 1, :string, "first", :string, "second")
|
143
|
-
end
|
144
|
-
|
145
|
-
def attributes_factory
|
146
|
-
Net::SFTP::Protocol::V04::Attributes
|
147
|
-
end
|
148
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
require 'common'
|
2
|
-
require 'protocol/03/test_base'
|
3
|
-
|
4
|
-
class Protocol::V04::TestBase < Protocol::V03::TestBase
|
5
|
-
def test_version
|
6
|
-
assert_equal 4, @base.version
|
7
|
-
end
|
8
|
-
|
9
|
-
def test_parse_attrs_packet_should_use_correct_attributes_class
|
10
|
-
Net::SFTP::Protocol::V04::Attributes.expects(:from_buffer).with(:packet).returns(:result)
|
11
|
-
assert_equal({ :attrs => :result }, @base.parse_attrs_packet(:packet))
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_parse_name_packet_should_use_correct_name_class
|
15
|
-
packet = Net::SSH::Buffer.from(:long, 2,
|
16
|
-
:string, "name1", :long, 0x4, :byte, 1, :long, 0755,
|
17
|
-
:string, "name2", :long, 0x4, :byte, 1, :long, 0550)
|
18
|
-
names = @base.parse_name_packet(packet)[:names]
|
19
|
-
|
20
|
-
assert_not_nil names
|
21
|
-
assert_equal 2, names.length
|
22
|
-
assert_instance_of Net::SFTP::Protocol::V04::Name, names.first
|
23
|
-
|
24
|
-
assert_equal "name1", names.first.name
|
25
|
-
assert_equal 0755, names.first.attributes.permissions
|
26
|
-
|
27
|
-
assert_equal "name2", names.last.name
|
28
|
-
assert_equal 0550, names.last.attributes.permissions
|
29
|
-
end
|
30
|
-
|
31
|
-
undef test_fstat_should_ignore_flags_parameter
|
32
|
-
undef test_lstat_should_ignore_flags_parameter
|
33
|
-
undef test_stat_should_ignore_flags_parameter
|
34
|
-
|
35
|
-
def test_lstat_should_send_lstat_packet
|
36
|
-
@session.expects(:send_packet).with(FXP_LSTAT, :long, 0, :string, "/path/to/file", :long, 0x800001fd)
|
37
|
-
assert_equal 0, @base.lstat("/path/to/file")
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_lstat_with_custom_flags_should_send_lstat_packet_with_given_flags
|
41
|
-
@session.expects(:send_packet).with(FXP_LSTAT, :long, 0, :string, "/path/to/file", :long, 1234)
|
42
|
-
assert_equal 0, @base.lstat("/path/to/file", 1234)
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_fstat_should_send_fstat_packet
|
46
|
-
@session.expects(:send_packet).with(FXP_FSTAT, :long, 0, :string, "handle", :long, 0x800001fd)
|
47
|
-
assert_equal 0, @base.fstat("handle")
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_fstat_with_custom_flags_should_send_fstat_packet_with_given_flags
|
51
|
-
@session.expects(:send_packet).with(FXP_FSTAT, :long, 0, :string, "handle", :long, 1234)
|
52
|
-
assert_equal 0, @base.fstat("handle", 1234)
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_stat_should_send_stat_packet
|
56
|
-
@session.expects(:send_packet).with(FXP_STAT, :long, 0, :string, "/path/to/file", :long, 0x800001fd)
|
57
|
-
assert_equal 0, @base.stat("/path/to/file")
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_stat_with_custom_flags_should_send_stat_packet_with_given_flags
|
61
|
-
@session.expects(:send_packet).with(FXP_STAT, :long, 0, :string, "/path/to/file", :long, 1234)
|
62
|
-
assert_equal 0, @base.stat("/path/to/file", 1234)
|
63
|
-
end
|
64
|
-
|
65
|
-
private
|
66
|
-
|
67
|
-
def driver
|
68
|
-
Net::SFTP::Protocol::V04::Base
|
69
|
-
end
|
70
|
-
|
71
|
-
def attributes
|
72
|
-
Net::SFTP::Protocol::V04::Attributes
|
73
|
-
end
|
74
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'common'
|
2
|
-
|
3
|
-
class Protocol::V04::TestName < Net::SFTP::TestCase
|
4
|
-
def setup
|
5
|
-
@save_tz = ENV['TZ']
|
6
|
-
ENV['TZ'] = 'UTC'
|
7
|
-
|
8
|
-
@directory = Net::SFTP::Protocol::V04::Name.new("test", Net::SFTP::Protocol::V04::Attributes.new(:type => 2, :mtime => 1205293237, :owner => "jamis", :group => "users", :size => 1024, :permissions => 0755))
|
9
|
-
@link = Net::SFTP::Protocol::V04::Name.new("test", Net::SFTP::Protocol::V04::Attributes.new(:type => 3, :mtime => 1205293237, :owner => "jamis", :group => "users", :size => 32, :permissions => 0755))
|
10
|
-
@file = Net::SFTP::Protocol::V04::Name.new("test", Net::SFTP::Protocol::V04::Attributes.new(:type => 1, :mtime => 1205293237, :owner => "jamis", :group => "users", :size => 10240, :permissions => 0755))
|
11
|
-
end
|
12
|
-
|
13
|
-
def teardown
|
14
|
-
if @save_tz
|
15
|
-
ENV['TZ'] = @save_tz
|
16
|
-
else
|
17
|
-
ENV.delete('TZ')
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_directory?
|
22
|
-
assert @directory.directory?
|
23
|
-
assert !@link.directory?
|
24
|
-
assert !@file.directory?
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_symlink?
|
28
|
-
assert !@directory.symlink?
|
29
|
-
assert @link.symlink?
|
30
|
-
assert !@file.symlink?
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_file?
|
34
|
-
assert !@directory.file?
|
35
|
-
assert !@link.file?
|
36
|
-
assert @file.file?
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_longname_for_directory_should_format_as_directory
|
40
|
-
assert_equal "drwxr-xr-x jamis users 1024 Mar 12 03:40 test",
|
41
|
-
@directory.longname
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_longname_for_symlink_should_format_as_symlink
|
45
|
-
assert_equal "lrwxr-xr-x jamis users 32 Mar 12 03:40 test",
|
46
|
-
@link.longname
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_longname_for_file_should_format_as_file
|
50
|
-
assert_equal "-rwxr-xr-x jamis users 10240 Mar 12 03:40 test",
|
51
|
-
@file.longname
|
52
|
-
end
|
53
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
require 'common'
|
2
|
-
require 'protocol/04/test_base'
|
3
|
-
|
4
|
-
class Protocol::V05::TestBase < Protocol::V04::TestBase
|
5
|
-
include Net::SFTP::Constants::OpenFlags
|
6
|
-
include Net::SFTP::Constants
|
7
|
-
|
8
|
-
def test_version
|
9
|
-
assert_equal 5, @base.version
|
10
|
-
end
|
11
|
-
|
12
|
-
undef test_rename_should_ignore_flags_parameter
|
13
|
-
|
14
|
-
def test_rename_should_send_rename_packet
|
15
|
-
@session.expects(:send_packet).with(FXP_RENAME, :long, 0, :string, "/old/file", :string, "/new/file", :long, 0)
|
16
|
-
assert_equal 0, @base.rename("/old/file", "/new/file")
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_rename_with_flags_should_send_rename_packet_with_flags
|
20
|
-
@session.expects(:send_packet).with(FXP_RENAME, :long, 0, :string, "/old/file", :string, "/new/file", :long, RenameFlags::ATOMIC)
|
21
|
-
assert_equal 0, @base.rename("/old/file", "/new/file", RenameFlags::ATOMIC)
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_open_with_numeric_flag_should_accept_IO_constants
|
25
|
-
@session.expects(:send_packet).with(FXP_OPEN, :long, 0,
|
26
|
-
:string, "/path/to/file",
|
27
|
-
:long, ACE::Mask::READ_DATA | ACE::Mask::READ_ATTRIBUTES | ACE::Mask::WRITE_DATA | ACE::Mask::WRITE_ATTRIBUTES,
|
28
|
-
:long, FV5::CREATE_NEW,
|
29
|
-
:raw, attributes.new.to_s)
|
30
|
-
|
31
|
-
assert_equal 0, @base.open("/path/to/file", IO::RDWR | IO::CREAT | IO::EXCL, {})
|
32
|
-
end
|
33
|
-
|
34
|
-
{ "r" => [FV5::OPEN_EXISTING, ACE::Mask::READ_DATA | ACE::Mask::READ_ATTRIBUTES],
|
35
|
-
"rb" => [FV5::OPEN_EXISTING, ACE::Mask::READ_DATA | ACE::Mask::READ_ATTRIBUTES],
|
36
|
-
"r+" => [FV5::OPEN_EXISTING, ACE::Mask::READ_DATA | ACE::Mask::READ_ATTRIBUTES | ACE::Mask::WRITE_DATA | ACE::Mask::WRITE_ATTRIBUTES],
|
37
|
-
"w" => [FV5::CREATE_TRUNCATE, ACE::Mask::WRITE_DATA | ACE::Mask::WRITE_ATTRIBUTES],
|
38
|
-
"w+" => [FV5::CREATE_TRUNCATE, ACE::Mask::READ_DATA | ACE::Mask::READ_ATTRIBUTES | ACE::Mask::WRITE_DATA | ACE::Mask::WRITE_ATTRIBUTES],
|
39
|
-
"a" => [FV5::OPEN_OR_CREATE | FV5::APPEND_DATA, ACE::Mask::WRITE_DATA | ACE::Mask::WRITE_ATTRIBUTES | ACE::Mask::APPEND_DATA],
|
40
|
-
"a+" => [FV5::OPEN_OR_CREATE | FV5::APPEND_DATA, ACE::Mask::READ_DATA | ACE::Mask::READ_ATTRIBUTES | ACE::Mask::WRITE_DATA | ACE::Mask::WRITE_ATTRIBUTES | ACE::Mask::APPEND_DATA]
|
41
|
-
}.each do |mode_string, (flags, access)|
|
42
|
-
define_method("test_open_with_#{mode_string.sub(/\+/, '_plus')}_should_translate_correctly") do
|
43
|
-
@session.expects(:send_packet).with(FXP_OPEN, :long, 0,
|
44
|
-
:string, "/path/to/file", :long, access, :long, flags, :raw, attributes.new.to_s)
|
45
|
-
|
46
|
-
assert_equal 0, @base.open("/path/to/file", mode_string, {})
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_open_with_attributes_converts_hash_to_attribute_packet
|
51
|
-
@session.expects(:send_packet).with(FXP_OPEN, :long, 0,
|
52
|
-
:string, "/path/to/file", :long, ACE::Mask::READ_DATA | ACE::Mask::READ_ATTRIBUTES,
|
53
|
-
:long, FV5::OPEN_EXISTING, :raw, attributes.new(:permissions => 0755).to_s)
|
54
|
-
@base.open("/path/to/file", "r", :permissions => 0755)
|
55
|
-
end
|
56
|
-
|
57
|
-
private
|
58
|
-
|
59
|
-
def driver
|
60
|
-
Net::SFTP::Protocol::V05::Base
|
61
|
-
end
|
62
|
-
end
|