From 43a9c2a91f6d90811cf945e58e1a40f83445af45 Mon Sep 17 00:00:00 2001 From: Kris Penney Date: Tue, 5 Nov 2024 09:22:16 -0500 Subject: [PATCH] Clear FakeRedis state directly to avoid leaky state. GitOrigin-RevId: d72fc5f3faff2c06f764fcef112cfa11513810e2 --- misk-redis/api/misk-redis.api | 3 ++- .../kotlin/misk/redis/testing/FakeRedis.kt | 23 +++++++++++-------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/misk-redis/api/misk-redis.api b/misk-redis/api/misk-redis.api index 1cfe6a9abe1..3c0fc654f90 100644 --- a/misk-redis/api/misk-redis.api +++ b/misk-redis/api/misk-redis.api @@ -540,7 +540,7 @@ public final class misk/redis/testing/DockerRedisKt { public static synthetic fun main ([Ljava/lang/String;)V } -public final class misk/redis/testing/FakeRedis : misk/testing/FakeFixture, misk/redis/Redis { +public final class misk/redis/testing/FakeRedis : misk/redis/Redis, misk/testing/TestFixture { public fun (Ljava/time/Clock;Lkotlin/random/Random;)V public fun blmove (Ljava/lang/String;Ljava/lang/String;Lredis/clients/jedis/args/ListDirection;Lredis/clients/jedis/args/ListDirection;D)Lokio/ByteString; public fun brpoplpush (Ljava/lang/String;Ljava/lang/String;I)Lokio/ByteString; @@ -580,6 +580,7 @@ public final class misk/redis/testing/FakeRedis : misk/testing/FakeFixture, misk public fun pipelined ()Lredis/clients/jedis/Pipeline; public fun pipelining (Lkotlin/jvm/functions/Function1;)V public fun publish (Ljava/lang/String;Ljava/lang/String;)V + public fun reset ()V public fun rpop (Ljava/lang/String;)Lokio/ByteString; public fun rpop (Ljava/lang/String;I)Ljava/util/List; public fun rpoplpush (Ljava/lang/String;Ljava/lang/String;)Lokio/ByteString; diff --git a/misk-redis/src/testFixtures/kotlin/misk/redis/testing/FakeRedis.kt b/misk-redis/src/testFixtures/kotlin/misk/redis/testing/FakeRedis.kt index 9db2f835358..d64dfbc557d 100644 --- a/misk-redis/src/testFixtures/kotlin/misk/redis/testing/FakeRedis.kt +++ b/misk-redis/src/testFixtures/kotlin/misk/redis/testing/FakeRedis.kt @@ -25,7 +25,7 @@ import misk.redis.Redis.ZRangeMarker import misk.redis.Redis.ZRangeRankMarker import misk.redis.Redis.ZRangeScoreMarker import misk.redis.Redis.ZRangeType -import misk.testing.FakeFixture +import misk.testing.TestFixture import okio.ByteString.Companion.encodeUtf8 import org.apache.commons.io.FilenameUtils import java.util.SortedMap @@ -48,17 +48,15 @@ import kotlin.random.Random class FakeRedis @Inject constructor( private val clock: Clock, @ForFakeRedis private val random: Random, -) : Redis, FakeFixture() { +) : Redis, TestFixture { /** The value type stored in our key-value store. */ private data class Value(val data: T, var expiryInstant: Instant) /** Acts as the Redis key-value store. */ - private val keyValueStore by resettable { ConcurrentHashMap>() } + private val keyValueStore = ConcurrentHashMap>() /** A nested hash map for hash operations. */ - private val hKeyValueStore by resettable { - ConcurrentHashMap>>() - } + private val hKeyValueStore = ConcurrentHashMap>>() /** * Note: Redis sorted set actually orders by value. It is quite complex to implement it here. @@ -66,12 +64,17 @@ class FakeRedis @Inject constructor( * HashMap to key score->members. So any sorting based on values will have to be handled in the * implementation of the functions for this sorted set. */ - private val sortedSetKeyValueStore by resettable { - ConcurrentHashMap>>>() - } + private val sortedSetKeyValueStore = ConcurrentHashMap>>>() /** A hash map for list operations. */ - private val lKeyValueStore by resettable { ConcurrentHashMap>>() } + private val lKeyValueStore = ConcurrentHashMap>>() + + override fun reset() { + keyValueStore.clear() + hKeyValueStore.clear() + sortedSetKeyValueStore.clear() + lKeyValueStore.clear() + } @Synchronized override fun del(key: String): Boolean {