/* * Weblounge: Web Content Management System * Copyright (c) 2003 - 2011 The Weblounge Team * http://entwinemedia.com/weblounge * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package ch.entwine.weblounge.cache.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import ch.entwine.weblounge.cache.StreamFilter; import ch.entwine.weblounge.cache.impl.filter.NullFilter; import ch.entwine.weblounge.cache.impl.handle.TaggedCacheHandle; import ch.entwine.weblounge.common.impl.request.CacheTagImpl; import ch.entwine.weblounge.common.impl.request.CacheTagSet; import ch.entwine.weblounge.common.impl.testing.MockHttpServletResponse; import ch.entwine.weblounge.common.request.CacheHandle; import ch.entwine.weblounge.common.request.CacheTag; import org.junit.Before; import org.junit.Test; import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * Test case for the implementation at {@link CacheTransaction}. */ public class CacheTransactionTest { /** The transaction under test */ protected CacheTransaction transaction = null; /** The cache handle */ protected CacheHandle handle = null; /** The stream filter */ protected StreamFilter filter = new NullFilter(); /** Milliseconds until the cache entry expires */ protected long expirationTime = 1000; /** Milliseconds until clients should recheck */ protected long recheckTime = 500; /** The first cache tag */ protected CacheTag tag = new CacheTagImpl("a", "a-value"); /** The first cache tag */ protected CacheTag otherTag = new CacheTagImpl("b", "b-value"); /** The cache tags */ protected CacheTagSet tags = new CacheTagSet(); /** The cached response */ protected CacheableHttpServletResponse response = null; /** The content */ protected String content = "Hello world!"; /** The test header name */ protected String headerName = "X-Test-Header"; /** The test header value */ protected String headerValue = content; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { tags.add(tag); tags.add(otherTag); handle = new TaggedCacheHandle(tags.getTags(), expirationTime, recheckTime); response = new CacheableHttpServletResponse(new MockHttpServletResponse()); transaction = response.startTransaction(handle, filter); } /** * Test method for {@link ch.entwine.weblounge.cache.impl.CacheTransaction#getHandle()}. */ @Test public void testGetHandle() { assertNotNull(transaction.getHandle()); assertEquals(handle, transaction.getHandle()); } /** * Test method for {@link ch.entwine.weblounge.cache.impl.CacheTransaction#getOutputStream()}. */ @Test public void testGetOutputStream() { assertNotNull(transaction.getOutputStream()); } /** * Test method for {@link ch.entwine.weblounge.cache.impl.CacheTransaction#getContent()}. */ @Test public void testGetContent() throws Exception { assertNotNull(transaction.getContent()); assertEquals(0, transaction.getContent().length); // Write something to the response response.getOutputStream().write(content.getBytes()); assertEquals(content, new String(transaction.getContent(), "utf-8")); } /** * Test method for {@link ch.entwine.weblounge.cache.impl.CacheTransaction#getHeaders()}. */ @Test public void testGetHeaders() { assertNotNull(transaction.getHeaders()); assertEquals(0, transaction.getHeaders().size()); // Write something to the response response.addHeader(headerName, headerValue); assertEquals(1, transaction.getHeaders().size()); assertEquals(headerValue, transaction.getHeaders().getHeaders().get(headerName)); } /** * Test method for {@link ch.entwine.weblounge.cache.impl.CacheTransaction#getTags()}. */ @Test public void testGetTags() { assertNotNull(transaction.getTags()); Set<CacheTag> tags = new HashSet<CacheTag>(Arrays.asList(transaction.getTags())); assertEquals(this.tags.size(), tags.size()); assertTrue(tags.contains(tag)); assertTrue(tags.contains(otherTag)); } /** * Test method for {@link ch.entwine.weblounge.cache.impl.CacheTransaction#getFilter()}. */ @Test public void testGetFilter() { assertNotNull(transaction.getFilter()); assertEquals(filter, transaction.getFilter()); } /** * Test method for {@link ch.entwine.weblounge.cache.impl.CacheTransaction#invalidate()}. */ @Test public void testInvalidate() { assertTrue(transaction.isValid()); transaction.invalidate(); assertFalse(transaction.isValid()); } /** * Test method for {@link ch.entwine.weblounge.cache.impl.CacheTransaction#isValid()}. */ @Test public void testIsValid() { assertTrue(transaction.isValid()); } }