blob: 324824029eb5d956309a5042822c4cb3b6442cc3 [file] [log] [blame]
/*
* 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.axis2.engine;
import junit.framework.TestCase;
import org.apache.axis2.context.externalize.SafeObjectInputStream;
import org.apache.axis2.context.externalize.SafeObjectOutputStream;
import org.apache.axis2.util.MetaDataEntry;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.Externalizable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.NotSerializableException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
public class ObjectSave2Test extends TestCase {
protected static final Log log = LogFactory.getLog(ObjectSave2Test.class);
private String testArg = null;
// simple constructor needed for nested class Externalizable interface
public ObjectSave2Test() {
}
public ObjectSave2Test(String arg0) {
super(arg0);
testArg = new String(arg0);
}
protected void setUp() throws Exception {
// org.apache.log4j.BasicConfigurator.configure();
}
public void testObjectSerializable() throws Exception {
File theFile = null;
String theFilename = null;
boolean saved = false;
boolean restored = false;
boolean done = false;
log.debug("ObjectSaveTest:testObjectSerializable(): BEGIN ---------------");
// ---------------------------------------------------------
// setup an object to use
// ---------------------------------------------------------
MetaDataEntry obj = new MetaDataEntry("object_1", "object_1");
// ---------------------------------------------------------
// setup a temporary file to use
// ---------------------------------------------------------
try {
theFile = File.createTempFile("objectTest", null);
theFilename = theFile.getName();
log.debug("ObjectSaveTest:testObjectSerializable(): temp file = ["
+ theFilename + "]");
} catch (Exception ex) {
log.debug("ObjectSaveTest:testObjectSerializable(): error creating temp file = ["
+ ex.getMessage() + "]");
theFile = null;
}
if (theFile != null) {
// ---------------------------------------------------------
// save to the temporary file
// ---------------------------------------------------------
try {
// setup an output stream to a physical file
FileOutputStream outStream = new FileOutputStream(theFile);
// attach a stream capable of writing objects to the
// stream connected to the file
ObjectOutputStream outObjStream = new ObjectOutputStream(
outStream);
SafeObjectOutputStream out =
SafeObjectOutputStream.install(outObjStream);
// try to save
log.debug("ObjectSaveTest:testObjectSerializable(): saving .....");
saved = false;
out.writeObject(obj);
// close out the streams
outObjStream.flush();
outObjStream.close();
outStream.flush();
outStream.close();
saved = true;
log.debug(
"ObjectSaveTest:testObjectSerializable(): " +
"....save operation completed.....");
long filesize = theFile.length();
log.debug("ObjectSaveTest:testObjectSerializable(): file size after save ["
+ filesize
+ "] temp file = ["
+ theFilename
+ "]");
} catch (Exception ex2) {
log.debug("ObjectSaveTest:testObjectSerializable(): error during save ["
+ ex2.getClass().getName()
+ " : "
+ ex2.getMessage() + "]");
ex2.printStackTrace();
}
assertTrue(saved);
// ---------------------------------------------------------
// restore from the temporary file
// ---------------------------------------------------------
try {
// setup an input stream to the file
FileInputStream inStream = new FileInputStream(theFile);
// attach a stream capable of reading objects from the
// stream connected to the file
ObjectInputStream inObjStream = new ObjectInputStream(inStream);
SafeObjectInputStream in =
SafeObjectInputStream.install(inObjStream);
// try to restore the options
log.debug("ObjectSaveTest:testObjectSerializable(): restoring .....");
restored = false;
MetaDataEntry restored_obj = (MetaDataEntry) in.readObject();
inObjStream.close();
inStream.close();
restored = true;
log.debug(
"ObjectSaveTest:testObjectSerializable(): ....restored operation completed.....");
} catch (Exception ex2) {
log.debug("ObjectSaveTest:testObjectSerializable(): error during restore ["
+ ex2.getClass().getName()
+ " : "
+ ex2.getMessage() + "]");
ex2.printStackTrace();
}
assertTrue(restored);
// if the save/restore of the object succeeded,
// then don't keep the temporary file around
boolean removeTmpFile = saved && restored;
if (removeTmpFile) {
try {
theFile.delete();
} catch (Exception e) {
// just absorb it
}
}
// indicate that the temp file was created ok
done = true;
}
// this is false when there are problems with the temporary file
assertTrue(done);
log.debug("ObjectSaveTest:testObjectSerializable(): END ---------------");
}
public void testObjectNotSerializable() throws Exception {
File theFile = null;
String theFilename = null;
boolean saved = false;
boolean restored = false;
boolean expected_exception = false;
boolean done = false;
log.debug("ObjectSaveTest:testObjectNotSerializable(): BEGIN ---------------");
// ---------------------------------------------------------
// setup an object to use
// ---------------------------------------------------------
NotSerializableObject obj = new NotSerializableObject("nso_1");
// ---------------------------------------------------------
// setup a temporary file to use
// ---------------------------------------------------------
try {
theFile = File.createTempFile("objectTest", null);
theFilename = theFile.getName();
log.debug("ObjectSaveTest:testObjectNotSerializable(): temp file = ["
+ theFilename + "]");
} catch (Exception ex) {
log.debug("ObjectSaveTest:testObjectNotSerializable(): error creating temp file = ["
+ ex.getMessage() + "]");
theFile = null;
}
if (theFile != null) {
// ---------------------------------------------------------
// save to the temporary file
// ---------------------------------------------------------
FileOutputStream outStream = null;
ObjectOutputStream outObjStream = null;
try {
// setup an output stream to a physical file
outStream = new FileOutputStream(theFile);
// attach a stream capable of writing objects to the
// stream connected to the file
outObjStream = new ObjectOutputStream(outStream);
SafeObjectOutputStream out =
SafeObjectOutputStream.install(outObjStream);
// try to save
log.debug("ObjectSaveTest:testObjectNotSerializable(): saving .....");
saved = false;
out.writeObject(obj);
saved = true;
log.debug(
"ObjectSaveTest:testObjectNotSerializable(): " +
"....save operation completed.....");
long filesize = theFile.length();
log.debug("ObjectSaveTest:testObjectNotSerializable(): file size after save ["
+ filesize
+ "] temp file = ["
+ theFilename
+ "]");
} catch (Exception ex2) {
// expect an error here
// ObjectStateUtils catches the NotSerializableException and
// logs it
if (ex2 instanceof NotSerializableException) {
expected_exception = true;
} else {
log.debug("ObjectSaveTest:testObjectNotSerializable(): save ["
+ ex2.getClass().getName()
+ " : "
+ ex2.getMessage() + "]");
}
}
// close out the streams
if (outObjStream != null)
outObjStream.close();
if (outStream != null)
outStream.close();
// ---------------------------------------------------------
// restore from the temporary file
// ---------------------------------------------------------
try {
// setup an input stream to the file
FileInputStream inStream = new FileInputStream(theFile);
// attach a stream capable of reading objects from the
// stream connected to the file
ObjectInputStream inObjStream = new ObjectInputStream(inStream);
SafeObjectInputStream in =
SafeObjectInputStream.install(inObjStream);
// try to restore the options
log.debug("ObjectSaveTest:testObjectSerializable(): restoring .....");
restored = false;
Object restored_obj = in.readObject();
inObjStream.close();
inStream.close();
restored = true;
log.debug(
"ObjectSaveTest:testObjectNotSerializable(): " +
"....restored operation completed.....");
} catch (Exception ex) {
log.debug("ObjectSaveTest:testObjectNotSerializable(): error during restore ["
+ ex.getClass().getName()
+ " : "
+ ex.getMessage() + "]");
ex.printStackTrace();
}
assertTrue(restored);
// if the save/restore of the object succeeded,
// then don't keep the temporary file around
boolean removeTmpFile = saved && restored;
if (removeTmpFile) {
try {
theFile.delete();
} catch (Exception e) {
// just absorb it
}
}
assertTrue(expected_exception);
}
log.debug("ObjectSaveTest:testObjectNotSerializable(): END ---------------");
}
public void testArrayList() throws Exception {
File theFile = null;
String theFilename = null;
boolean saved = false;
boolean restored = false;
boolean done = false;
boolean comparesOK = false;
log.debug("ObjectSaveTest:testArrayList(): BEGIN ---------------");
// ---------------------------------------------------------
// setup the object to use
// ---------------------------------------------------------
ArrayList obj = new ArrayList();
obj.add(new Integer(1));
obj.add(new Integer(2));
obj.add(new Integer(3));
obj.add(new String("string1"));
obj.add(new String("string2"));
obj.add(System.out);
obj.add(new Integer(4));
obj.add(new Integer(5));
obj.add(new Integer(6));
int initial_size = obj.size();
// ---------------------------------------------------------
// setup a temporary file to use
// ---------------------------------------------------------
try {
theFile = File.createTempFile("arraylistTest", null);
theFilename = theFile.getName();
log.debug("ObjectSaveTest:testArrayList(): temp file = ["
+ theFilename + "]");
} catch (Exception ex) {
log.debug("ObjectSaveTest:testArrayList(): error creating temp file = ["
+ ex.getMessage() + "]");
theFile = null;
}
if (theFile != null) {
// ---------------------------------------------------------
// save to the temporary file
// ---------------------------------------------------------
try {
// setup an output stream to a physical file
FileOutputStream outStream = new FileOutputStream(theFile);
// attach a stream capable of writing objects to the
// stream connected to the file
ObjectOutputStream outObjStream = new ObjectOutputStream(
outStream);
SafeObjectOutputStream out =
SafeObjectOutputStream.install(outObjStream);
// try to save
log.debug("ObjectSaveTest:testArrayList(): saving .....");
saved = false;
out.writeList(obj);
// close out the streams
outObjStream.flush();
outObjStream.close();
outStream.flush();
outStream.close();
saved = true;
log.debug("ObjectSaveTest:testArrayList(): ....save operation completed.....");
long filesize = theFile.length();
log.debug("ObjectSaveTest:testArrayList(): file size after save ["
+ filesize
+ "] temp file = ["
+ theFilename
+ "]");
} catch (Exception ex2) {
log.debug("ObjectSaveTest:testArrayList(): error during save ["
+ ex2.getClass().getName()
+ " : "
+ ex2.getMessage() + "]");
ex2.printStackTrace();
}
assertTrue(saved);
// ---------------------------------------------------------
// restore from the temporary file
// ---------------------------------------------------------
ArrayList restored_obj = null;
try {
// setup an input stream to the file
FileInputStream inStream = new FileInputStream(theFile);
// attach a stream capable of reading objects from the
// stream connected to the file
ObjectInputStream inObjStream = new ObjectInputStream(inStream);
SafeObjectInputStream in =
SafeObjectInputStream.install(inObjStream);
// try to restore the options
log.debug("ObjectSaveTest:testArrayList(): restoring .....");
restored = false;
restored_obj = in.readArrayList();
inObjStream.close();
inStream.close();
restored = true;
log.debug("ObjectSaveTest:testArrayList(): ....restored operation completed.....");
} catch (Exception ex2) {
log.debug("ObjectSaveTest:testArrayList(): error during restore ["
+ ex2.getClass().getName()
+ " : "
+ ex2.getMessage() + "]");
ex2.printStackTrace();
}
// if the save/restore of the object succeeded,
// then don't keep the temporary file around
boolean removeTmpFile = saved && restored;
if (removeTmpFile) {
try {
theFile.delete();
} catch (Exception e) {
// just absorb it
}
}
assertTrue(restored);
if (restored_obj != null) {
int restored_size = restored_obj.size();
if (restored_size == (initial_size - 1)) {
comparesOK = true;
}
}
// TODO: check for exact entries
assertTrue(comparesOK);
// indicate that the temp file was created ok
done = true;
}
// this is false when there are problems with the temporary file
assertTrue(done);
log.debug("ObjectSaveTest:testArrayList(): END ---------------");
}
public void testHashMap() throws Exception {
File theFile = null;
String theFilename = null;
boolean saved = false;
boolean restored = false;
boolean done = false;
boolean comparesOK = false;
log.debug("ObjectSaveTest:testHashMap(): BEGIN ---------------");
// ---------------------------------------------------------
// setup the object to use
// ---------------------------------------------------------
HashMap obj = new HashMap();
obj.put(new String("key1"), new Integer(1));
obj.put(new String("key2"), new Integer(2));
obj.put(new String("key3"), new String("value1"));
obj.put(new String("key4"), System.out);
obj.put(new String("key5"), new Integer(3));
obj.put(new String("key6"), new Integer(4));
obj.put(new String("key7"), System.err);
obj.put(new String("key8"), new Integer(5));
obj.put(new String("key9"), new Integer(6));
obj.put(new NotSerializableObject("TestForHashMapKey"), new Integer(7));
obj.put(new String("key10"), new Integer(8));
int initial_size = obj.size();
// ---------------------------------------------------------
// setup a temporary file to use
// ---------------------------------------------------------
try {
theFile = File.createTempFile("hashmapTest", null);
theFilename = theFile.getName();
log.debug("ObjectSaveTest:testHashMap(): temp file = ["
+ theFilename + "]");
} catch (Exception ex) {
log.debug("ObjectSaveTest:testHashMap(): error creating temp file = ["
+ ex.getMessage() + "]");
theFile = null;
}
if (theFile != null) {
// ---------------------------------------------------------
// save to the temporary file
// ---------------------------------------------------------
try {
// setup an output stream to a physical file
FileOutputStream outStream = new FileOutputStream(theFile);
// attach a stream capable of writing objects to the
// stream connected to the file
ObjectOutputStream outObjStream = new ObjectOutputStream(
outStream);
SafeObjectOutputStream out =
SafeObjectOutputStream.install(outObjStream);
// try to save
log.debug("ObjectSaveTest:testHashMap(): saving .....");
saved = false;
out.writeMap(obj);
// close out the streams
outObjStream.flush();
outObjStream.close();
outStream.flush();
outStream.close();
saved = true;
log.debug("ObjectSaveTest:testHashMap(): ....save operation completed.....");
long filesize = theFile.length();
log.debug("ObjectSaveTest:testHashMap(): file size after save ["
+ filesize
+ "] temp file = ["
+ theFilename
+ "]");
} catch (Exception ex2) {
log.debug("ObjectSaveTest:testHashMap(): error during save ["
+ ex2.getClass().getName()
+ " : "
+ ex2.getMessage() + "]");
ex2.printStackTrace();
}
assertTrue(saved);
// ---------------------------------------------------------
// restore from the temporary file
// ---------------------------------------------------------
HashMap restored_obj = null;
try {
// setup an input stream to the file
FileInputStream inStream = new FileInputStream(theFile);
// attach a stream capable of reading objects from the
// stream connected to the file
ObjectInputStream inObjStream = new ObjectInputStream(inStream);
SafeObjectInputStream in =
SafeObjectInputStream.install(inObjStream);
// try to restore the options
log.debug("ObjectSaveTest:testHashMap(): restoring .....");
restored = false;
restored_obj = in.readHashMap();
inObjStream.close();
inStream.close();
restored = true;
log.debug("ObjectSaveTest:testHashMap(): ....restored operation completed.....");
} catch (Exception ex2) {
log.debug("ObjectSaveTest:testHashMap(): error during restore ["
+ ex2.getClass().getName()
+ " : "
+ ex2.getMessage() + "]");
ex2.printStackTrace();
}
// if the save/restore of the object succeeded,
// then don't keep the temporary file around
boolean removeTmpFile = saved && restored;
if (removeTmpFile) {
try {
theFile.delete();
} catch (Exception e) {
// just absorb it
}
}
assertTrue(restored);
if (restored_obj != null) {
int restored_size = restored_obj.size();
if (restored_size == (initial_size - 3)) {
// there are entries in the map that are not serializable
comparesOK = true;
}
}
// TODO: check for exact entries
assertTrue(comparesOK);
// indicate that the temp file was created ok
done = true;
}
// this is false when there are problems with the temporary file
assertTrue(done);
log.debug("ObjectSaveTest:testHashMap(): END ---------------");
}
public void testLinkedList() throws Exception {
File theFile = null;
String theFilename = null;
boolean saved = false;
boolean restored = false;
boolean done = false;
boolean comparesOK = false;
log.debug("ObjectSaveTest:testLinkedList(): BEGIN ---------------");
// ---------------------------------------------------------
// setup the object to use
// ---------------------------------------------------------
LinkedList obj = new LinkedList();
obj.add(new Integer(1));
obj.add(new Integer(2));
obj.add(new Integer(3));
obj.add(new String("string1"));
obj.add(new String("string2"));
obj.add(System.in);
obj.add(new Integer(4));
obj.add(new Integer(5));
obj.add(new Integer(6));
int initial_size = obj.size();
// ---------------------------------------------------------
// setup a temporary file to use
// ---------------------------------------------------------
try {
theFile = File.createTempFile("linkedlistTest", null);
theFilename = theFile.getName();
log.debug("ObjectSaveTest:testLinkedList(): temp file = ["
+ theFilename + "]");
} catch (Exception ex) {
log.debug("ObjectSaveTest:testLinkedList(): error creating temp file = ["
+ ex.getMessage() + "]");
theFile = null;
}
if (theFile != null) {
// ---------------------------------------------------------
// save to the temporary file
// ---------------------------------------------------------
try {
// setup an output stream to a physical file
FileOutputStream outStream = new FileOutputStream(theFile);
// attach a stream capable of writing objects to the
// stream connected to the file
ObjectOutputStream outObjStream = new ObjectOutputStream(
outStream);
SafeObjectOutputStream out =
SafeObjectOutputStream.install(outObjStream);
// try to save
log.debug("ObjectSaveTest:testLinkedList(): saving .....");
saved = false;
out.writeList(obj);
// close out the streams
outObjStream.flush();
outObjStream.close();
outStream.flush();
outStream.close();
saved = true;
log.debug("ObjectSaveTest:testLinkedList(): ....save operation completed.....");
long filesize = theFile.length();
log.debug("ObjectSaveTest:testLinkedList(): file size after save ["
+ filesize
+ "] temp file = ["
+ theFilename
+ "]");
} catch (Exception ex2) {
log.debug("ObjectSaveTest:testLinkedList(): error during save ["
+ ex2.getClass().getName()
+ " : "
+ ex2.getMessage() + "]");
ex2.printStackTrace();
}
assertTrue(saved);
// ---------------------------------------------------------
// restore from the temporary file
// ---------------------------------------------------------
LinkedList restored_obj = null;
try {
// setup an input stream to the file
FileInputStream inStream = new FileInputStream(theFile);
// attach a stream capable of reading objects from the
// stream connected to the file
ObjectInputStream inObjStream = new ObjectInputStream(inStream);
SafeObjectInputStream in =
SafeObjectInputStream.install(inObjStream);
// try to restore the options
log.debug("ObjectSaveTest:testLinkedList(): restoring .....");
restored = false;
restored_obj = in.readLinkedList();
inObjStream.close();
inStream.close();
restored = true;
log.debug("ObjectSaveTest:testLinkedList(): ....restored operation completed.....");
} catch (Exception ex2) {
log.debug("ObjectSaveTest:testLinkedList(): error during restore ["
+ ex2.getClass().getName()
+ " : "
+ ex2.getMessage() + "]");
ex2.printStackTrace();
}
// if the save/restore of the object succeeded,
// then don't keep the temporary file around
boolean removeTmpFile = saved && restored;
if (removeTmpFile) {
try {
theFile.delete();
} catch (Exception e) {
// just absorb it
}
}
assertTrue(restored);
if (restored_obj != null) {
int restored_size = restored_obj.size();
if (restored_size == (initial_size - 1)) {
comparesOK = true;
}
}
// TODO: check for exact entries
assertTrue(comparesOK);
// indicate that the temp file was created ok
done = true;
}
// this is false when there are problems with the temporary file
assertTrue(done);
log.debug("ObjectSaveTest:testLinkedList(): END ---------------");
}
public class NotSerializableObject implements Externalizable {
private String label = "TestObject";
private String ID = null;
// make sure we have some objects that don't serialize
private PrintStream ps = System.out;
// default constructor needed for Externalizable interface
public NotSerializableObject() {
}
public NotSerializableObject(String identifier) {
ID = identifier;
ps = System.out;
}
public void setID(String s) {
ID = s;
}
public String getID() {
return ID;
}
public void writeExternal(java.io.ObjectOutput out) throws IOException {
throw new NotSerializableException(
"Test Object is not serializable");
}
public void readExternal(java.io.ObjectInput in) throws IOException,
ClassNotFoundException {
throw new IOException("Test object is not serializable");
}
}
}