/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF 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 * * 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.apache.cxf.jaxrs.impl; import java.util.List; import java.util.Map; import javax.ws.rs.InternalServerErrorException; import javax.ws.rs.core.CacheControl; import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageImpl; import org.junit.Assert; import org.junit.Test; public class CacheControlHeaderProviderTest extends Assert { @Test(expected = IllegalArgumentException.class) public void testValueOfNull() { CacheControl.valueOf(null); } @Test public void testFromSimpleString() { CacheControl c = CacheControl.valueOf( "public,must-revalidate"); assertTrue(!c.isPrivate() && !c.isNoStore() && c.isMustRevalidate() && !c.isProxyRevalidate()); assertTrue(!c.isNoCache() && !c.isNoTransform() && c.getNoCacheFields().size() == 0 && c.getPrivateFields().size() == 0); } @Test public void testFromComplexString() { CacheControl c = CacheControl.valueOf( "private=\"foo\",no-cache=\"bar\",no-store,no-transform," + "must-revalidate,proxy-revalidate,max-age=2,s-maxage=3"); assertTrue(c.isPrivate() && c.isNoStore() && c.isMustRevalidate() && c.isProxyRevalidate() && c.isNoCache()); assertTrue(c.isNoTransform() && c.getNoCacheFields().size() == 1 && c.getPrivateFields().size() == 1); assertEquals("foo", c.getPrivateFields().get(0)); assertEquals("bar", c.getNoCacheFields().get(0)); } @Test public void testFromComplexStringWithSemicolon() { CacheControlHeaderProvider cp = new CacheControlHeaderProvider() { protected Message getCurrentMessage() { Message m = new MessageImpl(); m.put(CacheControlHeaderProvider.CACHE_CONTROL_SEPARATOR_PROPERTY, ";"); return m; } }; CacheControl c = cp.fromString( "private=\"foo\";no-cache=\"bar\";no-store;no-transform;" + "must-revalidate;proxy-revalidate;max-age=2;s-maxage=3"); assertTrue(c.isPrivate() && c.isNoStore() && c.isMustRevalidate() && c.isProxyRevalidate() && c.isNoCache()); assertTrue(c.isNoTransform() && c.getNoCacheFields().size() == 1 && c.getPrivateFields().size() == 1); assertEquals("foo", c.getPrivateFields().get(0)); assertEquals("bar", c.getNoCacheFields().get(0)); } @Test(expected = InternalServerErrorException.class) public void testInvalidSeparator() { CacheControlHeaderProvider cp = new CacheControlHeaderProvider() { protected Message getCurrentMessage() { Message m = new MessageImpl(); m.put(CacheControlHeaderProvider.CACHE_CONTROL_SEPARATOR_PROPERTY, "(e+)+"); return m; } }; cp.fromString("no-store"); } @Test public void testToString() { String s = "private=\"foo\",no-cache=\"bar\",no-store,no-transform," + "must-revalidate,proxy-revalidate,max-age=2,s-maxage=3"; String parsed = CacheControl.valueOf(s).toString(); assertEquals(s, parsed); } @Test public void testNoCacheEnabled() { CacheControl cc = new CacheControl(); cc.setNoCache(true); assertEquals("no-cache,no-transform", cc.toString()); } @Test public void testNoCacheDisabled() { CacheControl cc = new CacheControl(); cc.setNoCache(false); assertEquals("no-transform", cc.toString()); } @Test public void testMultiplePrivateFields() { CacheControl cc = new CacheControl(); cc.setPrivate(true); cc.getPrivateFields().add("a"); cc.getPrivateFields().add("b"); assertTrue(cc.toString().contains("private=\"a,b\"")); } @Test public void testMultipleNoCacheFields() { CacheControl cc = new CacheControl(); cc.setNoCache(true); cc.getNoCacheFields().add("c"); cc.getNoCacheFields().add("d"); assertTrue(cc.toString().contains("no-cache=\"c,d\"")); } @Test public void testReadMultiplePrivateAndNoCacheFields() { String s = "private=\"foo1,foo2\",no-store,no-transform," + "must-revalidate,proxy-revalidate,max-age=2,s-maxage=3,no-cache=\"bar1,bar2\"," + "ext=1"; CacheControl cc = CacheControl.valueOf(s); assertTrue(cc.isPrivate()); List<String> privateFields = cc.getPrivateFields(); assertEquals(2, privateFields.size()); assertEquals("foo1", privateFields.get(0)); assertEquals("foo2", privateFields.get(1)); assertTrue(cc.isNoCache()); List<String> noCacheFields = cc.getNoCacheFields(); assertEquals(2, noCacheFields.size()); assertEquals("bar1", noCacheFields.get(0)); assertEquals("bar2", noCacheFields.get(1)); assertTrue(cc.isNoStore()); assertTrue(cc.isNoTransform()); assertTrue(cc.isMustRevalidate()); assertTrue(cc.isProxyRevalidate()); assertEquals(2, cc.getMaxAge()); assertEquals(3, cc.getSMaxAge()); Map<String, String> exts = cc.getCacheExtension(); assertEquals(1, exts.size()); assertEquals("1", exts.get("ext")); } @Test public void testCacheExtensionToString() { CacheControl cc = new CacheControl(); cc.getCacheExtension().put("ext1", null); cc.getCacheExtension().put("ext2", "value2"); cc.getCacheExtension().put("ext3", "value 3"); String value = cc.toString(); assertTrue(value.indexOf("ext1") != -1 && value.indexOf("ext1=") == -1); assertTrue(value.indexOf("ext2=value2") != -1); assertTrue(value.indexOf("ext3=\"value 3\"") != -1); } }