From f91dfcd641bb66f3588eed7fb3757eded7a66a7c Mon Sep 17 00:00:00 2001
From: Steve Kemp <steve@steve.org.uk>
Date: Tue, 13 Nov 2012 11:28:56 +0000
Subject:   Moved to class-based API

---
 worker/tests/jabber.rb | 133 ++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 104 insertions(+), 29 deletions(-)

(limited to 'worker/tests')

diff --git a/worker/tests/jabber.rb b/worker/tests/jabber.rb
index 5caeb5b..c037259 100755
--- a/worker/tests/jabber.rb
+++ b/worker/tests/jabber.rb
@@ -1,51 +1,126 @@
+#!/usr/bin/ruby
+
+
+
+require 'socket'
 require 'timeout'
 
 
 #
-# Run a Jabber test.
-#
-#
-# Return value
-#   TRUE:  The host is up
-#
-#  FALSE:  The host is not up
+# Test that we can receive a response from a Jabber server that looks
+# reasonable.
 #
-def jabber_test ( params )
+class JABBERTest
+
+  #
+  # Data passed from the JSON hash.
+  #
+  attr_reader :test_data
+
+  #
+  # The error text we return on failure.
+  #
+  attr_reader :error
+
+
 
   #
-  #  Get the hostname & port to test against.
+  # Save the data away.
+  #
+  def initialize( data )
+    @test_data = data
+  end
+
+
+  #
+  # Run the test.
+  #
+  #  Return "true" on success
+  #
+  #  Return "false" on failure.
+  #
+  # If the test fails the details should be retrieved from "get_details".
   #
-  host = params['target_host']
-  port = 5222
+  def run_test
+    @error = ""
 
-  puts "Jabber testing host #{host}:#{port}"
+    #
+    #  Get the hostname & port to test against.
+    #
+    host = @test_data['target_host']
+    port = 5222
 
+    puts "Jabber 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 =~ /xml version/i )
-          puts "Jabber alive: #{banner}"
-          return true
+          if ( banner =~ /xml version/i )
+            puts "Jabber alive: #{banner}"
+            return true
+          else
+            @error = "Banner didn't seem reasonable: #{banner}"
+            return false;
+          end
+        rescue
+          @error = "Jabber exception on host #{host}:#{port} - #{$!}"
+          return false
         end
-      rescue
-        puts "Jabber exception on host #{host}:#{port} - #{$!}"
-        return false
       end
+    rescue Timeout::Error => e
+      @error = "TIMEOUT: #{e}"
+      return false
     end
-  rescue Timeout::Error => e
-    puts "TIMEOUT: #{e}"
+
+    @error = "Misc failure"
     return false
   end
 
-  return false
+
+
+  #
+  #  Return the error text for why this test failed.
+  #
+  def get_details
+    return @error
+  end
+
+end
+
+
+#
+# Sample test, for testing.
+#
+if __FILE__ == $0 then
+
+  #
+  #  Sample data.
+  #
+  test = {
+    "target_host" => "chat.bytemark.co.uk",
+    "test_type"   => "jabber",
+    "test_alert"  => "Chat is down?",
+  }
+
+
+  #
+  #  Run the test.
+  #
+  obj = JABBERTest.new( test )
+  if ( obj.run_test )
+    puts "TEST OK"
+  else
+    puts "TEST FAILED"
+    puts obj.get_details()
+  end
+
 end
-- 
cgit v1.2.3