summaryrefslogtreecommitdiffstats
path: root/server/tests/src
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2015-04-23 15:54:29 +0300
committerVaadin Code Review <review@vaadin.com>2015-04-24 07:38:28 +0000
commit8be56ef580e4fab732060d7d99f560c9917ca502 (patch)
tree8057cf98330a16cf4b41af745e8f01e1bc789b4a /server/tests/src
parent7572ef713e218f29ca316652f13cf6eef88d1c0b (diff)
downloadvaadin-framework-8be56ef580e4fab732060d7d99f560c9917ca502.tar.gz
vaadin-framework-8be56ef580e4fab732060d7d99f560c9917ca502.zip
Make restoreInstances clear value when previous value was gc:ed (#17603)
Change-Id: I61992c04cac578dc1158efd9c76484eacc8a6b6a
Diffstat (limited to 'server/tests/src')
-rw-r--r--server/tests/src/com/vaadin/util/CurrentInstanceTest.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/server/tests/src/com/vaadin/util/CurrentInstanceTest.java b/server/tests/src/com/vaadin/util/CurrentInstanceTest.java
index 5f9c9638e6..458e8a2f6c 100644
--- a/server/tests/src/com/vaadin/util/CurrentInstanceTest.java
+++ b/server/tests/src/com/vaadin/util/CurrentInstanceTest.java
@@ -17,6 +17,7 @@ package com.vaadin.util;
import static org.junit.Assert.assertNull;
+import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -200,4 +201,48 @@ public class CurrentInstanceTest {
assertNull(CurrentInstance.get(VaadinSession.class));
assertNull(CurrentInstance.get(VaadinService.class));
}
+
+ @Test
+ public void testRestoreWithGarbageCollectedValue()
+ throws InterruptedException {
+ VaadinSession session1 = new VaadinSession(null) {
+ @Override
+ public String toString() {
+ return "First session";
+ }
+ };
+ VaadinSession session2 = new VaadinSession(null) {
+ @Override
+ public String toString() {
+ return "Second session";
+ }
+ };
+
+ VaadinSession.setCurrent(session1);
+ Map<Class<?>, CurrentInstance> previous = CurrentInstance
+ .setCurrent(session2);
+
+ // Use weak ref to verify object is collected
+ WeakReference<VaadinSession> ref = new WeakReference<VaadinSession>(
+ session1);
+
+ session1 = null;
+ waitUntilGarbageCollected(ref);
+
+ CurrentInstance.restoreInstances(previous);
+
+ Assert.assertNull(VaadinSession.getCurrent());
+ }
+
+ private static void waitUntilGarbageCollected(WeakReference<?> ref)
+ throws InterruptedException {
+ for (int i = 0; i < 50; i++) {
+ System.gc();
+ if (ref.get() == null) {
+ return;
+ }
+ Thread.sleep(100);
+ }
+ Assert.fail("Value was not garbage collected.");
+ }
}