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
data/test/test_upload.rb DELETED
@@ -1,233 +0,0 @@
1
- require "common"
2
-
3
- class UploadTest < Net::SFTP::TestCase
4
- def setup
5
- prepare_progress!
6
- end
7
-
8
- def test_upload_file_should_send_file_contents
9
- expect_file_transfer("/path/to/local", "/path/to/remote", "here are the contents")
10
- assert_scripted_command { sftp.upload("/path/to/local", "/path/to/remote") }
11
- end
12
-
13
- def test_upload_file_without_remote_uses_filename_of_local_file
14
- expect_file_transfer("/path/to/local", "local", "here are the contents")
15
-
16
- assert_scripted_command do
17
- sftp.upload("/path/to/local") { |*args| record_progress(args) }
18
- end
19
-
20
- assert_progress_reported_open(:remote => "local")
21
- assert_progress_reported_put(0, "here are the contents", :remote => "local")
22
- assert_progress_reported_close(:remote => "local")
23
- assert_progress_reported_finish
24
- assert_no_more_reported_events
25
- end
26
-
27
- def test_upload_file_with_progress_should_report_progress
28
- expect_file_transfer("/path/to/local", "/path/to/remote", "here are the contents")
29
-
30
- assert_scripted_command do
31
- sftp.upload("/path/to/local", "/path/to/remote") { |*args| record_progress(args) }
32
- end
33
-
34
- assert_progress_reported_open(:remote => "/path/to/remote")
35
- assert_progress_reported_put(0, "here are the contents", :remote => "/path/to/remote")
36
- assert_progress_reported_close(:remote => "/path/to/remote")
37
- assert_progress_reported_finish
38
- assert_no_more_reported_events
39
- end
40
-
41
- def test_upload_file_with_progress_handler_should_report_progress
42
- expect_file_transfer("/path/to/local", "/path/to/remote", "here are the contents")
43
-
44
- assert_scripted_command do
45
- sftp.upload("/path/to/local", "/path/to/remote", :progress => ProgressHandler.new(@progress))
46
- end
47
-
48
- assert_progress_reported_open(:remote => "/path/to/remote")
49
- assert_progress_reported_put(0, "here are the contents", :remote => "/path/to/remote")
50
- assert_progress_reported_close(:remote => "/path/to/remote")
51
- assert_progress_reported_finish
52
- assert_no_more_reported_events
53
- end
54
-
55
- def test_upload_file_should_read_chunks_of_size(requested_size=nil)
56
- size = requested_size || Net::SFTP::Operations::Upload::DEFAULT_READ_SIZE
57
- expect_sftp_session :server_version => 3 do |channel|
58
- channel.sends_packet(FXP_OPEN, :long, 0, :string, "/path/to/remote", :long, 0x1A, :long, 0)
59
- channel.gets_packet(FXP_HANDLE, :long, 0, :string, "handle")
60
- channel.sends_packet(FXP_WRITE, :long, 1, :string, "handle", :int64, 0, :string, "a" * size)
61
- channel.sends_packet(FXP_WRITE, :long, 2, :string, "handle", :int64, size, :string, "b" * size)
62
- channel.sends_packet(FXP_WRITE, :long, 3, :string, "handle", :int64, size*2, :string, "c" * size)
63
- channel.gets_packet(FXP_STATUS, :long, 1, :long, 0)
64
- channel.sends_packet(FXP_WRITE, :long, 4, :string, "handle", :int64, size*3, :string, "d" * size)
65
- channel.gets_packet(FXP_STATUS, :long, 2, :long, 0)
66
- channel.sends_packet(FXP_CLOSE, :long, 5, :string, "handle")
67
- channel.gets_packet(FXP_STATUS, :long, 3, :long, 0)
68
- channel.gets_packet(FXP_STATUS, :long, 4, :long, 0)
69
- channel.gets_packet(FXP_STATUS, :long, 5, :long, 0)
70
- end
71
-
72
- expect_file("/path/to/local", "a" * size + "b" * size + "c" * size + "d" * size)
73
-
74
- assert_scripted_command do
75
- opts = {}
76
- opts[:read_size] = size if requested_size
77
- sftp.upload("/path/to/local", "/path/to/remote", opts)
78
- end
79
- end
80
-
81
- def test_upload_file_with_custom_read_size_should_read_chunks_of_that_size
82
- test_upload_file_should_read_chunks_of_size(100)
83
- end
84
-
85
- def test_upload_file_with_custom_requests_should_start_that_many_writes
86
- size = Net::SFTP::Operations::Upload::DEFAULT_READ_SIZE
87
- expect_sftp_session :server_version => 3 do |channel|
88
- channel.sends_packet(FXP_OPEN, :long, 0, :string, "/path/to/remote", :long, 0x1A, :long, 0)
89
- channel.gets_packet(FXP_HANDLE, :long, 0, :string, "handle")
90
- channel.sends_packet(FXP_WRITE, :long, 1, :string, "handle", :int64, 0, :string, "a" * size)
91
- channel.sends_packet(FXP_WRITE, :long, 2, :string, "handle", :int64, size, :string, "b" * size)
92
- channel.sends_packet(FXP_WRITE, :long, 3, :string, "handle", :int64, size*2, :string, "c" * size)
93
- channel.sends_packet(FXP_WRITE, :long, 4, :string, "handle", :int64, size*3, :string, "d" * size)
94
- channel.gets_packet(FXP_STATUS, :long, 1, :long, 0)
95
- channel.sends_packet(FXP_CLOSE, :long, 5, :string, "handle")
96
- channel.gets_packet(FXP_STATUS, :long, 2, :long, 0)
97
- channel.gets_packet(FXP_STATUS, :long, 3, :long, 0)
98
- channel.gets_packet(FXP_STATUS, :long, 4, :long, 0)
99
- channel.gets_packet(FXP_STATUS, :long, 5, :long, 0)
100
- end
101
-
102
- expect_file("/path/to/local", "a" * size + "b" * size + "c" * size + "d" * size)
103
-
104
- assert_scripted_command do
105
- sftp.upload("/path/to/local", "/path/to/remote", :requests => 3)
106
- end
107
- end
108
-
109
- def test_upload_directory_should_mirror_directory_structure_remotely
110
- prepare_directory
111
-
112
- assert_scripted_command do
113
- sftp.upload("/path/to/local", "/path/to/remote", :mkdir => true)
114
- end
115
- end
116
-
117
- def test_upload_directory_with_handler_should_report_progress
118
- prepare_directory
119
-
120
- assert_scripted_command do
121
- sftp.upload("/path/to/local", "/path/to/remote", :mkdir => true) { |*args| record_progress(args) }
122
- end
123
-
124
- assert_progress_reported_open(:remote => "/path/to/remote/file1")
125
- assert_progress_reported_open(:remote => "/path/to/remote/file2")
126
- assert_progress_reported_open(:remote => "/path/to/remote/file3")
127
- assert_progress_reported_mkdir("/path/to/remote/subdir")
128
- assert_progress_reported_open(:remote => "/path/to/remote/subdir/other1")
129
- assert_progress_reported_open(:remote => "/path/to/remote/subdir/other2")
130
- assert_progress_reported_put(0, "contents of file1", :remote => "/path/to/remote/file1")
131
- assert_progress_reported_put(0, "contents of file2", :remote => "/path/to/remote/file2")
132
- assert_progress_reported_put(0, "contents of file3", :remote => "/path/to/remote/file3")
133
- assert_progress_reported_close(:remote => "/path/to/remote/file1")
134
- assert_progress_reported_put(0, "contents of other1", :remote => "/path/to/remote/subdir/other1")
135
- assert_progress_reported_put(0, "contents of other2", :remote => "/path/to/remote/subdir/other2")
136
- assert_progress_reported_close(:remote => "/path/to/remote/file2")
137
- assert_progress_reported_close(:remote => "/path/to/remote/file3")
138
- assert_progress_reported_close(:remote => "/path/to/remote/subdir/other1")
139
- assert_progress_reported_close(:remote => "/path/to/remote/subdir/other2")
140
- assert_progress_reported_finish
141
- assert_no_more_reported_events
142
- end
143
-
144
- def test_upload_io_should_send_io_as_file
145
- expect_sftp_session :server_version => 3 do |channel|
146
- channel.sends_packet(FXP_OPEN, :long, 0, :string, "/path/to/remote", :long, 0x1A, :long, 0)
147
- channel.gets_packet(FXP_HANDLE, :long, 0, :string, "handle")
148
- channel.sends_packet(FXP_WRITE, :long, 1, :string, "handle", :int64, 0, :string, "this is some text")
149
- channel.sends_packet(FXP_CLOSE, :long, 2, :string, "handle")
150
- channel.gets_packet(FXP_STATUS, :long, 1, :long, 0)
151
- channel.gets_packet(FXP_STATUS, :long, 2, :long, 0)
152
- end
153
-
154
- assert_scripted_command do
155
- sftp.upload(StringIO.new("this is some text"), "/path/to/remote")
156
- end
157
- end
158
-
159
- private
160
-
161
- def prepare_directory
162
- expect_directory("/path/to/local", %w(. .. file1 file2 file3 subdir))
163
- expect_directory("/path/to/local/subdir", %w(. .. other1 other2))
164
- expect_file("/path/to/local/file1", "contents of file1")
165
- expect_file("/path/to/local/file2", "contents of file2")
166
- expect_file("/path/to/local/file3", "contents of file3")
167
- expect_file("/path/to/local/subdir/other1", "contents of other1")
168
- expect_file("/path/to/local/subdir/other2", "contents of other2")
169
-
170
- expect_sftp_session :server_version => 3 do |ch|
171
- ch.sends_packet(FXP_MKDIR, :long, 0, :string, "/path/to/remote", :long, 0)
172
- ch.gets_packet(FXP_STATUS, :long, 0, :long, 0)
173
- ch.sends_packet(FXP_OPEN, :long, 1, :string, "/path/to/remote/file1", :long, 0x1A, :long, 0)
174
- ch.sends_packet(FXP_OPEN, :long, 2, :string, "/path/to/remote/file2", :long, 0x1A, :long, 0)
175
- ch.sends_packet(FXP_OPEN, :long, 3, :string, "/path/to/remote/file3", :long, 0x1A, :long, 0)
176
- ch.sends_packet(FXP_MKDIR, :long, 4, :string, "/path/to/remote/subdir", :long, 0)
177
- ch.sends_packet(FXP_OPEN, :long, 5, :string, "/path/to/remote/subdir/other1", :long, 0x1A, :long, 0)
178
- ch.sends_packet(FXP_OPEN, :long, 6, :string, "/path/to/remote/subdir/other2", :long, 0x1A, :long, 0)
179
- ch.gets_packet(FXP_HANDLE, :long, 1, :string, "hfile1")
180
- ch.sends_packet(FXP_WRITE, :long, 7, :string, "hfile1", :int64, 0, :string, "contents of file1")
181
- ch.gets_packet(FXP_HANDLE, :long, 2, :string, "hfile2")
182
- ch.sends_packet(FXP_WRITE, :long, 8, :string, "hfile2", :int64, 0, :string, "contents of file2")
183
- ch.gets_packet(FXP_HANDLE, :long, 3, :string, "hfile3")
184
- ch.sends_packet(FXP_WRITE, :long, 9, :string, "hfile3", :int64, 0, :string, "contents of file3")
185
- ch.gets_packet(FXP_STATUS, :long, 4, :long, 0)
186
- ch.gets_packet(FXP_HANDLE, :long, 5, :string, "hother1")
187
- ch.sends_packet(FXP_CLOSE, :long, 10, :string, "hfile1")
188
- ch.sends_packet(FXP_WRITE, :long, 11, :string, "hother1", :int64, 0, :string, "contents of other1")
189
- ch.gets_packet(FXP_HANDLE, :long, 6, :string, "hother2")
190
- ch.sends_packet(FXP_WRITE, :long, 12, :string, "hother2", :int64, 0, :string, "contents of other2")
191
- ch.gets_packet(FXP_STATUS, :long, 7, :long, 0)
192
- ch.sends_packet(FXP_CLOSE, :long, 13, :string, "hfile2")
193
- ch.gets_packet(FXP_STATUS, :long, 8, :long, 0)
194
- ch.sends_packet(FXP_CLOSE, :long, 14, :string, "hfile3")
195
- ch.gets_packet(FXP_STATUS, :long, 9, :long, 0)
196
- ch.sends_packet(FXP_CLOSE, :long, 15, :string, "hother1")
197
- ch.gets_packet(FXP_STATUS, :long, 10, :long, 0)
198
- ch.sends_packet(FXP_CLOSE, :long, 16, :string, "hother2")
199
- ch.gets_packet(FXP_STATUS, :long, 11, :long, 0)
200
- ch.gets_packet(FXP_STATUS, :long, 12, :long, 0)
201
- ch.gets_packet(FXP_STATUS, :long, 13, :long, 0)
202
- ch.gets_packet(FXP_STATUS, :long, 14, :long, 0)
203
- ch.gets_packet(FXP_STATUS, :long, 15, :long, 0)
204
- ch.gets_packet(FXP_STATUS, :long, 16, :long, 0)
205
- end
206
- end
207
-
208
- def expect_file(path, data)
209
- File.stubs(:directory?).with(path).returns(false)
210
- File.stubs(:exists?).with(path).returns(true)
211
- file = StringIO.new(data)
212
- file.stubs(:stat).returns(stub("stat", :size => data.length))
213
- File.stubs(:open).with(path, "rb").returns(file)
214
- end
215
-
216
- def expect_directory(path, entries)
217
- Dir.stubs(:entries).with(path).returns(entries)
218
- File.stubs(:directory?).with(path).returns(true)
219
- end
220
-
221
- def expect_file_transfer(local, remote, data)
222
- expect_sftp_session :server_version => 3 do |channel|
223
- channel.sends_packet(FXP_OPEN, :long, 0, :string, remote, :long, 0x1A, :long, 0)
224
- channel.gets_packet(FXP_HANDLE, :long, 0, :string, "handle")
225
- channel.sends_packet(FXP_WRITE, :long, 1, :string, "handle", :int64, 0, :string, data)
226
- channel.sends_packet(FXP_CLOSE, :long, 2, :string, "handle")
227
- channel.gets_packet(FXP_STATUS, :long, 1, :long, 0)
228
- channel.gets_packet(FXP_STATUS, :long, 2, :long, 0)
229
- end
230
-
231
- expect_file(local, data)
232
- end
233
- end