blob: d27b6146d010ddf4834cd171918c7b47da4ad298 [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:
// dmccann - Jan 30/2009 - 1.1 - Initial implementation
package org.eclipse.persistence.testing.sdo.helper.helpercontext;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import junit.textui.TestRunner;
import org.eclipse.persistence.sdo.SDODataObject;
import org.eclipse.persistence.sdo.helper.DataObjectInputStream;
import org.eclipse.persistence.sdo.helper.SDOHelperContext;
import org.eclipse.persistence.sdo.helper.SDOTypeHelper;
import org.eclipse.persistence.sdo.helper.SDOXMLHelper;
import org.eclipse.persistence.sdo.helper.SDOXSDHelper;
import commonj.sdo.DataObject;
import commonj.sdo.helper.HelperContext;
import commonj.sdo.impl.HelperProviderImpl;
public class UserSetContextMapTestCases extends SDOHelperContextTestCases {
protected final String FILE_NAME = tempFileDir + "/serialized_dataobject";
protected String implClassname;
protected HelperContext localCtx;
protected SDODataObject localDObj;
protected HelperContext globalCtx;
public UserSetContextMapTestCases(String name) {
super(name);
}
protected void resetGlobalContext() {
((SDOTypeHelper)globalCtx.getTypeHelper()).reset();
((SDOXSDHelper)globalCtx.getXSDHelper()).reset();
((SDOXMLHelper)globalCtx.getXMLHelper()).reset();
}
@Override
public void setUp() {
FileInputStream inStream = null;
// Clear defined schemas
super.setUp();
// Load the schema
String xsdString = getXSDString(CONTEXT1_DATAOBJECT_XSD_PATH);
// Define Types
localCtx = new SDOHelperContext();
localCtx.getXSDHelper().define(xsdString);
localDObj = load(CONTEXT1_DATAOBJECT_XML_PATH, localCtx);
implClassname = localDObj.getType().getInstanceClassName();
globalCtx = HelperProviderImpl.getDefaultContext();
}
public static void main(String[] args) {
String[] arguments = { "-c", "org.eclipse.persistence.testing.sdo.helper.helpercontext.UserSetContextMapTestCases" };
TestRunner.main(arguments);
}
/**
* Test should serialize/deserialize successfully/
*/
public void testResolveWithHelperContextSetInUserMap() {
//First overwrite the existing context with an empty one
SDOHelperContext.putHelperContext(Thread.currentThread().getContextClassLoader(), new SDOHelperContext());
String xsdString = getXSDString(CONTEXT1_DATAOBJECT_XSD_PATH);
localCtx = new SDOHelperContext("customId");
localCtx.getXSDHelper().define(xsdString);
localDObj = load(CONTEXT1_DATAOBJECT_XML_PATH, localCtx);
SDOHelperContext.putHelperContext(Thread.currentThread().getContextClassLoader(), localCtx);
serialize(localDObj, FILE_NAME);
SDODataObject dobj = (SDODataObject) deserialize(FILE_NAME);
String dobjImplClassName = dobj.getType().getInstanceClassName();
assertTrue("Expected ["+implClassname+"] but was ["+dobjImplClassName+"]", dobjImplClassName.equals(implClassname));
SDOHelperContext.removeHelperContext(Thread.currentThread().getContextClassLoader());
}
public void testResolveWithLocalHelperContextSetInUserMap() {
SDOHelperContext.putHelperContext(Thread.currentThread().getContextClassLoader(), localCtx);
serialize(localDObj, FILE_NAME);
SDODataObject dobj = (SDODataObject) deserialize(FILE_NAME);
String dobjImplClassName = dobj.getType().getInstanceClassName();
assertTrue("Expected ["+implClassname+"] but was ["+dobjImplClassName+"]", dobjImplClassName.equals(implClassname));
SDOHelperContext.removeHelperContext(Thread.currentThread().getContextClassLoader());
}
/**
* We do not set the loader/helper context pair in the SDOHelperContext
* user-set map, so we expect an error upon deserialization. We will
* get back org.eclipse.persistence.sdo.dataobjects.OpenSequencedTypeImpl,
* instead of org.example.EmployeeTypeImpl.
*/
public void testResolveWithoutHelperContextSetInUserMap() {
serialize(localDObj, FILE_NAME);
resetGlobalContext();
DataObject dobj = deserialize(FILE_NAME);
String dobjImplClassName = dobj.getType().getInstanceClass().getName();
assertFalse("Expected [org.eclipse.persistence.sdo.dataobjects.OpenSequencedType] but was ["+dobjImplClassName+"]", dobjImplClassName.equals(implClassname));
}
public void serialize(DataObject anObject, String filename) {
FileOutputStream aFileOutputStream = null;
ObjectOutputStream anObjectInputStream = null;
try {
aFileOutputStream = new FileOutputStream(filename);
anObjectInputStream = new ObjectOutputStream(aFileOutputStream);
anObjectInputStream.writeObject(anObject);
anObjectInputStream.flush();
aFileOutputStream.close();
anObjectInputStream.close();
} catch (Exception e) {
e.printStackTrace();
fail("An exception occurred during serialize");
}
}
public DataObject deserialize(String filename) {
FileInputStream aFileInputStream = null;
DataObjectInputStream aDataObjectInputStream = null;
DataObject anObject = null;
try {
aFileInputStream = new FileInputStream(filename);
aDataObjectInputStream = new DataObjectInputStream(aFileInputStream, globalCtx);
anObject = (DataObject)aDataObjectInputStream.readObject();
aDataObjectInputStream.close();
aFileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
fail("An exception occurred during deserialize");
}
return anObject;
}
public void testPutGetNamedHelperContextByClassLoader() {
ClassLoader classLoader = this.getClass().getClassLoader();
SDOHelperContext controlHelperContext = new SDOHelperContext("testPutGetNamedHelperContextByClassLoader");
SDOHelperContext.putHelperContext(classLoader, controlHelperContext);
HelperContext testHelperContext = SDOHelperContext.getHelperContext(controlHelperContext.getIdentifier(), classLoader);
assertSame(controlHelperContext, testHelperContext);
SDOHelperContext.removeHelperContext(controlHelperContext.getIdentifier(), classLoader);
}
}