/*
* 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.config;
import com.hazelcast.map.listener.MapPartitionLostListener;
import com.hazelcast.test.HazelcastParallelClassRunner;
import com.hazelcast.test.annotation.ParallelTest;
import com.hazelcast.test.annotation.QuickTest;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import java.util.EventListener;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
@RunWith(HazelcastParallelClassRunner.class)
@Category({QuickTest.class, ParallelTest.class})
public class MapConfigTest {
@Test
public void testGetName() {
assertNull(new MapConfig().getName());
}
@Test
public void testSetName() {
assertEquals("map-test-name", new MapConfig().setName("map-test-name").getName());
}
@Test
public void testGetBackupCount() {
assertEquals(MapConfig.DEFAULT_BACKUP_COUNT, new MapConfig().getBackupCount());
}
@Test
public void testSetBackupCount() {
assertEquals(0, new MapConfig().setBackupCount(0).getBackupCount());
assertEquals(1, new MapConfig().setBackupCount(1).getBackupCount());
assertEquals(2, new MapConfig().setBackupCount(2).getBackupCount());
assertEquals(3, new MapConfig().setBackupCount(3).getBackupCount());
}
@Test(expected = IllegalArgumentException.class)
public void testSetBackupCountLowerLimit() {
new MapConfig().setBackupCount(MapConfig.MIN_BACKUP_COUNT - 1);
}
@Test
public void testGetEvictionPercentage() {
assertEquals(MapConfig.DEFAULT_EVICTION_PERCENTAGE, new MapConfig().getEvictionPercentage());
}
@Test
public void testMinEvictionCheckMillis() throws Exception {
assertEquals(MapConfig.DEFAULT_MIN_EVICTION_CHECK_MILLIS, new MapConfig().getMinEvictionCheckMillis());
}
@Test
public void testSetEvictionPercentage() {
assertEquals(50, new MapConfig().setEvictionPercentage(50).getEvictionPercentage());
}
@Test(expected = IllegalArgumentException.class)
public void testSetEvictionPercentageLowerLimit() {
new MapConfig().setEvictionPercentage(MapConfig.MIN_EVICTION_PERCENTAGE - 1);
}
@Test(expected = IllegalArgumentException.class)
public void testSetEvictionPercentageUpperLimit() {
new MapConfig().setEvictionPercentage(MapConfig.MAX_EVICTION_PERCENTAGE + 1);
}
@Test
public void testGetTimeToLiveSeconds() {
assertEquals(MapConfig.DEFAULT_TTL_SECONDS, new MapConfig().getTimeToLiveSeconds());
}
@Test
public void testSetTimeToLiveSeconds() {
assertEquals(1234, new MapConfig().setTimeToLiveSeconds(1234).getTimeToLiveSeconds());
}
@Test
public void testGetMaxIdleSeconds() {
assertEquals(MapConfig.DEFAULT_MAX_IDLE_SECONDS, new MapConfig().getMaxIdleSeconds());
}
@Test
public void testSetMaxIdleSeconds() {
assertEquals(1234, new MapConfig().setMaxIdleSeconds(1234).getMaxIdleSeconds());
}
@Test
public void testGetMaxSize() {
assertEquals(MaxSizeConfig.DEFAULT_MAX_SIZE, new MapConfig().getMaxSizeConfig().getSize());
}
@Test
public void testSetMaxSize() {
assertEquals(1234, new MapConfig().getMaxSizeConfig().setSize(1234).getSize());
}
@Test
public void testSetMaxSizeMustBePositive() {
assertTrue(new MapConfig().getMaxSizeConfig().setSize(-1).getSize() > 0);
}
@Test
public void testGetEvictionPolicy() {
assertEquals(MapConfig.DEFAULT_EVICTION_POLICY, new MapConfig().getEvictionPolicy());
}
@Test
public void testSetEvictionPolicy() {
assertEquals(EvictionPolicy.LRU, new MapConfig().setEvictionPolicy(EvictionPolicy.LRU).getEvictionPolicy());
}
@Test
public void testGetMapStoreConfig() {
MapStoreConfig mapStoreConfig = new MapConfig().getMapStoreConfig();
assertNotNull(mapStoreConfig);
assertFalse(mapStoreConfig.isEnabled());
}
@Test
public void testSetMapStoreConfig() {
MapStoreConfig mapStoreConfig = new MapStoreConfig();
assertEquals(mapStoreConfig, new MapConfig().setMapStoreConfig(mapStoreConfig).getMapStoreConfig());
}
@Test
public void testGetNearCacheConfig() {
assertNull(new MapConfig().getNearCacheConfig());
}
@Test
public void testSetNearCacheConfig() {
NearCacheConfig nearCacheConfig = new NearCacheConfig();
assertEquals(nearCacheConfig, new MapConfig().setNearCacheConfig(nearCacheConfig).getNearCacheConfig());
}
@Test
public void configSetsForDefaultAlwaysIssue466() {
Config config = new XmlConfigBuilder().build();
MapStoreConfig mapStoreConfig = new MapStoreConfig();
mapStoreConfig.setEnabled(true);
mapStoreConfig.setWriteDelaySeconds(0);
mapStoreConfig.setClassName("com.hazelcast.examples.DummyStore");
config.getMapConfig("test").setMapStoreConfig(mapStoreConfig);
config.getMapConfig("default").setMapStoreConfig(null);
assertNotNull(config.getMapConfig("test").getMapStoreConfig());
}
@Test(expected = IllegalArgumentException.class)
public void setAsyncBackupCount_whenItsNegative() {
MapConfig config = new MapConfig();
config.setAsyncBackupCount(-1);
}
@Test
public void setAsyncBackupCount_whenItsZero() {
MapConfig config = new MapConfig();
config.setAsyncBackupCount(0);
}
@Test(expected = IllegalArgumentException.class)
public void setAsyncBackupCount_whenTooLarge() {
MapConfig config = new MapConfig();
// max allowed is 6
config.setAsyncBackupCount(200);
}
@Test(expected = IllegalArgumentException.class)
public void setBackupCount_whenItsNegative() {
MapConfig config = new MapConfig();
config.setBackupCount(-1);
}
@Test
public void setBackupCount_whenItsZero() {
MapConfig config = new MapConfig();
config.setBackupCount(0);
}
@Test(expected = IllegalArgumentException.class)
public void setBackupCount_tooLarge() {
MapConfig config = new MapConfig();
// max allowed is 6
config.setBackupCount(200);
}
@Test(expected = java.lang.UnsupportedOperationException.class)
public void testReadOnlyMapStoreConfigSetWriteBatchSize() {
new MapStoreConfigReadOnly(new MapStoreConfig()).setWriteBatchSize(1);
}
@Test(expected = java.lang.UnsupportedOperationException.class)
public void testReadOnlyMapStoreConfigSetInitialLoadMode() {
new MapStoreConfigReadOnly(new MapStoreConfig()).setInitialLoadMode(MapStoreConfig.InitialLoadMode.EAGER);
}
@Test
public void testMapPartitionLostListenerConfig() {
MapConfig mapConfig = new MapConfig();
MapPartitionLostListener listener = mock(MapPartitionLostListener.class);
mapConfig.addMapPartitionLostListenerConfig(new MapPartitionLostListenerConfig(listener));
MapPartitionLostListenerConfig listenerConfig = new MapPartitionLostListenerConfig();
listenerConfig.setImplementation(listener);
mapConfig.addMapPartitionLostListenerConfig(listenerConfig);
List<MapPartitionLostListenerConfig> listenerConfigs = mapConfig.getPartitionLostListenerConfigs();
assertEquals(2, listenerConfigs.size());
assertEquals(listener, listenerConfigs.get(0).getImplementation());
assertEquals(listener, listenerConfigs.get(1).getImplementation());
}
@Test(expected = UnsupportedOperationException.class)
public void testMapPartitionLostListenerReadOnlyConfig_withClassName() {
MapPartitionLostListenerConfigReadOnly readOnly = new MapPartitionLostListenerConfig().getAsReadOnly();
readOnly.setClassName("com.hz");
}
@Test(expected = UnsupportedOperationException.class)
public void testMapPartitionLostListenerReadOnlyConfig_withImplementation() {
MapPartitionLostListener listener = mock(MapPartitionLostListener.class);
MapPartitionLostListenerConfig listenerConfig = new MapPartitionLostListenerConfig(listener);
MapPartitionLostListenerConfigReadOnly readOnly = listenerConfig.getAsReadOnly();
assertEquals(listener, readOnly.getImplementation());
readOnly.setImplementation(mock(MapPartitionLostListener.class));
}
@Test(expected = UnsupportedOperationException.class)
public void testMapPartitionLostListenerReadOnlyConfig_withEventListenerImplementation() {
MapPartitionLostListenerConfigReadOnly readOnly = new MapPartitionLostListenerConfig().getAsReadOnly();
readOnly.setImplementation(mock(EventListener.class));
}
@Test
public void testMapPartitionLostListener_equalsWithClassName() {
MapPartitionLostListenerConfig config1 = new MapPartitionLostListenerConfig();
config1.setClassName("com.hz");
MapPartitionLostListenerConfig config2 = new MapPartitionLostListenerConfig();
config2.setClassName("com.hz");
MapPartitionLostListenerConfig config3 = new MapPartitionLostListenerConfig();
config3.setClassName("com.hz2");
assertEquals(config1, config2);
assertNotEquals(config1, config3);
assertNotEquals(config2, config3);
}
@Test
public void testMapPartitionLostListener_equalsWithImplementation() {
MapPartitionLostListener listener = mock(MapPartitionLostListener.class);
MapPartitionLostListenerConfig config1 = new MapPartitionLostListenerConfig();
config1.setImplementation(listener);
MapPartitionLostListenerConfig config2 = new MapPartitionLostListenerConfig();
config2.setImplementation(listener);
MapPartitionLostListenerConfig config3 = new MapPartitionLostListenerConfig();
assertEquals(config1, config2);
assertNotEquals(config1, config3);
assertNotEquals(config2, config3);
}
@Test(expected = ConfigurationException.class)
public void givenCacheDeserializedValuesSetToALWAYS_whenSetOptimizeQueriesToFalse_thenThrowConfigurationException() {
// given
MapConfig mapConfig = new MapConfig();
mapConfig.setCacheDeserializedValues(CacheDeserializedValues.ALWAYS);
// when
mapConfig.setOptimizeQueries(false);
}
@Test(expected = ConfigurationException.class)
public void givenCacheDeserializedValuesSetToNEVER_whenSetOptimizeQueriesToTrue_thenThrowConfigurationException() {
// given
MapConfig mapConfig = new MapConfig();
mapConfig.setCacheDeserializedValues(CacheDeserializedValues.NEVER);
// when
mapConfig.setOptimizeQueries(true);
}
@Test
public void givenCacheDeserializedValuesIsDefault_whenSetOptimizeQueriesToTrue_thenSetCacheDeserializedValuesToALWAYS() {
// given
MapConfig mapConfig = new MapConfig();
// when
mapConfig.setOptimizeQueries(true);
// then
CacheDeserializedValues cacheDeserializedValues = mapConfig.getCacheDeserializedValues();
assertEquals(CacheDeserializedValues.ALWAYS, cacheDeserializedValues);
}
@Test
public void givenCacheDeserializedValuesIsDefault_thenIsOptimizeQueriesReturnFalse() {
// given
MapConfig mapConfig = new MapConfig();
// then
boolean optimizeQueries = mapConfig.isOptimizeQueries();
assertFalse(optimizeQueries);
}
@Test
public void givenCacheDeserializedValuesIsDefault_whenSetCacheDeserializedValuesToALWAYS_thenIsOptimizeQueriesReturnTrue() {
// given
MapConfig mapConfig = new MapConfig();
// when
mapConfig.setCacheDeserializedValues(CacheDeserializedValues.ALWAYS);
// then
boolean optimizeQueries = mapConfig.isOptimizeQueries();
assertTrue(optimizeQueries);
}
@Test
public void givenCacheDeserializedValuesIsDefault_whenSetCacheDeserializedValuesToNEVER_thenIsOptimizeQueriesReturnFalse() {
// given
MapConfig mapConfig = new MapConfig();
// when
mapConfig.setCacheDeserializedValues(CacheDeserializedValues.NEVER);
// then
boolean optimizeQueries = mapConfig.isOptimizeQueries();
assertFalse(optimizeQueries);
}
@Test(expected = ConfigurationException.class)
public void givenSetOptimizeQueryIsTrue_whenSetCacheDeserializedValuesToNEVER_thenThrowConfigurationException() {
// given
MapConfig mapConfig = new MapConfig();
mapConfig.setOptimizeQueries(true);
// when
mapConfig.setCacheDeserializedValues(CacheDeserializedValues.NEVER);
}
@Test(expected = ConfigurationException.class)
public void givenSetOptimizeQueryIsFalse_whenSetCacheDeserializedValuesToALWAYS_thenThrowConfigurationException() {
// given
MapConfig mapConfig = new MapConfig();
mapConfig.setOptimizeQueries(false);
// when
mapConfig.setCacheDeserializedValues(CacheDeserializedValues.ALWAYS);
}
@Test(expected = ConfigurationException.class)
public void givenSetOptimizeQueryIsTrue_whenSetCacheDeserializedValuesToINDEX_ONLY_thenThrowConfigurationException() {
// given
MapConfig mapConfig = new MapConfig();
mapConfig.setOptimizeQueries(true);
// when
mapConfig.setCacheDeserializedValues(CacheDeserializedValues.INDEX_ONLY);
}
@Test
@Ignore(value = "this MapStoreConfig does not override equals/hashcode -> this cannot pass right now")
public void givenSetCacheDeserializedValuesIsINDEX_ONLY_whenComparedWithOtherConfigWhereCacheIsINDEX_ONLY_thenReturnTrue() {
// given
MapConfig mapConfig = new MapConfig();
mapConfig.setCacheDeserializedValues(CacheDeserializedValues.INDEX_ONLY);
// when
MapConfig otherMapConfig = new MapConfig();
otherMapConfig.setCacheDeserializedValues(CacheDeserializedValues.INDEX_ONLY);
// then
assertEquals(mapConfig, otherMapConfig);
}
}