summaryrefslogtreecommitdiff
path: root/worker/tests/ftp.rb
diff options
context:
space:
mode:
Diffstat (limited to 'worker/tests/ftp.rb')
-rwxr-xr-xworker/tests/ftp.rb131
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