| package org.onlab.onos.store.service.impl; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.nio.file.Files; |
| import java.util.List; |
| |
| import net.kuujo.copycat.internal.log.OperationEntry; |
| import net.kuujo.copycat.log.Entry; |
| import net.kuujo.copycat.log.Log; |
| |
| import org.junit.After; |
| import org.junit.Assert; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.onlab.onos.store.serializers.StoreSerializer; |
| |
| import com.google.common.testing.EqualsTester; |
| |
| /** |
| * Test the MapDBLog implementation. |
| */ |
| public class MapDBLogTest { |
| |
| private static final String DB_FILE_NAME = "mapdbTest"; |
| private static final StoreSerializer SERIALIZER = ClusterMessagingProtocol.SERIALIZER; |
| private static final Entry TEST_ENTRY1 = new OperationEntry(1, "test1"); |
| private static final Entry TEST_ENTRY2 = new OperationEntry(2, "test12"); |
| private static final Entry TEST_ENTRY3 = new OperationEntry(3, "test123"); |
| private static final Entry TEST_ENTRY4 = new OperationEntry(4, "test1234"); |
| |
| private static final Entry TEST_SNAPSHOT_ENTRY = new OperationEntry(5, "snapshot"); |
| |
| private static final long TEST_ENTRY1_SIZE = SERIALIZER.encode(TEST_ENTRY1).length; |
| private static final long TEST_ENTRY2_SIZE = SERIALIZER.encode(TEST_ENTRY2).length; |
| private static final long TEST_ENTRY3_SIZE = SERIALIZER.encode(TEST_ENTRY3).length; |
| private static final long TEST_ENTRY4_SIZE = SERIALIZER.encode(TEST_ENTRY4).length; |
| |
| private static final long TEST_SNAPSHOT_ENTRY_SIZE = SERIALIZER.encode(TEST_SNAPSHOT_ENTRY).length; |
| |
| @Before |
| public void setUp() throws Exception { |
| } |
| |
| @After |
| public void tearDown() throws Exception { |
| Files.deleteIfExists(new File(DB_FILE_NAME).toPath()); |
| Files.deleteIfExists(new File(DB_FILE_NAME + ".t").toPath()); |
| Files.deleteIfExists(new File(DB_FILE_NAME + ".p").toPath()); |
| } |
| |
| @Test(expected = IllegalStateException.class) |
| public void testAssertOpen() { |
| Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER); |
| log.size(); |
| } |
| |
| @Test |
| public void testAppendEntry() throws IOException { |
| Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER); |
| log.open(); |
| log.appendEntry(TEST_ENTRY1); |
| OperationEntry first = log.firstEntry(); |
| OperationEntry last = log.lastEntry(); |
| new EqualsTester() |
| .addEqualityGroup(first, last, TEST_ENTRY1) |
| .testEquals(); |
| Assert.assertEquals(TEST_ENTRY1_SIZE, log.size()); |
| Assert.assertEquals(1, log.firstIndex()); |
| Assert.assertEquals(1, log.lastIndex()); |
| } |
| |
| @Test |
| public void testAppendEntries() throws IOException { |
| Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER); |
| log.open(); |
| log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3); |
| OperationEntry first = log.firstEntry(); |
| OperationEntry last = log.lastEntry(); |
| new EqualsTester() |
| .addEqualityGroup(first, TEST_ENTRY1) |
| .addEqualityGroup(last, TEST_ENTRY3) |
| .testEquals(); |
| Assert.assertEquals(TEST_ENTRY1_SIZE + TEST_ENTRY2_SIZE, TEST_ENTRY3_SIZE, log.size()); |
| Assert.assertEquals(1, log.firstIndex()); |
| Assert.assertEquals(3, log.lastIndex()); |
| Assert.assertTrue(log.containsEntry(1)); |
| Assert.assertTrue(log.containsEntry(2)); |
| } |
| |
| @Test |
| public void testDelete() throws IOException { |
| Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER); |
| log.open(); |
| log.appendEntries(TEST_ENTRY1, TEST_ENTRY2); |
| log.delete(); |
| Assert.assertEquals(0, log.size()); |
| Assert.assertTrue(log.isEmpty()); |
| Assert.assertEquals(0, log.firstIndex()); |
| Assert.assertNull(log.firstEntry()); |
| Assert.assertEquals(0, log.lastIndex()); |
| Assert.assertNull(log.lastEntry()); |
| } |
| |
| @Test |
| public void testGetEntries() throws IOException { |
| Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER); |
| log.open(); |
| log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4); |
| Assert.assertEquals( |
| TEST_ENTRY1_SIZE + |
| TEST_ENTRY2_SIZE + |
| TEST_ENTRY3_SIZE + |
| TEST_ENTRY4_SIZE, log.size()); |
| |
| List<Entry> entries = log.getEntries(2, 3); |
| new EqualsTester() |
| .addEqualityGroup(log.getEntry(4), TEST_ENTRY4) |
| .addEqualityGroup(entries.get(0), TEST_ENTRY2) |
| .addEqualityGroup(entries.get(1), TEST_ENTRY3) |
| .testEquals(); |
| } |
| |
| @Test |
| public void testRemoveAfter() throws IOException { |
| Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER); |
| log.open(); |
| log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4); |
| log.removeAfter(1); |
| Assert.assertEquals(TEST_ENTRY1_SIZE, log.size()); |
| new EqualsTester() |
| .addEqualityGroup(log.firstEntry(), log.lastEntry(), TEST_ENTRY1) |
| .testEquals(); |
| } |
| |
| @Test |
| public void testAddAfterRemove() throws IOException { |
| Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER); |
| log.open(); |
| log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4); |
| log.removeAfter(1); |
| log.appendEntry(TEST_ENTRY4); |
| Assert.assertEquals(TEST_ENTRY1_SIZE + TEST_ENTRY4_SIZE, log.size()); |
| new EqualsTester() |
| .addEqualityGroup(log.firstEntry(), TEST_ENTRY1) |
| .addEqualityGroup(log.lastEntry(), TEST_ENTRY4) |
| .addEqualityGroup(log.size(), TEST_ENTRY1_SIZE + TEST_ENTRY4_SIZE) |
| .testEquals(); |
| } |
| |
| @Test |
| public void testClose() throws IOException { |
| Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER); |
| Assert.assertFalse(log.isOpen()); |
| log.open(); |
| Assert.assertTrue(log.isOpen()); |
| log.close(); |
| Assert.assertFalse(log.isOpen()); |
| } |
| |
| @Test |
| public void testReopen() throws IOException { |
| Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER); |
| log.open(); |
| log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4); |
| log.close(); |
| log.open(); |
| |
| new EqualsTester() |
| .addEqualityGroup(log.firstEntry(), TEST_ENTRY1) |
| .addEqualityGroup(log.getEntry(2), TEST_ENTRY2) |
| .addEqualityGroup(log.lastEntry(), TEST_ENTRY4) |
| .addEqualityGroup(log.size(), |
| TEST_ENTRY1_SIZE + |
| TEST_ENTRY2_SIZE + |
| TEST_ENTRY3_SIZE + |
| TEST_ENTRY4_SIZE) |
| .testEquals(); |
| } |
| |
| @Test |
| public void testCompact() throws IOException { |
| Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER); |
| log.open(); |
| log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4); |
| log.compact(3, TEST_SNAPSHOT_ENTRY); |
| new EqualsTester() |
| .addEqualityGroup(log.firstEntry(), TEST_SNAPSHOT_ENTRY) |
| .addEqualityGroup(log.lastEntry(), TEST_ENTRY4) |
| .addEqualityGroup(log.size(), |
| TEST_SNAPSHOT_ENTRY_SIZE + |
| TEST_ENTRY4_SIZE) |
| .testEquals(); |
| } |
| } |