package org.infinispan.xsite;
import static org.infinispan.distribution.DistributionTestHelper.addressOf;
import static org.testng.AssertJUnit.assertEquals;
import java.lang.reflect.Method;
import org.infinispan.Cache;
import org.infinispan.commons.api.Lifecycle;
import org.infinispan.configuration.cache.BackupConfiguration;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.persistence.dummy.DummyInMemoryStoreConfigurationBuilder;
import org.infinispan.test.TestingUtil;
import org.testng.annotations.Test;
/**
* Tests if preload happens successfully when xsite is configured.
* <p>
* JIRA: ISPN-7265
*
* @author Pedro Ruivo
* @since 9.0
*/
@Test(groups = "xsite", testName = "xsite.PreloadWithXSiteTest")
public class PreloadWithXSiteTest extends AbstractTwoSitesTest {
private static final String NYC_CACHE_STORE_NAME = "nyc-dummy-cache-store";
private static final String LON_CACHE_STORE_NAME = "lon-dummy-cache-store";
private static final int NR_KEYS = 5;
public PreloadWithXSiteTest() {
implicitBackupCache = true;
initialClusterSize = 2;
}
public void testPreload(Method method) {
for (int i = 0; i < NR_KEYS; ++i) {
cache(NYC, 0).put(TestingUtil.k(method, i), TestingUtil.v(method, i));
}
assertData(method);
stopNYC();
reCreateNYC();
assertData(method);
}
@Override
protected ConfigurationBuilder getNycActiveConfig() {
ConfigurationBuilder builder = getDefaultClusteredCacheConfig(CacheMode.DIST_SYNC, false);
builder.persistence().addStore(DummyInMemoryStoreConfigurationBuilder.class).preload(true)
.storeName(NYC_CACHE_STORE_NAME);
return builder;
}
@Override
protected ConfigurationBuilder getLonActiveConfig() {
ConfigurationBuilder builder = getDefaultClusteredCacheConfig(CacheMode.DIST_SYNC, false);
builder.persistence().addStore(DummyInMemoryStoreConfigurationBuilder.class).preload(true)
.storeName(LON_CACHE_STORE_NAME);
return builder;
}
private void stopNYC() {
site(NYC).cacheManagers.forEach(Lifecycle::stop);
}
private void reCreateNYC() {
ConfigurationBuilder nyc = getNycActiveConfig();
nyc.sites().addBackup()
.site(LON)
.strategy(BackupConfiguration.BackupStrategy.SYNC)
.sites().addInUseBackupSite(LON);
createSite(NYC, initialClusterSize, globalConfigurationBuilderForSite(NYC), nyc);
}
private void assertData(Method method) {
assertDataForSite(method, NYC);
assertDataForSite(method, LON);
}
private void assertDataForSite(Method method, String site) {
for (Cache<String, String> cache : this.<String, String>caches(site)) {
for (int i = 0; i < NR_KEYS; ++i) {
assertEquals("Cache=" + addressOf(cache), TestingUtil.v(method, i), cache.get(TestingUtil.k(method, i)));
}
}
}
}