Author: markt
Date: Thu Aug 27 19:52:52 2015
New Revision: 1698220

URL: http://svn.apache.org/r1698220
Log:
Unit tests for session serialization and deserialization.
Inspired by bug 58284

Added:
    tomcat/trunk/test/org/apache/catalina/session/TestStandardSession.java   
(with props)

Added: tomcat/trunk/test/org/apache/catalina/session/TestStandardSession.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/session/TestStandardSession.java?rev=1698220&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/session/TestStandardSession.java 
(added)
+++ tomcat/trunk/test/org/apache/catalina/session/TestStandardSession.java Thu 
Aug 27 19:52:52 2015
@@ -0,0 +1,145 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.catalina.session;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import org.apache.catalina.Manager;
+import org.apache.catalina.core.StandardContext;
+
+public class TestStandardSession {
+
+    private static final Manager TEST_MANAGER;
+
+    static {
+        TEST_MANAGER = new StandardManager();
+        TEST_MANAGER.setContext(new StandardContext());
+    }
+
+
+    @Test
+    public void testSerializationEmpty() throws Exception {
+
+        StandardSession s1 = new StandardSession(TEST_MANAGER);
+        s1.setValid(true);
+        StandardSession s2 = serializeThenDeserialize(s1);
+
+        validateSame(s1, s2, 0);
+    }
+
+
+    @Test
+    public void testSerializationSimple01() throws Exception {
+
+        StandardSession s1 = new StandardSession(TEST_MANAGER);
+        s1.setValid(true);
+        s1.setAttribute("attr01", "value01");
+
+        StandardSession s2 = serializeThenDeserialize(s1);
+
+        validateSame(s1, s2, 1);
+    }
+
+
+    @Test
+    public void testSerializationSimple02() throws Exception {
+
+        StandardSession s1 = new StandardSession(TEST_MANAGER);
+        s1.setValid(true);
+        s1.setAttribute("attr01", new NonSerializable());
+
+        StandardSession s2 = serializeThenDeserialize(s1);
+
+        validateSame(s1, s2, 0);
+    }
+
+
+    @Test
+    public void testSerializationSimple03() throws Exception {
+
+        StandardSession s1 = new StandardSession(TEST_MANAGER);
+        s1.setValid(true);
+        s1.setAttribute("attr01", "value01");
+        s1.setAttribute("attr02", new NonSerializable());
+
+        StandardSession s2 = serializeThenDeserialize(s1);
+
+        validateSame(s1, s2, 1);
+    }
+
+
+    @Test
+    @Ignore // This currently fails on de-serialization - bug 58284
+    public void testSerializationComplex01() throws Exception {
+
+        StandardSession s1 = new StandardSession(TEST_MANAGER);
+        s1.setValid(true);
+        Map<String,NonSerializable> value = new HashMap<>();
+        value.put("key", new NonSerializable());
+        s1.setAttribute("attr01", value);
+
+        StandardSession s2 = serializeThenDeserialize(s1);
+
+        validateSame(s1, s2, 0);
+    }
+
+
+    private StandardSession serializeThenDeserialize(StandardSession source)
+            throws IOException, ClassNotFoundException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(baos);
+        source.writeObjectData(oos);
+
+        StandardSession dest = new StandardSession(TEST_MANAGER);
+        ByteArrayInputStream bais = new 
ByteArrayInputStream(baos.toByteArray());
+        ObjectInputStream ois = new ObjectInputStream(bais);
+        dest.readObjectData(ois);
+
+        return dest;
+    }
+
+
+    private void validateSame(StandardSession s1, StandardSession s2, int 
expectedCount) {
+        int count = 0;
+        Enumeration<String> names = s1.getAttributeNames();
+        while (names.hasMoreElements()) {
+            count ++;
+            String name = names.nextElement();
+            Object v1 = s1.getAttribute(name);
+            Object v2 = s2.getAttribute(name);
+
+            Assert.assertEquals(v1,  v2);
+        }
+
+        Assert.assertEquals(expectedCount, count);
+    }
+
+
+    private static class NonSerializable {
+    }
+}

Propchange: 
tomcat/trunk/test/org/apache/catalina/session/TestStandardSession.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to