blob: 3adb728804649a8a686c3ad7dcac1e505f2d4a8b [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.sdo.externalizable;
import commonj.sdo.DataObject;
import commonj.sdo.helper.XMLDocument;
import java.io.FileInputStream;
import java.io.InvalidClassException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import org.eclipse.persistence.internal.localization.LoggingLocalization;
import org.eclipse.persistence.sdo.SDOConstants;
import org.eclipse.persistence.sdo.SDODataObject;
import org.eclipse.persistence.sdo.helper.SDOHelperContext;
import org.eclipse.persistence.sdo.helper.SDODataHelper;
import org.eclipse.persistence.sdo.helper.SDOTypeHelper;
import org.eclipse.persistence.sdo.helper.SDOXMLHelper;
import org.eclipse.persistence.sdo.helper.SDOXSDHelper;
import org.eclipse.persistence.testing.sdo.SDOXMLComparer;
public class SDOResolvableTest extends SDOResolvableTestCases {
public final String SERIALIZATION_FILE_NAME = tempFileDir + "/serialization.bin";
public final String SERIALIZATION_INSECURE_FILE_NAME = tempFileDir + "/serializationInsecure.bin";
public SDOResolvableTest(String name) {
super(name);
}
@Override
public void setUp() {
try {
xmlComparer = new SDOXMLComparer();
aHelperContext = SDOHelperContext.getHelperContext();
typeHelper = aHelperContext.getTypeHelper();
xmlHelper = aHelperContext.getXMLHelper();
xsdHelper = aHelperContext.getXSDHelper();
equalityHelper = aHelperContext.getEqualityHelper();
copyHelper = aHelperContext.getCopyHelper();
dataFactory = aHelperContext.getDataFactory();
// TODO: we should be using the DataHelper interface
dataHelper = (SDODataHelper)aHelperContext.getDataHelper();
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);
builderFactory.setIgnoringElementContentWhitespace(true);
try {
parser = builderFactory.newDocumentBuilder();
} catch (Exception e) {
fail("Could not create parser.");
e.printStackTrace();
}
((SDOTypeHelper) typeHelper).reset();
((SDOXMLHelper) xmlHelper).reset();
((SDOXSDHelper) xsdHelper).reset();
// load in the schema
String xsdString = getXSDString("org/eclipse/persistence/testing/sdo/helper/xmlhelper/PurchaseOrderDeep.xsd");
// Define Types so that processing attributes completes
List types = xsdHelper.define(xsdString);
// first we set up root data object
FileInputStream inStream = new FileInputStream("org/eclipse/persistence/testing/sdo/helper/xmlhelper/PurchaseOrderNSDeep.xml");
XMLDocument document = xmlHelper.load(inStream);
root = document.getRootObject();
inStream.close();
} catch (Exception e) {
e.printStackTrace();
fail("SDOResolvableTestCases.setup() failed to load DataObject");
}
}
/* public SDOResolvableTest(String name, HelperContext aContext) {
super(name, aContext);
}
*/
// UC44: SDOResolvable only uses getPath() for internal nodes
// We need to verify root behavior returns [.]
public void testGetPathForRootObject() {
//log("SDOResolvable.testGetPathForRootObject() UC44");
String aPath = ((SDODataObject)root)._getPath();
assertNotNull(aPath);
assertEquals(SDOConstants.SDO_XPATH_TO_ROOT, aPath);
}
// UC43: Write null DataObject
// Serialization does not occur because anObject is not of type SDODataObject
public void testWriteNullDataObject() {
// invoke serialization
DataObject anObject = null;
// check that we received a DataObject
assertNull(anObject);
// log("SDOResolvable.testWriteNullDataObject() UC43");
serialize(anObject, SERIALIZATION_FILE_NAME);
}
// UC10: Write root DataObject
// UC30: Read root DataObject
public void testWriteReadRootDataObject() {
// invoke serialization
//log("SDOResolvable.testWriteReadRootDataObject() UC10|30");
// check that we received a DataObject
assertNotNull(root);
serialize(root, SERIALIZATION_FILE_NAME);
// deserialize the binary file representation
DataObject aDeserializedDataObject = deserialize(SERIALIZATION_FILE_NAME);
// the original and deserialized objects should be the same
assertTrue(equalityHelper.equal(root, aDeserializedDataObject));
}
// UC6: Write (containment internal) DataObject
// UC26: Read (containment internal) DataObject
public void testWriteReadInternalDataObject() {
// invoke serialization
//log("SDOResolvable.testWriteReadInternalDataObject() UC6|26");
DataObject anObject = root.getDataObject("shipTo");
// check that we received a DataObject
assertNotNull(anObject);
serialize(anObject, SERIALIZATION_FILE_NAME);
// deserialize the binary file representation
DataObject aDeserializedDataObject = deserialize(SERIALIZATION_FILE_NAME);
// the original and deserialized objects should be the same
assertTrue(equalityHelper.equal(anObject, aDeserializedDataObject));
}
// UC3: Write (containment internal) indexed list DataObject
// UC23: Read (containment internal) indexed list DataObject
public void testWriteReadInternalListDataObject() {
// invoke serialization
//log("SDOResolvable.testWriteReadInternalListDataObject() UC3|23");
DataObject anObject = root.getDataObject("items/item[2]");
// check that we received a DataObject
assertNotNull(anObject);
serialize(anObject, SERIALIZATION_FILE_NAME);
// deserialize the binary file representation
DataObject aDeserializedDataObject = deserialize(SERIALIZATION_FILE_NAME);
// the original and deserialized objects should be the same
assertTrue(equalityHelper.equal(anObject, aDeserializedDataObject));
}
public void testWriteReadInternalMultiListDataObject() {
// invoke serialization
//log("SDOResolvable.testWriteReadInternalMultListDataObject() UC3|23");
DataObject anObject = root.getDataObject("items/item[2]/levels2/level2[2]");
// check that we received a DataObject
assertNotNull(anObject);
serialize(anObject, SERIALIZATION_FILE_NAME);
// deserialize the binary file representation
DataObject aDeserializedDataObject = deserialize(SERIALIZATION_FILE_NAME);
// the original and deserialized objects should be the same
assertTrue(equalityHelper.equal(anObject, aDeserializedDataObject));
}
// UC2: Write (containment internal)indexed list with changeSequence DataObject
// UC22: Read (containment internal) indexed list with changeSequence DataObject
/* public void testWriteReadInternalListChangeSequenceDataObject() {
// invoke serialization
log("SDOResolvable.testWriteReadInternalListChangeSequenceDataObject() UC2|22");
SDODataObject anObject = (SDODataObject)root;
serialize(anObject, SERIALIZATION_FILE_NAME);
// deserialize the binary file representation
SDODataObject aDeserializedDataObject = (SDODataObject)deserialize(SERIALIZATION_FILE_NAME);
// the original and deserialized objects should be the same
assertTrue(equalityHelper.equal(anObject, aDeserializedDataObject));
}*/
public void testWriteListWrapper() {
// invoke serialization
//log("SDOResolvable.testWriteListWrapper()");
DataObject itemsDO = root.getDataObject("items");
assertNotNull(itemsDO);
List items = itemsDO.getList("item");
serializeList(items, SERIALIZATION_FILE_NAME + 2);
// deserialize the binary file representation
List aDeserializedDataObject = deserializeList(SERIALIZATION_FILE_NAME + 2);
assertEquals(items.size(), aDeserializedDataObject.size());
// the original and deserialized objects should be the same
//assertTrue(equalityHelper.equal(anObject, aDeserializedDataObject));
}
public void testWriteList() {
//log("SDOResolvable.testWriteList()");
DataObject itemsDO = root.getDataObject("items");
assertNotNull(itemsDO);
List items = itemsDO.getList("item");
ArrayList theList = new ArrayList(items);
// invoke serialization
serializeList(theList, SERIALIZATION_FILE_NAME + 3);
// deserialize the binary file representation
List aDeserializedDataObject = deserializeList(SERIALIZATION_FILE_NAME + 3);
assertEquals(items.size(), aDeserializedDataObject.size());
// the original and deserialized objects should be the same
//assertTrue(equalityHelper.equal(anObject, aDeserializedDataObject));
}
public void testWriteReadInsecureDataObject() throws Exception {
DataObject anObject = new InsecureDataObject();
DataObject aDeserializedInsecureDataObject = null;
// check that we received a DataObject
assertNotNull(anObject);
serialize(anObject, SERIALIZATION_INSECURE_FILE_NAME);
// deserialize the binary file representation
try {
aDeserializedInsecureDataObject = deserializeInsecure(SERIALIZATION_INSECURE_FILE_NAME);
} catch (InvalidClassException e) {
assertEquals(LoggingLocalization.buildMessage("sdo_error_deserialization", new Object[] {anObject.getClass().getName()}), e.getMessage());
return;
}
// the deserialized object variable must be null
assertNull(aDeserializedInsecureDataObject);
fail("java.io.InvalidClassException was not occured.");
}
}