Feature #15964 ยป rfc2389.patch
| lib/net/ftp.rb | ||
|---|---|---|
|
voidcmd(cmd)
|
||
|
end
|
||
|
#
|
||
|
# Issues a FEAT command
|
||
|
#
|
||
|
# Returns an array of supported optional features
|
||
|
#
|
||
|
def features
|
||
|
resp = sendcmd("FEAT")
|
||
|
if !resp.start_with?("211")
|
||
|
raise FTPReplyError, resp
|
||
|
end
|
||
|
feats = []
|
||
|
resp.split("\n").each do |line|
|
||
|
next if !line.start_with?(' ') # skip status lines
|
||
|
feats << line.strip
|
||
|
end
|
||
|
return feats
|
||
|
end
|
||
|
#
|
||
|
# Issues an OPTS command
|
||
|
# - name Should be the name of the option to set
|
||
|
# - params is any optional parameters to supply with the option
|
||
|
#
|
||
|
# example: option('UTF8', 'ON') => 'OPTS UTF8 ON'
|
||
|
#
|
||
|
def option(name, params = nil)
|
||
|
cmd = "OPTS #{name}"
|
||
|
cmd += " #{params}" if params
|
||
|
voidcmd(cmd)
|
||
|
end
|
||
|
#
|
||
|
# Closes the connection. Further operations are impossible until you open
|
||
|
# a new connection with #connect.
|
||
| test/net/ftp/test_ftp.rb | ||
|---|---|---|
|
end
|
||
|
end
|
||
|
def test_features
|
||
|
commands = []
|
||
|
server = create_ftp_server { |sock|
|
||
|
sock.print("220 (test_ftp).\r\n")
|
||
|
commands.push(sock.gets)
|
||
|
sock.print("211-Features\r\n")
|
||
|
sock.print(" LANG EN*\r\n")
|
||
|
sock.print(" UTF8\r\n")
|
||
|
sock.print("211 End\r\n")
|
||
|
}
|
||
|
begin
|
||
|
begin
|
||
|
ftp = Net::FTP.new
|
||
|
ftp.connect(SERVER_ADDR, server.port)
|
||
|
assert_equal(['LANG EN*', 'UTF8'], ftp.features)
|
||
|
assert_equal("FEAT\r\n", commands.shift)
|
||
|
assert_equal(nil, commands.shift)
|
||
|
ensure
|
||
|
ftp.close if ftp
|
||
|
end
|
||
|
ensure
|
||
|
server.close
|
||
|
end
|
||
|
end
|
||
|
def test_features_not_implemented
|
||
|
commands = []
|
||
|
server = create_ftp_server { |sock|
|
||
|
sock.print("220 (test_ftp).\r\n")
|
||
|
commands.push(sock.gets)
|
||
|
sock.print("502 Not Implemented\r\n")
|
||
|
}
|
||
|
begin
|
||
|
begin
|
||
|
ftp = Net::FTP.new
|
||
|
ftp.connect(SERVER_ADDR, server.port)
|
||
|
assert_raise(Net::FTPPermError) do
|
||
|
ftp.features
|
||
|
end
|
||
|
assert_equal("FEAT\r\n", commands.shift)
|
||
|
assert_equal(nil, commands.shift)
|
||
|
ensure
|
||
|
ftp.close if ftp
|
||
|
end
|
||
|
ensure
|
||
|
server.close
|
||
|
end
|
||
|
end
|
||
|
def test_option
|
||
|
commands = []
|
||
|
server = create_ftp_server { |sock|
|
||
|
sock.print("220 (test_ftp)\r\n")
|
||
|
commands.push(sock.gets)
|
||
|
sock.print("200 OPTS UTF8 command successful\r\n")
|
||
|
}
|
||
|
begin
|
||
|
begin
|
||
|
ftp = Net::FTP.new
|
||
|
ftp.connect(SERVER_ADDR, server.port)
|
||
|
ftp.option("UTF8", "ON")
|
||
|
assert_equal("OPTS UTF8 ON\r\n", commands.shift)
|
||
|
assert_equal(nil, commands.shift)
|
||
|
ensure
|
||
|
ftp.close if ftp
|
||
|
end
|
||
|
ensure
|
||
|
server.close
|
||
|
end
|
||
|
end
|
||
|
def test_option_not_implemented
|
||
|
commands = []
|
||
|
server = create_ftp_server { |sock|
|
||
|
sock.print("220 (test_ftp)\r\n")
|
||
|
commands.push(sock.gets)
|
||
|
sock.print("502 Not implemented\r\n")
|
||
|
}
|
||
|
begin
|
||
|
begin
|
||
|
ftp = Net::FTP.new
|
||
|
ftp.connect(SERVER_ADDR, server.port)
|
||
|
assert_raise(Net::FTPPermError) do
|
||
|
ftp.option("UTF8", "ON")
|
||
|
end
|
||
|
assert_equal("OPTS UTF8 ON\r\n", commands.shift)
|
||
|
assert_equal(nil, commands.shift)
|
||
|
ensure
|
||
|
ftp.close if ftp
|
||
|
end
|
||
|
ensure
|
||
|
server.close
|
||
|
end
|
||
|
end
|
||
|
def test_mlst
|
||
|
commands = []
|
||
|
server = create_ftp_server { |sock|
|
||