@Override
    public void doAfterResponse(String remoteAddr, RemotingCommand request, RemotingCommand response) {
        if (RequestCode.GET_ROUTEINFO_BY_TOPIC != request.getCode()) {
            return;
        }
        if (response == null || response.getBody() == null || ResponseCode.SUCCESS != response.getCode()) {
            return;
        }
        boolean zoneMode = Boolean.parseBoolean(request.getExtFields().get(MixAll.ZONE_MODE));
        if (!zoneMode) {
            return;
        }
        String zoneName = request.getExtFields().get(MixAll.ZONE_NAME);
        if (StringUtils.isBlank(zoneName)) {
            return;
        }
        TopicRouteData topicRouteData = RemotingSerializable.decode(response.getBody(), TopicRouteData.class);
        response.setBody(filterByZoneName(topicRouteData, zoneName).encode());
    }
@Test
    public void testDoAfterResponseWithNoZoneName() {
        HashMap<String, String> extFields = new HashMap<>();
        extFields.put(MixAll.ZONE_MODE, "true");
        RemotingCommand request = RemotingCommand.createRequestCommand(105,null);
        request.setExtFields(extFields);
        RemotingCommand response = RemotingCommand.createResponseCommand(null);
        response.setCode(ResponseCode.SUCCESS);
        response.setBody(RemotingSerializable.encode(createSampleTopicRouteData()));
        zoneRouteRPCHook.doAfterResponse("", request, response);
    }