package io.airlift.http.client;
import org.testng.annotations.Test;
import java.util.List;
import java.util.Map;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
// This code was forked from Apache CXF CacheControlHeaderProviderTest
public class TestCacheControl
{
@Test
public void testFromSimpleString()
{
CacheControl c = CacheControl.valueOf("public,must-revalidate");
assertFalse(c.isPrivate());
assertFalse(c.isNoStore());
assertTrue(c.isMustRevalidate());
assertFalse(c.isProxyRevalidate());
assertFalse(c.isNoCache());
assertFalse(c.isNoTransform());
assertTrue(c.getNoCacheFields().size() == 0);
assertTrue(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());
assertTrue(c.isNoStore());
assertTrue(c.isMustRevalidate());
assertTrue(c.isProxyRevalidate());
assertTrue(c.isNoCache());
assertTrue(c.isNoTransform());
assertTrue(c.getNoCacheFields().size() == 1);
assertTrue(c.getPrivateFields().size() == 1);
assertEquals(c.getPrivateFields().get(0), "foo");
assertEquals(c.getNoCacheFields().get(0), "bar");
}
@Test
public void testToString()
{
String expected = "private=\"foo\",no-cache=\"bar\",no-store,no-transform,must-revalidate,proxy-revalidate,max-age=2,s-maxage=3";
String parsed = CacheControl.valueOf(expected).toString();
assertEquals(parsed, expected);
}
@Test
public void testNoCacheEnabled()
{
CacheControl cc = new CacheControl();
cc.setNoCache(true);
assertEquals(cc.toString(), "no-cache,no-transform");
}
@Test
public void testNoCacheDisabled()
{
CacheControl cc = new CacheControl();
cc.setNoCache(false);
assertEquals(cc.toString(), "no-transform");
}
@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 cacheControl = CacheControl.valueOf(s);
assertTrue(cacheControl.isPrivate());
List<String> privateFields = cacheControl.getPrivateFields();
assertEquals(privateFields.size(), 2);
assertEquals(privateFields.get(0), "foo1");
assertEquals(privateFields.get(1), "foo2");
assertTrue(cacheControl.isNoCache());
List<String> noCacheFields = cacheControl.getNoCacheFields();
assertEquals(2, noCacheFields.size());
assertEquals(noCacheFields.get(0), "bar1");
assertEquals(noCacheFields.get(1), "bar2");
assertTrue(cacheControl.isNoStore());
assertTrue(cacheControl.isNoTransform());
assertTrue(cacheControl.isMustRevalidate());
assertTrue(cacheControl.isProxyRevalidate());
assertEquals(cacheControl.getMaxAge(), 2);
assertEquals(cacheControl.getSMaxAge(), 3);
Map<String, String> cacheExtension = cacheControl.getCacheExtension();
assertEquals(cacheExtension.size(), 1);
assertEquals(cacheExtension.get("ext"), "1");
}
@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.contains("ext1") && !value.contains("ext1="));
assertTrue(value.contains("ext2=value2"));
assertTrue(value.contains("ext3=\"value 3\""));
}
}