@Test public void addResponseIgnoreCache() { HttpRequest request = new HttpRequest(DEFAULT_URI) .setIgnoreCache(true); HttpResponse response = new HttpResponse("does not matter"); assertNull("response should not have been cached", cache.addResponse(request, response)); assertEquals(0, cache.map.size()); assertNull("response should not have been cached", extendedStrictNoCacheTtlCache.addResponse(request, response)); assertEquals(0, extendedStrictNoCacheTtlCache.map.size()); }
@Test public void removeResponseIsStaled() { long expiration = System.currentTimeMillis() + 1000L; HttpRequest request = new HttpRequest(DEFAULT_URI); String key = cache.createKey(request); HttpResponse response = new HttpResponseBuilder() .setExpirationTime(expiration) .create(); cache.map.put(key, response); // The cache itself still hold and return staled value, // caller responsible to decide what to do about it assertEquals(response, cache.removeResponse(request)); assertEquals(0, cache.map.size()); }
@Test public void getResponseNotCacheable() { HttpRequest request = new HttpRequest(DEFAULT_URI); String key = cache.createKey(request); HttpResponse response = new HttpResponseBuilder().setStrictNoCache().create(); cache.map.put(key, response); assertNull("Did not return null when response was uncacheable", cache.getResponse(request)); extendedStrictNoCacheTtlCache.map.put(key, response); assertEquals(response, extendedStrictNoCacheTtlCache.getResponse(request)); }
@Test public void createKeyWithTokenOwner() throws Exception { RequestAuthenticationInfo authInfo = newMockAuthInfo( true /* isSignOwner */, true /* isSignViewer */, ImmutableMap.of("OAUTH_SERVICE_NAME", SERVICE_NAME, "OAUTH_TOKEN_NAME", TOKEN_NAME, "OAUTH_USE_TOKEN", "always")); replay(authInfo); String userId = "user id"; SecurityToken securityToken = new BasicSecurityToken( userId, userId, "", "", APP_URI.toString(), MODULE_ID, CONTAINER_NAME, null, null); HttpRequest request = new HttpRequest(DEFAULT_URI) .setAuthType(AuthType.SIGNED) .setOAuthArguments(new OAuthArguments(authInfo)) .setSecurityToken(securityToken); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI) .setLegacyParam(1, AuthType.SIGNED) .setLegacyParam(2, userId) .setLegacyParam(3, userId) .setLegacyParam(4, userId) .setLegacyParam(5, APP_URI) .setLegacyParam(6, MODULE_ID) .setLegacyParam(7, SERVICE_NAME) .setLegacyParam(8, TOKEN_NAME); assertEquals(key.build(), cache.createKey(request)); }
@Test public void createKeySignedOwner() throws Exception { // Using a mock instead of a fake object makes the test less brittle if the interface should // change. RequestAuthenticationInfo authInfo = newMockAuthInfo( true /* isSignOwner */, false /* isSignViewer */, ImmutableMap.of("OAUTH_SERVICE_NAME", SERVICE_NAME, "OAUTH_TOKEN_NAME", TOKEN_NAME)); replay(authInfo); String ownerId = "owner eye dee"; SecurityToken securityToken = new BasicSecurityToken(ownerId, "", "", "", APP_URI.toString(), MODULE_ID, CONTAINER_NAME, null, null); HttpRequest request = new HttpRequest(DEFAULT_URI) .setAuthType(AuthType.SIGNED) .setOAuthArguments(new OAuthArguments(authInfo)) .setSecurityToken(securityToken); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI) .setLegacyParam(1, AuthType.SIGNED) .setLegacyParam(2, ownerId) .setLegacyParam(3, "") .setLegacyParam(5, APP_URI) .setLegacyParam(6, MODULE_ID) .setLegacyParam(7, SERVICE_NAME) .setLegacyParam(8, TOKEN_NAME); assertEquals(key.build(), cache.createKey(request)); }
@Test public void createKeySignedOwner() throws Exception { // Using a mock instead of a fake object makes the test less brittle if the interface should // change. RequestAuthenticationInfo authInfo = newMockAuthInfo( true /* isSignOwner */, false /* isSignViewer */, ImmutableMap.of("OAUTH_SERVICE_NAME", SERVICE_NAME, "OAUTH_TOKEN_NAME", TOKEN_NAME)); replay(authInfo); String ownerId = "owner eye dee"; SecurityToken securityToken = new BasicSecurityToken(ownerId, "", "", "", APP_URI.toString(), MODULE_ID, CONTAINER_NAME, null, null); HttpRequest request = new HttpRequest(DEFAULT_URI) .setAuthType(AuthType.SIGNED) .setOAuthArguments(new OAuthArguments(authInfo)) .setSecurityToken(securityToken); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI) .setLegacyParam(1, AuthType.SIGNED) .setLegacyParam(2, ownerId) .setLegacyParam(3, "") .setLegacyParam(5, APP_URI) .setLegacyParam(6, MODULE_ID) .setLegacyParam(7, SERVICE_NAME) .setLegacyParam(8, TOKEN_NAME); assertEquals(key.build(), cache.createKey(request)); }
@Test public void createKeySignedOwner() throws Exception { // Using a mock instead of a fake object makes the test less brittle if the interface should // change. RequestAuthenticationInfo authInfo = newMockAuthInfo( true /* isSignOwner */, false /* isSignViewer */, ImmutableMap.of("OAUTH_SERVICE_NAME", SERVICE_NAME, "OAUTH_TOKEN_NAME", TOKEN_NAME)); replay(authInfo); String ownerId = "owner eye dee"; SecurityToken securityToken = new BasicSecurityToken(ownerId, "", "", "", APP_URI.toString(), MODULE_ID, CONTAINER_NAME, null, null); HttpRequest request = new HttpRequest(DEFAULT_URI) .setAuthType(AuthType.SIGNED) .setOAuthArguments(new OAuthArguments(authInfo)) .setSecurityToken(securityToken); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI) .setLegacyParam(1, AuthType.SIGNED) .setLegacyParam(2, ownerId) .setLegacyParam(3, "") .setLegacyParam(5, APP_URI) .setLegacyParam(6, MODULE_ID) .setLegacyParam(7, SERVICE_NAME) .setLegacyParam(8, TOKEN_NAME); assertEquals(key.build(), cache.createKey(request)); }
@Test public void createKeySignedViewer() throws Exception { RequestAuthenticationInfo authInfo = newMockAuthInfo( false /* isSignOwner */, true /* isSignViewer */, ImmutableMap.of("OAUTH_SERVICE_NAME", SERVICE_NAME, "OAUTH_TOKEN_NAME", TOKEN_NAME)); replay(authInfo); String viewerId = "viewer eye dee"; SecurityToken securityToken = new BasicSecurityToken( "", viewerId, "", "", APP_URI.toString(), MODULE_ID, CONTAINER_NAME, null, null); HttpRequest request = new HttpRequest(DEFAULT_URI) .setAuthType(AuthType.SIGNED) .setOAuthArguments(new OAuthArguments(authInfo)) .setSecurityToken(securityToken); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI) .setLegacyParam(1, AuthType.SIGNED) .setLegacyParam(3, null) // The Viewer ID is in this case defaults to null .setLegacyParam(5, APP_URI) .setLegacyParam(6, MODULE_ID) .setLegacyParam(7, SERVICE_NAME) .setLegacyParam(8, TOKEN_NAME); assertEquals(key.build(), cache.createKey(request)); }
@Test public void createKeyWithTokenOwner() throws Exception { RequestAuthenticationInfo authInfo = newMockAuthInfo( true /* isSignOwner */, true /* isSignViewer */, ImmutableMap.of("OAUTH_SERVICE_NAME", SERVICE_NAME, "OAUTH_TOKEN_NAME", TOKEN_NAME, "OAUTH_USE_TOKEN", "always")); replay(authInfo); String userId = "user id"; SecurityToken securityToken = new BasicSecurityToken( userId, userId, "", "", APP_URI.toString(), MODULE_ID, CONTAINER_NAME, null, null); HttpRequest request = new HttpRequest(DEFAULT_URI) .setAuthType(AuthType.SIGNED) .setOAuthArguments(new OAuthArguments(authInfo)) .setSecurityToken(securityToken); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI) .setLegacyParam(1, AuthType.SIGNED) .setLegacyParam(2, userId) .setLegacyParam(3, userId) .setLegacyParam(4, userId) .setLegacyParam(5, APP_URI) .setLegacyParam(6, MODULE_ID) .setLegacyParam(7, SERVICE_NAME) .setLegacyParam(8, TOKEN_NAME); assertEquals(key.build(), cache.createKey(request)); }
@Test public void createKeyWithTokenOwner() throws Exception { RequestAuthenticationInfo authInfo = newMockAuthInfo( true /* isSignOwner */, true /* isSignViewer */, ImmutableMap.of("OAUTH_SERVICE_NAME", SERVICE_NAME, "OAUTH_TOKEN_NAME", TOKEN_NAME, "OAUTH_USE_TOKEN", "always")); replay(authInfo); String userId = "user id"; SecurityToken securityToken = new BasicSecurityToken( userId, userId, "", "", APP_URI.toString(), MODULE_ID, CONTAINER_NAME, null, null); HttpRequest request = new HttpRequest(DEFAULT_URI) .setAuthType(AuthType.SIGNED) .setOAuthArguments(new OAuthArguments(authInfo)) .setSecurityToken(securityToken); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI) .setLegacyParam(1, AuthType.SIGNED) .setLegacyParam(2, userId) .setLegacyParam(3, userId) .setLegacyParam(4, userId) .setLegacyParam(5, APP_URI) .setLegacyParam(6, MODULE_ID) .setLegacyParam(7, SERVICE_NAME) .setLegacyParam(8, TOKEN_NAME); assertEquals(key.build(), cache.createKey(request)); }
@Test public void createKeySignedViewer() throws Exception { RequestAuthenticationInfo authInfo = newMockAuthInfo( false /* isSignOwner */, true /* isSignViewer */, ImmutableMap.of("OAUTH_SERVICE_NAME", SERVICE_NAME, "OAUTH_TOKEN_NAME", TOKEN_NAME)); replay(authInfo); String viewerId = "viewer eye dee"; SecurityToken securityToken = new BasicSecurityToken( "", viewerId, "", "", APP_URI.toString(), MODULE_ID, CONTAINER_NAME, null, null); HttpRequest request = new HttpRequest(DEFAULT_URI) .setAuthType(AuthType.SIGNED) .setOAuthArguments(new OAuthArguments(authInfo)) .setSecurityToken(securityToken); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI) .setLegacyParam(1, AuthType.SIGNED) .setLegacyParam(3, null) // The Viewer ID is in this case defaults to null .setLegacyParam(5, APP_URI) .setLegacyParam(6, MODULE_ID) .setLegacyParam(7, SERVICE_NAME) .setLegacyParam(8, TOKEN_NAME); assertEquals(key.build(), cache.createKey(request)); }
@Test public void createKeySignedViewer() throws Exception { RequestAuthenticationInfo authInfo = newMockAuthInfo( false /* isSignOwner */, true /* isSignViewer */, ImmutableMap.of("OAUTH_SERVICE_NAME", SERVICE_NAME, "OAUTH_TOKEN_NAME", TOKEN_NAME)); replay(authInfo); String viewerId = "viewer eye dee"; SecurityToken securityToken = new BasicSecurityToken( "", viewerId, "", "", APP_URI.toString(), MODULE_ID, CONTAINER_NAME, null, null); HttpRequest request = new HttpRequest(DEFAULT_URI) .setAuthType(AuthType.SIGNED) .setOAuthArguments(new OAuthArguments(authInfo)) .setSecurityToken(securityToken); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI) .setLegacyParam(1, AuthType.SIGNED) .setLegacyParam(3, null) // The Viewer ID is in this case defaults to null .setLegacyParam(5, APP_URI) .setLegacyParam(6, MODULE_ID) .setLegacyParam(7, SERVICE_NAME) .setLegacyParam(8, TOKEN_NAME); assertEquals(key.build(), cache.createKey(request)); }
@Test public void buildStrictNoCacheHttpResponse() { HttpResponse response = new HttpResponseBuilder() .setResponseString("result") .addHeader("Cache-Control", "private, max-age=1000") .addHeader("X-Method-Override", "GET") .create(); assertTrue(response.isStrictNoCache()); HttpResponse builtResponse = extendedStrictNoCacheTtlCache .buildStrictNoCacheHttpResponse(response).create(); assertTrue(builtResponse.isStrictNoCache()); assertEquals("", builtResponse.getResponseAsString()); assertEquals("private, max-age=1000", builtResponse.getHeader("Cache-Control")); assertEquals(86400, builtResponse.getRefetchStrictNoCacheAfterMs()); assertFalse(builtResponse.getHeaders().containsKey("Pragma")); assertNull(builtResponse.getHeader("X-Method-Override")); }
@Test public void buildStrictNoCacheHttpResponse() { HttpResponse response = new HttpResponseBuilder() .setResponseString("result") .addHeader("Cache-Control", "private, max-age=1000") .addHeader("X-Method-Override", "GET") .create(); assertTrue(response.isStrictNoCache()); HttpResponse builtResponse = extendedStrictNoCacheTtlCache .buildStrictNoCacheHttpResponse(response).create(); assertTrue(builtResponse.isStrictNoCache()); assertEquals("", builtResponse.getResponseAsString()); assertEquals("private, max-age=1000", builtResponse.getHeader("Cache-Control")); assertEquals(86400, builtResponse.getRefetchStrictNoCacheAfterMs()); assertFalse(builtResponse.getHeaders().containsKey("Pragma")); assertNull(builtResponse.getHeader("X-Method-Override")); }
@Test public void createKeyImageRequestRewrite() throws Exception { // Mock the Request with Image Resize (Quality) params and specified rewrite mimeType. HttpRequest request = getMockImageRequest("100", "80", "70", true, "image/jpg", "Mozilla"); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, IMAGE_URI) .setLegacyParam(1, AuthType.NONE) .setParam("rh", "100") .setParam("rw", "80") .setParam("rq", "70") .setParam("ne", "1") .setParam("rm", "image/jpg") .setParam("ua", "Mozilla"); assertEquals(key.build(), cache.createKey(request)); }
@Test public void createKeyImageRequestRewrite() throws Exception { // Mock the Request with Image Resize (Quality) params and specified rewrite mimeType. HttpRequest request = getMockImageRequest("100", "80", "70", true, "image/jpg", "Mozilla"); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, IMAGE_URI) .setLegacyParam(1, AuthType.NONE) .setParam("rh", "100") .setParam("rw", "80") .setParam("rq", "70") .setParam("ne", "1") .setParam("rm", "image/jpg") .setParam("ua", "Mozilla"); assertEquals(key.build(), cache.createKey(request)); }
@Test public void addResponseWithForcedTtlAndStrictNoCache() { HttpRequest request = new HttpRequest(DEFAULT_URI) .setCacheTtl(10); String key = cache.createKey(request); HttpResponse response = new HttpResponseBuilder() .setResponseString("result") .setStrictNoCache() .create(); assertNotNull(cache.addResponse(request, response)); assertEquals("public,max-age=10", cache.map.get(key).getHeader("Cache-Control")); assertNotNull(extendedStrictNoCacheTtlCache.addResponse(request, response)); assertEquals("public,max-age=10", extendedStrictNoCacheTtlCache.map.get(key).getHeader("Cache-Control")); }
@Test public void addResponseWithForcedTtlAndStrictNoCache() { HttpRequest request = new HttpRequest(DEFAULT_URI) .setCacheTtl(10); String key = cache.createKey(request); HttpResponse response = new HttpResponseBuilder() .setResponseString("result") .setStrictNoCache() .create(); assertNotNull(cache.addResponse(request, response)); assertEquals("public,max-age=10", cache.map.get(key).getHeader("Cache-Control")); assertNotNull(extendedStrictNoCacheTtlCache.addResponse(request, response)); assertEquals("public,max-age=10", extendedStrictNoCacheTtlCache.map.get(key).getHeader("Cache-Control")); }
@Test public void removeResponseIsStaled() { long expiration = System.currentTimeMillis() + 1000L; HttpRequest request = new HttpRequest(DEFAULT_URI); String key = cache.createKey(request); HttpResponse response = new HttpResponseBuilder() .setExpirationTime(expiration) .create(); cache.map.put(key, response); // The cache itself still hold and return staled value, // caller responsible to decide what to do about it assertEquals(response, cache.removeResponse(request)); assertEquals(0, cache.map.size()); }
@Test public void buildStrictNoCacheHttpResponseWithPragmaHeader() { HttpResponse response = new HttpResponseBuilder() .setResponseString("result") .addHeader("Pragma", "no-cache") .create(); assertTrue(response.isStrictNoCache()); HttpResponse builtResponse = cache .buildStrictNoCacheHttpResponse(response).create(); assertTrue(builtResponse.isStrictNoCache()); assertEquals("", builtResponse.getResponseAsString()); assertNull(builtResponse.getHeader("Cache-Control")); assertEquals("no-cache", builtResponse.getHeader("Pragma")); }