From 493e5d7f460cf6c41b858ac6e0abafe177f4a71c Mon Sep 17 00:00:00 2001 From: Leif Åstrand Date: Sun, 14 Feb 2016 12:17:10 +0200 Subject: Lock session during deserialization (#19310) Change-Id: I0f0c029d6de88b74bae1c7253b7665d5570e3767 --- .../src/com/vaadin/server/VaadinSessionTest.java | 44 +++++++++++++++++----- 1 file changed, 34 insertions(+), 10 deletions(-) (limited to 'server/tests') diff --git a/server/tests/src/com/vaadin/server/VaadinSessionTest.java b/server/tests/src/com/vaadin/server/VaadinSessionTest.java index 0e50abecff..85c37d156c 100644 --- a/server/tests/src/com/vaadin/server/VaadinSessionTest.java +++ b/server/tests/src/com/vaadin/server/VaadinSessionTest.java @@ -20,6 +20,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.Serializable; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.Lock; @@ -42,17 +43,17 @@ import com.vaadin.ui.Label; import com.vaadin.ui.UI; import com.vaadin.util.CurrentInstance; -public class VaadinSessionTest { +public class VaadinSessionTest implements Serializable { - private VaadinSession session; - private VaadinServlet mockServlet; - private VaadinServletService mockService; - private ServletConfig mockServletConfig; - private HttpSession mockHttpSession; - private WrappedSession mockWrappedSession; - private VaadinServletRequest vaadinRequest; - private UI ui; - private Lock httpSessionLock; + private transient VaadinSession session; + private transient VaadinServlet mockServlet; + private transient VaadinServletService mockService; + private transient ServletConfig mockServletConfig; + private transient HttpSession mockHttpSession; + private transient WrappedSession mockWrappedSession; + private transient VaadinServletRequest vaadinRequest; + private transient UI ui; + private transient Lock httpSessionLock; @Before public void setup() throws Exception { @@ -316,4 +317,27 @@ public class VaadinSessionTest { deserializedSession, deserializedLabel.session); deserializedSession.unlock(); } + + @Test + public void lockedDuringSerialization() throws IOException { + final AtomicBoolean lockChecked = new AtomicBoolean(false); + + ui.setContent(new Label() { + private void writeObject(ObjectOutputStream out) throws IOException { + Assert.assertTrue(session.hasLock()); + lockChecked.set(true); + out.defaultWriteObject(); + } + }); + + session.unlock(); + Assert.assertFalse(session.hasLock()); + + ObjectOutputStream out = new ObjectOutputStream( + new ByteArrayOutputStream()); + out.writeObject(session); + + Assert.assertFalse(session.hasLock()); + Assert.assertTrue(lockChecked.get()); + } } -- cgit v1.2.3