Sha256: db06c7730b458226c1c8499dba06208d5055af1633ec5a0b0b967e55f0d6df59

Contents?: true

Size: 1.31 KB

Versions: 57

Compression:

Stored size: 1.31 KB

Contents

# encoding: utf-8
# This file is distributed under New Relic's license terms.
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.

# This is a simple TCP server that binds to an ephemeral port, accepts
# incoming connections on that port, and then closes those connections
# immediately thereafter.
#
# Its purpose is to emulate a misbehaving HTTP server (or flaky network
# connection) by closing the TCP connection without sending an HTTP response.

require 'socket'

module NewRelic
  class EvilServer
    attr_reader :port, :requests

    def initialize
      @requests = []
    end

    def should_run?
      @state == :running
    end

    def stop
      @state = :stopped

      # just a lazy way of just forcing the server to wakeup from accept
      TCPSocket.open("localhost", @port).close rescue nil

      @thread.join
      @thread = nil
    end

    def start
      return if @thread && @thread.alive?
      @requests = []
      @server = TCPServer.new(0)
      @port = @server.addr[1]
      @state = :running
      @thread = Thread.new { run }
      @thread.abort_on_exception = true
    end

    def run
      loop do
        client = @server.accept
        @requests << client.readpartial(1024) if should_run?
        client.close
        break unless should_run?
      end
    end
  end
end

Version data entries

57 entries across 57 versions & 2 rubygems

Version Path
newrelic_rpm-4.1.0.333 test/new_relic/evil_server.rb
newrelic_rpm-4.0.0.332 test/new_relic/evil_server.rb
newrelic_rpm-3.18.1.330 test/new_relic/evil_server.rb
newrelic_rpm-3.18.0.329 test/new_relic/evil_server.rb
newrelic_rpm-3.17.2.327 test/new_relic/evil_server.rb
newrelic_rpm-3.17.1.326 test/new_relic/evil_server.rb
newrelic_rpm-3.17.0.325 test/new_relic/evil_server.rb
newrelic_rpm-3.16.3.323 test/new_relic/evil_server.rb
newrelic_rpm-3.16.2.321 test/new_relic/evil_server.rb
newrelic_rpm-3.16.1.320 test/new_relic/evil_server.rb
newrelic_rpm-3.16.0.318 test/new_relic/evil_server.rb
ish_lib_manager-0.0.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.15.2.317/test/new_relic/evil_server.rb
newrelic_rpm-3.15.2.317 test/new_relic/evil_server.rb
newrelic_rpm-3.15.1.316 test/new_relic/evil_server.rb
newrelic_rpm-3.15.0.314 test/new_relic/evil_server.rb
newrelic_rpm-3.14.3.313 test/new_relic/evil_server.rb
newrelic_rpm-3.14.2.312 test/new_relic/evil_server.rb
newrelic_rpm-3.14.1.311 test/new_relic/evil_server.rb
newrelic_rpm-3.14.0.305 test/new_relic/evil_server.rb
newrelic_rpm-3.13.2.302 test/new_relic/evil_server.rb