def test_transaction_with_client_side_reack
@client.close if @client && @client.open?
@client = get_client()
q = make_destination
data = message_text
@client.publish q, data
@client.begin 'tx1'
message = nil
sid = nil
if @client.protocol() == Stomp::SPL_10
@client.subscribe(q, :ack => 'client') { |m| message = m }
else
sid = @client.uuid()
@client.subscribe(q, :ack => 'client', :id => sid) { |m| message = m }
end
sleep 0.1 while message.nil?
assert_equal data, message.body
case @client.protocol()
when Stomp::SPL_10
@client.acknowledge message, :transaction => 'tx1'
checkEmsg(@client)
when Stomp::SPL_11
@client.acknowledge message, :transaction => 'tx1', :subscription => message.headers['subscription']
checkEmsg(@client)
else
@client.acknowledge message, :transaction => 'tx1', :id => message.headers['ack']
checkEmsg(@client)
end
message = nil
@client.abort 'tx1'
sleep 0.1 while message.nil?
assert_not_nil message
assert_equal data, message.body
assert_nothing_raised {
@client.begin 'tx2'
case @client.protocol()
when Stomp::SPL_10
@client.acknowledge message, :transaction => 'tx2'
checkEmsg(@client)
when Stomp::SPL_11
@client.acknowledge message, :transaction => 'tx2', :subscription => message.headers['subscription']
checkEmsg(@client)
else
@client.acknowledge message, :transaction => 'tx2', :id => message.headers['ack']
checkEmsg(@client)
end
@client.commit 'tx2'
}
checkEmsg(@client)
@client.close
@client = nil
end