From c42c97639750ce2a9779f9876337a36ccc7b08d4 Mon Sep 17 00:00:00 2001 From: robatipoor Date: Wed, 24 Dec 2025 09:08:09 +0330 Subject: [PATCH] Fix bug causing ClassCastException when casting Integer,Short,... to Long --- .../caffeine/CaffeineCacheManager.java | 7 +++- .../integration/LocalCacheManagerITest.java | 32 +++++++++++++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/tedisson-spring-boot-starter/src/main/java/com/tosan/client/redis/impl/localCacheManager/caffeine/CaffeineCacheManager.java b/tedisson-spring-boot-starter/src/main/java/com/tosan/client/redis/impl/localCacheManager/caffeine/CaffeineCacheManager.java index 4c3a43a..5112b44 100644 --- a/tedisson-spring-boot-starter/src/main/java/com/tosan/client/redis/impl/localCacheManager/caffeine/CaffeineCacheManager.java +++ b/tedisson-spring-boot-starter/src/main/java/com/tosan/client/redis/impl/localCacheManager/caffeine/CaffeineCacheManager.java @@ -9,6 +9,7 @@ import com.tosan.client.redis.api.listener.CacheListener; import com.tosan.client.redis.api.listener.CaffeineCacheListener; import com.tosan.client.redis.enumuration.LocalCacheProvider; +import com.tosan.client.redis.exception.TedissonRuntimeException; import com.tosan.client.redis.impl.localCacheManager.LocalCacheManagerBase; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -155,7 +156,11 @@ private CaffeineElement incrementAtomicItemProcess(CaffeineElement element) { newCaffeineElement.setValue(1L); return newCaffeineElement; } - element.setValue((long) element.getValue() + 1); + Object value = element.getValue(); + if (!(value instanceof Number)) { + throw new TedissonRuntimeException("Value must be numeric"); + } + element.setValue(((Number) value).longValue() + 1); return element; } diff --git a/tedisson-spring-boot-starter/src/test/java/com/tosan/client/redis/api/integration/LocalCacheManagerITest.java b/tedisson-spring-boot-starter/src/test/java/com/tosan/client/redis/api/integration/LocalCacheManagerITest.java index cae60a3..829853e 100644 --- a/tedisson-spring-boot-starter/src/test/java/com/tosan/client/redis/api/integration/LocalCacheManagerITest.java +++ b/tedisson-spring-boot-starter/src/test/java/com/tosan/client/redis/api/integration/LocalCacheManagerITest.java @@ -12,7 +12,6 @@ import java.util.Set; import java.util.concurrent.TimeUnit; - class LocalCacheManagerITest extends BaseITest { public static final String CACHE_WITH_SIZE = "CACHE_WITH_SIZE"; @@ -34,7 +33,6 @@ void testCreateCache() { Assertions.assertTrue(localCacheManager.isCacheExist(TEST_WITH_EXPIRY_TTL_TTI)); } - @Test void testClearCache() { String cacheName = "testClearCache"; @@ -305,6 +303,36 @@ void testExpireAtomicItemExpiration() throws InterruptedException { Assertions.assertEquals(1, localCacheManager.incrementAndGetAtomicItem(cacheName, "atomicKey")); } + @Test + void testIncrementAtomicIntegerValueItem() { + String cacheName = "testIncrementAtomicIntegerValueItem"; + String key = "atomicKey"; + localCacheManager.createCache(cacheName); + Integer item = Integer.valueOf(1); + localCacheManager.addItemToCache(cacheName, key, item); + Assertions.assertEquals(2, localCacheManager.incrementAndGetAtomicItem(cacheName, key)); + } + + @Test + void testIncrementAtomicLongValueItem() { + String cacheName = "testIncrementAtomicLongValueItem"; + String key = "atomicKey"; + localCacheManager.createCache(cacheName); + Long item = Long.valueOf(1); + localCacheManager.addItemToCache(cacheName, key, item); + Assertions.assertEquals(2, localCacheManager.incrementAndGetAtomicItem(cacheName, key)); + } + + @Test + void testIncrementAtomicShortValueItem() { + String cacheName = "testIncrementAtomicShortValueItem"; + String key = "atomicKey"; + localCacheManager.createCache(cacheName); + Short item = Short.valueOf((short) 1); + localCacheManager.addItemToCache(cacheName, key, item); + Assertions.assertEquals(2, localCacheManager.incrementAndGetAtomicItem(cacheName, key)); + } + @Test void testUpdateAtomicItemExpiration() throws InterruptedException { String cacheName = "testUpdateAtomicItemExpiration";