@Test
  public void testSendWithNoEndpoint() throws Exception {
    Meta meta = m_metaHolder.getMeta();
    reset(m_metaHolder);
    Topic topic = meta.findTopic(TEST_TOPIC);
    for (Partition p : topic.getPartitions()) {
      p.setEndpoint(null);
    }
    when(m_metaHolder.getMeta()).thenReturn(meta);

    brokerActionsWhenReceivedSendMessageCmd( //
        MessageSendAnswer.NoOp);

    List<Pair<String, String>> appProperties = Arrays.asList(new Pair<String, String>("a", "A"));
    Future<SendResult> future =
        sendAsync(TEST_TOPIC, "pKey", "body", "rKey", appProperties, false, null);

    try {
      future.get(
          lookup(ProducerConfig.class).getBrokerSenderSendTimeoutMillis() + 200L,
          TimeUnit.MILLISECONDS);
      fail();
    } catch (TimeoutException e) {
      // do nothing
    } catch (Exception e) {
      fail();
    }
    assertFalse(future.isDone());

    List<Command> brokerReceivedCmds = getBrokerReceivedCmds();
    assertEquals(0, brokerReceivedCmds.size());
  }
  @Test
  public void testGetEndpointFailed() throws Exception {
    brokerActions4PollMessageCmd(
        PullMessageAnswer.BASIC.channel(m_channel).creator(SIMPLE_CREATOR));
    TestMessageListener listener = new TestMessageListener().receiveCount(1);
    ConsumerHolder holder = Consumer.getInstance().start(TEST_TOPIC, TEST_GROUP, listener);
    long preCost = listener.waitUntilReceivedAllMessage();
    Assert.assertEquals(1, listener.getReceivedMessages().size());
    holder.close();
    listener.countDownAll();

    Meta meta = loadLocalMeta();
    meta.getEndpoints().clear();
    when(m_metaHolder.getMeta()).thenReturn(meta);

    brokerActions4PollMessageCmd(
        PullMessageAnswer.BASIC.channel(m_channel).creator(SIMPLE_CREATOR));
    listener = new TestMessageListener().receiveCount(1);
    holder = Consumer.getInstance().start(TEST_TOPIC, TEST_GROUP, listener);
    listener.waitUntilReceivedAllMessage(preCost * 2);
    Assert.assertEquals(0, listener.getReceivedMessages().size());
    holder.close();
    listener.countDownAll();
  }