/* * 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.annotation.ParallelTest; import com.hazelcast.test.annotation.QuickTest; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import static com.hazelcast.config.RingbufferConfig.DEFAULT_ASYNC_BACKUP_COUNT; import static com.hazelcast.config.RingbufferConfig.DEFAULT_CAPACITY; import static com.hazelcast.config.RingbufferConfig.DEFAULT_SYNC_BACKUP_COUNT; import static com.hazelcast.internal.partition.InternalPartition.MAX_BACKUP_COUNT; 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.assertSame; import static org.junit.Assert.fail; @RunWith(HazelcastParallelClassRunner.class) @Category({QuickTest.class, ParallelTest.class}) public class RingbufferConfigTest { private static final String NAME = "someRingbuffer"; @Test public void testDefaultSetting() { RingbufferConfig config = new RingbufferConfig(NAME); assertEquals(NAME, config.getName()); assertEquals(DEFAULT_SYNC_BACKUP_COUNT, config.getBackupCount()); assertEquals(DEFAULT_ASYNC_BACKUP_COUNT, config.getAsyncBackupCount()); assertEquals(DEFAULT_CAPACITY, config.getCapacity()); } @Test public void testCloneConstructor() { RingbufferConfig original = new RingbufferConfig(NAME); original.setBackupCount(2).setAsyncBackupCount(1).setCapacity(10); RingbufferConfig clone = new RingbufferConfig(original); assertEquals(original.getName(), clone.getName()); assertEquals(original.getBackupCount(), clone.getBackupCount()); assertEquals(original.getAsyncBackupCount(), clone.getAsyncBackupCount()); assertEquals(original.getCapacity(), clone.getCapacity()); } @Test public void testCloneConstructorWithName() { RingbufferConfig original = new RingbufferConfig(NAME); original.setBackupCount(2).setAsyncBackupCount(1).setCapacity(10); RingbufferConfig clone = new RingbufferConfig("foobar", original); assertEquals("foobar", clone.getName()); assertEquals(original.getBackupCount(), clone.getBackupCount()); assertEquals(original.getAsyncBackupCount(), clone.getAsyncBackupCount()); assertEquals(original.getCapacity(), clone.getCapacity()); } // =================== set capacity =========================== @Test public void setCapacity() { RingbufferConfig config = new RingbufferConfig(NAME); config.setCapacity(1000); assertEquals(1000, config.getCapacity()); } @Test(expected = IllegalArgumentException.class) public void setCapacity_whenTooSmall() { RingbufferConfig config = new RingbufferConfig(NAME); config.setCapacity(0); } // =================== set backups count =========================== @Test public void setBackupCount() { RingbufferConfig config = new RingbufferConfig(NAME); config.setBackupCount(4); assertEquals(4, config.getBackupCount()); } @Test(expected = IllegalArgumentException.class) public void setBackupCount_whenTooSmall() { RingbufferConfig config = new RingbufferConfig(NAME); config.setBackupCount(-1); } @Test(expected = IllegalArgumentException.class) public void setBackupCount_whenTooLarge() { RingbufferConfig ringbufferConfig = new RingbufferConfig(NAME); ringbufferConfig.setBackupCount(MAX_BACKUP_COUNT + 1); } // =================== set async backup count =========================== @Test public void setAsyncBackupCount() { RingbufferConfig config = new RingbufferConfig(NAME); config.setAsyncBackupCount(4); assertEquals(4, config.getAsyncBackupCount()); } @Test(expected = IllegalArgumentException.class) public void setAsyncBackupCount_whenTooSmall() { RingbufferConfig config = new RingbufferConfig(NAME); config.setAsyncBackupCount(-1); } @Test(expected = IllegalArgumentException.class) public void setAsyncBackupCount_whenTooLarge() { RingbufferConfig config = new RingbufferConfig(NAME); config.setAsyncBackupCount(MAX_BACKUP_COUNT + 1); } // ============= get total backup count ==================== @Test public void getTotalBackupCount() { RingbufferConfig config = new RingbufferConfig(NAME); config.setAsyncBackupCount(2); config.setBackupCount(3); int result = config.getTotalBackupCount(); assertEquals(5, result); } // ================== retention ================================= @Test(expected = IllegalArgumentException.class) public void setTimeToLiveSeconds_whenNegative() { RingbufferConfig config = new RingbufferConfig(NAME); config.setTimeToLiveSeconds(-1); } @Test public void setTimeToLiveSeconds() { RingbufferConfig config = new RingbufferConfig(NAME); RingbufferConfig returned = config.setTimeToLiveSeconds(10); assertSame(returned, config); assertEquals(10, config.getTimeToLiveSeconds()); } // ================== inMemoryFormat ================================= @Test(expected = NullPointerException.class) public void setInMemoryFormat_whenNull() { RingbufferConfig config = new RingbufferConfig(NAME); config.setInMemoryFormat(null); } @Test(expected = IllegalArgumentException.class) public void setInMemoryFormat_whenNative() { RingbufferConfig config = new RingbufferConfig(NAME); config.setInMemoryFormat(InMemoryFormat.NATIVE); } @Test public void setInMemoryFormat() { RingbufferConfig config = new RingbufferConfig(NAME); RingbufferConfig returned = config.setInMemoryFormat(InMemoryFormat.OBJECT); assertSame(config, returned); assertEquals(InMemoryFormat.OBJECT, config.getInMemoryFormat()); } // ==================== RingbufferStoreConfig ================================ @Test public void getRingbufferStoreConfig() { final RingbufferConfig config = new RingbufferConfig(NAME); final RingbufferStoreConfig ringbufferConfig = config.getRingbufferStoreConfig(); assertNotNull(ringbufferConfig); assertFalse(ringbufferConfig.isEnabled()); } @Test public void setRingbufferStoreConfig() { RingbufferStoreConfig ringbufferStoreConfig = new RingbufferStoreConfig() .setEnabled(true) .setClassName("myClassName"); RingbufferConfig config = new RingbufferConfig(NAME); config.setRingbufferStoreConfig(ringbufferStoreConfig); assertEquals(ringbufferStoreConfig, config.getRingbufferStoreConfig()); } // ==================== toString ================================ @Test public void test_toString() { RingbufferConfig config = new RingbufferConfig(NAME); config.setRingbufferStoreConfig(new RingbufferStoreConfig()); String s = config.toString(); assertEquals("RingbufferConfig{name='someRingbuffer', capacity=10000, backupCount=1," + " asyncBackupCount=0, timeToLiveSeconds=0, inMemoryFormat=BINARY," + " ringbufferStoreConfig=RingbufferStoreConfig{enabled=true, className='null', properties={}}}", s); } // =================== getAsReadOnly ============================ @Test public void getAsReadOnly() { RingbufferStoreConfig ringbufferStoreConfig = new RingbufferStoreConfig(); RingbufferConfig original = new RingbufferConfig(NAME) .setBackupCount(2) .setAsyncBackupCount(1) .setCapacity(10) .setTimeToLiveSeconds(400) .setRingbufferStoreConfig(ringbufferStoreConfig); RingbufferConfig readonly = original.getAsReadOnly(); assertNotNull(readonly); assertEquals(original.getName(), readonly.getName()); assertEquals(original.getBackupCount(), readonly.getBackupCount()); assertEquals(original.getAsyncBackupCount(), readonly.getAsyncBackupCount()); assertEquals(original.getCapacity(), readonly.getCapacity()); assertEquals(original.getTimeToLiveSeconds(), readonly.getTimeToLiveSeconds()); assertEquals(original.getInMemoryFormat(), readonly.getInMemoryFormat()); assertNotEquals(original.getRingbufferStoreConfig(), readonly.getRingbufferStoreConfig()); try { readonly.setCapacity(10); fail(); } catch (UnsupportedOperationException expected) { } try { readonly.setAsyncBackupCount(1); fail(); } catch (UnsupportedOperationException expected) { } try { readonly.setBackupCount(1); fail(); } catch (UnsupportedOperationException expected) { } try { readonly.setTimeToLiveSeconds(1); fail(); } catch (UnsupportedOperationException expected) { } try { readonly.setInMemoryFormat(InMemoryFormat.OBJECT); fail(); } catch (UnsupportedOperationException expected) { } try { readonly.setRingbufferStoreConfig(null); fail(); } catch (UnsupportedOperationException expected) { } try { readonly.getRingbufferStoreConfig().setEnabled(true); fail(); } catch (UnsupportedOperationException expected) { } original.setRingbufferStoreConfig(null); readonly = original.getAsReadOnly(); assertNotNull(readonly.getRingbufferStoreConfig()); assertFalse(readonly.getRingbufferStoreConfig().isEnabled()); } }