def test
response = nil
connection = Net::HTTP.new(self.host, self.port)
connection.use_ssl = self.port == 443 ? true : self.ssl
connection.verify_mode = OpenSSL::SSL::VERIFY_NONE if connection.use_ssl?
if connection.use_ssl? && self.ca_file
pem = File.read(self.ca_file)
connection.ca_file = self.ca_file
connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
end
connection.start do |http|
http.read_timeout = self.timeout
response = http.get(self.path, self.headers)
end
actual_response_code = response.code.to_i
if self.code_is && self.code_is.include?(actual_response_code)
pass(actual_response_code)
elsif self.code_is_not && !self.code_is_not.include?(actual_response_code)
pass(actual_response_code)
else
fail(actual_response_code)
end
rescue Errno::ECONNREFUSED
self.code_is ? fail('Refused') : pass('Refused')
rescue Errno::ECONNRESET
self.code_is ? fail('Reset') : pass('Reset')
rescue EOFError
self.code_is ? fail('EOF') : pass('EOF')
rescue Timeout::Error
self.code_is ? fail('Timeout') : pass('Timeout')
rescue Errno::ETIMEDOUT
self.code_is ? fail('Timedout') : pass('Timedout')
rescue Exception => failure
self.code_is ? fail(failure.class.name) : pass(failure.class.name)
end