blob: 5196483a0f632172b3aec6f5a2acf8bbbf90c27d [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
*
* https://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 javax.jdo;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.jdo.util.BatchTestRunner;
import junit.framework.TestSuite;
/**
* Tests class javax.jdo.JDOHelper for calls to the impl's static method
* getPersistenceManagerFactory(Map overrides, Map props).
*/
public class PMFMapMapTest extends AbstractJDOConfigTest {
private static final String EXPECTED_FACTORY2_NAME = "Jane Doe";
private static final String EXPECTED_FACTORY2_NAME_4_NAMED_PMF = "Larry";
private static final String EXPECTED_FACTORY2_NAME_WITH_OVERRIDE = "Gerard Manley Hopkins";
private static final String PMF_NAME = "BookSearch";
private static final String RESOURCE_DIR = "/Pmfmapmap01/";
private static final String PROPS_DIR = "/Pmfmapmap02/";
private static final String PMF_SERVICE_CLASS = "javax.jdo.stub.StubPMF";
private static final String PROPERTIES_FILE = "propsfile.props";
public static void main(String args[]) {
BatchTestRunner.run(PMFMapMapTest.class);
}
/**
* {@inheritDoc}
*
* @return {@inheritDoc}
*/
public static TestSuite suite() {
return new TestSuite(PMFMapMapTest.class);
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory() Get the
* anonymous PersistenceManagerFactory configured via the standard
* configuration file resource "META-INF/jdoconfig.xml", using the current
* thread's context class loader to locate the configuration file
* resource(s).
*/
public void testJDOConfigXML() throws IOException {
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
ClassLoader saveContextClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(resourceClassLoader);
try {
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory();
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass." + ex.getMessage());
} finally {
Thread.currentThread().setContextClassLoader(saveContextClassLoader);
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory
* (java.lang.ClassLoader pmfClassLoader) Get the anonymous
* PersistenceManagerFactory configured via the standard configuration file
* resource "META-INF/jdoconfig.xml", using the given class loader.
*/
public void testJDOConfigXMLWithLoader() throws IOException {
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
try {
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(resourceClassLoader);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass." + ex.getMessage());
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory(
* java.io.File propsFile) Returns a PersistenceManagerFactory configured
* based on the properties stored in the file at propsFile.
*/
public void testPropsFile() throws IOException {
ClassLoader resourceClassLoader = createResourceClassLoader(PROPS_DIR);
ClassLoader saveContextClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(resourceClassLoader);
try {
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(PROPERTIES_FILE);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass." + ex.getMessage());
} finally {
Thread.currentThread().setContextClassLoader(saveContextClassLoader);
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory(
* java.io.File propsFile, java.lang.ClassLoader loader) Returns a
* PersistenceManagerFactory configured based on the properties stored in
* the file at propsFile.
*/
public void testPropsFileAndLoader() throws IOException {
ClassLoader resourceClassLoader = createResourceClassLoader(PROPS_DIR);
try {
PersistenceManagerFactory pmf =
JDOHelper.getPersistenceManagerFactory(PROPERTIES_FILE, resourceClassLoader);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass." + ex.getMessage());
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory(
* java.io.InputStream stream) Returns a PersistenceManagerFactory
* configured based on the Properties stored in the input stream at stream.
*/
public void testInputStream() throws IOException {
Properties props = new Properties();
props.setProperty(Constants.PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS, PMF_SERVICE_CLASS);
props.setProperty(Constants.PROPERTY_CONNECTION_FACTORY2_NAME, EXPECTED_FACTORY2_NAME);
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
try {
props.store(outstream, "");
} catch (IOException ex) {
fail(ex.getMessage());
}
InputStream byteArrayInputStream = new ByteArrayInputStream(outstream.toByteArray());
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
ClassLoader saveContextClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(resourceClassLoader);
try {
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(byteArrayInputStream);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass." + ex.getMessage());
} finally {
Thread.currentThread().setContextClassLoader(saveContextClassLoader);
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory(
* java.io.InputStream stream, java.lang.ClassLoader loader) Returns a
* PersistenceManagerFactory configured based on the Properties stored in
* the input stream at stream.
*/
public void testInputStreamWithLoader() throws IOException {
Properties props = new Properties();
props.setProperty(Constants.PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS, PMF_SERVICE_CLASS);
props.setProperty(Constants.PROPERTY_CONNECTION_FACTORY2_NAME, EXPECTED_FACTORY2_NAME);
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
try {
props.store(outstream, "");
} catch (IOException ex) {
fail(ex.getMessage());
}
InputStream byteArrayInputStream = new ByteArrayInputStream(outstream.toByteArray());
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
try {
PersistenceManagerFactory pmf =
JDOHelper.getPersistenceManagerFactory(byteArrayInputStream, resourceClassLoader);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass." + ex.getMessage());
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory(
* java.util.Map<?,?> props) Get a PersistenceManagerFactory based on a
* Properties instance, using the current thread's context class loader to
* locate the PersistenceManagerFactory class.
*/
public void testProperties() throws IOException {
Properties props = new Properties();
props.setProperty(Constants.PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS, PMF_SERVICE_CLASS);
props.setProperty(Constants.PROPERTY_CONNECTION_FACTORY2_NAME, EXPECTED_FACTORY2_NAME);
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
ClassLoader saveContextClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(resourceClassLoader);
try {
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(props);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass." + ex.getMessage());
} finally {
Thread.currentThread().setContextClassLoader(saveContextClassLoader);
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory(
* java.util.Map<?,?> props, java.lang.ClassLoader pmfClassLoader) Get a
* PersistenceManagerFactory based on a Map and a class loader.
*/
public void testPropertiesAndLoader() throws IOException {
Properties props = new Properties();
props.setProperty(Constants.PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS, PMF_SERVICE_CLASS);
props.setProperty(Constants.PROPERTY_CONNECTION_FACTORY2_NAME, EXPECTED_FACTORY2_NAME);
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
try {
PersistenceManagerFactory pmf =
JDOHelper.getPersistenceManagerFactory(props, resourceClassLoader);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass." + ex.getMessage());
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory
* (java.util.Map<?,?> overrides, java.lang.String name) Returns a named
* PersistenceManagerFactory or persistence unit.
*/
public void testNamedPMFWithOverrides() throws IOException {
Properties overrides = new Properties();
overrides.setProperty(
Constants.PROPERTY_CONNECTION_FACTORY2_NAME, EXPECTED_FACTORY2_NAME_WITH_OVERRIDE);
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
ClassLoader saveContextClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(resourceClassLoader);
try {
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(overrides, PMF_NAME);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME_WITH_OVERRIDE);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass." + ex.getMessage());
} finally {
Thread.currentThread().setContextClassLoader(saveContextClassLoader);
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory(
* java.util.Map<?,?> overrides, java.lang.String name,
* java.lang.ClassLoader resourceLoader) Returns a named
* PersistenceManagerFactory or persistence unit.
*/
public void testNamedPMFWithOverridesAndLoader() throws IOException {
Properties overrides = new Properties();
overrides.setProperty(
Constants.PROPERTY_CONNECTION_FACTORY2_NAME, EXPECTED_FACTORY2_NAME_WITH_OVERRIDE);
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
try {
PersistenceManagerFactory pmf =
JDOHelper.getPersistenceManagerFactory(overrides, PMF_NAME, resourceClassLoader);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME_WITH_OVERRIDE);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass." + ex.getMessage());
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory(
* java.util.Map<?,?> overrides, java.lang.String name,
* java.lang.ClassLoader resourceLoader, java.lang.ClassLoader pmfLoader)
* Returns a PersistenceManagerFactory configured based on the properties
* stored in the resource at name, or, if not found, returns a
* PersistenceManagerFactory with the given name or, if not found, returns a
* javax.persistence.EntityManagerFactory cast to a
* PersistenceManagerFactory.
*/
public void testNamedPMFWithOverridesAndTwoLoaders() throws IOException {
Properties overrides = new Properties();
overrides.setProperty(
Constants.PROPERTY_CONNECTION_FACTORY2_NAME, EXPECTED_FACTORY2_NAME_WITH_OVERRIDE);
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
ClassLoader pmfLoader = getClass().getClassLoader();
try {
PersistenceManagerFactory pmf =
JDOHelper.getPersistenceManagerFactory(
overrides, PMF_NAME, resourceClassLoader, pmfLoader);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME_WITH_OVERRIDE);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass. " + ex.getMessage());
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory(
* java.lang.String name) Returns a named PersistenceManagerFactory or
* persistence unit.
*/
public void testNamedPMF() throws IOException {
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
ClassLoader saveContextClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(resourceClassLoader);
try {
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(PMF_NAME);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME_4_NAMED_PMF);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass. " + ex.getMessage());
} finally {
Thread.currentThread().setContextClassLoader(saveContextClassLoader);
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory
* (java.lang.String name, java.lang.ClassLoader loader) Returns a named
* PersistenceManagerFactory or persistence unit.
*/
public void testNamedPMFWithLoader() throws IOException {
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
try {
PersistenceManagerFactory pmf =
JDOHelper.getPersistenceManagerFactory(PMF_NAME, resourceClassLoader);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME_4_NAMED_PMF);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass. " + ex.getMessage());
}
}
/*
* static PersistenceManagerFactory getPersistenceManagerFactory(
* java.lang.String name, java.lang.ClassLoader resourceLoader,
* java.lang.ClassLoader pmfLoader) Returns a named
* PersistenceManagerFactory or persistence unit.
*/
public void testNamedPMFWithTwoLoaders() throws IOException {
ClassLoader resourceClassLoader = createResourceClassLoader(RESOURCE_DIR);
ClassLoader pmfLoader = getClass().getClassLoader();
try {
PersistenceManagerFactory pmf =
JDOHelper.getPersistenceManagerFactory(PMF_NAME, resourceClassLoader, pmfLoader);
checkConnectionFactory2Name(pmf, EXPECTED_FACTORY2_NAME_4_NAMED_PMF);
} catch (JDOFatalUserException ex) {
fail("Failed to find PersistenceManagerFactoryClass. " + ex.getMessage());
}
}
private ClassLoader createResourceClassLoader(String dir) throws IOException {
switch (dir.charAt(dir.length() - 1)) {
case '\\':
dir = dir.substring(0, dir.length() - 1) + '/';
break;
case '/':
break;
default:
if (new File(dir).isDirectory()) {
dir += '/';
}
}
return new JDOConfigTestClassLoader(
getClass().getClassLoader(), JDOCONFIG_CLASSPATH_PREFIX + dir);
}
private void checkConnectionFactory2Name(PersistenceManagerFactory pmf, String expectedName) {
String factory2Name = pmf.getConnectionFactory2Name();
if (!expectedName.equals(factory2Name)) {
fail(
"Bad ConnectionFactory2Name(): "
+ factory2Name
+ ". Expected: \""
+ expectedName
+ "\"");
}
}
}