abstract void execute(Admin admin, Namespace ns, PrintStream out) throws Exception;
@Test
    public void testFindHangingLookupTopicPartitionsForTopic() throws Exception {
        String topic = "foo";

        String[] args = new String[]{
            "--bootstrap-server",
            "localhost:9092",
            "find-hanging",
            "--topic",
            topic
        };

        Node node0 = new Node(0, "localhost", 9092);
        Node node1 = new Node(1, "localhost", 9093);
        Node node5 = new Node(5, "localhost", 9097);

        TopicPartitionInfo partition0 = new TopicPartitionInfo(
            0,
            node0,
            Arrays.asList(node0, node1),
            Arrays.asList(node0, node1)
        );
        TopicPartitionInfo partition1 = new TopicPartitionInfo(
            1,
            node1,
            Arrays.asList(node1, node5),
            Arrays.asList(node1, node5)
        );

        TopicDescription description = new TopicDescription(
            topic,
            false,
            Arrays.asList(partition0, partition1)
        );
        expectDescribeTopics(singletonMap(topic, description));

        DescribeProducersResult result = Mockito.mock(DescribeProducersResult.class);
        Mockito.when(result.all()).thenReturn(completedFuture(emptyMap()));

        Mockito.when(admin.describeProducers(
            Arrays.asList(new TopicPartition(topic, 0), new TopicPartition(topic, 1)),
            new DescribeProducersOptions()
        )).thenReturn(result);

        execute(args);
        assertNormalExit();
        assertNoHangingTransactions();
    }