package org.jboss.resteasy.test.client; import javax.ws.rs.client.ClientBuilder; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.resteasy.client.jaxrs.ResteasyClient; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; import org.jboss.resteasy.client.jaxrs.cache.BrowserCache; import org.jboss.resteasy.client.jaxrs.cache.BrowserCacheFeature; import org.jboss.resteasy.client.jaxrs.cache.LightweightBrowserCache; import org.jboss.resteasy.test.client.resource.ClientCacheProxy; import org.jboss.resteasy.test.client.resource.ClientCacheService; import org.jboss.resteasy.utils.PermissionUtil; import org.jboss.resteasy.utils.PortProviderUtil; import org.jboss.resteasy.utils.TestUtil; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import java.lang.reflect.ReflectPermission; import java.util.PropertyPermission; /** * @tpSubChapter Resteasy-client * @tpChapter Client tests * @tpSince RESTEasy 3.0.16 * @tpTestCaseDetails Test for client cache */ @RunWith(Arquillian.class) public class ClientCacheTest { public static int count = 0; @Before public void setUp() throws Exception { count = 0; } @Deployment public static Archive<?> deploy() { WebArchive war = TestUtil.prepareArchive(ClientCacheTest.class.getSimpleName()); war.addClasses(ClientCacheProxy.class, ClientCacheTest.class, TestUtil.class, PortProviderUtil.class); // Arquillian in the deployment and use of PortProviderUtil and Test util in the deployment war.addAsManifestResource(PermissionUtil.createPermissionsXmlAsset(new ReflectPermission("suppressAccessChecks"), new RuntimePermission("accessDeclaredMembers"), new PropertyPermission("arquillian.*", "read"), new PropertyPermission("node", "read"), new PropertyPermission("ipv6", "read"), new RuntimePermission("getenv.RESTEASY_PORT"), new PropertyPermission("org.jboss.resteasy.port", "read")), "permissions.xml"); return TestUtil.finishContainerPrepare(war, null, ClientCacheService.class); } private String generateBaseUrl() { return PortProviderUtil.generateBaseUrl(ClientCacheTest.class.getSimpleName()); } /** * @tpTestDetails Complex proxy test for client cache * @tpSince RESTEasy 3.0.16 */ @Test public void testProxy() throws Exception { count = 0; ResteasyClient client = new ResteasyClientBuilder().build(); ResteasyWebTarget target = client.target(generateBaseUrl()); target.register(BrowserCacheFeature.class); ClientCacheProxy proxy = target.proxy(ClientCacheProxy.class); String rtn; rtn = proxy.get(); Assert.assertEquals("Wrong response", "hello world" + 1, rtn); Assert.assertEquals("Wrong cache size", 1, count); rtn = proxy.get(); Assert.assertEquals("Wrong response", "hello world" + 1, rtn); Assert.assertEquals("Wrong cache size", 1, count); Thread.sleep(2000); rtn = proxy.get(); Assert.assertEquals("Wrong response", "hello world" + 2, rtn); Assert.assertEquals("Wrong cache size", 2, count); rtn = proxy.get(); Assert.assertEquals("Wrong response", "hello world" + 2, rtn); Assert.assertEquals("Wrong cache size", 2, count); // Test always good etag count = 0; rtn = proxy.getAlwaysGoodEtag(); Assert.assertEquals("Wrong response", "hello1", rtn); Assert.assertEquals("Wrong cache size", 1, count); rtn = proxy.getAlwaysGoodEtag(); Assert.assertEquals("Wrong response", "hello1", rtn); Assert.assertEquals("Wrong cache size", 1, count); Thread.sleep(2000); rtn = proxy.getAlwaysGoodEtag(); Assert.assertEquals("Wrong response", "hello1", rtn); Assert.assertEquals("Wrong cache size", 2, count); rtn = proxy.getAlwaysGoodEtag(); Assert.assertEquals("Wrong response", "hello1", rtn); Assert.assertEquals("Wrong cache size", 2, count); // Test never good etag count = 0; rtn = proxy.getNeverGoodEtag(); Assert.assertEquals("Wrong response", "hello1", rtn); Assert.assertEquals("Wrong cache size", 1, count); rtn = proxy.getNeverGoodEtag(); Assert.assertEquals("Wrong response", "hello1", rtn); Assert.assertEquals("Wrong cache size", 1, count); Thread.sleep(2000); rtn = proxy.getNeverGoodEtag(); Assert.assertEquals("Wrong response", "hello2", rtn); Assert.assertEquals("Wrong cache size", 2, count); rtn = proxy.getNeverGoodEtag(); Assert.assertEquals("Wrong response", "hello2", rtn); Assert.assertEquals("Wrong cache size", 2, count); // Test always validate etag count = 0; rtn = proxy.getValidateEtagged(); Assert.assertEquals("Wrong response", "hello1", rtn); Assert.assertEquals("Wrong cache size", 1, count); rtn = proxy.getValidateEtagged(); Assert.assertEquals("Wrong response", "hello1", rtn); Assert.assertEquals("Wrong cache size", 2, count); rtn = proxy.getValidateEtagged(); Assert.assertEquals("Wrong response", "hello1", rtn); Assert.assertEquals("Wrong cache size", 3, count); rtn = proxy.getValidateEtagged(); Assert.assertEquals("Wrong response", "hello1", rtn); Assert.assertEquals("Wrong cache size", 4, count); client.close(); } /** * @tpTestDetails Test for max size of client cache * @tpSince RESTEasy 3.0.16 */ @Test public void testMaxSize() throws Exception { ResteasyClient client = new ResteasyClientBuilder().build(); ResteasyWebTarget target = client.target(generateBaseUrl()); target.register(BrowserCacheFeature.class); LightweightBrowserCache cache = (LightweightBrowserCache) target.getConfiguration().getProperty(BrowserCache.class.getName()); cache.setMaxBytes(20); ClientCacheProxy proxy = target.proxy(ClientCacheProxy.class); count = 0; String rtn = proxy.getCacheit("1"); Assert.assertEquals("Wrong response", "cachecache" + 1, rtn); Assert.assertEquals("Wrong cache size", 1, count); rtn = proxy.getCacheit("1"); Assert.assertEquals("Wrong response", "cachecache" + 1, rtn); Assert.assertEquals("Wrong cache size", 1, count); rtn = proxy.getCacheit("2"); Assert.assertEquals("Wrong response", "cachecache" + 2, rtn); Assert.assertEquals("Wrong cache size", 2, count); rtn = proxy.getCacheit("2"); Assert.assertEquals("Wrong response", "cachecache" + 2, rtn); Assert.assertEquals("Wrong cache size", 2, count); rtn = proxy.getCacheit("1"); Assert.assertEquals("Wrong response", "cachecache" + 3, rtn); Assert.assertEquals("Wrong cache size", 3, count); client.close(); } @Test public void testMaxSizeNoProxy() throws Exception { String url = PortProviderUtil.generateURL("/cache/cacheit/{id}", ClientCacheTest.class.getSimpleName()); ResteasyWebTarget target = (ResteasyWebTarget) ClientBuilder.newClient().target(url); LightweightBrowserCache cache = new LightweightBrowserCache(); cache.setMaxBytes(20); BrowserCacheFeature cacheFeature = new BrowserCacheFeature(); cacheFeature.setCache(cache); target.register(cacheFeature); count = 0; String rtn = target.resolveTemplate("id", "1").request().get(String.class); Assert.assertEquals("cachecache" + 1, rtn); Assert.assertEquals(1, count); rtn = target.resolveTemplate("id", "1").request().get(String.class); Assert.assertEquals("cachecache" + 1, rtn); Assert.assertEquals(1, count); rtn = target.resolveTemplate("id", "2").request().get(String.class); Assert.assertEquals("cachecache" + 2, rtn); Assert.assertEquals(2, count); rtn = target.resolveTemplate("id", "2").request().get(String.class); Assert.assertEquals("cachecache" + 2, rtn); Assert.assertEquals(2, count); rtn = target.resolveTemplate("id", "1").request().get(String.class); Assert.assertEquals("cachecache" + 3, rtn); Assert.assertEquals(3, count); } }