#!/usr/bin/ruby1.8 require 'custodian/webfetch' class HTTPTest # # Data passed from the JSON hash. # attr_reader :test_data # # Save the data away. # def initialize( data ) @test_data = data @error = nil # # Ensure we have an URL # if ( @test_data["target_host"].nil? ) @error = "Missing URL for the test." raise ArgumentError, @error end # # Ensure we have a port # if ( @test_data["test_port"].nil? ) @error = "Missing port for the test." raise ArgumentError, @error end end # # Run the test. # # Return "true" on success # # Return "false" on failure. # # If the test fails the details should be retrieved from "error()". # def run_test # # Reset state from previous test. # @error = nil # # Run the fetch. # obj = WebFetch.new( @test_data["target_host"], @test_data["timeout"].to_i ) # # If we succeeded in the fetch # if ( obj.fetch() ) # # Do we need to test for a HTTP status code? # if ( @test_data["http_status"] ) puts "Testing for HTTP status code: #{@test_data['http_status']}" if ( @test_data['verbose'] ) if ( obj.status().to_i != @test_data['http_status'].to_i) @error = "#{@error}

The HTTP status-code was '#{obj.status}' not '#{@test_data['http_status']}'.

" end end # # Do we need to search for text in the body of the reply? # if ( @test_data['http_text'] ) puts "Testing for text in the response: '#{@test_data['http_text']}'" if ( @test_data['verbose'] ) if (! obj.content.match(/#{@test_data['http_text']}/i) ) @error = "#{@error}

The response did not contain our expected text '#{test_data['http_text']}'

" end end return true if ( @error.nil? ) return false end @error = obj.error() return false end # # Return the error text for why this test failed. # def error return @error end end # # Sample test, for testing. # if __FILE__ == $0 then # # Sample data. # test = { "target_host" => "http://itsdanbull.co.uk/", "test_type" => "http", "verbose" => 1, "timeout" => 3, "test_port" => 80, "test_alert" => "Collector is unavailable", "http_status" => "200", "http_text" => "Dan Bull" } # # Run the test. # http = HTTPTest.new( test ) if ( http.run_test ) puts "TEST OK" else puts "TEST FAILED" puts http.error() end end