| /* |
| * Copyright (c) 1998, 2021 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 v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // Oracle - initial API and implementation from Oracle TopLink |
| package org.eclipse.persistence.testing.tests.optimization.queryandsqlcounting.querycache; |
| |
| import java.util.*; |
| import org.eclipse.persistence.queries.*; |
| import org.eclipse.persistence.descriptors.invalidation.*; |
| |
| /** |
| * Test the invalidation of query cache results |
| * This test is configurable to use three types of invalidation and whether those types |
| * of invalidation should cause the results to become invalid |
| */ |
| public class QueryCacheInvalidationTest extends NamedQueryQueryCacheTest { |
| protected int invalidationPolicyType = 0; |
| protected boolean expiringTest = false; |
| protected int sleepTime = 0; |
| public static final int NO_INVALIDATION = 0; |
| public static final int TIME_TO_LIVE_INVALIDATION = 1; |
| public static final int DAILY_INVALIDATION = 2; |
| |
| public QueryCacheInvalidationTest(int invalidationPolicyType, boolean expiringTest) { |
| setName("QueryCacheInvalidationTest invalidationType: " + invalidationPolicyType + " expiring: " + expiringTest); |
| setDescription("Test the various cache invalidation polcies on the query cache."); |
| this.invalidationPolicyType = invalidationPolicyType; |
| this.expiringTest = expiringTest; |
| } |
| |
| /** |
| * This method will build a cache invalidation policy for the query being run depending |
| * on the invalidation and expiringTest settings of the query. |
| */ |
| protected CacheInvalidationPolicy getInvalidationPolicy() { |
| CacheInvalidationPolicy invalidationPolicy = null; |
| if (invalidationPolicyType == NO_INVALIDATION) { |
| invalidationPolicy = new NoExpiryCacheInvalidationPolicy(); |
| } else if (invalidationPolicyType == TIME_TO_LIVE_INVALIDATION) { |
| if (expiringTest) { |
| invalidationPolicy = new TimeToLiveCacheInvalidationPolicy(0); |
| expectedSQLCount = 1; |
| sleepTime = 100; |
| } else { |
| invalidationPolicy = new TimeToLiveCacheInvalidationPolicy(1000000); |
| } |
| } else { |
| if (expiringTest) { |
| expectedSQLCount = 1; |
| GregorianCalendar calendar = new GregorianCalendar(); |
| calendar.setTime(new Date(System.currentTimeMillis() + 1000)); |
| invalidationPolicy = new DailyCacheInvalidationPolicy(calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), calendar.get(Calendar.MILLISECOND)); |
| sleepTime = 1500; |
| } else { |
| GregorianCalendar calendar = new GregorianCalendar(); |
| calendar.setTime(new Date(System.currentTimeMillis() + 1000000)); |
| invalidationPolicy = new DailyCacheInvalidationPolicy(calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), calendar.get(Calendar.MILLISECOND)); |
| |
| } |
| } |
| return invalidationPolicy; |
| } |
| |
| @Override |
| public ReadQuery getQueryForTest() { |
| ReadQuery testQuery = super.getQueryForTest(); |
| testQuery.setQueryResultsCachePolicy(new QueryResultsCachePolicy(getInvalidationPolicy())); |
| return testQuery; |
| } |
| |
| @Override |
| public void test() { |
| try { |
| Thread.sleep(sleepTime);// sleep will allow cache to expire |
| } catch (Exception exception) { |
| } |
| super.test(); |
| } |
| } |