blob: 60ec535c9f8e9ed17d81a38e8c9245e08e045cb6 [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
<<<<<<< Updated upstream
*
* 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
=======
*
* 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
>>>>>>> Stashed changes
* limitations under the License.
*/
package org.apache.jdo.tck.api.persistencemanagerfactory;
import java.io.File;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import javax.jdo.JDOFatalUserException;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Transaction;
import org.apache.jdo.tck.JDO_Test;
import org.apache.jdo.tck.pc.mylib.PCPoint;
/**
* The abstract super class for all GetPMF test cases.
*
* @author Michael Watzek
*/
abstract class AbstractGetPMF extends JDO_Test {
/**
* Used as the PMF name in positive tests. The variable is set to test/conf/jdori.properties. This
* file contains valid JDO properties.
*/
protected static final String validPropertiesFile = PMFProperties;
/**
* Used as the PMF name in negative tests. The variable is set to test/conf/logging.properties.
* This file does not contain valid JDO properties.
*/
/* protected static final String invalidPropertiesFile =
validPropertiesFile.substring(0, validPropertiesFile.lastIndexOf(File.separatorChar)+1) +
"logging.properties";
*/
protected static final String invalidPropertiesFile;
static {
if (validPropertiesFile == null) System.out.println("******************************");
invalidPropertiesFile =
validPropertiesFile.substring(0, validPropertiesFile.lastIndexOf(File.separatorChar) + 1)
+ "logging.properties";
}
/**
* Used as the PMF name in positive JNDI tests. The variable is set to jdori.properties. This
* resource contains valid JDO properties.
*/
protected static final String jndiName =
validPropertiesFile.substring(0, validPropertiesFile.lastIndexOf(File.separatorChar) + 1)
+ "pmf.ser";
/**
* Removing the path prefix from argument <code>name</code>.
*
* @param name the name
* @return argument <code>name</code> removed by the path prefix.
*/
protected String removePathPrefix(String name) {
int index = name.lastIndexOf(File.separatorChar);
if (index != -1) {
name = name.substring(index + 1);
}
return name;
}
protected void makePersistent() {
addTearDownClass(PCPoint.class);
pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
tx.begin();
PCPoint comp = new PCPoint(1, 2);
pm.makePersistent(comp);
tx.commit();
}
/**
* Returns pmf instance for the given name. Subclasses may use argument <code>name</code> as file
* name, resource name etc.
*
* @param name the name
* @return the pmf instance
*/
protected abstract PersistenceManagerFactory getPMF(String name);
/**
* This method creates a PMF calling method AbstractGetPMF#getPMF(name). It passes an name of an
* invalid properties file as parameter. The method expects the PMF creation to fail.
*
* @param assertionMessage the assertion message if the test fails.
*/
protected void checkGetPMFWithInvalidProperties(String assertionMessage) {
try {
pmf = getPMF(invalidPropertiesFile);
fail(assertionMessage);
} catch (JDOFatalUserException e) {
// expected exception
if (debug) logger.debug("caught expected exception " + e);
}
}
/**
* This method creates a PMF calling method AbstractGetPMF#getPMF(name). It passes an name of a
* valid properties file as parameter. The method expects the PMF creation to succeed.
*/
protected void checkGetPMFWithValidProperties() {
pmf = getPMF(validPropertiesFile);
verifyProperties(pmf, loadProperties(validPropertiesFile));
makePersistent();
}
/**
* Verify that the Properties are correctly set in the PMF.
*
* @param pmf the PersistenceManagerFactory
* @param props the Properties
*/
protected void verifyProperties(PersistenceManagerFactory pmf, Properties props) {
Object[] noArgs = new Object[] {};
String javaxjdooption = "javax.jdo.option.";
Class<?> pmfclass = pmf.getClass();
Set<Map.Entry<Object, Object>> entries = props.entrySet();
StringBuilder buffer = new StringBuilder();
for (Map.Entry<Object, Object> entry : entries) {
String key = (String) entry.getKey();
if (key.equals("javax.jdo.option.ConnectionPassword")) {
continue;
}
if (key.equals("javax.jdo.option.ConnectionUserName")) {
continue;
}
String expected = (String) entry.getValue();
if (key.startsWith(javaxjdooption)) {
String optionName = key.substring(javaxjdooption.length());
Method getMethod = getGetMethod(pmfclass, optionName);
Object actual = getValue(getMethod, pmf, noArgs);
if (actual == null) {
buffer.append("\n");
buffer.append("Key ");
buffer.append(key);
buffer.append(" was null.");
continue;
}
String actualString = actual.toString();
if (!expected.equals(actualString)) {
buffer.append("\n");
buffer.append("Key ");
buffer.append(key);
buffer.append(" expected: \"");
buffer.append(expected);
buffer.append("\" actual: \"");
buffer.append(actual);
buffer.append("\".");
}
}
}
if (buffer.length() != 0) {
fail(buffer.toString());
}
}
/** Get the "get" method corresponding to the option name. */
Method getGetMethod(Class<?> cls, String optionName) {
try {
return cls.getMethod("get" + optionName);
} catch (Exception ex) {
fail("Unexpected exception thrown from getMethod on PMF class with option name" + optionName);
return null;
}
}
/** Get the result of executing the Method. */
Object getValue(Method method, Object obj, Object[] args) {
try {
return method.invoke(obj, args);
} catch (Exception ex) {
fail("Unexpected exception executing method " + method.getName() + ".");
return null;
}
}
}