/******************************************************************************* | |
* Copyright (c) 1998, 2013 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 v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* Contributors: | |
* Oracle - initial API and implementation from Oracle TopLink | |
******************************************************************************/ | |
package org.eclipse.persistence.testing.tests.simultaneous; | |
import java.util.*; | |
import org.eclipse.persistence.testing.framework.*; | |
import org.eclipse.persistence.queries.*; | |
import org.eclipse.persistence.internal.sessions.AbstractSession; | |
/** | |
* This test is designed to be run in the multithreaded test model. | |
* | |
* It runs a cached query three times | |
* 1. Populate the cache | |
* 2. Use the populated cache | |
* 3. After clearing the cache | |
* | |
* This sequence of steps is designed to ensure all of these three scenarios can be run | |
* in a multithreaded environment. | |
* | |
* In addition, it can be set up to run the query with 3 different sets of parameters | |
* in order to test caching of results for different queries | |
*/ | |
public class QueryCacheTest extends TestCase { | |
protected Vector args = null; | |
protected int results1 = 0; | |
protected int results2 = 0; | |
protected int results3 = 0; | |
protected int expectedResults = 0; | |
public QueryCacheTest(int parameterType) { | |
setDescription("A single test run as part of the multithreaded query caching test."); | |
args = new Vector(); | |
if (parameterType == 1) { | |
args.add("B%"); | |
expectedResults = 2; | |
} else if (parameterType == 2) { | |
args.add("J%"); | |
expectedResults = 3; | |
} else { | |
args.add("%"); | |
expectedResults = 12; | |
} | |
} | |
public void test() { | |
Vector results = (Vector)getSession().executeQuery(QueryCacheMultithreadedTest.CACHING_QUERY_NAME, args); | |
results1 = results.size(); | |
results = (Vector)getSession().executeQuery(QueryCacheMultithreadedTest.CACHING_QUERY_NAME, args); | |
results2 = results.size(); | |
ReadQuery query = (ReadQuery)getSession().getQuery(QueryCacheMultithreadedTest.CACHING_QUERY_NAME); | |
query.clearQueryResults((AbstractSession)getSession()); | |
results = (Vector)getSession().executeQuery(query, args); | |
results3 = results.size(); | |
} | |
public void verify() { | |
if (results1 != expectedResults) { | |
throw new TestErrorException("Initial Query did not yield the expected number of results: " + results1); | |
} | |
if (results2 != expectedResults) { | |
throw new TestErrorException("Second Query did not yield the expected number of results: " + results2); | |
} | |
if (results3 != expectedResults) { | |
throw new TestErrorException("Third Query did not yield the expected number of results: " + results3); | |
} | |
} | |
} |