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: [email protected]
For additional commands, e-mail: [email protected]