/*
- * Copyright 2017-present Open Networking Foundation
+ * Copyright 2017-2021 Open Networking Foundation
+ * Copyright 2023 PANTHEON.tech, s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package io.atomix.storage.journal;
-import io.atomix.storage.StorageLevel;
-import io.atomix.utils.serializer.Namespace;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
/**
* Base journal test.
*/
@RunWith(Parameterized.class)
public abstract class AbstractJournalTest {
- private static final Namespace NAMESPACE = Namespace.builder()
- .register(TestEntry.class)
- .register(byte[].class)
+ private static final JournalSerdes NAMESPACE = JournalSerdes.builder()
+ .register(new TestEntrySerdes(), TestEntry.class)
+ .register(new ByteArraySerdes(), byte[].class)
.build();
protected static final TestEntry ENTRY = new TestEntry(32);
private static final Path PATH = Paths.get("target/test-logs/");
private final int maxSegmentSize;
- private final int cacheSize;
protected final int entriesPerSegment;
- protected AbstractJournalTest(int maxSegmentSize, int cacheSize) {
+ protected AbstractJournalTest(final int maxSegmentSize) {
this.maxSegmentSize = maxSegmentSize;
- this.cacheSize = cacheSize;
- int entryLength = (NAMESPACE.serialize(ENTRY).length + 8);
- this.entriesPerSegment = (maxSegmentSize - 64) / entryLength;
+ int entryLength = NAMESPACE.serialize(ENTRY).length + 8;
+ entriesPerSegment = (maxSegmentSize - 64) / entryLength;
}
protected abstract StorageLevel storageLevel();
@Parameterized.Parameters
- public static Collection primeNumbers() {
+ public static List<Object[]> primeNumbers() {
List<Object[]> runs = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 10; j++) {
- runs.add(new Object[]{64 + (i * (NAMESPACE.serialize(ENTRY).length + 8) + j), j});
+ runs.add(new Object[]{64 + i * (NAMESPACE.serialize(ENTRY).length + 8) + j});
}
}
return runs;
.withStorageLevel(storageLevel())
.withMaxSegmentSize(maxSegmentSize)
.withIndexDensity(.2)
- .withCacheSize(cacheSize)
.build();
}
}
@Test
- @SuppressWarnings("unchecked")
public void testWriteRead() throws Exception {
try (Journal<TestEntry> journal = createJournal()) {
JournalWriter<TestEntry> writer = journal.writer();
// Test reading an entry
Indexed<TestEntry> entry1;
reader.reset();
- entry1 = (Indexed) reader.next();
+ entry1 = reader.next();
assertEquals(1, entry1.index());
assertEquals(entry1, reader.getCurrentEntry());
assertEquals(1, reader.getCurrentIndex());
Indexed<TestEntry> entry2;
assertTrue(reader.hasNext());
assertEquals(2, reader.getNextIndex());
- entry2 = (Indexed) reader.next();
+ entry2 = reader.next();
assertEquals(2, entry2.index());
assertEquals(entry2, reader.getCurrentEntry());
assertEquals(2, reader.getCurrentIndex());
// Test opening a new reader and reading from the journal.
reader = journal.openReader(1);
assertTrue(reader.hasNext());
- entry1 = (Indexed) reader.next();
+ entry1 = reader.next();
assertEquals(1, entry1.index());
assertEquals(entry1, reader.getCurrentEntry());
assertEquals(1, reader.getCurrentIndex());
assertTrue(reader.hasNext());
assertEquals(2, reader.getNextIndex());
- entry2 = (Indexed) reader.next();
+ entry2 = reader.next();
assertEquals(2, entry2.index());
assertEquals(entry2, reader.getCurrentEntry());
assertEquals(2, reader.getCurrentIndex());
// Test opening a new reader and reading from the journal.
reader = journal.openReader(1);
assertTrue(reader.hasNext());
- entry1 = (Indexed) reader.next();
+ entry1 = reader.next();
assertEquals(1, entry1.index());
assertEquals(entry1, reader.getCurrentEntry());
assertEquals(1, reader.getCurrentIndex());
assertTrue(reader.hasNext());
assertEquals(2, reader.getNextIndex());
- entry2 = (Indexed) reader.next();
+ entry2 = reader.next();
assertEquals(2, entry2.index());
assertEquals(entry2, reader.getCurrentEntry());
assertEquals(2, reader.getCurrentIndex());
assertEquals(1, reader.getCurrentEntry().index());
assertTrue(reader.hasNext());
assertEquals(2, reader.getNextIndex());
- entry2 = (Indexed) reader.next();
+ entry2 = reader.next();
assertEquals(2, entry2.index());
assertEquals(entry2, reader.getCurrentEntry());
assertEquals(2, reader.getCurrentIndex());
}
@Test
- @SuppressWarnings("unchecked")
public void testWriteReadEntries() throws Exception {
try (Journal<TestEntry> journal = createJournal()) {
JournalWriter<TestEntry> writer = journal.writer();
writer.append(ENTRY);
assertTrue(reader.hasNext());
Indexed<TestEntry> entry;
- entry = (Indexed) reader.next();
+ entry = reader.next();
assertEquals(i, entry.index());
assertEquals(32, entry.entry().bytes().length);
reader.reset(i);
- entry = (Indexed) reader.next();
+ entry = reader.next();
assertEquals(i, entry.index());
assertEquals(32, entry.entry().bytes().length);
assertTrue(reader.hasNext());
reader.reset(i);
assertTrue(reader.hasNext());
- entry = (Indexed) reader.next();
+ entry = reader.next();
assertEquals(i, entry.index());
assertEquals(32, entry.entry().bytes().length);
}
}
@Test
- @SuppressWarnings("unchecked")
public void testWriteReadCommittedEntries() throws Exception {
try (Journal<TestEntry> journal = createJournal()) {
JournalWriter<TestEntry> writer = journal.writer();
writer.commit(i);
assertTrue(reader.hasNext());
Indexed<TestEntry> entry;
- entry = (Indexed) reader.next();
+ entry = reader.next();
assertEquals(i, entry.index());
assertEquals(32, entry.entry().bytes().length);
reader.reset(i);
- entry = (Indexed) reader.next();
+ entry = reader.next();
assertEquals(i, entry.index());
assertEquals(32, entry.entry().bytes().length);
}
if (Files.exists(PATH)) {
Files.walkFileTree(PATH, new SimpleFileVisitor<Path>() {
@Override
- public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+ public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException {
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
- public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+ public FileVisitResult postVisitDirectory(final Path dir, final IOException exc) throws IOException {
Files.delete(dir);
return FileVisitResult.CONTINUE;
}