# File test/test_client.rb, line 389
  def test_transaction_with_client_side_reack
    @client.close if @client && @client.open? # allow tests to close
    @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 # 1.2+
        @client.acknowledge message, :transaction => 'tx1', :id => message.headers['ack']
        checkEmsg(@client)
    end
    message = nil
    @client.abort 'tx1'
    # Wait for redlivery (Client logic)
    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 # 1.2+
          @client.acknowledge message, :transaction => 'tx2', :id => message.headers['ack']
          checkEmsg(@client)
      end
      @client.commit 'tx2'
    }
    checkEmsg(@client)
    @client.close
    @client = nil
  end