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