in geode-core/src/distributedTest/java/org/apache/geode/management/UniversalMembershipListenerAdapterDUnitTest.java [409:1002]
public void testSystemClientEventsInServer() throws Exception {
boolean[] firedSystem = new boolean[3];
DistributedMember[] memberSystem = new DistributedMember[3];
String[] memberIdSystem = new String[3];
boolean[] isClientSystem = new boolean[3];
boolean[] firedAdapter = new boolean[3];
DistributedMember[] memberAdapter = new DistributedMember[3];
String[] memberIdAdapter = new String[3];
boolean[] isClientAdapter = new boolean[3];
boolean[] firedBridge = new boolean[3];
DistributedMember[] memberBridge = new DistributedMember[3];
String[] memberIdBridge = new String[3];
boolean[] isClientBridge = new boolean[3];
boolean[] firedSystemDuplicate = new boolean[3];
boolean[] firedAdapterDuplicate = new boolean[3];
boolean[] firedBridgeDuplicate = new boolean[3];
MembershipListener systemListener = new MembershipListener() {
@Override
public synchronized void memberJoined(MembershipEvent event) {
firedSystemDuplicate[JOINED] = firedSystem[JOINED];
firedSystem[JOINED] = true;
memberSystem[JOINED] = event.getDistributedMember();
memberIdSystem[JOINED] = event.getMemberId();
notifyAll();
}
@Override
public synchronized void memberLeft(MembershipEvent event) {
firedSystemDuplicate[LEFT] = firedSystem[LEFT];
firedSystem[LEFT] = true;
memberSystem[LEFT] = event.getDistributedMember();
memberIdSystem[LEFT] = event.getMemberId();
notifyAll();
}
@Override
public synchronized void memberCrashed(MembershipEvent event) {
firedSystemDuplicate[CRASHED] = firedSystem[CRASHED];
firedSystem[CRASHED] = true;
memberSystem[CRASHED] = event.getDistributedMember();
memberIdSystem[CRASHED] = event.getMemberId();
notifyAll();
}
};
UniversalMembershipListenerAdapter adapter = new UniversalMembershipListenerAdapter() {
@Override
public synchronized void memberJoined(MembershipEvent event) {
firedAdapterDuplicate[JOINED] = firedAdapter[JOINED];
firedAdapter[JOINED] = true;
memberAdapter[JOINED] = event.getDistributedMember();
memberIdAdapter[JOINED] = event.getMemberId();
if (event instanceof AdaptedMembershipEvent) {
isClientAdapter[JOINED] = ((AdaptedMembershipEvent) event).isClient();
}
notifyAll();
}
@Override
public synchronized void memberLeft(MembershipEvent event) {
firedAdapterDuplicate[LEFT] = firedAdapter[LEFT];
firedAdapter[LEFT] = true;
memberAdapter[LEFT] = event.getDistributedMember();
memberIdAdapter[LEFT] = event.getMemberId();
if (event instanceof AdaptedMembershipEvent) {
isClientAdapter[LEFT] = ((AdaptedMembershipEvent) event).isClient();
}
notifyAll();
}
@Override
public synchronized void memberCrashed(MembershipEvent event) {
firedAdapterDuplicate[CRASHED] = firedAdapter[CRASHED];
firedAdapter[CRASHED] = true;
memberAdapter[CRASHED] = event.getDistributedMember();
memberIdAdapter[CRASHED] = event.getMemberId();
if (event instanceof AdaptedMembershipEvent) {
isClientAdapter[CRASHED] = ((AdaptedMembershipEvent) event).isClient();
}
notifyAll();
}
};
ClientMembershipListener bridgeListener = new ClientMembershipListener() {
@Override
public synchronized void memberJoined(ClientMembershipEvent event) {
firedBridgeDuplicate[JOINED] = firedBridge[JOINED];
firedBridge[JOINED] = true;
memberBridge[JOINED] = event.getMember();
memberIdBridge[JOINED] = event.getMemberId();
isClientBridge[JOINED] = event.isClient();
notifyAll();
}
@Override
public synchronized void memberLeft(ClientMembershipEvent event) {
firedBridgeDuplicate[LEFT] = firedBridge[LEFT];
firedBridge[LEFT] = true;
memberBridge[LEFT] = event.getMember();
memberIdBridge[LEFT] = event.getMemberId();
isClientBridge[LEFT] = event.isClient();
notifyAll();
}
@Override
public synchronized void memberCrashed(ClientMembershipEvent event) {
firedBridgeDuplicate[CRASHED] = firedBridge[CRASHED];
firedBridge[CRASHED] = true;
memberBridge[CRASHED] = event.getMember();
memberIdBridge[CRASHED] = event.getMemberId();
isClientBridge[CRASHED] = event.isClient();
notifyAll();
}
};
Host host = Host.getHost(0);
VM vm0 = host.getVM(0);
String name = getUniqueName();
int[] ports = new int[1];
// create CacheServer in controller vm...
getSystem();
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.LOCAL);
Region region = createRegion(name, factory.create());
assertThat(region).isNotNull();
assertThat(getRootRegion().getSubregion(name)).isNotNull();
ports[0] = startBridgeServer(0);
assertThat(ports[0] != 0).isTrue();
DistributedMember serverMember = getMemberId();
String serverMemberId = serverMember.getId();
Properties serverProperties = getSystem().getProperties();
// Below removed properties are already got copied as cluster SSL properties
serverProperties.remove(CLUSTER_SSL_ENABLED);
serverProperties.remove(CLUSTER_SSL_CIPHERS);
serverProperties.remove(CLUSTER_SSL_PROTOCOLS);
serverProperties.remove(CLUSTER_SSL_REQUIRE_AUTHENTICATION);
// register the bridge listener
ClientMembership.registerClientMembershipListener(bridgeListener);
InternalCache cache = getInternalCache();
ManagementService service = ManagementService.getExistingManagementService(cache);
// register the system listener
service.addMembershipListener(systemListener);
// register the universal adapter.
adapter.registerMembershipListener(service);
SerializableCallable createBridgeClient = new SerializableCallable("Create bridge client") {
@Override
public Object call() {
System.setProperty(RESTRICT_MEMBERSHIP_PORT_RANGE, "false");
assertThat(getSystem(serverProperties).isConnected()).isTrue();
assertThat(getCache().isClosed()).isFalse();
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.LOCAL);
ClientServerTestCase.configureConnectionPool(factory, getServerHostName(host), ports, false,
-1, -1, null);
createRegion(name, factory.create());
assertThat(getRootRegion().getSubregion(name)).isNotNull();
return getMemberId();
}
};
// create bridge client in vm0...
DistributedMember clientMember = (DistributedMember) vm0.invoke(createBridgeClient);
String clientMemberId = clientMember.getId();
// should trigger both adapter and bridge listener but not system listener
synchronized (adapter) {
while (!firedAdapter[JOINED]) {
adapter.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
synchronized (bridgeListener) {
while (!firedBridge[JOINED]) {
bridgeListener.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
synchronized (systemListener) {
while (!firedSystem[JOINED]) {
systemListener.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
assertArrayFalse(firedSystemDuplicate);
assertArrayFalse(firedAdapterDuplicate);
assertArrayFalse(firedBridgeDuplicate);
assertThat(firedBridge[JOINED]).isTrue();
assertThat(memberBridge[JOINED]).isEqualTo(clientMember);
assertThat(memberIdBridge[JOINED]).isEqualTo(clientMemberId);
assertThat(isClientBridge[JOINED]).isTrue();
assertThat(firedBridge[LEFT]).isFalse();
assertThat(memberBridge[LEFT]).isNull();
assertThat(memberIdBridge[LEFT]).isNull();
assertThat(isClientBridge[LEFT]).isFalse();
assertThat(firedBridge[CRASHED]).isFalse();
assertThat(memberBridge[CRASHED]).isNull();
assertThat(memberIdBridge[CRASHED]).isNull();
assertThat(isClientBridge[CRASHED]).isFalse();
resetArraysForTesting(firedBridge, memberBridge, memberIdBridge, isClientBridge);
assertThat(firedSystem[JOINED]).isTrue();
assertThat(memberSystem[JOINED]).isEqualTo(clientMember);
assertThat(memberIdSystem[JOINED]).isEqualTo(clientMemberId);
assertThat(isClientSystem[JOINED]).isFalse();
assertThat(firedSystem[LEFT]).isFalse();
assertThat(memberSystem[LEFT]).isNull();
assertThat(memberIdSystem[LEFT]).isNull();
assertThat(isClientSystem[LEFT]).isFalse();
assertThat(firedSystem[CRASHED]).isFalse();
assertThat(memberSystem[CRASHED]).isNull();
assertThat(memberIdSystem[CRASHED]).isNull();
assertThat(isClientSystem[CRASHED]).isFalse();
resetArraysForTesting(firedSystem, memberSystem, memberIdSystem, isClientSystem);
assertThat(firedAdapter[JOINED]).isTrue();
assertThat(memberAdapter[JOINED]).isEqualTo(clientMember);
assertThat(memberIdAdapter[JOINED]).isEqualTo(clientMemberId);
// assertThat(isClientAdapter[JOINED]).isTrue();
assertThat(firedAdapter[LEFT]).isFalse();
assertThat(memberAdapter[LEFT]).isNull();
assertThat(memberIdAdapter[LEFT]).isNull();
assertThat(isClientAdapter[LEFT]).isFalse();
assertThat(firedAdapter[CRASHED]).isFalse();
assertThat(memberAdapter[CRASHED]).isNull();
assertThat(memberIdAdapter[CRASHED]).isNull();
assertThat(isClientAdapter[CRASHED]).isFalse();
resetArraysForTesting(firedAdapter, memberAdapter, memberIdAdapter, isClientAdapter);
vm0.invoke(new SerializableRunnable("Wait for client to fully connect") {
@Override
public void run() {
String pl = getRootRegion().getSubregion(name).getAttributes().getPoolName();
PoolImpl pi = (PoolImpl) PoolManager.find(pl);
waitForClientToFullyConnect(pi);
}
});
// close bridge client region
vm0.invoke(new SerializableRunnable("Close bridge client region") {
@Override
public void run() {
getRootRegion().getSubregion(name).close();
PoolManager.close();
}
});
synchronized (adapter) {
while (!firedAdapter[LEFT]) {
adapter.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
synchronized (bridgeListener) {
while (!firedBridge[LEFT]) {
bridgeListener.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
assertArrayFalse(firedSystemDuplicate);
assertArrayFalse(firedAdapterDuplicate);
assertArrayFalse(firedBridgeDuplicate);
assertThat(firedBridge[JOINED]).isFalse();
assertThat(memberIdBridge[JOINED]).isNull();
assertThat(memberBridge[JOINED]).isNull();
assertThat(isClientBridge[JOINED]).isFalse();
assertThat(firedBridge[LEFT]).isTrue();
assertThat(memberBridge[LEFT]).isEqualTo(clientMember);
assertThat(memberIdBridge[LEFT]).isEqualTo(clientMemberId);
assertThat(isClientBridge[LEFT]).isTrue();
assertThat(firedBridge[CRASHED]).isFalse();
assertThat(memberBridge[CRASHED]).isNull();
assertThat(memberIdBridge[CRASHED]).isNull();
assertThat(isClientBridge[CRASHED]).isFalse();
resetArraysForTesting(firedBridge, memberBridge, memberIdBridge, isClientBridge);
assertThat(firedSystem[JOINED]).isFalse();
assertThat(memberSystem[JOINED]).isNull();
assertThat(memberIdSystem[JOINED]).isNull();
assertThat(isClientSystem[JOINED]).isFalse();
assertThat(firedSystem[LEFT]).isFalse();
assertThat(memberSystem[LEFT]).isNull();
assertThat(memberIdSystem[LEFT]).isNull();
assertThat(isClientSystem[LEFT]).isFalse();
assertThat(firedSystem[CRASHED]).isFalse();
assertThat(memberSystem[CRASHED]).isNull();
assertThat(memberIdSystem[CRASHED]).isNull();
assertThat(isClientSystem[CRASHED]).isFalse();
resetArraysForTesting(firedSystem, memberSystem, memberIdSystem, isClientSystem);
assertThat(firedAdapter[JOINED]).isFalse();
assertThat(memberAdapter[JOINED]).isNull();
assertThat(memberIdAdapter[JOINED]).isNull();
assertThat(isClientAdapter[JOINED]).isFalse();
assertThat(firedAdapter[LEFT]).isTrue();
assertThat(memberAdapter[LEFT]).isEqualTo(clientMember);
assertThat(memberIdAdapter[LEFT]).isEqualTo(clientMemberId);
assertThat(isClientAdapter[LEFT]).isTrue();
assertThat(firedAdapter[CRASHED]).isFalse();
assertThat(memberAdapter[CRASHED]).isNull();
assertThat(memberIdAdapter[CRASHED]).isNull();
assertThat(isClientAdapter[CRASHED]).isFalse();
resetArraysForTesting(firedAdapter, memberAdapter, memberIdAdapter, isClientAdapter);
// reconnect bridge client
clientMember = (DistributedMember) vm0.invoke(createBridgeClient);
clientMemberId = clientMember.getId();
synchronized (adapter) {
while (!firedAdapter[JOINED]) {
adapter.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
synchronized (bridgeListener) {
while (!firedBridge[JOINED]) {
bridgeListener.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
assertArrayFalse(firedSystemDuplicate);
assertArrayFalse(firedAdapterDuplicate);
assertArrayFalse(firedBridgeDuplicate);
assertThat(firedBridge[JOINED]).isTrue();
assertThat(memberBridge[JOINED]).isEqualTo(clientMember);
assertThat(memberIdBridge[JOINED]).isEqualTo(clientMemberId);
assertThat(isClientBridge[JOINED]).isTrue();
assertThat(firedBridge[LEFT]).isFalse();
assertThat(memberBridge[LEFT]).isNull();
assertThat(memberIdBridge[LEFT]).isNull();
assertThat(isClientBridge[LEFT]).isFalse();
assertThat(firedBridge[CRASHED]).isFalse();
assertThat(memberBridge[CRASHED]).isNull();
assertThat(memberIdBridge[CRASHED]).isNull();
assertThat(isClientBridge[CRASHED]).isFalse();
resetArraysForTesting(firedBridge, memberBridge, memberIdBridge, isClientBridge);
assertThat(firedSystem[JOINED]).isFalse();
assertThat(memberSystem[JOINED]).isNull();
assertThat(memberIdSystem[JOINED]).isNull();
assertThat(isClientSystem[JOINED]).isFalse();
assertThat(firedSystem[LEFT]).isFalse();
assertThat(memberSystem[LEFT]).isNull();
assertThat(memberIdSystem[LEFT]).isNull();
assertThat(isClientSystem[LEFT]).isFalse();
assertThat(firedSystem[CRASHED]).isFalse();
assertThat(memberSystem[CRASHED]).isNull();
assertThat(memberIdSystem[CRASHED]).isNull();
assertThat(isClientSystem[CRASHED]).isFalse();
resetArraysForTesting(firedSystem, memberSystem, memberIdSystem, isClientSystem);
assertThat(firedAdapter[JOINED]).isTrue();
assertThat(memberAdapter[JOINED]).isEqualTo(clientMember);
assertThat(memberIdAdapter[JOINED]).isEqualTo(clientMemberId);
// assertThat(isClientAdapter[JOINED]).isTrue();
assertThat(firedAdapter[LEFT]).isFalse();
assertThat(memberAdapter[LEFT]).isNull();
assertThat(memberIdAdapter[LEFT]).isNull();
assertThat(isClientAdapter[LEFT]).isFalse();
assertThat(firedAdapter[CRASHED]).isFalse();
assertThat(memberAdapter[CRASHED]).isNull();
assertThat(memberIdAdapter[CRASHED]).isNull();
assertThat(isClientAdapter[CRASHED]).isFalse();
resetArraysForTesting(firedAdapter, memberAdapter, memberIdAdapter, isClientAdapter);
vm0.invoke(new SerializableRunnable("Wait for client to fully connect") {
@Override
public void run() {
String poolName = getRootRegion().getSubregion(name).getAttributes().getPoolName();
PoolImpl pool = (PoolImpl) PoolManager.find(poolName);
waitForClientToFullyConnect(pool);
}
});
// have bridge client disconnect from system
vm0.invoke(new SerializableRunnable("Disconnect bridge client") {
@Override
public void run() {
closeCache();
disconnectFromDS();
}
});
synchronized (adapter) {
while (!firedAdapter[LEFT]) {
adapter.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
synchronized (systemListener) {
while (!firedSystem[LEFT]) {
systemListener.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
synchronized (bridgeListener) {
while (!firedBridge[LEFT]) {
bridgeListener.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
assertArrayFalse(firedSystemDuplicate);
assertArrayFalse(firedAdapterDuplicate);
assertArrayFalse(firedBridgeDuplicate);
assertThat(firedBridge[JOINED]).isFalse();
assertThat(memberBridge[JOINED]).isNull();
assertThat(memberIdBridge[JOINED]).isNull();
assertThat(isClientBridge[JOINED]).isFalse();
assertThat(firedBridge[LEFT]).isTrue();
assertThat(memberBridge[LEFT]).isEqualTo(clientMember);
assertThat(memberIdBridge[LEFT]).isEqualTo(clientMemberId);
assertThat(isClientBridge[LEFT]).isTrue();
assertThat(firedBridge[CRASHED]).isFalse();
assertThat(memberBridge[CRASHED]).isNull();
assertThat(memberIdBridge[CRASHED]).isNull();
assertThat(isClientBridge[CRASHED]).isFalse();
resetArraysForTesting(firedBridge, memberBridge, memberIdBridge, isClientBridge);
assertThat(firedSystem[JOINED]).isFalse();
assertThat(memberSystem[JOINED]).isNull();
assertThat(memberIdSystem[JOINED]).isNull();
assertThat(isClientSystem[JOINED]).isFalse();
assertThat(firedSystem[LEFT]).isTrue();
assertThat(memberSystem[LEFT]).isEqualTo(clientMember);
assertThat(memberIdSystem[LEFT]).isEqualTo(clientMemberId);
assertThat(isClientSystem[LEFT]).isFalse();
assertThat(firedSystem[CRASHED]).isFalse();
assertThat(memberSystem[CRASHED]).isNull();
assertThat(memberIdSystem[CRASHED]).isNull();
assertThat(isClientSystem[CRASHED]).isFalse();
resetArraysForTesting(firedSystem, memberSystem, memberIdSystem, isClientSystem);
assertThat(firedAdapter[JOINED]).isFalse();
assertThat(memberAdapter[JOINED]).isNull();
assertThat(memberIdAdapter[JOINED]).isNull();
assertThat(isClientAdapter[JOINED]).isFalse();
assertThat(firedAdapter[LEFT]).isTrue();
assertThat(memberAdapter[LEFT]).isEqualTo(clientMember);
assertThat(memberIdAdapter[LEFT]).isEqualTo(clientMemberId);
// assertThat(isClientAdapter[LEFT]).isTrue();
assertThat(firedAdapter[CRASHED]).isFalse();
assertThat(memberAdapter[CRASHED]).isNull();
assertThat(memberIdAdapter[CRASHED]).isNull();
assertThat(isClientAdapter[CRASHED]).isFalse();
resetArraysForTesting(firedAdapter, memberAdapter, memberIdAdapter, isClientAdapter);
// reconnect bridge client
clientMember = (DistributedMember) vm0.invoke(createBridgeClient);
clientMemberId = clientMember.getId();
synchronized (adapter) {
while (!firedAdapter[JOINED]) {
adapter.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
synchronized (systemListener) {
while (!firedSystem[JOINED]) {
systemListener.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
synchronized (bridgeListener) {
while (!firedBridge[JOINED]) {
bridgeListener.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
assertArrayFalse(firedSystemDuplicate);
assertArrayFalse(firedAdapterDuplicate);
assertArrayFalse(firedBridgeDuplicate);
assertThat(firedBridge[JOINED]).isTrue();
assertThat(memberBridge[JOINED]).isEqualTo(clientMember);
assertThat(memberIdBridge[JOINED]).isEqualTo(clientMemberId);
assertThat(isClientBridge[JOINED]).isTrue();
assertThat(firedBridge[LEFT]).isFalse();
assertThat(memberBridge[LEFT]).isNull();
assertThat(memberIdBridge[LEFT]).isNull();
assertThat(isClientBridge[LEFT]).isFalse();
assertThat(firedBridge[CRASHED]).isFalse();
assertThat(memberBridge[CRASHED]).isNull();
assertThat(memberIdBridge[CRASHED]).isNull();
assertThat(isClientBridge[CRASHED]).isFalse();
resetArraysForTesting(firedBridge, memberBridge, memberIdBridge, isClientBridge);
assertThat(firedSystem[JOINED]).isTrue();
assertThat(memberSystem[JOINED]).isEqualTo(clientMember);
assertThat(memberIdSystem[JOINED]).isEqualTo(clientMemberId);
assertThat(isClientSystem[JOINED]).isFalse();
assertThat(firedSystem[LEFT]).isFalse();
assertThat(memberSystem[LEFT]).isNull();
assertThat(memberIdSystem[LEFT]).isNull();
assertThat(isClientSystem[LEFT]).isFalse();
assertThat(firedSystem[CRASHED]).isFalse();
assertThat(memberSystem[CRASHED]).isNull();
assertThat(memberIdSystem[CRASHED]).isNull();
assertThat(isClientSystem[CRASHED]).isFalse();
resetArraysForTesting(firedSystem, memberSystem, memberIdSystem, isClientSystem);
assertThat(firedAdapter[JOINED]).isTrue();
assertThat(memberAdapter[JOINED]).isEqualTo(clientMember);
assertThat(memberIdAdapter[JOINED]).isEqualTo(clientMemberId);
// assertThat(isClientAdapter[JOINED]).isTrue();
assertThat(firedAdapter[LEFT]).isFalse();
assertThat(memberAdapter[LEFT]).isNull();
assertThat(memberIdAdapter[LEFT]).isNull();
assertThat(isClientAdapter[LEFT]).isFalse();
assertThat(firedAdapter[CRASHED]).isFalse();
assertThat(memberAdapter[CRASHED]).isNull();
assertThat(memberIdAdapter[CRASHED]).isNull();
assertThat(isClientAdapter[CRASHED]).isFalse();
resetArraysForTesting(firedAdapter, memberAdapter, memberIdAdapter, isClientAdapter);
vm0.invoke(new SerializableRunnable("Wait for client to fully connect") {
@Override
public void run() {
String poolName = getRootRegion().getSubregion(name).getAttributes().getPoolName();
PoolImpl pool = (PoolImpl) PoolManager.find(poolName);
waitForClientToFullyConnect(pool);
}
});
// close bridge client region with test hook for crash
ServerConnection.setForceClientCrashEvent(true);
vm0.invoke(new SerializableRunnable("Close bridge client region") {
@Override
public void run() {
getRootRegion().getSubregion(name).close();
PoolManager.close();
}
});
synchronized (adapter) {
while (!firedAdapter[CRASHED]) {
adapter.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
synchronized (bridgeListener) {
while (!firedBridge[CRASHED]) {
bridgeListener.wait(ASYNC_EVENT_WAIT_MILLIS);
}
}
assertArrayFalse(firedSystemDuplicate);
assertArrayFalse(firedAdapterDuplicate);
assertArrayFalse(firedBridgeDuplicate);
assertThat(firedBridge[JOINED]).isFalse();
assertThat(memberBridge[JOINED]).isNull();
assertThat(memberIdBridge[JOINED]).isNull();
assertThat(isClientBridge[JOINED]).isFalse();
assertThat(firedBridge[LEFT]).isFalse();
assertThat(memberBridge[LEFT]).isNull();
assertThat(memberIdBridge[LEFT]).isNull();
assertThat(isClientBridge[LEFT]).isFalse();
assertThat(firedBridge[CRASHED]).isTrue();
assertThat(memberBridge[CRASHED]).isEqualTo(clientMember);
assertThat(memberIdBridge[CRASHED]).isEqualTo(clientMemberId);
assertThat(isClientBridge[CRASHED]).isTrue();
assertThat(firedSystem[JOINED]).isFalse();
assertThat(memberSystem[JOINED]).isNull();
assertThat(memberIdSystem[JOINED]).isNull();
assertThat(isClientSystem[JOINED]).isFalse();
assertThat(firedSystem[LEFT]).isFalse();
assertThat(memberSystem[LEFT]).isNull();
assertThat(memberIdSystem[LEFT]).isNull();
assertThat(isClientSystem[LEFT]).isFalse();
assertThat(firedSystem[CRASHED]).isFalse();
assertThat(memberSystem[CRASHED]).isNull();
assertThat(memberIdSystem[CRASHED]).isNull();
assertThat(isClientSystem[CRASHED]).isFalse();
assertThat(firedAdapter[JOINED]).isFalse();
assertThat(memberAdapter[JOINED]).isNull();
assertThat(memberIdAdapter[JOINED]).isNull();
assertThat(isClientAdapter[JOINED]).isFalse();
assertThat(firedAdapter[LEFT]).isFalse();
assertThat(memberAdapter[LEFT]).isNull();
assertThat(memberIdAdapter[LEFT]).isNull();
assertThat(isClientAdapter[LEFT]).isFalse();
assertThat(firedAdapter[CRASHED]).isTrue();
assertThat(memberAdapter[CRASHED]).isEqualTo(clientMember);
assertThat(memberIdAdapter[CRASHED]).isEqualTo(clientMemberId);
assertThat(isClientAdapter[CRASHED]).isTrue();
}