diff options
Diffstat (limited to 'worker/tests/ftp.rb')
-rwxr-xr-x | worker/tests/ftp.rb | 131 |
1 files changed, 102 insertions, 29 deletions
diff --git a/worker/tests/ftp.rb b/worker/tests/ftp.rb index cd0e754..c856c00 100755 --- a/worker/tests/ftp.rb +++ b/worker/tests/ftp.rb @@ -1,51 +1,124 @@ -require 'timeout' +#!/usr/bin/ruby +require 'timeout' +require 'socket' + # -# Run an FTP test. -# -# -# Return value -# TRUE: The host is up +# This class is responsible for performing tests against a remote FTP server # -# FALSE: The host is not up # -def ftp_test ( params ) +class FTPTest + + # + # Data passed from the JSON hash. + # + attr_reader :test_data + + # + # The error text we return on failure. + # + attr_reader :error + + + + # + # Save the data away. + # + def initialize( data ) + @test_data = data + end + + + # + # Run the test. + # + # Return "true" on success + # + # Return "false" on failure. # - # Get the hostname & port to test against. + # If the test fails the details should be retrieved from "get_details". # - host = params['target_host'] - port = params['test_port'] + def run_test - puts "FTP testing host #{host}:#{port}" + # + # Get the hostname & port to test against. + # + host = @test_data[:target_host] + port = @test_data[:test_port] + puts "FTP testing host #{host}:#{port}" - begin - timeout(3) do + begin + timeout(3) do - begin - socket = TCPSocket.new( host, port ) - socket.puts( "QUIT") + begin + socket = TCPSocket.new( host, port ) + socket.puts( "QUIT") - banner = socket.gets(nil) - banner = banner[0,20] + banner = socket.gets(nil) + banner = banner[0,20] - socket.close() + socket.close() - if ( banner =~ /^220/ ) - puts "FTP alive: #{banner}" - return true + if ( banner =~ /^220/ ) + return true + else + @error = "Banner didn't report OK: #{banner}" + end + rescue + @error = "FTP exception on host #{host}:#{port} - #{$!}" + return false end - rescue - puts "FTP exception on host #{host}:#{port} - #{$!}" - return false end + rescue Timeout::Error => e + @error = "Timed-out connecting #{e}" + return false end - rescue Timeout::Error => e - puts "TIMEOUT: #{e}" + @error = "Misc. failure." return false end - return false + + # + # Return the error. + # + def error + return @error + end + +end + + + + + +# +# Sample test, for testing. +# +if __FILE__ == $0 then + + # + # Sample data. + # + test = { + :target_host => "mirror.bytemark.co.uk", + :test_type => "ftp", + :test_port => 21, + :test_alert => "The FTP server no worky", + } + + + # + # Run the test. + # + tst = FTPTest.new( test ) + if ( tst.run_test ) + puts "TEST OK" + else + puts "TEST FAILED" + puts tst.get_details() + end + end |