/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * 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 the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>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 org.apereo.portal.concurrency.caching; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.when; import org.apereo.portal.url.IPortalRequestUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:requestCacheAspectTestContext.xml") public class RequestCacheAspectTest { @Autowired private IPortalRequestUtils portalRequestUtils; @Autowired private CacheTestInterface cacheTestInterface; @Before public void setup() { reset(portalRequestUtils); cacheTestInterface.reset(); } @Test public void testNoRequestCache() { assertEquals(0, cacheTestInterface.testMethodNoCacheCount()); String result = cacheTestInterface.testMethodNoCache("1", false, false); assertEquals("testMethodNoCache(1)", result); assertEquals(1, cacheTestInterface.testMethodNoCacheCount()); result = cacheTestInterface.testMethodNoCache("1", true, false); assertNull(result); assertEquals(2, cacheTestInterface.testMethodNoCacheCount()); result = cacheTestInterface.testMethodNoCache("1", true, false); assertNull(result); assertEquals(3, cacheTestInterface.testMethodNoCacheCount()); try { result = cacheTestInterface.testMethodNoCache("1", false, true); fail(); } catch (Throwable t) { //expected } assertEquals(4, cacheTestInterface.testMethodNoCacheCount()); try { result = cacheTestInterface.testMethodNoCache("1", false, true); fail(); } catch (Throwable t) { //expected } assertEquals(5, cacheTestInterface.testMethodNoCacheCount()); result = cacheTestInterface.testMethodNoCache("1", false, false); assertEquals("testMethodNoCache(1)", result); assertEquals(6, cacheTestInterface.testMethodNoCacheCount()); result = cacheTestInterface.testMethodNoCache("2", false, false); assertEquals("testMethodNoCache(2)", result); assertEquals(7, cacheTestInterface.testMethodNoCacheCount()); } @Test public void testMethodCacheDefaultNoArgs() { when(this.portalRequestUtils.getCurrentPortalRequest()) .thenReturn(new MockHttpServletRequest()); assertEquals(0, cacheTestInterface.testMethodNoCacheCountNoArgsCount()); String result = cacheTestInterface.testMethodCacheDefaultNoArgs(); assertEquals("testMethodCacheDefaultNoArgs()", result); assertEquals(1, cacheTestInterface.testMethodNoCacheCountNoArgsCount()); result = cacheTestInterface.testMethodCacheDefaultNoArgs(); assertEquals("testMethodCacheDefaultNoArgs()", result); assertEquals(1, cacheTestInterface.testMethodNoCacheCountNoArgsCount()); } @Test public void testMethodCacheDefault() { when(this.portalRequestUtils.getCurrentPortalRequest()) .thenReturn(new MockHttpServletRequest()); assertEquals(0, cacheTestInterface.testMethodCacheDefaultCount()); String result = cacheTestInterface.testMethodCacheDefault("1", false, false); assertEquals("testMethodCacheDefault(1)", result); assertEquals(1, cacheTestInterface.testMethodCacheDefaultCount()); result = cacheTestInterface.testMethodCacheDefault("1", true, false); assertNull(result); assertEquals(2, cacheTestInterface.testMethodCacheDefaultCount()); result = cacheTestInterface.testMethodCacheDefault("1", true, false); assertNull(result); assertEquals(3, cacheTestInterface.testMethodCacheDefaultCount()); try { result = cacheTestInterface.testMethodCacheDefault("1", false, true); fail(); } catch (Throwable t) { //expected } assertEquals(4, cacheTestInterface.testMethodCacheDefaultCount()); try { result = cacheTestInterface.testMethodCacheDefault("1", false, true); fail(); } catch (Throwable t) { //expected } assertEquals(5, cacheTestInterface.testMethodCacheDefaultCount()); result = cacheTestInterface.testMethodCacheDefault("1", false, false); assertEquals("testMethodCacheDefault(1)", result); assertEquals(5, cacheTestInterface.testMethodCacheDefaultCount()); result = cacheTestInterface.testMethodCacheDefault("2", false, false); assertEquals("testMethodCacheDefault(2)", result); assertEquals(6, cacheTestInterface.testMethodCacheDefaultCount()); } @Test public void testMethodCacheDefaultNoRequest() { when(this.portalRequestUtils.getCurrentPortalRequest()) .thenThrow(new IllegalStateException()); assertEquals(0, cacheTestInterface.testMethodCacheDefaultCount()); String result = cacheTestInterface.testMethodCacheDefault("1", false, false); assertEquals("testMethodCacheDefault(1)", result); assertEquals(1, cacheTestInterface.testMethodCacheDefaultCount()); result = cacheTestInterface.testMethodCacheDefault("1", true, false); assertNull(result); assertEquals(2, cacheTestInterface.testMethodCacheDefaultCount()); result = cacheTestInterface.testMethodCacheDefault("1", true, false); assertNull(result); assertEquals(3, cacheTestInterface.testMethodCacheDefaultCount()); try { result = cacheTestInterface.testMethodCacheDefault("1", false, true); fail(); } catch (Throwable t) { //expected } assertEquals(4, cacheTestInterface.testMethodCacheDefaultCount()); try { result = cacheTestInterface.testMethodCacheDefault("1", false, true); fail(); } catch (Throwable t) { //expected } assertEquals(5, cacheTestInterface.testMethodCacheDefaultCount()); result = cacheTestInterface.testMethodCacheDefault("1", false, false); assertEquals("testMethodCacheDefault(1)", result); assertEquals(6, cacheTestInterface.testMethodCacheDefaultCount()); result = cacheTestInterface.testMethodCacheDefault("2", false, false); assertEquals("testMethodCacheDefault(2)", result); assertEquals(7, cacheTestInterface.testMethodCacheDefaultCount()); } @Test public void testMethodCacheNull() { when(this.portalRequestUtils.getCurrentPortalRequest()) .thenReturn(new MockHttpServletRequest()); assertEquals(0, cacheTestInterface.testMethodCacheNullCount()); String result = cacheTestInterface.testMethodCacheNull("1", false, false); assertEquals("testMethodCacheNull(1)", result); assertEquals(1, cacheTestInterface.testMethodCacheNullCount()); result = cacheTestInterface.testMethodCacheNull("1", true, false); assertNull(result); assertEquals(2, cacheTestInterface.testMethodCacheNullCount()); result = cacheTestInterface.testMethodCacheNull("1", true, false); assertNull(result); assertEquals(2, cacheTestInterface.testMethodCacheNullCount()); try { result = cacheTestInterface.testMethodCacheNull("1", false, true); fail(); } catch (Throwable t) { //expected } assertEquals(3, cacheTestInterface.testMethodCacheNullCount()); try { result = cacheTestInterface.testMethodCacheNull("1", false, true); fail(); } catch (Throwable t) { //expected } assertEquals(4, cacheTestInterface.testMethodCacheNullCount()); result = cacheTestInterface.testMethodCacheNull("1", false, false); assertEquals("testMethodCacheNull(1)", result); assertEquals(4, cacheTestInterface.testMethodCacheNullCount()); result = cacheTestInterface.testMethodCacheNull("2", false, false); assertEquals("testMethodCacheNull(2)", result); assertEquals(5, cacheTestInterface.testMethodCacheNullCount()); } @Test public void testMethodCacheThrows() { when(this.portalRequestUtils.getCurrentPortalRequest()) .thenReturn(new MockHttpServletRequest()); assertEquals(0, cacheTestInterface.testMethodCacheThrowsCount()); String result = cacheTestInterface.testMethodCacheThrows("1", false, false); assertEquals("testMethodCacheThrows(1)", result); assertEquals(1, cacheTestInterface.testMethodCacheThrowsCount()); result = cacheTestInterface.testMethodCacheThrows("1", true, false); assertNull(result); assertEquals(2, cacheTestInterface.testMethodCacheThrowsCount()); result = cacheTestInterface.testMethodCacheThrows("1", true, false); assertNull(result); assertEquals(3, cacheTestInterface.testMethodCacheThrowsCount()); try { result = cacheTestInterface.testMethodCacheThrows("1", false, true); fail(); } catch (Throwable t) { //expected } assertEquals(4, cacheTestInterface.testMethodCacheThrowsCount()); try { result = cacheTestInterface.testMethodCacheThrows("1", false, true); fail(); } catch (Throwable t) { //expected } assertEquals(4, cacheTestInterface.testMethodCacheThrowsCount()); result = cacheTestInterface.testMethodCacheThrows("1", false, false); assertEquals("testMethodCacheThrows(1)", result); assertEquals(4, cacheTestInterface.testMethodCacheThrowsCount()); result = cacheTestInterface.testMethodCacheThrows("2", false, false); assertEquals("testMethodCacheThrows(2)", result); assertEquals(5, cacheTestInterface.testMethodCacheThrowsCount()); } }