Parent

Included Modules

Class/Module Index [+]

Quicksearch

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.