| /* |
| * 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.lang.reflect.Method; |
| import java.util.Arrays; |
| import java.util.Collection; |
| import java.util.Properties; |
| import javax.jdo.JDOException; |
| import javax.jdo.JDOFatalInternalException; |
| import javax.jdo.JDOUserException; |
| import javax.jdo.PersistenceManagerFactory; |
| import org.apache.jdo.tck.JDO_Test; |
| import org.apache.jdo.tck.util.BatchTestRunner; |
| |
| /** |
| * <B>Title:</B> After GetPersistenceManager No Set Methods Succeed <br> |
| * <B>Keywords:</B> <br> |
| * <B>Assertion ID:</B> A11.3-3. <br> |
| * <B>Assertion Description: </B> After the first use of <code> |
| * PersistenceManagerFactory.getPersistenceManager()</code>, none of the <code>set</code> methods |
| * will succeed. |
| */ |
| public class AfterGetPersistenceManagerNoSetMethodsSucceed extends JDO_Test { |
| |
| private String username; |
| private String password; |
| |
| private Class<?>[] stringParameters = null; |
| private Class<?>[] booleanParameters = null; |
| private Object[] stringParameter = null; |
| private Object[] booleanParameter = null; |
| private SetProperty[] setMethods = null; |
| private GetProperty[] getMethods = null; |
| |
| /** */ |
| private static final String ASSERTION_FAILED = |
| "Assertion A11.3-3 (AfterGetPersistenceManagerNoSetMethodsSucceed) failed: "; |
| |
| /** |
| * The <code>main</code> is called when the class is directly executed from the command line. |
| * |
| * @param args The arguments passed to the program. |
| */ |
| public static void main(String[] args) { |
| BatchTestRunner.run(AfterGetPersistenceManagerNoSetMethodsSucceed.class); |
| } |
| |
| /** */ |
| public AfterGetPersistenceManagerNoSetMethodsSucceed() { |
| super(); |
| initVariables(); |
| } |
| |
| /** */ |
| @SuppressWarnings("rawtypes") |
| public void initVariables() { |
| stringParameters = new Class[] {String.class}; |
| booleanParameters = new Class[] {boolean.class}; |
| stringParameter = new Object[] {"Nobody knows the trouble"}; |
| booleanParameter = new Object[] {Boolean.FALSE}; |
| |
| setMethods = |
| new SetProperty[] { |
| new SetProperty("setConnectionDriverName", stringParameters, stringParameter), |
| new SetProperty("setConnectionFactoryName", stringParameters, stringParameter), |
| new SetProperty("setConnectionFactory2Name", stringParameters, stringParameter), |
| new SetProperty("setConnectionURL", stringParameters, stringParameter), |
| new SetProperty("setConnectionUserName", stringParameters, stringParameter), |
| new SetProperty("setConnectionPassword", stringParameters, stringParameter), |
| new SetProperty("setIgnoreCache", booleanParameters, booleanParameter), |
| new SetProperty("setMultithreaded", booleanParameters, booleanParameter), |
| new SetProperty("setNontransactionalRead", booleanParameters, booleanParameter), |
| new SetProperty("setNontransactionalWrite", booleanParameters, booleanParameter), |
| new SetProperty("setOptimistic", booleanParameters, booleanParameter), |
| new SetProperty("setRestoreValues", booleanParameters, booleanParameter), |
| new SetProperty("setRetainValues", booleanParameters, booleanParameter) |
| }; |
| |
| getMethods = |
| new GetProperty[] { |
| new GetProperty("getConnectionDriverName"), |
| new GetProperty("getConnectionFactoryName"), |
| new GetProperty("getConnectionFactory2Name"), |
| new GetProperty("getConnectionURL"), |
| new GetProperty("getConnectionUserName"), |
| new GetProperty("getIgnoreCache"), |
| new GetProperty("getMultithreaded"), |
| new GetProperty("getNontransactionalRead"), |
| new GetProperty("getNontransactionalWrite"), |
| new GetProperty("getOptimistic"), |
| new GetProperty("getRestoreValues"), |
| new GetProperty("getRetainValues") |
| }; |
| } |
| |
| /** */ |
| public void testGetPersistenceManagerWithNoParametes() { |
| runTest(false); |
| } |
| |
| /** */ |
| public void testGetPersistenceManagerWithParameters() { |
| Properties props = loadProperties(PMFProperties); |
| username = props.getProperty(CONNECTION_USERNAME_PROP); |
| password = props.getProperty(CONNECTION_PASSWORD_PROP); |
| runTest(true); |
| } |
| |
| /** |
| * @param bUserAndPasswd flag whether to use user nad password |
| */ |
| public void runTest(boolean bUserAndPasswd) { |
| pmf = getPMF(); |
| if (!bUserAndPasswd) pm = getPM(); |
| else pm = getPMF().getPersistenceManager(username, password); |
| |
| // each set method should throw an exception |
| Collection<SetProperty> setCollection = Arrays.asList(setMethods); |
| for (SetProperty sp : setCollection) { |
| String where = sp.getMethodName(); |
| try { |
| sp.execute(pmf); |
| fail( |
| ASSERTION_FAILED, |
| "pmf method " |
| + where |
| + " should throw JDOUserException when called after getPersistenceManager"); |
| } catch (JDOUserException ex) { |
| if (debug) logger.debug("Caught expected exception " + ex + " from " + where); |
| } |
| } |
| // each get method should succeed |
| Collection<GetProperty> getCollection = Arrays.asList(getMethods); |
| for (GetProperty gp : getCollection) { |
| String where = gp.getMethodName(); |
| try { |
| gp.execute(pmf); |
| } catch (JDOUserException ex) { |
| fail(ASSERTION_FAILED, "Caught unexpected exception " + ex + " from " + where); |
| } |
| } |
| } |
| |
| /** */ |
| static class SetProperty { |
| |
| Method method; |
| final String methodName; |
| final Class<?>[] parameters; |
| final Object[] parameter; |
| |
| SetProperty(String methodName, Class<?>[] parameters, Object[] parameter) { |
| this.methodName = methodName; |
| this.parameters = parameters; |
| this.parameter = parameter; |
| try { |
| method = PersistenceManagerFactory.class.getMethod(methodName, parameters); |
| } catch (NoSuchMethodException ex) { |
| throw new JDOFatalInternalException("Method not defined: " + methodName); |
| } |
| } |
| |
| void execute(PersistenceManagerFactory pmf) { |
| try { |
| method.invoke(pmf, parameter); |
| } catch (IllegalAccessException ex) { |
| throw new JDOFatalInternalException("IllegalAccessException", ex); |
| } catch (java.lang.reflect.InvocationTargetException ex) { |
| throw (JDOException) ex.getTargetException(); |
| } |
| } |
| |
| String getMethodName() { |
| return methodName; |
| } |
| } |
| |
| /** */ |
| static class GetProperty { |
| |
| Method method; |
| final String methodName; |
| |
| GetProperty(String methodName) { |
| this.methodName = methodName; |
| try { |
| method = PersistenceManagerFactory.class.getMethod(methodName, (Class<?>[]) null); |
| } catch (NoSuchMethodException ex) { |
| throw new JDOFatalInternalException("Method not defined: " + methodName); |
| } |
| } |
| |
| void execute(PersistenceManagerFactory pmf) { |
| try { |
| method.invoke(pmf, (Object[]) null); |
| } catch (IllegalAccessException ex) { |
| throw new JDOFatalInternalException("IllegalAccessException", ex); |
| } catch (java.lang.reflect.InvocationTargetException ex) { |
| throw (JDOException) ex.getTargetException(); |
| } |
| } |
| |
| String getMethodName() { |
| return methodName; |
| } |
| } |
| } |