/*
* 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.replicatedmap.impl.record;
import com.hazelcast.test.HazelcastParallelClassRunner;
import com.hazelcast.test.annotation.ParallelTest;
import com.hazelcast.test.annotation.QuickTest;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import static com.hazelcast.test.HazelcastTestSupport.sleepAtLeastMillis;
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.assertTrue;
@RunWith(HazelcastParallelClassRunner.class)
@Category({QuickTest.class, ParallelTest.class})
public class ReplicatedRecordTest {
private ReplicatedRecord<String, String> replicatedRecord;
private ReplicatedRecord<String, String> replicatedRecordSameAttributes;
private ReplicatedRecord<String, String> replicatedRecordOtherKey;
private ReplicatedRecord<String, String> replicatedRecordOtherValue;
private ReplicatedRecord<String, String> replicatedRecordOtherTtl;
private ReplicatedRecord<String, String> tombStone;
@Before
public void setUp() {
replicatedRecord = new ReplicatedRecord<String, String>("key", "value", 0);
replicatedRecordSameAttributes = new ReplicatedRecord<String, String>("key", "value", 0);
replicatedRecordOtherKey = new ReplicatedRecord<String, String>("otherKey", "value", 0);
replicatedRecordOtherValue = new ReplicatedRecord<String, String>("key", "otherValue", 0);
replicatedRecordOtherTtl = new ReplicatedRecord<String, String>("key", "value", 1);
tombStone = new ReplicatedRecord<String, String>("key", null, 0);
}
@Test
public void testGetKey() {
assertEquals(0, replicatedRecord.getHits());
assertEquals("key", replicatedRecord.getKey());
assertEquals(1, replicatedRecord.getHits());
}
@Test
public void testGetKeyInternal() {
assertEquals(0, replicatedRecord.getHits());
assertEquals("key", replicatedRecord.getKeyInternal());
assertEquals(0, replicatedRecord.getHits());
}
@Test
public void testGetValue() {
assertEquals(0, replicatedRecord.getHits());
assertEquals("value", replicatedRecord.getValue());
assertEquals(1, replicatedRecord.getHits());
}
@Test
public void testGetValueInternal() {
assertEquals(0, replicatedRecord.getHits());
assertEquals("value", replicatedRecord.getValueInternal());
assertEquals(0, replicatedRecord.getHits());
}
@Test
public void testGetTombStone() {
assertFalse(replicatedRecord.isTombstone());
assertTrue(tombStone.isTombstone());
}
@Test
public void testGetTtlMillis() {
assertEquals(0, replicatedRecord.getTtlMillis());
assertEquals(1, replicatedRecordOtherTtl.getTtlMillis());
}
@Test
public void testSetValue() {
assertEquals(0, replicatedRecord.getHits());
assertEquals("value", replicatedRecord.getValueInternal());
replicatedRecord.setValue("newValue", 0);
assertEquals(1, replicatedRecord.getHits());
assertEquals("newValue", replicatedRecord.getValueInternal());
}
@Test
public void testSetValueInternal() {
assertEquals(0, replicatedRecord.getHits());
assertEquals("value", replicatedRecord.getValueInternal());
replicatedRecord.setValueInternal("newValue", 0);
assertEquals(0, replicatedRecord.getHits());
assertEquals("newValue", replicatedRecord.getValueInternal());
}
@Test
public void testGetUpdateTime() {
long lastUpdateTime = replicatedRecord.getUpdateTime();
sleepAtLeastMillis(100);
replicatedRecord.setValue("newValue", 0);
assertTrue("replicatedRecord.getUpdateTime() should return a greater update time",
replicatedRecord.getUpdateTime() > lastUpdateTime);
}
@Test
public void testSetUpdateTime() {
replicatedRecord.setUpdateTime(2342);
assertEquals(2342, replicatedRecord.getUpdateTime());
}
@Test
public void testSetHits() {
replicatedRecord.setHits(4223);
assertEquals(4223, replicatedRecord.getHits());
}
@Test
public void getLastAccessTime() {
long lastAccessTime = replicatedRecord.getLastAccessTime();
sleepAtLeastMillis(100);
replicatedRecord.setValue("newValue", 0);
assertTrue("replicatedRecord.getLastAccessTime() should return a greater access time",
replicatedRecord.getLastAccessTime() > lastAccessTime);
}
@Test
public void testSetAccessTime() {
replicatedRecord.setLastAccessTime(1234);
assertEquals(1234, replicatedRecord.getLastAccessTime());
}
@Test
public void testCreationTime() {
replicatedRecord.setCreationTime(4321);
assertEquals(4321, replicatedRecord.getCreationTime());
}
@Test
public void testEquals() {
assertEquals(replicatedRecord, replicatedRecord);
assertEquals(replicatedRecord, replicatedRecordSameAttributes);
assertNotEquals(replicatedRecord, null);
assertNotEquals(replicatedRecord, new Object());
assertNotEquals(replicatedRecord, replicatedRecordOtherKey);
assertNotEquals(replicatedRecord, replicatedRecordOtherValue);
assertNotEquals(replicatedRecord, replicatedRecordOtherTtl);
}
@Test
public void testHashCode() {
assertEquals(replicatedRecord.hashCode(), replicatedRecord.hashCode());
assertEquals(replicatedRecord.hashCode(), replicatedRecordSameAttributes.hashCode());
assertNotEquals(replicatedRecord.hashCode(), replicatedRecordOtherKey.hashCode());
assertNotEquals(replicatedRecord.hashCode(), replicatedRecordOtherValue.hashCode());
assertNotEquals(replicatedRecord.hashCode(), replicatedRecordOtherTtl.hashCode());
}
@Test
public void testToString() {
assertNotNull(replicatedRecord.toString());
}
}