net-sftp 2.1.2 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/.github/workflows/ci.yml +35 -0
  4. data/.gitignore +6 -0
  5. data/CHANGES.txt +4 -0
  6. data/Gemfile +15 -0
  7. data/README.rdoc +7 -4
  8. data/Rakefile +24 -30
  9. data/lib/net/sftp/operations/dir.rb +3 -3
  10. data/lib/net/sftp/operations/download.rb +8 -7
  11. data/lib/net/sftp/operations/file.rb +32 -9
  12. data/lib/net/sftp/operations/upload.rb +3 -3
  13. data/lib/net/sftp/session.rb +7 -5
  14. data/lib/net/sftp/version.rb +63 -13
  15. data/lib/net/sftp.rb +12 -4
  16. data/net-sftp-public_cert.pem +20 -0
  17. data/net-sftp.gemspec +35 -93
  18. data.tar.gz.sig +0 -0
  19. metadata +53 -82
  20. metadata.gz.sig +0 -0
  21. data/gem-public_cert.pem +0 -20
  22. data/test/common.rb +0 -184
  23. data/test/protocol/01/test_attributes.rb +0 -97
  24. data/test/protocol/01/test_base.rb +0 -210
  25. data/test/protocol/01/test_name.rb +0 -27
  26. data/test/protocol/02/test_base.rb +0 -26
  27. data/test/protocol/03/test_base.rb +0 -27
  28. data/test/protocol/04/test_attributes.rb +0 -148
  29. data/test/protocol/04/test_base.rb +0 -74
  30. data/test/protocol/04/test_name.rb +0 -53
  31. data/test/protocol/05/test_base.rb +0 -62
  32. data/test/protocol/06/test_attributes.rb +0 -124
  33. data/test/protocol/06/test_base.rb +0 -51
  34. data/test/protocol/test_base.rb +0 -42
  35. data/test/test_all.rb +0 -7
  36. data/test/test_dir.rb +0 -47
  37. data/test/test_download.rb +0 -287
  38. data/test/test_file.rb +0 -159
  39. data/test/test_file_factory.rb +0 -48
  40. data/test/test_packet.rb +0 -9
  41. data/test/test_protocol.rb +0 -17
  42. data/test/test_request.rb +0 -71
  43. data/test/test_response.rb +0 -53
  44. data/test/test_session.rb +0 -741
  45. 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