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