log.info("client is connected");
assertTrue(client.getInvoker() instanceof BisocketClientInvoker);
String callbackLocatorURI = getTransport() + "://" + host + ":1";
config.put(Bisocket.IS_CALLBACK_SERVER, "true");
Connector callbackConnector = new Connector(callbackLocatorURI, config);
callbackConnector.start();
SimpleCallbackHandler callbackHandler = new SimpleCallbackHandler();
client.addListener(callbackHandler, new InvokerLocator(callbackLocatorURI));
log.info("client added callback handler");
client.invoke(CALLBACK_TEST);
assertEquals(1, callbackHandler.callbackCounter);
SocketServerInvoker invoker = (SocketServerInvoker) connector.getServerInvoker();
Field field = SocketServerInvoker.class.getDeclaredField("clientpool");
field.setAccessible(true);
LRUPool clientpool = (LRUPool) field.get(invoker);
Set threads = clientpool.getContents();
for (Iterator it = threads.iterator(); it.hasNext(); )
{
ServerThread t = (ServerThread) it.next();
field = ServerThread.class.getDeclaredField("socketWrapper");
field.setAccessible(true);
SocketWrapper socketWrapper = (SocketWrapper) field.get(t);
socketWrapper.close();
}
connector.stop();
log.info("STOPPED CONNECTOR");
internalSetUp(port);
log.info("RESTARTED CONNECTOR");
// Wait until a failure has been detected on the control connection.
Thread.sleep(TEST_PING_FREQUENCY * MAX_RETRIES * 8);
ServerInvoker callbackServerInvoker = callbackConnector.getServerInvoker();
field = BisocketServerInvoker.class.getDeclaredField("controlConnectionThreadMap");
field.setAccessible(true);
Map controlConnectionThreadMap = (Map) field.get(callbackServerInvoker);
assertEquals(0, controlConnectionThreadMap.size());