From b9bdbd1937aee83c167bd57d3d2406d1a2f6cfe5 Mon Sep 17 00:00:00 2001 From: Iwao AVE! Date: Wed, 20 Nov 2024 05:39:21 +0900 Subject: [PATCH] Modified 2 tests to ensure local cache behavior Local cache is used for nested select even if `localCacheScope` is `STATEMENT`. This should prevent regression caused by changes like #3299 --- .../associationtype/AssociationTypeTest.java | 24 +++++++++++++------ .../permissions/PermissionsTest.java | 12 ++++++++-- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/test/java/org/apache/ibatis/submitted/associationtype/AssociationTypeTest.java b/src/test/java/org/apache/ibatis/submitted/associationtype/AssociationTypeTest.java index 0154a776638..14b92a65d02 100644 --- a/src/test/java/org/apache/ibatis/submitted/associationtype/AssociationTypeTest.java +++ b/src/test/java/org/apache/ibatis/submitted/associationtype/AssociationTypeTest.java @@ -21,12 +21,14 @@ import org.apache.ibatis.BaseDataTest; import org.apache.ibatis.io.Resources; +import org.apache.ibatis.session.LocalCacheScope; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; class AssociationTypeTest { @@ -45,14 +47,22 @@ static void setUp() throws Exception { "org/apache/ibatis/submitted/associationtype/CreateDB.sql"); } - @Test - void shouldGetAUser() { + @ParameterizedTest + @EnumSource + void shouldGetAUser(LocalCacheScope localCacheScope) { + sqlSessionFactory.getConfiguration().setLocalCacheScope(localCacheScope); try (SqlSession sqlSession = sqlSessionFactory.openSession()) { - List results = sqlSession.selectList("getUser"); - for (Map r : results) { - Assertions.assertEquals(String.class, r.get("a1").getClass()); - Assertions.assertEquals(String.class, r.get("a2").getClass()); + List> results = sqlSession.selectList("getUser"); + for (Map r : results) { + Object a1 = r.get("a1"); + Object a2 = r.get("a2"); + Assertions.assertEquals(String.class, a1.getClass()); + Assertions.assertEquals(String.class, a2.getClass()); + Assertions.assertSame(a1, a2, "The result should be put into local cache regardless of localCacheScope setting."); } + } finally { + // Reset the scope for other tests + sqlSessionFactory.getConfiguration().setLocalCacheScope(LocalCacheScope.SESSION); } } diff --git a/src/test/java/org/apache/ibatis/submitted/permissions/PermissionsTest.java b/src/test/java/org/apache/ibatis/submitted/permissions/PermissionsTest.java index af96041ebeb..3de556f9665 100644 --- a/src/test/java/org/apache/ibatis/submitted/permissions/PermissionsTest.java +++ b/src/test/java/org/apache/ibatis/submitted/permissions/PermissionsTest.java @@ -20,12 +20,15 @@ import org.apache.ibatis.BaseDataTest; import org.apache.ibatis.io.Resources; +import org.apache.ibatis.session.LocalCacheScope; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; class PermissionsTest { @@ -66,8 +69,10 @@ void checkNestedResultMapLoop() { } } - @Test - void checkNestedSelectLoop() { + @ParameterizedTest + @EnumSource + void checkNestedSelectLoop(LocalCacheScope localCacheScope) { + sqlSessionFactory.getConfiguration().setLocalCacheScope(localCacheScope); try (SqlSession sqlSession = sqlSessionFactory.openSession()) { final PermissionsMapper mapper = sqlSession.getMapper(PermissionsMapper.class); @@ -93,6 +98,9 @@ void checkNestedSelectLoop() { if (!readFound) { Assertions.fail(); } + } finally { + // Reset the scope for other tests + sqlSessionFactory.getConfiguration().setLocalCacheScope(LocalCacheScope.SESSION); } }