public ClusterInfo getBrokerClusterInfo(
        final long timeoutMillis) throws InterruptedException, RemotingTimeoutException,
        RemotingSendRequestException, RemotingConnectException, MQBrokerException {
        RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.GET_BROKER_CLUSTER_INFO, null);

        RemotingCommand response = this.remotingClient.invokeSync(null, request, timeoutMillis);
        assert response != null;
        switch (response.getCode()) {
            case ResponseCode.SUCCESS: {
                return ClusterInfo.decode(response.getBody(), ClusterInfo.class);
            }
            default:
                break;
        }

        throw new MQBrokerException(response.getCode(), response.getRemark());
    }
@Test
    public void assertGetBrokerClusterInfo() throws RemotingException, InterruptedException, MQBrokerException {
        mockInvokeSync();
        ClusterInfo responseBody = new ClusterInfo();
        Map<String, Set<String>> clusterAddrTable = new HashMap<>();
        clusterAddrTable.put(clusterName, new HashSet<>());
        Map<String, BrokerData> brokerAddrTable = new HashMap<>();
        brokerAddrTable.put(brokerName, new BrokerData());
        responseBody.setClusterAddrTable(clusterAddrTable);
        responseBody.setBrokerAddrTable(brokerAddrTable);
        setResponseBody(responseBody);
        ClusterInfo actual = mqClientAPI.getBrokerClusterInfo(defaultTimeout);
        assertNotNull(actual);
        assertEquals(1, actual.getClusterAddrTable().size());
        assertEquals(1, actual.getBrokerAddrTable().size());
    }