/*
* Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hazelcast.spring.context;
import com.hazelcast.config.CachePartitionLostListenerConfig;
import com.hazelcast.config.CacheSimpleConfig;
import com.hazelcast.config.CacheSimpleConfig.ExpiryPolicyFactoryConfig;
import com.hazelcast.config.CacheSimpleConfig.ExpiryPolicyFactoryConfig.DurationConfig;
import com.hazelcast.config.CacheSimpleConfig.ExpiryPolicyFactoryConfig.TimedExpiryPolicyFactoryConfig;
import com.hazelcast.config.CacheSimpleConfig.ExpiryPolicyFactoryConfig.TimedExpiryPolicyFactoryConfig.ExpiryPolicyType;
import com.hazelcast.config.Config;
import com.hazelcast.config.EvictionConfig;
import com.hazelcast.config.EvictionPolicy;
import com.hazelcast.config.InMemoryFormat;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.spring.CustomSpringJUnit4ClassRunner;
import com.hazelcast.test.annotation.QuickTest;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
* Tests for JCache parser.
*/
@RunWith(CustomSpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"test-jcache-application-context.xml"})
@Category(QuickTest.class)
public class TestJCache {
@Autowired
private ApplicationContext context;
@Resource(name = "instance1")
private HazelcastInstance instance1;
@BeforeClass
@AfterClass
public static void tearDown() {
Hazelcast.shutdownAll();
}
@Test
public void testContextInitializedSuccessfully() {
assertNotNull(context);
}
@Test
public void testConfig() {
assertNotNull(instance1);
CacheSimpleConfig simpleConfig = instance1.getConfig().getCacheConfigs().get("cache1");
assertNotNull(simpleConfig);
assertEquals(1, simpleConfig.getAsyncBackupCount());
assertEquals(2, simpleConfig.getBackupCount());
assertEquals("java.lang.Integer", simpleConfig.getKeyType());
assertEquals("java.lang.String", simpleConfig.getValueType());
assertTrue(simpleConfig.isStatisticsEnabled());
assertTrue(simpleConfig.isManagementEnabled());
assertTrue(simpleConfig.isReadThrough());
assertTrue(simpleConfig.isWriteThrough());
assertEquals("com.hazelcast.cache.MyCacheLoaderFactory", simpleConfig.getCacheLoaderFactory());
assertEquals("com.hazelcast.cache.MyCacheWriterFactory", simpleConfig.getCacheWriterFactory());
assertEquals("com.hazelcast.cache.MyExpiryPolicyFactory",
simpleConfig.getExpiryPolicyFactoryConfig().getClassName());
assertEquals(InMemoryFormat.OBJECT, simpleConfig.getInMemoryFormat());
assertNotNull(simpleConfig.getEvictionConfig());
assertEquals(50, simpleConfig.getEvictionConfig().getSize());
assertEquals(EvictionConfig.MaxSizePolicy.ENTRY_COUNT,
simpleConfig.getEvictionConfig().getMaximumSizePolicy());
assertEquals(EvictionPolicy.LRU, simpleConfig.getEvictionConfig().getEvictionPolicy());
}
@Test
public void cacheConfigXmlTest_TimedCreatedExpiryPolicyFactory() {
Config config = instance1.getConfig();
CacheSimpleConfig cacheWithTimedCreatedExpiryPolicyFactoryConfig =
config.getCacheConfig("cacheWithTimedCreatedExpiryPolicyFactory");
ExpiryPolicyFactoryConfig expiryPolicyFactoryConfig =
cacheWithTimedCreatedExpiryPolicyFactoryConfig.getExpiryPolicyFactoryConfig();
ExpiryPolicyFactoryConfig.TimedExpiryPolicyFactoryConfig timedExpiryPolicyFactoryConfig =
expiryPolicyFactoryConfig.getTimedExpiryPolicyFactoryConfig();
DurationConfig durationConfig = timedExpiryPolicyFactoryConfig.getDurationConfig();
assertNotNull(expiryPolicyFactoryConfig);
assertNotNull(timedExpiryPolicyFactoryConfig);
assertNotNull(durationConfig);
assertNull(expiryPolicyFactoryConfig.getClassName());
assertEquals(ExpiryPolicyType.CREATED, timedExpiryPolicyFactoryConfig.getExpiryPolicyType());
assertEquals(1, durationConfig.getDurationAmount());
assertEquals(TimeUnit.DAYS, durationConfig.getTimeUnit());
}
@Test
public void cacheConfigXmlTest_TimedAccessedExpiryPolicyFactory() {
Config config = instance1.getConfig();
CacheSimpleConfig cacheWithTimedAccessedExpiryPolicyFactoryConfig =
config.getCacheConfig("cacheWithTimedAccessedExpiryPolicyFactory");
ExpiryPolicyFactoryConfig expiryPolicyFactoryConfig =
cacheWithTimedAccessedExpiryPolicyFactoryConfig.getExpiryPolicyFactoryConfig();
TimedExpiryPolicyFactoryConfig timedExpiryPolicyFactoryConfig =
expiryPolicyFactoryConfig.getTimedExpiryPolicyFactoryConfig();
DurationConfig durationConfig = timedExpiryPolicyFactoryConfig.getDurationConfig();
assertNotNull(expiryPolicyFactoryConfig);
assertNotNull(timedExpiryPolicyFactoryConfig);
assertNotNull(durationConfig);
assertNull(expiryPolicyFactoryConfig.getClassName());
assertEquals(ExpiryPolicyType.ACCESSED, timedExpiryPolicyFactoryConfig.getExpiryPolicyType());
assertEquals(2, durationConfig.getDurationAmount());
assertEquals(TimeUnit.HOURS, durationConfig.getTimeUnit());
}
@Test
public void cacheConfigXmlTest_TimedModifiedExpiryPolicyFactory() {
Config config = instance1.getConfig();
CacheSimpleConfig cacheWithTimedModifiedExpiryPolicyFactoryConfig =
config.getCacheConfig("cacheWithTimedModifiedExpiryPolicyFactory");
ExpiryPolicyFactoryConfig expiryPolicyFactoryConfig =
cacheWithTimedModifiedExpiryPolicyFactoryConfig.getExpiryPolicyFactoryConfig();
TimedExpiryPolicyFactoryConfig timedExpiryPolicyFactoryConfig =
expiryPolicyFactoryConfig.getTimedExpiryPolicyFactoryConfig();
DurationConfig durationConfig = timedExpiryPolicyFactoryConfig.getDurationConfig();
assertNotNull(expiryPolicyFactoryConfig);
assertNotNull(timedExpiryPolicyFactoryConfig);
assertNotNull(durationConfig);
assertNull(expiryPolicyFactoryConfig.getClassName());
assertEquals(ExpiryPolicyType.MODIFIED, timedExpiryPolicyFactoryConfig.getExpiryPolicyType());
assertEquals(3, durationConfig.getDurationAmount());
assertEquals(TimeUnit.MINUTES, durationConfig.getTimeUnit());
}
@Test
public void cacheConfigXmlTest_TimedModifiedTouchedPolicyFactory() {
Config config = instance1.getConfig();
CacheSimpleConfig cacheWithTimedTouchedExpiryPolicyFactoryConfig =
config.getCacheConfig("cacheWithTimedTouchedExpiryPolicyFactory");
ExpiryPolicyFactoryConfig expiryPolicyFactoryConfig =
cacheWithTimedTouchedExpiryPolicyFactoryConfig.getExpiryPolicyFactoryConfig();
TimedExpiryPolicyFactoryConfig timedExpiryPolicyFactoryConfig =
expiryPolicyFactoryConfig.getTimedExpiryPolicyFactoryConfig();
DurationConfig durationConfig = timedExpiryPolicyFactoryConfig.getDurationConfig();
assertNotNull(expiryPolicyFactoryConfig);
assertNotNull(timedExpiryPolicyFactoryConfig);
assertNotNull(durationConfig);
assertNull(expiryPolicyFactoryConfig.getClassName());
assertEquals(ExpiryPolicyType.TOUCHED, timedExpiryPolicyFactoryConfig.getExpiryPolicyType());
assertEquals(4, durationConfig.getDurationAmount());
assertEquals(TimeUnit.SECONDS, durationConfig.getTimeUnit());
}
@Test
public void cacheConfigXmlTest_TimedEternalTouchedPolicyFactory() {
Config config = instance1.getConfig();
CacheSimpleConfig cacheWithTimedEternalExpiryPolicyFactoryConfig =
config.getCacheConfig("cacheWithTimedEternalExpiryPolicyFactory");
ExpiryPolicyFactoryConfig expiryPolicyFactoryConfig =
cacheWithTimedEternalExpiryPolicyFactoryConfig.getExpiryPolicyFactoryConfig();
TimedExpiryPolicyFactoryConfig timedExpiryPolicyFactoryConfig =
expiryPolicyFactoryConfig.getTimedExpiryPolicyFactoryConfig();
DurationConfig durationConfig = timedExpiryPolicyFactoryConfig.getDurationConfig();
assertNotNull(expiryPolicyFactoryConfig);
assertNotNull(timedExpiryPolicyFactoryConfig);
assertNull(durationConfig);
assertNull(expiryPolicyFactoryConfig.getClassName());
assertEquals(ExpiryPolicyType.ETERNAL, timedExpiryPolicyFactoryConfig.getExpiryPolicyType());
}
@Test
public void cacheConfigXmlTest_PartitionLostListener() {
Config config = instance1.getConfig();
CacheSimpleConfig cacheWithPartitionLostListenerConfig =
config.getCacheConfig("cacheWithPartitionLostListener");
List<CachePartitionLostListenerConfig> partitionLostListenerConfigs =
cacheWithPartitionLostListenerConfig.getPartitionLostListenerConfigs();
assertNotNull(partitionLostListenerConfigs);
assertEquals(1, partitionLostListenerConfigs.size());
assertEquals(partitionLostListenerConfigs.get(0).getClassName(), "DummyCachePartitionLostListenerImpl");
assertNotNull(partitionLostListenerConfigs);
assertEquals(1, partitionLostListenerConfigs.size());
assertEquals(partitionLostListenerConfigs.get(0).getClassName(), "DummyCachePartitionLostListenerImpl");
}
@Test
public void cacheConfigXmlTest_ClusterQuorum() {
assertNotNull(instance1);
CacheSimpleConfig simpleConfig = instance1.getConfig().getCacheConfig("cacheWithQuorumRef");
assertNotNull(simpleConfig);
assertEquals("cacheQuorumRefString", simpleConfig.getQuorumName());
}
@Test
public void cacheConfigXmlTest_DefaultMergePolicy() {
assertNotNull(instance1);
CacheSimpleConfig cacheWithDefaultMergePolicyConfig =
instance1.getConfig().getCacheConfig("cacheWithDefaultMergePolicy");
assertNotNull(cacheWithDefaultMergePolicyConfig);
assertEquals(CacheSimpleConfig.DEFAULT_CACHE_MERGE_POLICY, cacheWithDefaultMergePolicyConfig.getMergePolicy());
}
@Test
public void cacheConfigXmlTest_CustomMergePolicy() {
assertNotNull(instance1);
CacheSimpleConfig cacheWithCustomMergePolicyConfig =
instance1.getConfig().getCacheConfig("cacheWithCustomMergePolicy");
assertNotNull(cacheWithCustomMergePolicyConfig);
assertEquals("MyDummyMergePolicy", cacheWithCustomMergePolicyConfig.getMergePolicy());
}
@Test
public void cacheConfigXmlTest_ComparatorClassName() {
assertNotNull(instance1);
CacheSimpleConfig cacheConfigWithComparatorClassName =
instance1.getConfig().getCacheConfig("cacheWithComparatorClassName");
assertNotNull(cacheConfigWithComparatorClassName);
EvictionConfig evictionConfig = cacheConfigWithComparatorClassName.getEvictionConfig();
assertNotNull(evictionConfig);
assertEquals("com.mycompany.MyEvictionPolicyComparator", evictionConfig.getComparatorClassName());
}
@Test
public void cacheConfigXmlTest_ComparatorBean() {
assertNotNull(instance1);
CacheSimpleConfig cacheConfigWithComparatorClassName =
instance1.getConfig().getCacheConfig("cacheWithComparatorBean");
assertNotNull(cacheConfigWithComparatorClassName);
EvictionConfig evictionConfig = cacheConfigWithComparatorClassName.getEvictionConfig();
assertNotNull(evictionConfig);
assertEquals(MyEvictionPolicyComparator.class, evictionConfig.getComparator().getClass());
}
@Test
public void cacheConfigXmlTest_SimpleWriterLoader() {
assertNotNull(instance1);
CacheSimpleConfig config =
instance1.getConfig().getCacheConfig("cacheWithSimpleWriterAndLoader");
assertNotNull(config);
assertEquals("com.hazelcast.config.CacheConfigTest$EmptyCacheWriter", config.getCacheWriter());
assertEquals("com.hazelcast.config.CacheConfigTest$MyCacheLoader", config.getCacheLoader());
}
}