/*
* 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.test.HazelcastParallelClassRunner;
import com.hazelcast.test.HazelcastTestSupport;
import com.hazelcast.test.annotation.ParallelTest;
import com.hazelcast.test.annotation.QuickTest;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import java.util.Properties;
import static com.hazelcast.config.MapStoreConfig.DEFAULT_WRITE_BATCH_SIZE;
import static com.hazelcast.config.MapStoreConfig.DEFAULT_WRITE_DELAY_SECONDS;
import static com.hazelcast.config.MapStoreConfig.InitialLoadMode.EAGER;
import static com.hazelcast.config.MapStoreConfig.InitialLoadMode.LAZY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@RunWith(HazelcastParallelClassRunner.class)
@Category({QuickTest.class, ParallelTest.class})
public class MapStoreConfigTest extends HazelcastTestSupport {
MapStoreConfig defaultCfg = new MapStoreConfig();
MapStoreConfig cfgNotEnabled = new MapStoreConfig().setEnabled(false);
MapStoreConfig cfgNotWriteCoalescing = new MapStoreConfig().setWriteCoalescing(false);
MapStoreConfig cfgNonDefaultWriteDelaySeconds = new MapStoreConfig()
.setWriteDelaySeconds(DEFAULT_WRITE_DELAY_SECONDS + 1);
MapStoreConfig cfgNonDefaultWriteBatchSize = new MapStoreConfig()
.setWriteBatchSize(DEFAULT_WRITE_BATCH_SIZE + 1);
MapStoreConfig cfgNonNullClassName = new MapStoreConfig().setClassName("some.class");
MapStoreConfig cfgNonNullOtherClassName = new MapStoreConfig().setClassName("some.class.other");
MapStoreConfig cfgNonNullFactoryClassName = new MapStoreConfig().setFactoryClassName("factoryClassName");
MapStoreConfig cfgNonNullOtherFactoryClassName = new MapStoreConfig().setFactoryClassName("some.class.other");
MapStoreConfig cfgNonNullImplementation = new MapStoreConfig().setImplementation(new Object());
MapStoreConfig cfgNonNullOtherImplementation = new MapStoreConfig().setImplementation(new Object());
MapStoreConfig cfgNonNullFactoryImplementation = new MapStoreConfig().setFactoryImplementation(new Object());
MapStoreConfig cfgNonNullOtherFactoryImplementation = new MapStoreConfig().setFactoryImplementation(new Object());
MapStoreConfig cfgWithProperties = new MapStoreConfig().setProperty("a", "b");
MapStoreConfig cfgEagerMode = new MapStoreConfig().setInitialLoadMode(EAGER);
MapStoreConfig cfgNullMode = new MapStoreConfig().setInitialLoadMode(null);
@Test
public void getAsReadOnly() {
MapStoreConfigReadOnly readOnlyCfg = cfgNonNullClassName.getAsReadOnly();
assertEquals("some.class", readOnlyCfg.getClassName());
assertEquals(cfgNonNullClassName, readOnlyCfg);
// also test returning cached read only instance
assertEquals(readOnlyCfg, cfgNonNullClassName.getAsReadOnly());
}
@Test
public void getClassName() {
assertNull(new MapStoreConfig().getClassName());
}
@Test
public void setClassName() {
assertEquals("some.class", cfgNonNullClassName.getClassName());
assertEquals(new MapStoreConfig().setClassName("some.class"), cfgNonNullClassName);
}
@Test
public void getFactoryClassName() {
assertNull(new MapStoreConfig().getFactoryClassName());
}
@Test
public void setFactoryClassName() {
assertEquals("factoryClassName", cfgNonNullFactoryClassName.getFactoryClassName());
assertEquals(new MapStoreConfig().setFactoryClassName("factoryClassName"), cfgNonNullFactoryClassName);
}
@Test
public void getWriteDelaySeconds() {
assertEquals(DEFAULT_WRITE_DELAY_SECONDS, new MapStoreConfig().getWriteDelaySeconds());
}
@Test
public void setWriteDelaySeconds() {
assertEquals(DEFAULT_WRITE_DELAY_SECONDS + 1, cfgNonDefaultWriteDelaySeconds.getWriteDelaySeconds());
assertEquals(new MapStoreConfig().setWriteDelaySeconds(DEFAULT_WRITE_DELAY_SECONDS + 1), cfgNonDefaultWriteDelaySeconds);
}
@Test
public void getWriteBatchSize() {
assertEquals(DEFAULT_WRITE_BATCH_SIZE, new MapStoreConfig().getWriteBatchSize());
}
@Test
public void setWriteBatchSize() {
assertEquals(DEFAULT_WRITE_BATCH_SIZE + 1, cfgNonDefaultWriteBatchSize.getWriteBatchSize());
assertEquals(new MapStoreConfig().setWriteBatchSize(DEFAULT_WRITE_BATCH_SIZE + 1), cfgNonDefaultWriteBatchSize);
}
@Test(expected = IllegalArgumentException.class)
public void setWriteBatchSize_whenLessThanOne() {
MapStoreConfig cfg = new MapStoreConfig().setWriteBatchSize(-15);
}
@Test
public void isEnabled() {
assertTrue(new MapStoreConfig().isEnabled());
}
@Test
public void setEnabled() {
assertFalse(cfgNotEnabled.isEnabled());
assertEquals(new MapStoreConfig().setEnabled(false), cfgNotEnabled);
}
@Test
public void setImplementation() {
Object mapStoreImpl = new Object();
MapStoreConfig cfg = new MapStoreConfig().setImplementation(mapStoreImpl);
assertEquals(mapStoreImpl, cfg.getImplementation());
assertEquals(new MapStoreConfig().setImplementation(mapStoreImpl), cfg);
}
@Test
public void getImplementation() {
assertNull(new MapStoreConfig().getImplementation());
}
@Test
public void setFactoryImplementation() {
Object mapStoreFactoryImpl = new Object();
MapStoreConfig cfg = new MapStoreConfig().setFactoryImplementation(mapStoreFactoryImpl);
assertEquals(mapStoreFactoryImpl, cfg.getFactoryImplementation());
assertEquals(new MapStoreConfig().setFactoryImplementation(mapStoreFactoryImpl), cfg);
}
@Test
public void getFactoryImplementation() {
assertNull(new MapStoreConfig().getFactoryImplementation());
}
@Test
public void setProperty() {
MapStoreConfig cfg = new MapStoreConfig().setProperty("a", "b");
assertEquals("b", cfg.getProperty("a"));
assertEquals(new MapStoreConfig().setProperty("a", "b"), cfg);
}
@Test
public void getProperty() {
assertNull(new MapStoreConfig().getProperty("a"));
}
@Test
public void getProperties() {
assertEquals(new Properties(), new MapStoreConfig().getProperties());
}
@Test
public void setProperties() {
Properties properties = new Properties();
properties.put("a", "b");
MapStoreConfig cfg = new MapStoreConfig().setProperties(properties);
assertEquals(properties, cfg.getProperties());
assertEquals("b", cfg.getProperty("a"));
Properties otherProperties = new Properties();
otherProperties.put("a", "b");
assertEquals(new MapStoreConfig().setProperties(otherProperties), cfg);
}
@Test
public void getInitialLoadMode() {
assertEquals(LAZY, new MapStoreConfig().getInitialLoadMode());
}
@Test
public void setInitialLoadMode() {
MapStoreConfig cfg = new MapStoreConfig().setInitialLoadMode(EAGER);
assertEquals(EAGER, cfg.getInitialLoadMode());
assertEquals(new MapStoreConfig().setInitialLoadMode(EAGER), cfg);
}
@Test
public void isWriteCoalescing() {
assertEquals(MapStoreConfig.DEFAULT_WRITE_COALESCING, new MapStoreConfig().isWriteCoalescing());
}
@Test
public void setWriteCoalescing() {
MapStoreConfig cfg = new MapStoreConfig();
cfg.setWriteCoalescing(false);
assertFalse(cfg.isWriteCoalescing());
MapStoreConfig otherCfg = new MapStoreConfig();
otherCfg.setWriteCoalescing(false);
assertEquals(otherCfg, cfg);
}
@Test
public void equals_whenNull() {
MapStoreConfig cfg = new MapStoreConfig();
assertFalse(cfg.equals(null));
}
@Test
public void equals_whenSame() {
MapStoreConfig cfg = new MapStoreConfig();
assertTrue(cfg.equals(cfg));
}
@Test
public void equals_whenOtherClass() {
MapStoreConfig cfg = new MapStoreConfig();
assertFalse(cfg.equals(new Object()));
}
@Test
public void testEquals() {
assertFalse(defaultCfg.equals(cfgNotEnabled));
assertFalse(defaultCfg.equals(cfgNotWriteCoalescing));
assertFalse(defaultCfg.equals(cfgNonDefaultWriteDelaySeconds));
assertFalse(defaultCfg.equals(cfgNonDefaultWriteBatchSize));
// class name branches
assertFalse(defaultCfg.equals(cfgNonNullClassName));
assertFalse(cfgNonNullClassName.equals(cfgNonNullOtherClassName));
assertFalse(cfgNonNullClassName.equals(defaultCfg));
// factory class name branches
assertFalse(defaultCfg.equals(cfgNonNullFactoryClassName));
assertFalse(cfgNonNullFactoryClassName.equals(cfgNonNullOtherFactoryClassName));
assertFalse(cfgNonNullFactoryClassName.equals(defaultCfg));
// implementation
assertFalse(defaultCfg.equals(cfgNonNullImplementation));
assertFalse(cfgNonNullImplementation.equals(cfgNonNullOtherImplementation));
assertFalse(cfgNonNullImplementation.equals(defaultCfg));
// factory implementation
assertFalse(defaultCfg.equals(cfgNonNullFactoryImplementation));
assertFalse(cfgNonNullFactoryImplementation.equals(cfgNonNullOtherFactoryImplementation));
assertFalse(cfgNonNullFactoryImplementation.equals(defaultCfg));
assertFalse(defaultCfg.equals(cfgWithProperties));
assertFalse(defaultCfg.equals(cfgEagerMode));
}
@Test
public void testHashCode() {
assertNotEquals(defaultCfg.hashCode(), cfgNotEnabled.hashCode());
assertNotEquals(defaultCfg.hashCode(), cfgNotWriteCoalescing.hashCode());
assertNotEquals(defaultCfg.hashCode(), cfgNonNullClassName.hashCode());
assertNotEquals(defaultCfg.hashCode(), cfgNonNullFactoryClassName.hashCode());
assertNotEquals(defaultCfg.hashCode(), cfgNonNullImplementation.hashCode());
assertNotEquals(defaultCfg.hashCode(), cfgNonNullFactoryImplementation.hashCode());
assertNotEquals(defaultCfg.hashCode(), cfgEagerMode.hashCode());
assertNotEquals(defaultCfg.hashCode(), cfgNullMode.hashCode());
}
@Test
public void testToString() {
assertContains(defaultCfg.toString(), "MapStoreConfig");
}
}