// Tests_SRS_AMQPSIOTHUBCONNECTIONBASEHANDLER_14_017: [The event handler shall get the Sender
  // (Proton) object from the link.]
  // Tests_SRS_AMQPSIOTHUBCONNECTIONBASEHANDLER_14_018: [The event handler shall encode the message
  // and copy the contents to the byte buffer.]
  // Tests_SRS_AMQPSIOTHUBCONNECTIONBASEHANDLER_14_019: [The event handler shall set the delivery
  // tag on the Sender (Proton) object.]
  // Tests_SRS_AMQPSIOTHUBCONNECTIONBASEHANDLER_14_020: [The event handler shall send the encoded
  // bytes.]
  // Tests_SRS_AMQPSIOTHUBCONNECTIONBASEHANDLER_14_021: [The event handler shall advance the Sender
  // and complete the sent message CompletableFuture using the Delivery (Proton) object hash code.]
  @Test
  public void onLinkFlowFullTest(@Mocked final CompletableFuture<Integer> mockFuture) {
    final String hostName = "test.host.name";
    final String deviceId = "test-deviceId";
    final String userName = "******";
    final String sasToken = "test-token";
    final byte[] msgBody = {0x61, 0x62, 0x63};
    final int tag = 0;

    new NonStrictExpectations() {
      {
        mockMessage.encode(msgBody, 0, msgBody.length);
        result = 3;
        mockEvent.getLink();
        result = mockSender;
        mockSender.getCredit();
        result = 1;
        mockSender.getUnsettled();
        result = 0;
      }
    };

    AmqpsIotHubConnectionBaseHandler handler =
        new AmqpsIotHubConnectionBaseHandler(
            hostName, userName, sasToken, deviceId, mockIotHubConnection);

    Deencapsulation.setField(handler, "sender", mockSender);
    Deencapsulation.setField(handler, "currentSentMessageFuture", mockFuture);
    handler.createBinaryMessage(msgBody, null);
    handler.onLinkFlow(mockEvent);

    new Verifications() {
      {
        mockEvent.getLink();
        byte[] buffer = new byte[1024];
        int length = mockMessage.encode(buffer, 0, buffer.length);
        byte[] deliveryTag = String.valueOf(tag).getBytes();
        Delivery d = mockSender.delivery(deliveryTag);
        mockSender.send((byte[]) any, 0, length);

        mockSender.advance();
        mockFuture.complete(d.hashCode());
      }
    };
  }