summaryrefslogtreecommitdiff
path: root/lib/custodian/protocoltest/tcp.rb
diff options
context:
space:
mode:
authorSteve Kemp <steve@steve.org.uk>2012-11-22 06:49:21 +0000
committerSteve Kemp <steve@steve.org.uk>2012-11-22 06:49:21 +0000
commitc796e1fd3c4b6c659255b3a814662d4377836ed0 (patch)
tree8b4d9feb4403c842af29451de35aa5f94836d70b /lib/custodian/protocoltest/tcp.rb
parent3ac252151c374e067425dd7efe355bd76ba122d1 (diff)
Moved tests into a namespace.
Diffstat (limited to 'lib/custodian/protocoltest/tcp.rb')
-rw-r--r--lib/custodian/protocoltest/tcp.rb249
1 files changed, 127 insertions, 122 deletions
diff --git a/lib/custodian/protocoltest/tcp.rb b/lib/custodian/protocoltest/tcp.rb
index 4f80b42..c09eb6b 100644
--- a/lib/custodian/protocoltest/tcp.rb
+++ b/lib/custodian/protocoltest/tcp.rb
@@ -15,180 +15,185 @@ require 'timeout'
#
# The specification of the port is mandatory, the banner is optional.
#
-class TCPTest < TestFactory
+module Custodian
+ module ProtocolTest
+ class TCPTest < TestFactory
- #
- # The input line
- #
- attr_reader :line
+ #
+ # The input line
+ #
+ attr_reader :line
- #
- # The host to test against.
- #
- attr_reader :host
+ #
+ # The host to test against.
+ #
+ attr_reader :host
- #
- # The port to connect to.
- #
- attr_reader :port
+ #
+ # The port to connect to.
+ #
+ attr_reader :port
- #
- # The banner to look for, may be nil.
- #
- attr_reader :banner
+ #
+ # The banner to look for, may be nil.
+ #
+ attr_reader :banner
- #
- # Constructor
- #
- # Ensure we received a port to run the TCP-test against.
- #
- def initialize( line )
- #
- # Save the line
- #
- @line = line
+ #
+ # Constructor
+ #
+ # Ensure we received a port to run the TCP-test against.
+ #
+ def initialize( line )
- #
- # Save the host
- #
- @host = line.split( /\s+/)[0]
+ #
+ # Save the line
+ #
+ @line = line
- #
- # Save the port
- #
- if ( line =~ /on\s+([0-9]+)/ )
- @port = $1.dup
- else
- @port = nil
- end
+ #
+ # Save the host
+ #
+ @host = line.split( /\s+/)[0]
- #
- # Save the optional banner.
- #
- if ( line =~ /with\s+banner\s+'([^']+)'/ )
- @banner = $1.dup
- else
- @banner = nil
- end
+ #
+ # Save the port
+ #
+ if ( line =~ /on\s+([0-9]+)/ )
+ @port = $1.dup
+ else
+ @port = nil
+ end
- @error = nil
+ #
+ # Save the optional banner.
+ #
+ if ( line =~ /with\s+banner\s+'([^']+)'/ )
+ @banner = $1.dup
+ else
+ @banner = nil
+ end
- if ( @port.nil? )
- raise ArgumentError, "Missing port to test against"
- end
- end
+ @error = nil
+ if ( @port.nil? )
+ raise ArgumentError, "Missing port to test against"
+ end
+ end
- #
- # Helper for development.
- #
- def to_s
- "tcp-test of #{@host}:#{@port} looking for banner '#{@banner}'."
- end
+ #
+ # Helper for development.
+ #
+ def to_s
+ "tcp-test of #{@host}:#{@port} looking for banner '#{@banner}'."
+ end
- #
- # Convert this class to JSON such that it may be serialized.
- #
- def to_json
- hash = { :line => @line }
- hash.to_json
- end
+ #
+ # Convert this class to JSON such that it may be serialized.
+ #
+ def to_json
+ hash = { :line => @line }
+ hash.to_json
+ end
- #
- # Run the TCP-protocol test.
- #
- def run_test
- # reset the error, in case we were previously executed.
- @error = nil
+ #
+ # Run the TCP-protocol test.
+ #
+ def run_test
- return( run_test_internal( @host, @port, @banner ) )
- end
+ # reset the error, in case we were previously executed.
+ @error = nil
+
+ return( run_test_internal( @host, @port, @banner ) )
+ end
- #
- # Run the connection test - optionally matching against the banner.
- #
- # If the banner is nil then we're merely testing we can connect and
- # send the string "quit".
- #
- #
- def run_test_internal( host, port, banner = nil, do_read = true )
- begin
- timeout(30) do
+ #
+ # Run the connection test - optionally matching against the banner.
+ #
+ # If the banner is nil then we're merely testing we can connect and
+ # send the string "quit".
+ #
+ #
+ def run_test_internal( host, port, banner = nil, do_read = true )
begin
- socket = TCPSocket.new( host, port )
- socket.puts( "QUIT")
-
- # read a banner from the remote server
- read = nil
- read = socket.gets(nil) if ( do_read )
-
- # trim to a sane length & strip newlines.
- read = read[0,255] unless ( read.nil? )
- read.gsub!(/[\n\r]/, "") unless ( read.nil? )
-
- socket.close()
-
- if ( banner.nil? )
- @error = nil
- return true
- else
- # test for banner
- if ( ( !read.nil? ) && ( read =~ /#{banner}/i ) )
- return true
+ timeout(30) do
+ begin
+ socket = TCPSocket.new( host, port )
+ socket.puts( "QUIT")
+
+ # read a banner from the remote server
+ read = nil
+ read = socket.gets(nil) if ( do_read )
+
+ # trim to a sane length & strip newlines.
+ read = read[0,255] unless ( read.nil? )
+ read.gsub!(/[\n\r]/, "") unless ( read.nil? )
+
+ socket.close()
+
+ if ( banner.nil? )
+ @error = nil
+ return true
+ else
+ # test for banner
+ if ( ( !read.nil? ) && ( read =~ /#{banner}/i ) )
+ return true
+ end
+
+ @error = "We expected a banner matching '#{banner}' but we got '#{read}'"
+ return false
+ end
+ rescue
+ @error = "Exception connecting to host #{host}:#{port} - #{$!}"
+ return false
end
-
- @error = "We expected a banner matching '#{banner}' but we got '#{read}'"
- return false
end
- rescue
- @error = "Exception connecting to host #{host}:#{port} - #{$!}"
+ rescue Timeout::Error => e
+ @error = "TIMEOUT: #{e}"
return false
end
+ @error = "Misc failure"
+ return false
end
- rescue Timeout::Error => e
- @error = "TIMEOUT: #{e}"
- return false
- end
- @error = "Misc failure"
- return false
- end
- #
- # If the test fails then report the error.
- #
- def error
- @error
- end
+ #
+ # If the test fails then report the error.
+ #
+ def error
+ @error
+ end
- register_test_type "tcp"
+ register_test_type "tcp"
+ end
+ end
end