blob: 7c9993f2bc20d4feb0976a4760bf25f022a5fd53 [file] [log] [blame]
Madan Jampani778f7ad2014-11-05 22:46:15 -08001package org.onlab.onos.store.service.impl;
2
3import java.io.File;
4import java.io.IOException;
5import java.nio.file.Files;
6import java.util.List;
7
8import net.kuujo.copycat.internal.log.OperationEntry;
9import net.kuujo.copycat.log.Entry;
10import net.kuujo.copycat.log.Log;
11
12import org.junit.After;
13import org.junit.Assert;
14import org.junit.Before;
15import org.junit.Test;
16import org.onlab.onos.store.serializers.StoreSerializer;
17
18import com.google.common.testing.EqualsTester;
19
20/**
21 * Test the MapDBLog implementation.
22 */
23public class MapDBLogTest {
24
25 private static final String DB_FILE_NAME = "mapdbTest";
26 private static final StoreSerializer SERIALIZER = ClusterMessagingProtocol.SERIALIZER;
27 private static final Entry TEST_ENTRY1 = new OperationEntry(1, "test1");
28 private static final Entry TEST_ENTRY2 = new OperationEntry(2, "test12");
29 private static final Entry TEST_ENTRY3 = new OperationEntry(3, "test123");
30 private static final Entry TEST_ENTRY4 = new OperationEntry(4, "test1234");
31
32 private static final Entry TEST_SNAPSHOT_ENTRY = new OperationEntry(5, "snapshot");
33
34 private static final long TEST_ENTRY1_SIZE = SERIALIZER.encode(TEST_ENTRY1).length;
35 private static final long TEST_ENTRY2_SIZE = SERIALIZER.encode(TEST_ENTRY2).length;
36 private static final long TEST_ENTRY3_SIZE = SERIALIZER.encode(TEST_ENTRY3).length;
37 private static final long TEST_ENTRY4_SIZE = SERIALIZER.encode(TEST_ENTRY4).length;
38
39 private static final long TEST_SNAPSHOT_ENTRY_SIZE = SERIALIZER.encode(TEST_SNAPSHOT_ENTRY).length;
40
41 @Before
42 public void setUp() throws Exception {
43 }
44
45 @After
46 public void tearDown() throws Exception {
47 Files.deleteIfExists(new File(DB_FILE_NAME).toPath());
Madan Jampani7d199b02014-11-06 11:03:08 -080048 Files.deleteIfExists(new File(DB_FILE_NAME + ".t").toPath());
49 Files.deleteIfExists(new File(DB_FILE_NAME + ".p").toPath());
Madan Jampani778f7ad2014-11-05 22:46:15 -080050 }
51
52 @Test(expected = IllegalStateException.class)
53 public void testAssertOpen() {
Madan Jampani2ee20002014-11-06 20:06:12 -080054 Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -080055 log.size();
56 }
57
58 @Test
59 public void testAppendEntry() throws IOException {
Madan Jampani2ee20002014-11-06 20:06:12 -080060 Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -080061 log.open();
62 log.appendEntry(TEST_ENTRY1);
63 OperationEntry first = log.firstEntry();
64 OperationEntry last = log.lastEntry();
65 new EqualsTester()
66 .addEqualityGroup(first, last, TEST_ENTRY1)
67 .testEquals();
68 Assert.assertEquals(TEST_ENTRY1_SIZE, log.size());
69 Assert.assertEquals(1, log.firstIndex());
70 Assert.assertEquals(1, log.lastIndex());
71 }
72
73 @Test
74 public void testAppendEntries() throws IOException {
Madan Jampani2ee20002014-11-06 20:06:12 -080075 Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -080076 log.open();
77 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3);
78 OperationEntry first = log.firstEntry();
79 OperationEntry last = log.lastEntry();
80 new EqualsTester()
81 .addEqualityGroup(first, TEST_ENTRY1)
82 .addEqualityGroup(last, TEST_ENTRY3)
83 .testEquals();
84 Assert.assertEquals(TEST_ENTRY1_SIZE + TEST_ENTRY2_SIZE, TEST_ENTRY3_SIZE, log.size());
85 Assert.assertEquals(1, log.firstIndex());
86 Assert.assertEquals(3, log.lastIndex());
87 Assert.assertTrue(log.containsEntry(1));
88 Assert.assertTrue(log.containsEntry(2));
89 }
90
91 @Test
92 public void testDelete() throws IOException {
Madan Jampani2ee20002014-11-06 20:06:12 -080093 Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -080094 log.open();
95 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2);
96 log.delete();
97 Assert.assertEquals(0, log.size());
98 Assert.assertTrue(log.isEmpty());
99 Assert.assertEquals(0, log.firstIndex());
100 Assert.assertNull(log.firstEntry());
101 Assert.assertEquals(0, log.lastIndex());
102 Assert.assertNull(log.lastEntry());
103 }
104
105 @Test
106 public void testGetEntries() throws IOException {
Madan Jampani2ee20002014-11-06 20:06:12 -0800107 Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800108 log.open();
109 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
110 Assert.assertEquals(
111 TEST_ENTRY1_SIZE +
112 TEST_ENTRY2_SIZE +
113 TEST_ENTRY3_SIZE +
114 TEST_ENTRY4_SIZE, log.size());
115
116 List<Entry> entries = log.getEntries(2, 3);
117 new EqualsTester()
118 .addEqualityGroup(log.getEntry(4), TEST_ENTRY4)
119 .addEqualityGroup(entries.get(0), TEST_ENTRY2)
120 .addEqualityGroup(entries.get(1), TEST_ENTRY3)
121 .testEquals();
122 }
123
124 @Test
125 public void testRemoveAfter() throws IOException {
Madan Jampani2ee20002014-11-06 20:06:12 -0800126 Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800127 log.open();
128 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
129 log.removeAfter(1);
130 Assert.assertEquals(TEST_ENTRY1_SIZE, log.size());
131 new EqualsTester()
132 .addEqualityGroup(log.firstEntry(), log.lastEntry(), TEST_ENTRY1)
133 .testEquals();
134 }
135
136 @Test
137 public void testAddAfterRemove() throws IOException {
Madan Jampani2ee20002014-11-06 20:06:12 -0800138 Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800139 log.open();
140 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
141 log.removeAfter(1);
142 log.appendEntry(TEST_ENTRY4);
143 Assert.assertEquals(TEST_ENTRY1_SIZE + TEST_ENTRY4_SIZE, log.size());
144 new EqualsTester()
145 .addEqualityGroup(log.firstEntry(), TEST_ENTRY1)
146 .addEqualityGroup(log.lastEntry(), TEST_ENTRY4)
147 .addEqualityGroup(log.size(), TEST_ENTRY1_SIZE + TEST_ENTRY4_SIZE)
148 .testEquals();
149 }
150
151 @Test
152 public void testClose() throws IOException {
Madan Jampani2ee20002014-11-06 20:06:12 -0800153 Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800154 Assert.assertFalse(log.isOpen());
155 log.open();
156 Assert.assertTrue(log.isOpen());
157 log.close();
158 Assert.assertFalse(log.isOpen());
159 }
160
161 @Test
162 public void testReopen() throws IOException {
Madan Jampani2ee20002014-11-06 20:06:12 -0800163 Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800164 log.open();
165 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
166 log.close();
167 log.open();
168
169 new EqualsTester()
170 .addEqualityGroup(log.firstEntry(), TEST_ENTRY1)
171 .addEqualityGroup(log.getEntry(2), TEST_ENTRY2)
172 .addEqualityGroup(log.lastEntry(), TEST_ENTRY4)
173 .addEqualityGroup(log.size(),
174 TEST_ENTRY1_SIZE +
175 TEST_ENTRY2_SIZE +
176 TEST_ENTRY3_SIZE +
177 TEST_ENTRY4_SIZE)
178 .testEquals();
179 }
180
181 @Test
182 public void testCompact() throws IOException {
Madan Jampani2ee20002014-11-06 20:06:12 -0800183 Log log = new MapDBLog(DB_FILE_NAME, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800184 log.open();
185 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
186 log.compact(3, TEST_SNAPSHOT_ENTRY);
187 new EqualsTester()
188 .addEqualityGroup(log.firstEntry(), TEST_SNAPSHOT_ENTRY)
189 .addEqualityGroup(log.lastEntry(), TEST_ENTRY4)
190 .addEqualityGroup(log.size(),
191 TEST_SNAPSHOT_ENTRY_SIZE +
192 TEST_ENTRY4_SIZE)
193 .testEquals();
194 }
195}