/** * Copyright (C) 2009-2012 the original author or authors. * See the notice.md file distributed with this work for additional * information regarding copyright ownership. * * 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 org.fusesource.restygwt.mocking; import junit.framework.TestCase; import org.easymock.EasyMock; import org.fusesource.restygwt.client.cache.CacheKey; import org.fusesource.restygwt.client.cache.DefaultQueueableCacheStorage; import org.fusesource.restygwt.client.cache.QueueableCacheStorage; import org.fusesource.restygwt.client.cache.SimpleCacheKey; import org.fusesource.restygwt.client.cache.DefaultQueueableCacheStorage.ResponseWrapper; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.Response; import com.google.gwt.junit.GWTMockUtilities; public class DefaultQueuableCacheStorageTestCase extends TestCase { private DefaultQueueableCacheStorage storage; protected void setUp() throws Exception{ super.setUp(); GWTMockUtilities.disarm(); this.storage = new DefaultQueueableCacheStorage(); } protected void tearDown() { GWTMockUtilities.restore(); } public void testDefaultScope(){ CacheKey key = new SimpleCacheKey("first"); CacheKey secondKey = new SimpleCacheKey("second"); Response resp = EasyMock.createMock(Response.class); EasyMock.replay(resp); storage.putResult(key, resp); storage.putResult(secondKey, resp); assertNull(storage.getResultOrReturnNull(new SimpleCacheKey("unknown"))); assertEquals(resp, ((ResponseWrapper)storage.getResultOrReturnNull(key)).response); assertEquals(resp, ((ResponseWrapper)storage.getResultOrReturnNull(secondKey)).response); storage.remove(key); assertNull(storage.getResultOrReturnNull(key)); assertEquals(resp, ((ResponseWrapper)storage.getResultOrReturnNull(secondKey)).response); // now purge storage.purge(); assertNull(storage.getResultOrReturnNull(key)); assertNull(storage.getResultOrReturnNull(secondKey)); EasyMock.verify(resp); } public void testScope(){ CacheKey key = new SimpleCacheKey("first"); Response resp = EasyMock.createMock(Response.class); EasyMock.replay(resp); storage.putResult(key, resp); String scope = "admin"; CacheKey scopedKey = new SimpleCacheKey("first scoped"); CacheKey secondScopedKey = new SimpleCacheKey("second scoped"); Response scopedResp = EasyMock.createMock(Response.class); EasyMock.replay(scopedResp); storage.putResult(scopedKey, scopedResp, scope); storage.putResult(secondScopedKey, scopedResp, scope); // check the cache content assertNull(storage.getResultOrReturnNull(new SimpleCacheKey("unknown"))); assertNull(storage.getResultOrReturnNull(new SimpleCacheKey("unknown"), scope)); assertNull(storage.getResultOrReturnNull(key, scope)); assertEquals(resp, ((ResponseWrapper)storage.getResultOrReturnNull(key)).response); assertEquals(scopedResp, ((ResponseWrapper)storage.getResultOrReturnNull(scopedKey, scope)).response); assertEquals(scopedResp, ((ResponseWrapper)storage.getResultOrReturnNull(secondScopedKey, scope)).response); // wrong key shall leave things as they are storage.remove(key, scope); assertEquals(resp, ((ResponseWrapper)storage.getResultOrReturnNull(key)).response); assertEquals(scopedResp, ((ResponseWrapper)storage.getResultOrReturnNull(scopedKey, scope)).response); // remove scoped key and leave unscope cache as it is storage.remove(scopedKey, scope); assertNull(storage.getResultOrReturnNull(scopedKey, scope)); assertEquals(scopedResp, ((ResponseWrapper)storage.getResultOrReturnNull(secondScopedKey, scope)).response); assertEquals(resp, ((ResponseWrapper)storage.getResultOrReturnNull(key)).response); // now purge storage.purge(scope); assertNull(storage.getResultOrReturnNull(scopedKey, scope)); assertNull(storage.getResultOrReturnNull(secondScopedKey, scope)); assertEquals(resp, ((ResponseWrapper)storage.getResultOrReturnNull(key)).response); EasyMock.verify(resp); EasyMock.verify(scopedResp); } public void testQueue() { CacheKey key = new SimpleCacheKey("first"); CacheKey secondKey = new SimpleCacheKey("second"); assertFalse(storage.hasCallback(key)); RequestCallback rc1 = EasyMock.createMock(RequestCallback.class); RequestCallback rc2 = EasyMock.createMock(RequestCallback.class); EasyMock.replay(rc1); EasyMock.replay(rc2); storage.addCallback(key, rc1); assertTrue(storage.hasCallback(key)); assertFalse(storage.hasCallback(secondKey)); storage.addCallback(key, rc2); assertTrue(storage.hasCallback(key)); assertFalse(storage.hasCallback(secondKey)); assertEquals(2, storage.removeCallbacks(key).size()); assertFalse(storage.hasCallback(key)); assertFalse(storage.hasCallback(secondKey)); EasyMock.verify(rc1); EasyMock.verify(rc2); } public void testRestyHeader(){ CacheKey key = new SimpleCacheKey("first"); Response resp = EasyMock.createMock(Response.class); EasyMock.replay(resp); storage.putResult(key, resp); assertNotNull(storage.getResultOrReturnNull(key).getHeader(QueueableCacheStorage.RESTY_CACHE_HEADER)); EasyMock.verify(resp); } }