package org.infinispan.client.hotrod.xsite;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import java.util.Optional;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "client.hotrod.xsite.SiteManualSwitchTest")
public class SiteManualSwitchTest extends AbstractHotRodSiteFailoverTest {
@Override
protected void createSites() {
super.createSites();
addHitCountInterceptors();
}
public void testManualClusterSwitch() {
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();
assertNoHits();
assertSingleSiteHit(SITE_A, SITE_B, () -> assertNull(cacheA.put(1, "v1")));
assertSingleSiteHit(SITE_A, SITE_B, () -> assertEquals("v1", cacheA.get(1)));
assertSingleSiteHit(SITE_B, SITE_A, () -> assertNull(cacheB.put(2, "v2")));
assertSingleSiteHit(SITE_B, SITE_A, () -> assertEquals("v2", cacheB.get(2)));
assertTrue(clientA.switchToCluster(SITE_B));
assertSingleSiteHit(SITE_B, SITE_A, () -> assertNull(cacheA.put(3, "v3")));
assertSingleSiteHit(SITE_B, SITE_A, () -> assertEquals("v3", cacheA.get(3)));
assertTrue(clientA.switchToDefaultCluster());
assertSingleSiteHit(SITE_A, SITE_B, () -> assertNull(cacheA.put(4, "v4")));
assertSingleSiteHit(SITE_A, SITE_B, () -> assertEquals("v4", cacheA.get(4)));
}
private void assertSingleSiteHit(String siteHit, String siteNotHit, Runnable r) {
r.run();
assertSiteHit(siteHit, 1);
assertSiteNotHit(siteNotHit);
}
}