package org.infinispan.query.remote.impl;
import static org.testng.AssertJUnit.assertTrue;
import org.infinispan.Cache;
import org.infinispan.commons.util.Util;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.configuration.global.GlobalConfigurationBuilder;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.query.remote.client.ProtobufMetadataManagerConstants;
import org.infinispan.test.AbstractInfinispanTest;
import org.infinispan.test.MultiCacheManagerCallable;
import org.infinispan.test.TestingUtil;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "query.remote.impl.ProtobufMetadataCachePreserveStateAcrossRestartsTest")
public class ProtobufMetadataCachePreserveStateAcrossRestartsTest extends AbstractInfinispanTest {
protected EmbeddedCacheManager createCacheManager(String persistentStateLocation) throws Exception {
GlobalConfigurationBuilder global = new GlobalConfigurationBuilder().clusteredDefault();
global.globalState().enable().persistentLocation(persistentStateLocation);
EmbeddedCacheManager cacheManager = TestCacheManagerFactory.createClusteredCacheManager(global, new ConfigurationBuilder());
cacheManager.getCache();
return cacheManager;
}
public void testStatePreserved() throws Exception {
String persistentStateLocation = TestingUtil.tmpDirectory(this.getClass());
Util.recursiveFileRemove(persistentStateLocation);
final String persistentStateLocation1 = persistentStateLocation + "/1";
final String persistentStateLocation2 = persistentStateLocation + "/2";
TestingUtil.withCacheManagers(new MultiCacheManagerCallable(createCacheManager(persistentStateLocation1),
createCacheManager(persistentStateLocation2)) {
@Override
public void call() throws Exception {
Cache<String, String> protobufMetadaCache = cms[0].getCache(ProtobufMetadataManagerConstants.PROTOBUF_METADATA_CACHE_NAME);
protobufMetadaCache.put("testA.proto", "package A;");
protobufMetadaCache.put("testB.proto", "import \"testB.proto\";\npackage B;");
}
});
TestingUtil.withCacheManagers(new MultiCacheManagerCallable(createCacheManager(persistentStateLocation1),
createCacheManager(persistentStateLocation2)) {
@Override
public void call() throws Exception {
Cache<String, String> protobufMetadaCache = cms[0].getCache(ProtobufMetadataManagerConstants.PROTOBUF_METADATA_CACHE_NAME);
assertTrue(protobufMetadaCache.containsKey("testA.proto"));
assertTrue(protobufMetadaCache.containsKey("testB.proto"));
assertTrue(protobufMetadaCache.containsKey("testB.proto.errors"));
}
});
}
}