Class: TestConnection1P

### Home Classes Methods

### In Files

- test/test_connection1p.rb

### Parent

Test::Unit::TestCase

### Methods

- #setup
- #teardown
- #test_conn_11h_0060
- #test_conn_1p_0000
- #test_conn_1p_0010
- #test_conn_1p_0015
- #test_conn_1p_0020
- #test_conn_1p_0030
- #test_conn_1p_0040
- #test_conn_1p_0050
- #test_conn_1p_0070
- #test_conn_1p_0080
- #test_conn_1p_0090
- #test_conn_1p_0100
- #test_conn_1p_0110
- #test_conn_1p_0120
- #test_conn_1p_0124
- #test_conn_1p_0127
- #test_conn_1p_0130
- #test_conn_1p_0135
- #test_conn_1p_0140
- #test_conn_1p_0200
- #test_conn_1p_0210

### Included Modules

- TestBase

### Files

- CHANGELOG.rdoc
- LICENSE

### Class/Module Index

Quicksearch

- Stomp
- Stomp::Client
- Stomp::Connection
- Stomp::Error
- Stomp::Error::ConnectReadTimeout
- Stomp::Error::DuplicateSubscription
- Stomp::Error::InvalidFormat
- Stomp::Error::InvalidHeartBeatHeaderError
- Stomp::Error::InvalidMessageLength
- Stomp::Error::InvalidServerCommand
- Stomp::Error::LoggerConnectionError
- Stomp::Error::MalformedFailoverOptionsError
- Stomp::Error::MaxReconnectAttempts
- Stomp::Error::MessageIDRequiredError
- Stomp::Error::NilMessageError
- Stomp::Error::NoCurrentConnection
- Stomp::Error::PacketParsingTimeout
- Stomp::Error::ProtocolError11p
- Stomp::Error::ProtocolErrorConnect
- Stomp::Error::SSLClientParamsError
- Stomp::Error::SSLNoCertFileError
- Stomp::Error::SSLNoKeyFileError
- Stomp::Error::SSLNoTruststoreFileError
- Stomp::Error::SSLUnreadableCertFileError
- Stomp::Error::SSLUnreadableKeyFileError
- Stomp::Error::SSLUnreadableTruststoreFileError
- Stomp::Error::SocketOpenTimeout
- Stomp::Error::StompServerError
- Stomp::Error::SubscriptionRequiredError
- Stomp::Error::UTF8ValidationError
- Stomp::Error::UnsupportedProtocolError
- Stomp::HeaderCodec
- Stomp::Message
- Stomp::SSLParams
- Client11Example1
- Client11PutGet1
- Connection11Example1
- Connection11Example2
- ExampleConsumer
- ExamplePublisher
- ExampleRubyCiphers
- ExampleSSL1
- ExampleSSL1C
- ExampleSSL2
- ExampleSSL2C
- ExampleSSL3
- ExampleSSL3C
- ExampleSSL4
- ExampleSSL4C
- ExampleTopicConsumer
- ExampleTopicPublisher
- Hash
- HeartBeatExample1
- LoggerExample
- Object
- Publish11Example1
- Receive11Example1
- Receive11Example2
- RepeatedHeadersExample
- SSLLoggerExample
- Slogger
- Stomp11Common
- TestBase
- TestClient
- TestConnection
- TestConnection1P
- TestMessage
- TestSSL
- TestURLLogins
- Tlogger

No matching classes.

# TestConnection1P

Main class for testing Stomp::Connection instances, protocol levels 1.1+.

### Public Instance Methods

setup() click to toggle source

    # File test/test_connection1p.rb, line 17
    def setup
      @conn = get_connection()
    end

teardown() click to toggle source

    # File test/test_connection1p.rb, line 21
    def teardown
      @conn.disconnect if @conn.open? # allow tests to disconnect
    end

test_conn_11h_0060() click to toggle source

Test malformed heartbeat header.

    # File test/test_connection1p.rb, line 126
    def test_conn_11h_0060
      @conn.disconnect
      #
      cha = get_conn_headers()
      cha["heart-beat"] = "a,10" # Bad header Heartbeats
      conn = nil
      assert_raise Stomp::Error::InvalidHeartBeatHeaderError do
        conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
      end
    end

test_conn_1p_0000() click to toggle source

Test basic connection open.

    # File test/test_connection1p.rb, line 26
    def test_conn_1p_0000
      assert @conn.open?
    end

test_conn_1p_0010() click to toggle source

Test missing connect headers - part 1.

    # File test/test_connection1p.rb, line 31
    def test_conn_1p_0010
      @conn.disconnect
      #
      cha = {:host => "localhost"}
      assert_raise Stomp::Error::ProtocolErrorConnect do
        conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
      end
      #
      chb = {"accept-version" => "1.0"}
      assert_raise Stomp::Error::ProtocolErrorConnect do
        conn = Stomp::Connection.open(user, passcode, host, port, false, 5, chb)
      end
    end

test_conn_1p_0015() click to toggle source

Test missing connect headers - part 2.

    # File test/test_connection1p.rb, line 46
    def test_conn_1p_0015
      @conn.disconnect
      #
      cha = {:host => "localhost"}
      hash = { :hosts => [
        {:login => user, :passcode => passcode, :host => host, :port => port, :ssl => nil},
        ],
        :reliable => true, # Note, issue #57 discussion
        :connect_headers => cha,
        :stompconn => get_stomp_conn(),
        :usecrlf => get_crlf(),
        :initial_reconnect_delay => 0.1,
        :max_reconnect_delay => 30,
        :use_exponential_back_off => true,
        :back_off_multiplier => 2,
        :max_reconnect_attempts => 10,
      }
      assert_raise Stomp::Error::ProtocolErrorConnect do
        conn = Stomp::Connection.open(hash)
      end
      hash[:connect_headers] = {"accept-version" => "1.1"}
      assert_raise Stomp::Error::ProtocolErrorConnect do
        conn = Stomp::Connection.open(hash)
      end
    end

test_conn_1p_0020() click to toggle source

Test requesting only a 1.0 connection.

    # File test/test_connection1p.rb, line 73
    def test_conn_1p_0020
      @conn.disconnect
      #
      cha = {:host => "localhost", "accept-version" => "1.0"}
      cha[:host] = "/" if ENV['STOMP_RABBIT']
      conn = nil
      assert_nothing_raised do
        conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
        conn.disconnect
      end
      assert_equal conn.protocol, Stomp::SPL_10
    end

test_conn_1p_0030() click to toggle source

Test requesting only a 1.1+ connection.

    # File test/test_connection1p.rb, line 87
    def test_conn_1p_0030
      @conn.disconnect
      #
      cha = get_conn_headers()
      conn = nil
      assert_nothing_raised do
        conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
        conn.disconnect
      end
      assert conn.protocol >= Stomp::SPL_11
    end

test_conn_1p_0040() click to toggle source

Test basic request for no heartbeats.

    # File test/test_connection1p.rb, line 100
    def test_conn_1p_0040
      @conn.disconnect
      #
      cha = get_conn_headers()
      cha["heart-beat"] = "0,0" # No heartbeats
      conn = nil
      assert_nothing_raised do
        conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
        conn.disconnect
      end
      assert conn.protocol >= Stomp::SPL_11
    end

test_conn_1p_0050() click to toggle source

Test malformed heartbeat header.

    # File test/test_connection1p.rb, line 114
    def test_conn_1p_0050
      @conn.disconnect
      #
      cha = get_conn_headers()
      cha["heart-beat"] = "10,10,20" # Bad header Heartbeats
      conn = nil
      assert_raise Stomp::Error::InvalidHeartBeatHeaderError do
        conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
      end
    end

test_conn_1p_0070() click to toggle source

Test a valid heartbeat header.

    # File test/test_connection1p.rb, line 138
    def test_conn_1p_0070
      @conn.disconnect
      #
      cha = get_conn_headers()
      cha["heart-beat"] = "500,1000" # Valid heart beat headers
      conn = nil
      assert_nothing_raised do
        conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
        conn.disconnect
      end
      assert conn.hbsend_interval > 0
      assert conn.hbrecv_interval > 0
    end

test_conn_1p_0080() click to toggle source

Test only sending heartbeats.

    # File test/test_connection1p.rb, line 153
    def test_conn_1p_0080
      @conn.disconnect
      #
      cha = get_conn_headers()
      cha["heart-beat"] = "10000,0" # Valid heart beat headers, send only
      conn = nil
      logger = Tlogger.new
      assert_nothing_raised do
        conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
        conn.set_logger(logger)
        sleep 65
        conn.set_logger(nil)
        conn.disconnect
      end
      hb_asserts_send(conn)
    end

test_conn_1p_0090() click to toggle source

Test only receiving heartbeats.

    # File test/test_connection1p.rb, line 171
      def test_conn_1p_0090
        @conn.disconnect
        #
        cha = get_conn_headers()
        cha["heart-beat"] = "0,6000" # Valid heart beat headers, receive only
        conn = nil
        logger = Tlogger.new
        assert_nothing_raised do
          conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
    #      m = conn.receive # This will hang forever .....
          conn.set_logger(logger)
          sleep 65
          conn.set_logger(nil)
          conn.disconnect
        end
        hb_asserts_recv(conn)
      end

test_conn_1p_0100() click to toggle source

Test sending and receiving heartbeats.

    # File test/test_connection1p.rb, line 190
      def test_conn_1p_0100
        @conn.disconnect
        #
        cha = get_conn_headers()
        cha["heart-beat"] = "5000,10000" # Valid heart beat headers, send and receive
        conn = nil
        logger = Tlogger.new
        assert_nothing_raised do
          conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
    #      m = conn.receive # This will hang forever .....
          conn.set_logger(logger)
          sleep 65
          conn.set_logger(nil)
          conn.disconnect
        end
        hb_asserts_both(conn)
      end

test_conn_1p_0110() click to toggle source

Test valid UTF8 data.

    # File test/test_connection1p.rb, line 209
    def test_conn_1p_0110
      @conn.disconnect
      #
      cha = get_conn_headers()
      cha["heart-beat"] = "0,0" # No heartbeats
      conn = nil
      conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
      good_data = [
        "\x41\xc3\xb1\x42",
        "\xc2\x80", # 2 byte characters
        "\xc2\xbf",
        "\xdf\x80",
        "\xdf\xbf",
        "\xe0\xa0\x80", # 3 byte characters
        "\xe0\xbf\x80",
        "\xe0\xa0\xbf",
        "\xe0\xbf\xbf",
        "\xf1\x80\x80\x80", # 4 byte characters
        "\xf1\xbf\xbf\xbf",
        "\xf2\x80\x80\x80",
        "\xf2\xbf\xbf\xbf",
        "\xf3\x80\x80\x80",
        "\xf3\xbf\xbf\xbf",
      ]
      good_data.each do |string|
        assert conn.valid_utf8?(string), "good unicode specs 01: #{string}"
      end
      conn.disconnect
    end

test_conn_1p_0120() click to toggle source

Test invalid UTF8 data.

    # File test/test_connection1p.rb, line 240
    def test_conn_1p_0120
      @conn.disconnect
      #
      cha = get_conn_headers()
      cha["heart-beat"] = "0,0" # No heartbeats
      conn = nil
      conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
      bad_data = [
        "\x41\xc2\xc3\xb1\x42",
        "\xed\xa0\x80", # UTF-16 surrogate halves
        "\xed\xad\xbf",
        "\xed\xae\x80",
        "\xed\xaf\xbf",
        "\xed\xb0\x80",
        "\xed\xbe\x80",
        "\xed\xbf\xbf",
        "\xc0", # Single bytes
        "\xc1",
        "\xf5","\xf6","\xf7","\xf8","\xf9","\xfa","\xfb","\xfc",
        "\xfd","\xfe","\xff",
        "\xc0\x80", # Not shortest representation
        "\xc1\x80",
        "\xc0\x30",
        "\xc1\x30",
        "\xe0\x80\x80",
        "\xf0\x80\x80\x80",
      ]
      bad_data.each do |string|
        assert !conn.valid_utf8?(string), "bad unicode specs 01: #{string}"
      end
      conn.disconnect
    end

test_conn_1p_0124() click to toggle source

Repeated headers test. Currently:

- Apollo emits repeated headers for a 1.1 connection only

- RabbitMQ does not emit repeated headers under any circumstances

- AMQ 5.6 does not emit repeated headers under any circumstances

Pure luck that this runs against AMQ at present.

    # File test/test_connection1p.rb, line 278
    def test_conn_1p_0124
      dest = make_destination
      msg = "payload: #{Time.now.to_f}"
      shdrs = { "key1" => "val1", "key2" => "val2",
        "key3" => ["kv3", "kv2", "kv1"] }
      assert_nothing_raised {
        @conn.publish dest, msg, shdrs
      }
      #
      sid = @conn.uuid()
      @conn.subscribe dest, :id => sid
      #
      received = @conn.receive
      assert_equal msg, received.body
      if @conn.protocol != Stomp::SPL_10
        assert_equal shdrs["key3"], received.headers["key3"] unless ENV['STOMP_RABBIT'] || ENV['STOMP_AMQ11']
      else
        assert_equal "kv3", received.headers["key3"]
      end
      #
      @conn.unsubscribe dest, :id => sid
    end

test_conn_1p_0127() click to toggle source

Test frozen headers.

    # File test/test_connection1p.rb, line 302
    def test_conn_1p_0127
      dest = make_destination
      sid = @conn.uuid()
      sid.freeze
      assert_nothing_raised {
        @conn.subscribe dest, :id => sid
      }
    end

test_conn_1p_0130() click to toggle source

Test heartbeats with send and receive.

    # File test/test_connection1p.rb, line 312
      def test_conn_1p_0130
        @conn.disconnect
        #
        cha = get_conn_headers()
        cha["heart-beat"] = "10000,6000" # Valid heart beat headers, send and receive
        conn = nil
        logger = Tlogger.new
        assert_nothing_raised do
          conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
    #      m = conn.receive # This will hang forever .....
          conn.set_logger(logger)
          sleep 65
          conn.set_logger(nil)
          conn.disconnect
        end
        hb_asserts_both(conn)
      end

test_conn_1p_0135() click to toggle source

Test heartbeats with send and receive.

    # File test/test_connection1p.rb, line 331
      def test_conn_1p_0135
        @conn.disconnect
        #
        cha = get_conn_headers()
        cha["heart-beat"] = "10000,1000" # Valid heart beat headers, send and receive
        conn = nil
        logger = Tlogger.new
        assert_nothing_raised do
          conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
    #      m = conn.receive # This will hang forever .....
          conn.set_logger(logger)
          sleep 65
          conn.set_logger(nil)
          conn.disconnect
        end
        hb_asserts_both(conn)
      end

test_conn_1p_0140() click to toggle source

Test heartbeats with send and receive.

    # File test/test_connection1p.rb, line 350
      def test_conn_1p_0140
        @conn.disconnect
        #
        cha = get_conn_headers()
        cha["heart-beat"] = "1000,10000" # Valid heart beat headers, send and receive
        conn = nil
        logger = Tlogger.new
        assert_nothing_raised do
          conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
    #      m = conn.receive # This will hang forever .....
          conn.set_logger(logger)
          sleep 65
          conn.set_logger(nil)
          conn.disconnect
        end
        hb_asserts_both(conn)
      end

test_conn_1p_0200() click to toggle source

Test very basic encoding / decoding of headers

    # File test/test_connection1p.rb, line 369
    def test_conn_1p_0200
      @conn.disconnect
      #
      cha = get_conn_headers()
      conn = Stomp::Connection.open(user, passcode, host, port, false, 5, cha)
      msg = "payload: #{Time.now.to_f}"
      dest = make_destination
      shdrs = { "ab:cd" => "ef:gh", "a\nb" => "c\nd", "x\\y" => "z\\s" }
      if conn.protocol >= Stomp::SPL_12
        shdrs["bb\rcc"] = "dd\ree"
      end
      assert_nothing_raised {
        conn.publish dest, msg, shdrs
      }
      #
      sid = conn.uuid()
      conn.subscribe dest, :id => sid
      #
      received = conn.receive
      assert_equal msg, received.body
      #
      shdrs.each_pair {|k,v|
        assert received.headers.has_key?(k), "Key not found: #{k}"
        assert received.headers.has_value?(v), "Value not found: #{v}"
        assert received.headers[k] == v, "Mismatch: #{k},#{v}"
      }
      conn.disconnect
    end

test_conn_1p_0210() click to toggle source

Test that 1.1+ connections do not break suppress_content_length (Issue #52)

    # File test/test_connection1p.rb, line 400
    def test_conn_1p_0210
      msg = "payload: #{Time.now.to_f}"
      dest = make_destination
      shdrs = { :suppress_content_length => true }
      assert_nothing_raised {
        @conn.publish dest, msg, shdrs
      }
      #
      sid = @conn.uuid()
      @conn.subscribe dest, :id => sid
      #
      received = @conn.receive
      assert_equal msg, received.body
      assert_nil received.headers["content-length"], "No content length expected."
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.