blob: 9b740568bc4a0da6ff4794f4738606144940699a [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.persistencemanager.getobject;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import org.apache.jdo.tck.JDO_Test;
import org.apache.jdo.tck.pc.mylib.PCPoint;
import org.apache.jdo.tck.util.BatchTestRunner;
/**
* <B>Title:</B> Test GetObjectsById <br>
* <B>Keywords:</B> getObjectsById getObjectById <br>
* <B>Assertion IDs:</B> 12.5.6-17 <br>
* <B>Assertion Description: </B> 12.5.6-17 [Collection getObjectsById (Collection oids); Object[]
* getObjectsById (Object[] oids); Collection getObjectsById (Collection oids, boolean validate);
* Object[] getObjectsById (Object[] oids, boolean validate); The getObjectsById method attempts to
* find instances in the cache with the specified JDO identities. The elements of the oids parameter
* object might have been returned by earlier calls to getObjectId or getTransactionalObjectId, or
* might have been constructed by the application. If a method with no validate parameter is used,
* the method behaves exactly as the correspond ing method with the validate flag set to true. If
* the Object[] form of the method is used, the returned objects correspond by position with the
* object ids in the oids parameter. If the Collection form of the method is used, the iterator over
* the returned Collection returns instances in the same order as the oids returned by an iterator
* over the parameter Collection. The cardinality of the return value is the same as the cardinality
* of the oids parameter. ]
*/
public class GetObjectsById extends JDO_Test {
/** */
private static final String ASSERTION_FAILED = "Assertion 12.5.6-17 (GetObjectsById) failed: ";
/** Number of persistent instances */
private static final int NUMBER_OF_INSTANCES = 50;
/** Persistent instances */
private final Collection<PCPoint> instanceCollection = new ArrayList<>(NUMBER_OF_INSTANCES);
/** Object ids */
private final Collection<Object> oidCollection = new ArrayList<>(NUMBER_OF_INSTANCES);
/** Persistent instances */
private final Object[] instanceArray = new Object[NUMBER_OF_INSTANCES];
/** Object ids */
private final Object[] oidArray = new Object[NUMBER_OF_INSTANCES];
/**
* 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(GetObjectsById.class);
}
/**
* @see org.apache.jdo.tck.JDO_Test#localSetUp()
*/
@Override
protected void localSetUp() {
addTearDownClass(PCPoint.class);
getPM().currentTransaction().begin();
PCPoint instance;
Object oid;
instanceCollection.clear();
oidCollection.clear();
for (int i = 0; i < NUMBER_OF_INSTANCES; ++i) {
instance = new PCPoint(i, 1000 + i);
pm.makePersistent(instance);
instanceCollection.add(instance);
instanceArray[i] = instance;
oid = pm.getObjectId(instance);
oidCollection.add(oid);
oidArray[i] = oid;
}
pm.currentTransaction().commit();
}
/** */
@SuppressWarnings("unchecked")
public void testCollection() {
getPM().currentTransaction().begin();
Collection<PCPoint> result = pm.getObjectsById(oidCollection);
pm.currentTransaction().commit();
checkResultCollection("after getObjectsById(Collection)", result);
failOnError();
}
/** */
@SuppressWarnings("unchecked")
public void testCollectionTrue() {
getPM().currentTransaction().begin();
Collection<PCPoint> result = pm.getObjectsById(oidCollection, true);
pm.currentTransaction().commit();
checkResultCollection("after getObjectsById(Collection, true)", result);
failOnError();
}
/** */
@SuppressWarnings("unchecked")
public void testCollectionFalse() {
getPM().currentTransaction().begin();
Collection<PCPoint> result = pm.getObjectsById(oidCollection, false);
pm.currentTransaction().commit();
checkResultCollection("after getObjectsById(Collection, false)", result);
failOnError();
}
/** */
public void testArray() {
getPM().currentTransaction().begin();
Object[] result = pm.getObjectsById(oidArray);
pm.currentTransaction().commit();
checkResultArray("after getObjectsById(Object[], false)", result);
failOnError();
}
/** */
public void testArrayTrue() {
getPM().currentTransaction().begin();
Object[] result = pm.getObjectsById(true, oidArray);
pm.currentTransaction().commit();
checkResultArray("after getObjectsById(Object[], false)", result);
failOnError();
}
/** */
public void testArrayFalse() {
getPM().currentTransaction().begin();
Object[] result = pm.getObjectsById(false, oidArray);
pm.currentTransaction().commit();
checkResultArray("after getObjectsById(Object[], false)", result);
failOnError();
}
/** Check the results of getObjectsById */
private void checkResultCollection(String location, Collection<PCPoint> instances) {
Iterator<PCPoint> expected = instanceCollection.iterator();
Iterator<PCPoint> actual = instances.iterator();
for (int i = 0; i < NUMBER_OF_INSTANCES; ++i) {
checkIdentity(
ASSERTION_FAILED + location + ", position " + i, expected.next(), actual.next());
}
checkIteratorComplete(ASSERTION_FAILED, actual);
}
/** Check the results of getObjectsById */
private void checkResultArray(String location, Object[] actual) {
int length = actual.length;
if (length != NUMBER_OF_INSTANCES) {
appendMessage(
location
+ "incorrect length of result. "
+ "expected: "
+ NUMBER_OF_INSTANCES
+ " actual: "
+ length);
}
Object[] expected = instanceArray;
for (int i = 0; i < NUMBER_OF_INSTANCES; ++i) {
checkIdentity(ASSERTION_FAILED + location + ", position " + i, expected[i], actual[i]);
}
}
/** Check the identity of the instances */
private void checkIdentity(String location, Object expected, Object actual) {
if (expected != actual) {
appendMessage(
location + "failed to compare \n" + "expected: " + expected + " actual: " + actual);
}
}
/** Check that the iterator has no more elements */
private void checkIteratorComplete(String location, Iterator<PCPoint> iterator) {
if (iterator.hasNext()) {
appendMessage(location + "result iterator has more elements than expected.");
}
}
}