/******************************************************************************* * Copyright (c) 1998, 2015 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.queries.options; import org.eclipse.persistence.queries.*; import org.eclipse.persistence.testing.framework.*; import org.eclipse.persistence.descriptors.ClassDescriptor; public class ReadObjectQueryDisableCacheHitsTest extends AutoVerifyTestCase { ClassDescriptor m_addressDesc; ClassDescriptor m_policyHolderDesc; boolean m_addressDisableCacheHits; boolean m_addressAlwaysrefreshCache; boolean m_policyHolderDisableCacheHits; boolean m_policyHolderAlwaysrefreshCache; public ReadObjectQueryDisableCacheHitsTest() { super(); setDescription("This test verifies that infinite recursion will not occur when reading an object with no cascade all, no indirection and disabled cache hits"); } public void reset() { m_addressDesc.setShouldDisableCacheHits(m_addressDisableCacheHits); m_addressDesc.setShouldAlwaysRefreshCache(m_addressAlwaysrefreshCache); m_policyHolderDesc.setShouldDisableCacheHits(m_policyHolderDisableCacheHits); m_policyHolderDesc.setShouldAlwaysRefreshCache(m_policyHolderAlwaysrefreshCache); } public void setup() { m_addressDesc = getSession().getClassDescriptor(org.eclipse.persistence.testing.models.insurance.Address.class); m_addressDisableCacheHits = m_addressDesc.shouldDisableCacheHits(); m_addressAlwaysrefreshCache = m_addressDesc.shouldAlwaysRefreshCache(); m_addressDesc.disableCacheHits(); m_addressDesc.alwaysRefreshCache(); m_policyHolderDesc = getSession().getClassDescriptor(org.eclipse.persistence.testing.models.insurance.PolicyHolder.class); m_policyHolderDisableCacheHits = m_policyHolderDesc.shouldDisableCacheHits(); m_policyHolderAlwaysrefreshCache = m_policyHolderDesc.shouldAlwaysRefreshCache(); m_policyHolderDesc.disableCacheHits(); m_policyHolderDesc.alwaysRefreshCache(); } public void test() { try { ReadObjectQuery query = new ReadObjectQuery(org.eclipse.persistence.testing.models.insurance.PolicyHolder.class); getSession().executeQuery(query); } catch (StackOverflowError ex) { throw new TestErrorException("ReadObjectQuery with disabled cache hits caused infinite recursion"); } } }