module Elastic::Beanstalk::EbSmokeTester
Public Instance Methods
test_url(url, timeout, sleep_wait, expected_text)
click to toggle source
# File lib/elastic/beanstalk/smoke_tester.rb, line 13 def test_url(url, timeout, sleep_wait, expected_text) puts '-------------------------------------------------------------------------------' # puts "Smoke Testing: \n\turl: #{url}\n\ttimeout: #{timeout}\n\tsleep_wait: #{sleep_wait}\n\texpected_text: #{expected_text}\n" puts "Smoke Test: \n\turl: #{url}\n\ttimeout: #{timeout}\n\texpected_text: #{expected_text}" response = nil begin Timeout.timeout(timeout) do i = 0 print "\nRunning..." Spinner.show { begin sleep sleep_wait.to_i unless (i == 0) i += 1 begin response = Net::HTTP.get_response(URI(url)) #rescue SocketError => e # response = ResponseStub.new({code: e.message, body: ''}) rescue => e response = ResponseStub.new({code: e.message, body: ''}) end puts "\t\t[#{response.code}]" #puts "\t#{response.body}" # # Let's try to get out quickly when the deploy has gone wrong. # break if received_fatal_error?(response) end until (!response.nil? && response.code.to_i == 200 && response.body.include?(expected_text)) } end ensure puts "\n\nFinal response code: [#{response.code}] expectation met: #{response.body.include?(expected_text)}" puts '-------------------------------------------------------------------------------' end end
Private Instance Methods
get_content(doc, xpath)
click to toggle source
# File lib/elastic/beanstalk/smoke_tester.rb, line 76 def get_content(doc, xpath) value = '' begin element = doc.xpath(xpath) element = element.first unless element.nil? value = element.content unless element.nil? rescue end value end
received_fatal_error?(response)
click to toggle source
# File lib/elastic/beanstalk/smoke_tester.rb, line 54 def received_fatal_error?(response) fatal_error = false #['Bundler::PathError'].each do |code| # fail right away on known terminal cases. #if (!response.nil? && response.code.to_i == 500 && response.body.include?(code)) if (!response.nil? && response.code.to_i == 500 && response.body.include?('rror')) doc = Nokogiri::HTML(response.body) # By default, let's grab the info from the Passenger error page... #$stderr.puts "\t\t[#{response.code}] #{code}" $stderr.puts "\t\t[#{response.code}]" $stderr.puts "\t\t\t#{get_content(doc, '//h1')}" $stderr.puts "\t\t\t#{get_content(doc, '//dl/dd')}" fatal_error = true # break end #end fatal_error end