diff options
| author | Steve Kemp <steve@steve.org.uk> | 2012-11-13 11:08:29 +0000 | 
|---|---|---|
| committer | Steve Kemp <steve@steve.org.uk> | 2012-11-13 11:08:29 +0000 | 
| commit | c1ea9ce5c169193e254844448c4c83acf308314e (patch) | |
| tree | f459b08c52b3185bd47f751969d0b1a0d289e603 /worker | |
| parent | a5e28e2ed57fa147bfd921f6a1df672d602f28aa (diff) | |
  Updated to test.
Diffstat (limited to 'worker')
| -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 | 
