package org.infinispan.client.hotrod.xsite;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNull;
import java.util.Optional;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.test.TestingUtil;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "client.hotrod.xsite.SiteDownFailoverTest")
public class SiteDownFailoverTest extends AbstractHotRodSiteFailoverTest {
public void testFailoverAfterSiteShutdown() {
RemoteCacheManager clientA = client(SITE_A, Optional.of(SITE_B));
RemoteCacheManager clientB = client(SITE_B, Optional.empty());
RemoteCache<Integer, String> cacheA = clientA.getCache();
RemoteCache<Integer, String> cacheB = clientB.getCache();
assertNull(cacheA.put(1, "v1"));
assertEquals("v1", cacheA.get(1));
assertEquals("v1", cacheB.get(1));
int portServerSiteA = findServerPort(SITE_A);
killSite(SITE_A);
// Client connected with surviving site should find data
assertEquals("v1", cacheB.get(1));
// Client connected to crashed site should failover
assertEquals("v1", cacheA.get(1));
// Restart previously shut down site
createHotRodSite(SITE_A, SITE_B, Optional.of(portServerSiteA));
killSite(SITE_B);
TestingUtil.sleepThread(10000);
// Client that had details for site A should failover back
// There is no data in original site since state transfer is not enabled
assertNull(cacheA.get(1));
assertNull(cacheA.put(2, "v2"));
assertEquals("v2", cacheA.get(2));
}
}