blob: 644014658e08f34bd1d0852ef83bdb20433c21d5 [file] [log] [blame]
alshabibab984662014-12-04 18:56:18 -08001/*
2 * Copyright 2014 Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.store.service.impl;
Madan Jampani778f7ad2014-11-05 22:46:15 -080017
18import java.io.File;
19import java.io.IOException;
20import java.nio.file.Files;
21import java.util.List;
22
23import net.kuujo.copycat.internal.log.OperationEntry;
24import net.kuujo.copycat.log.Entry;
25import net.kuujo.copycat.log.Log;
26
27import org.junit.After;
28import org.junit.Assert;
29import org.junit.Before;
30import org.junit.Test;
Brian O'Connorabafb502014-12-02 22:26:20 -080031import org.onosproject.store.serializers.StoreSerializer;
Madan Jampani778f7ad2014-11-05 22:46:15 -080032
33import com.google.common.testing.EqualsTester;
34
35/**
36 * Test the MapDBLog implementation.
37 */
38public class MapDBLogTest {
39
Yuta HIGUCHI91768e32014-11-22 05:06:35 -080040 private static final StoreSerializer SERIALIZER = ClusterMessagingProtocol.DB_SERIALIZER;
Madan Jampani778f7ad2014-11-05 22:46:15 -080041 private static final Entry TEST_ENTRY1 = new OperationEntry(1, "test1");
42 private static final Entry TEST_ENTRY2 = new OperationEntry(2, "test12");
43 private static final Entry TEST_ENTRY3 = new OperationEntry(3, "test123");
44 private static final Entry TEST_ENTRY4 = new OperationEntry(4, "test1234");
45
46 private static final Entry TEST_SNAPSHOT_ENTRY = new OperationEntry(5, "snapshot");
47
48 private static final long TEST_ENTRY1_SIZE = SERIALIZER.encode(TEST_ENTRY1).length;
49 private static final long TEST_ENTRY2_SIZE = SERIALIZER.encode(TEST_ENTRY2).length;
50 private static final long TEST_ENTRY3_SIZE = SERIALIZER.encode(TEST_ENTRY3).length;
51 private static final long TEST_ENTRY4_SIZE = SERIALIZER.encode(TEST_ENTRY4).length;
52
53 private static final long TEST_SNAPSHOT_ENTRY_SIZE = SERIALIZER.encode(TEST_SNAPSHOT_ENTRY).length;
54
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -080055 private String dbFileName;
56
57
Madan Jampani778f7ad2014-11-05 22:46:15 -080058 @Before
59 public void setUp() throws Exception {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -080060 File logFile = File.createTempFile("mapdbTest", null);
61 dbFileName = logFile.getAbsolutePath();
Madan Jampani778f7ad2014-11-05 22:46:15 -080062 }
63
64 @After
65 public void tearDown() throws Exception {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -080066 Files.deleteIfExists(new File(dbFileName).toPath());
67 Files.deleteIfExists(new File(dbFileName + ".t").toPath());
68 Files.deleteIfExists(new File(dbFileName + ".p").toPath());
Madan Jampani778f7ad2014-11-05 22:46:15 -080069 }
70
71 @Test(expected = IllegalStateException.class)
72 public void testAssertOpen() {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -080073 Log log = new MapDBLog(dbFileName, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -080074 log.size();
75 }
76
77 @Test
78 public void testAppendEntry() throws IOException {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -080079 Log log = new MapDBLog(dbFileName, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -080080 log.open();
81 log.appendEntry(TEST_ENTRY1);
82 OperationEntry first = log.firstEntry();
83 OperationEntry last = log.lastEntry();
84 new EqualsTester()
85 .addEqualityGroup(first, last, TEST_ENTRY1)
86 .testEquals();
87 Assert.assertEquals(TEST_ENTRY1_SIZE, log.size());
88 Assert.assertEquals(1, log.firstIndex());
89 Assert.assertEquals(1, log.lastIndex());
90 }
91
92 @Test
93 public void testAppendEntries() throws IOException {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -080094 Log log = new MapDBLog(dbFileName, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -080095 log.open();
96 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3);
97 OperationEntry first = log.firstEntry();
98 OperationEntry last = log.lastEntry();
99 new EqualsTester()
100 .addEqualityGroup(first, TEST_ENTRY1)
101 .addEqualityGroup(last, TEST_ENTRY3)
102 .testEquals();
103 Assert.assertEquals(TEST_ENTRY1_SIZE + TEST_ENTRY2_SIZE, TEST_ENTRY3_SIZE, log.size());
104 Assert.assertEquals(1, log.firstIndex());
105 Assert.assertEquals(3, log.lastIndex());
106 Assert.assertTrue(log.containsEntry(1));
107 Assert.assertTrue(log.containsEntry(2));
108 }
109
110 @Test
111 public void testDelete() throws IOException {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -0800112 Log log = new MapDBLog(dbFileName, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800113 log.open();
114 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2);
115 log.delete();
116 Assert.assertEquals(0, log.size());
117 Assert.assertTrue(log.isEmpty());
118 Assert.assertEquals(0, log.firstIndex());
119 Assert.assertNull(log.firstEntry());
120 Assert.assertEquals(0, log.lastIndex());
121 Assert.assertNull(log.lastEntry());
122 }
123
124 @Test
125 public void testGetEntries() throws IOException {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -0800126 Log log = new MapDBLog(dbFileName, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800127 log.open();
128 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
129 Assert.assertEquals(
130 TEST_ENTRY1_SIZE +
131 TEST_ENTRY2_SIZE +
132 TEST_ENTRY3_SIZE +
133 TEST_ENTRY4_SIZE, log.size());
134
135 List<Entry> entries = log.getEntries(2, 3);
136 new EqualsTester()
137 .addEqualityGroup(log.getEntry(4), TEST_ENTRY4)
138 .addEqualityGroup(entries.get(0), TEST_ENTRY2)
139 .addEqualityGroup(entries.get(1), TEST_ENTRY3)
140 .testEquals();
141 }
142
143 @Test
144 public void testRemoveAfter() throws IOException {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -0800145 Log log = new MapDBLog(dbFileName, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800146 log.open();
147 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
148 log.removeAfter(1);
149 Assert.assertEquals(TEST_ENTRY1_SIZE, log.size());
150 new EqualsTester()
151 .addEqualityGroup(log.firstEntry(), log.lastEntry(), TEST_ENTRY1)
152 .testEquals();
153 }
154
155 @Test
156 public void testAddAfterRemove() throws IOException {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -0800157 Log log = new MapDBLog(dbFileName, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800158 log.open();
159 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
160 log.removeAfter(1);
161 log.appendEntry(TEST_ENTRY4);
162 Assert.assertEquals(TEST_ENTRY1_SIZE + TEST_ENTRY4_SIZE, log.size());
163 new EqualsTester()
164 .addEqualityGroup(log.firstEntry(), TEST_ENTRY1)
165 .addEqualityGroup(log.lastEntry(), TEST_ENTRY4)
166 .addEqualityGroup(log.size(), TEST_ENTRY1_SIZE + TEST_ENTRY4_SIZE)
167 .testEquals();
168 }
169
170 @Test
171 public void testClose() throws IOException {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -0800172 Log log = new MapDBLog(dbFileName, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800173 Assert.assertFalse(log.isOpen());
174 log.open();
175 Assert.assertTrue(log.isOpen());
176 log.close();
177 Assert.assertFalse(log.isOpen());
178 }
179
180 @Test
181 public void testReopen() throws IOException {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -0800182 Log log = new MapDBLog(dbFileName, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800183 log.open();
184 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
185 log.close();
186 log.open();
187
188 new EqualsTester()
189 .addEqualityGroup(log.firstEntry(), TEST_ENTRY1)
190 .addEqualityGroup(log.getEntry(2), TEST_ENTRY2)
191 .addEqualityGroup(log.lastEntry(), TEST_ENTRY4)
192 .addEqualityGroup(log.size(),
193 TEST_ENTRY1_SIZE +
194 TEST_ENTRY2_SIZE +
195 TEST_ENTRY3_SIZE +
196 TEST_ENTRY4_SIZE)
197 .testEquals();
198 }
199
200 @Test
201 public void testCompact() throws IOException {
Yuta HIGUCHI8ba3ac02014-11-17 17:07:54 -0800202 Log log = new MapDBLog(dbFileName, SERIALIZER);
Madan Jampani778f7ad2014-11-05 22:46:15 -0800203 log.open();
204 log.appendEntries(TEST_ENTRY1, TEST_ENTRY2, TEST_ENTRY3, TEST_ENTRY4);
205 log.compact(3, TEST_SNAPSHOT_ENTRY);
206 new EqualsTester()
207 .addEqualityGroup(log.firstEntry(), TEST_SNAPSHOT_ENTRY)
208 .addEqualityGroup(log.lastEntry(), TEST_ENTRY4)
209 .addEqualityGroup(log.size(),
210 TEST_SNAPSHOT_ENTRY_SIZE +
211 TEST_ENTRY4_SIZE)
212 .testEquals();
213 }
214}