diff options
| author | Steve Kemp <steve@steve.org.uk> | 2013-02-25 16:48:29 +0000 | 
|---|---|---|
| committer | Steve Kemp <steve@steve.org.uk> | 2013-02-25 16:48:29 +0000 | 
| commit | bdd05645109ae2d9575d0603c62cd3ca44f78a97 (patch) | |
| tree | ba5e17f9e72d4e1c37dab0720517154a6c499dd6 | |
| parent | a30f26743b2eb4b23f08b78e8ae540fadc88fa6b (diff) | |
  Added open HTTP-proxy test.
| -rw-r--r-- | lib/custodian/protocoltest/openproxy.rb | 142 | ||||
| -rw-r--r-- | lib/custodian/protocoltests.rb | 1 | 
2 files changed, 143 insertions, 0 deletions
| diff --git a/lib/custodian/protocoltest/openproxy.rb b/lib/custodian/protocoltest/openproxy.rb new file mode 100644 index 0000000..cb4371d --- /dev/null +++ b/lib/custodian/protocoltest/openproxy.rb @@ -0,0 +1,142 @@ +require 'uri' + + +# +#  The open-proxy test. +# +#  This object is instantiated if the parser sees a line such as: +# +### +### foo.vm.bytemark.co.uk must not run openproxy otherwise 'insecurity'. +### +# +# +module Custodian + +  module ProtocolTest + + +    class OpenProxyTest < TestFactory + +      # +      # The line from which we were constructed. +      # +      attr_reader :line + + +      # +      # Constructor +      # +      def initialize( line ) + +        # +        #  Save the line +        # +        @line = line + +        # +        #  Save the target +        # +        @host = line.split( /\s+/)[0] + +        # +        # Is this test inverted? +        # +        if ( line =~ /must\s+not\s+run\s+/ ) +          @inverted = true +        else +          @inverted = false +        end +      end + + +      # +      # Allow this test to be serialized. +      # +      def to_s +        @line +      end + + + +      # +      # Run the test. +      # +      def run_test + +        #  Reset state, in case we've previously run. +        @error    = nil + +        begin +          require 'rubygems' +          require 'curb' +        rescue LoadError +          @error = "The required rubygem 'curb' was not found." +          return false +        end + +        begin +          timeout( 20 ) do +            begin +              c = Curl::Easy.new() +              c.follow_location = true +              c.max_redirects   = 10 +              c.ssl_verify_host = false +              c.proxy_url       = @host +              c.proxy_tunnel    = true +              c.url             = "http://google.com/" +              c.ssl_verify_peer = false +              c.timeout         = 20 +              c.perform +              @status = c.response_code +              @content = c.body_str +            rescue Curl::Err::SSLCACertificateError => x +              @error = "SSL-Validation error" +              return false +            rescue Curl::Err::TimeoutError +              @error = "Timed out fetching page." +              return false +            rescue Curl::Err::TooManyRedirectsError +              @error = "Too many redirections (more than 10)" +              return false +            rescue => x +               @error = "Exception: #{x}" +              return false +            end +          end +        rescue Timeout::Error => e +          @error = "Timed out during fetch." +          return false +        end + +        # +        # A this point we've either had an exception, or we've +        # got a result. +        # +        if ( @status.to_i == 200 ) +            return true +        else +            @error = "Proxy fetch of http://google.com/ via #{@host} failed" +            return false +        end +      end + + + +      # +      # If the test fails then report the error. +      # +      def error +        @error +      end + + + + +      register_test_type "openproxy" + + + +    end +  end +end diff --git a/lib/custodian/protocoltests.rb b/lib/custodian/protocoltests.rb index 7ba77e0..da599c9 100644 --- a/lib/custodian/protocoltests.rb +++ b/lib/custodian/protocoltests.rb @@ -20,6 +20,7 @@ require 'custodian/protocoltest/ping'  require 'custodian/protocoltest/pop3'  require 'custodian/protocoltest/redis'  require 'custodian/protocoltest/rsync' +require 'custodian/protocoltest/openproxy'  require 'custodian/protocoltest/ssh'  require 'custodian/protocoltest/smtp'  require 'custodian/protocoltest/smtprelay.rb' | 
