[IC] Add unit tests for resetting in-memory caches wrappers in a transaction

#KT-56052 In Progress
This commit is contained in:
Alexander.Likhachev
2023-01-30 21:48:05 +01:00
committed by Space Team
parent 04a5c7761c
commit ca8d0bd100
3 changed files with 66 additions and 3 deletions
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.incremental
import org.jetbrains.kotlin.build.report.DoNothingBuildReporter
import org.jetbrains.kotlin.incremental.storage.InMemoryStorageWrapper
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
@@ -26,6 +27,32 @@ private class CacheMock(private val throwsException: Boolean = false) : Closeabl
}
}
private class InMemoryStorageWrapperMock : InMemoryStorageWrapper<Any, Any> {
var reset = false
override fun resetInMemoryChanges() {
reset = true
}
override val keys: Collection<Any> = emptyList()
override fun clean() {}
override fun flush(memoryCachesOnly: Boolean) {}
override fun close() {}
override fun append(key: Any, value: Any) {}
override fun remove(key: Any) {}
override fun set(key: Any, value: Any) {}
override fun get(key: Any) = null
override fun contains(key: Any) = false
}
abstract class BaseCompilationTransactionTest {
@TempDir
protected lateinit var stashDir: Path
@@ -84,6 +111,38 @@ abstract class BaseCompilationTransactionTest {
}
}
}
@Test
fun testInMemoryWrappersAreResetOnUnsuccessfulTransaction() {
val inMemoryStorageWrapperMock = InMemoryStorageWrapperMock()
useTransaction {
registerInMemoryStorageWrapper(inMemoryStorageWrapperMock)
}
assertTrue(inMemoryStorageWrapperMock.reset)
}
@Test
fun testInMemoryWrappersAreResetOnExecutionException() {
val inMemoryStorageWrapperMock = InMemoryStorageWrapperMock()
assertThrows<Exception> {
useTransaction {
registerInMemoryStorageWrapper(inMemoryStorageWrapperMock)
markAsSuccessful()
throw Exception()
}
}
assertTrue(inMemoryStorageWrapperMock.reset)
}
@Test
fun testInMemoryWrappersAreNotResetOnSuccessfulTransaction() {
val inMemoryStorageWrapperMock = InMemoryStorageWrapperMock()
useTransaction {
registerInMemoryStorageWrapper(inMemoryStorageWrapperMock)
markAsSuccessful()
}
assertFalse(inMemoryStorageWrapperMock.reset)
}
}
class NonRecoverableCompilationTransactionTest : BaseCompilationTransactionTest() {