/tests/com/google/appengine/datanucleus/query/RuntimeExceptionWrappingIteratorTest.java
http://datanucleus-appengine.googlecode.com/ · Java · 315 lines · 265 code · 14 blank · 36 comment · 2 complexity · 70961305654a31b0898fc14af045f5e1 MD5 · raw file
- /*
- * Copyright (C) 2010 Google Inc
- *
- * Licensed 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
- *
- * 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
- * limitations under the License.
- */
- package com.google.appengine.datanucleus.query;
- import com.google.appengine.api.datastore.DatastoreFailureException;
- import com.google.appengine.api.datastore.DatastoreTimeoutException;
- import com.google.appengine.api.datastore.Entity;
- import com.google.appengine.datanucleus.DatastoreTestCase;
- import org.datanucleus.api.ApiAdapter;
- import org.datanucleus.api.jdo.JDOAdapter;
- import org.datanucleus.api.jpa.JPAAdapter;
- import org.datanucleus.store.query.QueryTimeoutException;
- import org.easymock.EasyMock;
- import java.util.Arrays;
- import java.util.Iterator;
- import javax.jdo.JDODataStoreException;
- import javax.jdo.JDOFatalUserException;
- import javax.persistence.PersistenceException;
- /**
- * @author Max Ross <max.ross@gmail.com>
- */
- public class RuntimeExceptionWrappingIteratorTest extends DatastoreTestCase {
- private boolean receivedException = false;
- private RuntimeExceptionObserver observer = new RuntimeExceptionObserver() {
- public void onException() {
- receivedException = true;
- }
- };
- private Iterator<Entity> iter;
- protected void setUpIterator(RuntimeException rte) {
- receivedException = false;
- iter = EasyMock.createMock(Iterator.class);
- EasyMock.expect(iter.hasNext()).andThrow(rte);
- EasyMock.expect(iter.next()).andThrow(rte);
- iter.remove();
- EasyMock.expectLastCall().andThrow(rte);
- EasyMock.replay(iter);
- }
- public void testNoExceptionsJPA() {
- Entity e1 = new Entity("foo");
- Entity e2 = new Entity("foo");
- Entity e3 = new Entity("foo");
- ApiAdapter api = new JPAAdapter();
- RuntimeExceptionWrappingIterator rewi =
- new RuntimeExceptionWrappingIterator(api, Arrays.asList(e1, e2, e3).iterator(), observer);
- int count = 0;
- while (rewi.hasNext()) {
- rewi.next();
- count++;
- }
- assertEquals(3, count);
- }
- public void testExceptionsJPA_IllegalArg() {
- setUpIterator(new IllegalArgumentException("boom"));
- ApiAdapter api = new JPAAdapter();
- RuntimeExceptionWrappingIterator rewi =
- new RuntimeExceptionWrappingIterator(api, iter, observer);
- try {
- rewi.hasNext();
- fail("expected exception");
- } catch (PersistenceException pe) {
- // good
- assertTrue(pe.getCause() instanceof IllegalArgumentException);
- assertEquals(pe.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.next();
- fail("expected exception");
- } catch (PersistenceException pe) {
- // good
- assertTrue(pe.getCause() instanceof IllegalArgumentException);
- assertEquals(pe.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.remove();
- fail("expected exception");
- } catch (PersistenceException pe) {
- // good
- assertTrue(pe.getCause() instanceof IllegalArgumentException);
- assertEquals(pe.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- }
- public void testExceptionsJPA_DatastoreFailure() {
- setUpIterator(new DatastoreFailureException("boom"));
- ApiAdapter api = new JPAAdapter();
- RuntimeExceptionWrappingIterator rewi =
- new RuntimeExceptionWrappingIterator(api, iter, observer);
- try {
- rewi.hasNext();
- fail("expected exception");
- } catch (PersistenceException pe) {
- // good
- assertTrue(pe.getCause() instanceof DatastoreFailureException);
- assertEquals(pe.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.next();
- fail("expected exception");
- } catch (PersistenceException pe) {
- // good
- assertTrue(pe.getCause() instanceof DatastoreFailureException);
- assertEquals(pe.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.remove();
- fail("expected exception");
- } catch (PersistenceException pe) {
- // good
- assertTrue(pe.getCause() instanceof DatastoreFailureException);
- assertEquals(pe.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- }
- public void testExceptionsJPA_Timeout() {
- setUpIterator(new DatastoreTimeoutException("boom"));
- ApiAdapter api = new JPAAdapter();
- RuntimeExceptionWrappingIterator rewi =
- new RuntimeExceptionWrappingIterator(api, iter, observer);
- try {
- rewi.hasNext();
- fail("expected exception");
- } catch (javax.persistence.QueryTimeoutException qte) {
- // good
- assertTrue(qte.getCause() instanceof QueryTimeoutException);
- assertTrue(qte.getCause().getCause() instanceof DatastoreTimeoutException);
- assertEquals(qte.getCause().getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.next();
- fail("expected exception");
- } catch (javax.persistence.QueryTimeoutException qte) {
- // good
- assertTrue(qte.getCause() instanceof QueryTimeoutException);
- assertTrue(qte.getCause().getCause() instanceof DatastoreTimeoutException);
- assertEquals(qte.getCause().getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.remove();
- fail("expected exception");
- } catch (javax.persistence.QueryTimeoutException qte) {
- // good
- assertTrue(qte.getCause() instanceof QueryTimeoutException);
- assertTrue(qte.getCause().getCause() instanceof DatastoreTimeoutException);
- assertEquals(qte.getCause().getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- }
- public void testNoExceptionsJDO() {
- Entity e1 = new Entity("foo");
- Entity e2 = new Entity("foo");
- Entity e3 = new Entity("foo");
- ApiAdapter api = new JDOAdapter();
- RuntimeExceptionWrappingIterator rewi =
- new RuntimeExceptionWrappingIterator(api, Arrays.asList(e1, e2, e3).iterator(), observer);
- int count = 0;
- while (rewi.hasNext()) {
- rewi.next();
- count++;
- }
- assertEquals(3, count);
- }
- public void testExceptionsJDO_IllegalArg() {
- setUpIterator(new IllegalArgumentException("boom"));
- ApiAdapter api = new JDOAdapter();
- RuntimeExceptionWrappingIterator rewi =
- new RuntimeExceptionWrappingIterator(api, iter, observer);
- try {
- rewi.hasNext();
- fail("expected exception");
- } catch (JDOFatalUserException jfue) {
- // good
- assertTrue(jfue.getCause() instanceof IllegalArgumentException);
- assertEquals(jfue.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.next();
- fail("expected exception");
- } catch (JDOFatalUserException jfue) {
- // good
- assertTrue(jfue.getCause() instanceof IllegalArgumentException);
- assertEquals(jfue.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.remove();
- fail("expected exception");
- } catch (JDOFatalUserException jfue) {
- // good
- assertTrue(jfue.getCause() instanceof IllegalArgumentException);
- assertEquals(jfue.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- }
- public void testExceptionsJDO_DatastoreFailure() {
- setUpIterator(new DatastoreFailureException("boom"));
- ApiAdapter api = new JDOAdapter();
- RuntimeExceptionWrappingIterator rewi =
- new RuntimeExceptionWrappingIterator(api, iter, observer);
- try {
- rewi.hasNext();
- fail("expected exception");
- } catch (JDODataStoreException jdse) {
- // good
- assertTrue(jdse.getCause() instanceof DatastoreFailureException);
- assertEquals(jdse.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.next();
- fail("expected exception");
- } catch (JDODataStoreException jdse) {
- // good
- assertTrue(jdse.getCause() instanceof DatastoreFailureException);
- assertEquals(jdse.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.remove();
- fail("expected exception");
- } catch (JDODataStoreException jdse) {
- // good
- assertTrue(jdse.getCause() instanceof DatastoreFailureException);
- assertEquals(jdse.getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- }
- public void testExceptionsJDO_Timeout() {
- setUpIterator(new DatastoreTimeoutException("boom"));
- ApiAdapter api = new JDOAdapter();
- RuntimeExceptionWrappingIterator rewi =
- new RuntimeExceptionWrappingIterator(api, iter, observer);
- try {
- rewi.hasNext();
- fail("expected exception");
- } catch (JDODataStoreException jqte) {
- // good
- assertTrue(jqte.getCause() instanceof QueryTimeoutException);
- assertTrue(jqte.getCause().getCause() instanceof DatastoreTimeoutException);
- assertEquals(jqte.getCause().getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.next();
- fail("expected exception");
- } catch (JDODataStoreException jqte) {
- // good
- assertTrue(jqte.getCause() instanceof QueryTimeoutException);
- assertTrue(jqte.getCause().getCause() instanceof DatastoreTimeoutException);
- assertEquals(jqte.getCause().getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- try {
- rewi.remove();
- fail("expected exception");
- } catch (JDODataStoreException jqte) {
- // good
- assertTrue(jqte.getCause() instanceof QueryTimeoutException);
- assertTrue(jqte.getCause().getCause() instanceof DatastoreTimeoutException);
- assertEquals(jqte.getCause().getCause().getMessage(), "boom");
- assertTrue(receivedException);
- receivedException = false;
- }
- }
- }