diff options
author | Johannes Dahlström <johannesd@vaadin.com> | 2014-05-19 16:28:09 +0300 |
---|---|---|
committer | Artur Signell <artur@vaadin.com> | 2014-05-26 13:18:00 +0000 |
commit | dca9abccdddb5c1b39e9ae65b9cb53ad6fcab5cb (patch) | |
tree | 2ab384cecd52571388d7f2c4f113824093397f0b /server/tests/src/com | |
parent | 17b5b7bf508586626da48e21b9c72694f03c7ff2 (diff) | |
download | vaadin-framework-dca9abccdddb5c1b39e9ae65b9cb53ad6fcab5cb.tar.gz vaadin-framework-dca9abccdddb5c1b39e9ae65b9cb53ad6fcab5cb.zip |
Properly deserialize push connection (#12235)
The UI.pushConnection field is transient no longer; instead PushConnection
implementations must take care of serialization internally. When a session
is serialized, the client should notice that push was disconnected and
try to reconnect. A deserialized PushConnection should be in a "disconnected"
state so the eventual client reconnection works correctly.
Change-Id: I38cfc5a5cdbd3643311f830f8d580458dcd85c56
Diffstat (limited to 'server/tests/src/com')
-rw-r--r-- | server/tests/src/com/vaadin/server/communication/AtmospherePushConnectionTest.java | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/server/tests/src/com/vaadin/server/communication/AtmospherePushConnectionTest.java b/server/tests/src/com/vaadin/server/communication/AtmospherePushConnectionTest.java new file mode 100644 index 0000000000..f9e12ce75f --- /dev/null +++ b/server/tests/src/com/vaadin/server/communication/AtmospherePushConnectionTest.java @@ -0,0 +1,56 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.server.communication; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +import org.atmosphere.cpr.AtmosphereResource; +import org.easymock.EasyMock; +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.server.communication.AtmospherePushConnection.State; +import com.vaadin.ui.UI; + +/** + * @author Vaadin Ltd + */ +public class AtmospherePushConnectionTest { + @Test + public void testSerialization() throws Exception { + + UI ui = EasyMock.createNiceMock(UI.class); + AtmosphereResource resource = EasyMock + .createNiceMock(AtmosphereResource.class); + + AtmospherePushConnection connection = new AtmospherePushConnection(ui); + connection.connect(resource); + + Assert.assertEquals(State.CONNECTED, connection.getState()); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + new ObjectOutputStream(baos).writeObject(connection); + + connection = (AtmospherePushConnection) new ObjectInputStream( + new ByteArrayInputStream(baos.toByteArray())).readObject(); + + Assert.assertEquals(State.DISCONNECTED, connection.getState()); + } +} |