test(wal): cover LogRecordCodecTest and beginRoundTrips
This commit is contained in:
1 parent
dbdffe9b7b
commit
84ad621ea7
1 file changed
+75
@@ -0,0 +1,75 @@
|
|||||||
|
package kestrel.store.wal
|
||||||
|
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertContentEquals
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertFailsWith
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
|
class LogRecordCodecTest {
|
||||||
|
@Test
|
||||||
|
fun beginRoundTrips() {
|
||||||
|
val decoded = LogRecordCodec.decode(LogRecordCodec.encode(LogRecord.Begin(7L)))
|
||||||
|
assertTrue(decoded is LogRecord.Begin)
|
||||||
|
assertEquals(7L, decoded.txnId)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun commitRoundTrips() {
|
||||||
|
val decoded = LogRecordCodec.decode(LogRecordCodec.encode(LogRecord.Commit(9L)))
|
||||||
|
assertTrue(decoded is LogRecord.Commit)
|
||||||
|
assertEquals(9L, decoded.txnId)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun abortRoundTrips() {
|
||||||
|
val decoded = LogRecordCodec.decode(LogRecordCodec.encode(LogRecord.Abort(3L)))
|
||||||
|
assertTrue(decoded is LogRecord.Abort)
|
||||||
|
assertEquals(3L, decoded.txnId)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun updateRoundTripsPageImagesAndChainPointer() {
|
||||||
|
val before = ByteArray(4096) { 1 }
|
||||||
|
val after = ByteArray(4096) { 2 }
|
||||||
|
val original = LogRecord.Update(txnId = 5L, prevLsn = 128L, pageId = 42L, before = before, after = after)
|
||||||
|
val decoded = LogRecordCodec.decode(LogRecordCodec.encode(original))
|
||||||
|
assertTrue(decoded is LogRecord.Update)
|
||||||
|
assertEquals(5L, decoded.txnId)
|
||||||
|
assertEquals(128L, decoded.prevLsn)
|
||||||
|
assertEquals(42L, decoded.pageId)
|
||||||
|
assertContentEquals(before, decoded.before)
|
||||||
|
assertContentEquals(after, decoded.after)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun compensationUpdateRoundTripsUndoImageAndSkipPointer() {
|
||||||
|
val undoImage = ByteArray(4096) { 3 }
|
||||||
|
val original = LogRecord.CompensationUpdate(
|
||||||
|
txnId = 11L,
|
||||||
|
prevLsn = 256L,
|
||||||
|
pageId = 17L,
|
||||||
|
undoImage = undoImage,
|
||||||
|
undoNextLsn = 64L
|
||||||
|
)
|
||||||
|
val decoded = LogRecordCodec.decode(LogRecordCodec.encode(original))
|
||||||
|
assertTrue(decoded is LogRecord.CompensationUpdate)
|
||||||
|
assertEquals(11L, decoded.txnId)
|
||||||
|
assertEquals(256L, decoded.prevLsn)
|
||||||
|
assertEquals(17L, decoded.pageId)
|
||||||
|
assertContentEquals(undoImage, decoded.undoImage)
|
||||||
|
assertEquals(64L, decoded.undoNextLsn)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun checkpointRoundTripsActiveTxnList() {
|
||||||
|
val decoded = LogRecordCodec.decode(LogRecordCodec.encode(LogRecord.Checkpoint(listOf(1L, 2L, 3L))))
|
||||||
|
assertTrue(decoded is LogRecord.Checkpoint)
|
||||||
|
assertEquals(listOf(1L, 2L, 3L), decoded.activeTxnIds)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun decodingUnknownTypeTagFails() {
|
||||||
|
assertFailsWith<WalCorruptionException> { LogRecordCodec.decode(byteArrayOf(99)) }
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user