@Test public void testCacheAndReset() { TestSessionFactory factory = new TestSessionFactory(); CachingSessionFactory<String> cache = new CachingSessionFactory<String>(factory); cache.setTestSession(true); Session<String> sess1 = cache.getSession(); assertEquals("session:1", TestUtils.getPropertyValue(sess1, "targetSession.id")); Session<String> sess2 = cache.getSession(); assertEquals("session:2", TestUtils.getPropertyValue(sess2, "targetSession.id")); sess1.close(); // session back to pool; should be open and reused. assertTrue(sess1.isOpen()); sess1 = cache.getSession(); assertEquals("session:1", TestUtils.getPropertyValue(sess1, "targetSession.id")); assertTrue((TestUtils.getPropertyValue(sess1, "targetSession.testCalled", Boolean.class))); sess1.close(); assertTrue(sess1.isOpen()); // reset the cache; should close idle (sess1); sess2 should closed later cache.resetCache(); assertFalse(sess1.isOpen()); sess1 = cache.getSession(); assertEquals("session:3", TestUtils.getPropertyValue(sess1, "targetSession.id")); sess1.close(); assertTrue(sess1.isOpen()); // session from previous epoch is closed on return sess2.close(); assertFalse(sess2.isOpen()); cache.resetCache(); assertFalse(sess1.isOpen()); }