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.
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