use of com.alibaba.nacos.common.remote.client.Connection in project nacos by alibaba.
the class NamingGrpcClientProxyTest method testServerListChanged.
@Test
public void testServerListChanged() throws Exception {
RpcClient rpc = new RpcClient("testServerListHasChanged", factory) {
@Override
public ConnectionType getConnectionType() {
return ConnectionType.GRPC;
}
@Override
public int rpcPortOffset() {
return 0;
}
@Override
public Connection connectToServer(ServerInfo serverInfo) throws Exception {
return new Connection(serverInfo) {
@Override
public Response request(Request request, long timeoutMills) throws NacosException {
Response response = new Response() {
};
response.setRequestId(request.getRequestId());
return response;
}
@Override
public RequestFuture requestFuture(Request request) throws NacosException {
return new DefaultRequestFuture("test", request.getRequestId());
}
@Override
public void asyncRequest(Request request, RequestCallBack requestCallBack) throws NacosException {
}
@Override
public void close() {
}
};
}
};
Field rpcClient = NamingGrpcClientProxy.class.getDeclaredField("rpcClient");
rpcClient.setAccessible(true);
rpcClient.set(client, rpc);
rpc.serverListFactory(factory);
rpc.registerServerRequestHandler(new NamingPushRequestHandler(holder));
Field listenerField = NamingGrpcClientProxy.class.getDeclaredField("redoService");
listenerField.setAccessible(true);
NamingGrpcRedoService listener = (NamingGrpcRedoService) listenerField.get(client);
rpc.registerConnectionListener(listener);
rpc.start();
int retry = 10;
while (!rpc.isRunning()) {
TimeUnit.SECONDS.sleep(1);
if (--retry < 0) {
Assert.fail("rpc is not running");
}
}
Assert.assertEquals(ORIGIN_SERVER, rpc.getCurrentServer().getServerIp());
String newServer = "www.aliyun.com";
when(factory.genNextServer()).thenReturn(newServer);
when(factory.getServerList()).thenReturn(Stream.of(newServer, "anotherServer").collect(Collectors.toList()));
NotifyCenter.publishEvent(new ServerListChangedEvent());
retry = 10;
while (ORIGIN_SERVER.equals(rpc.getCurrentServer().getServerIp())) {
TimeUnit.SECONDS.sleep(1);
if (--retry < 0) {
Assert.fail("failed to auth switch server");
}
}
Assert.assertEquals(newServer, rpc.getCurrentServer().getServerIp());
}
Aggregations