@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)); }
/** * Inserting the keys from the parameter map only if the keys are defined, prevents thrashing * the existing persistent caches at rolling restart of high-traffic servers. * The cache keys of all URIs that don't set these parameters must not change. * * TODO: String parameters that have KEY_SEPARATOR appearing as a part of a string param need * to be escaped (e.g. with a backslash like so: ":" -> "\:") to prevent weird cache key * collisions. Moreover the active character (backslash) needs to be escaped itself for similar * reasons. */ public String build() { StringBuilder keyBuilder = new StringBuilder(2 * String.valueOf(legacyParams[0]).length()); appendLegacyKeys(keyBuilder); if (!paramMap.isEmpty()) { for (Map.Entry<String, Object> mapEntry : paramMap.entrySet()) { keyBuilder.append(KEY_SEPARATOR); keyBuilder.append(String.format("%s=%s", mapEntry.getKey(), mapEntry.getValue())); } } return keyBuilder.toString(); }
private void appendLegacyKeys(StringBuilder key) { boolean first = true; for (Object legacyParam : legacyParams) { if (!first) { key.append(KEY_SEPARATOR); } else { first = false; } key.append(getValueOrDefault(legacyParam)); } } }
@Before public void setUp() { builder = new CacheKeyBuilder() .setLegacyParam(0, Uri.parse("http://example.com")) .setLegacyParam(1, AuthType.SIGNED); }
@Test public void createKeySimple() { HttpRequest request = new HttpRequest(DEFAULT_URI).setAuthType(AuthType.NONE); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI).setLegacyParam(1, AuthType.NONE); assertEquals(key.build(), cache.createKey(request)); }
@Test public void testServiceName() { builder.setLegacyParam(7, "srv"); assertEquals("http://example.com:signed:0:0:0:0:0:srv:0", builder.build()); }
@Test public void testBuilder() { assertEquals("http://example.com:signed:0:0:0:0:0:0:0", builder.build()); }
@Test public void createKeySimple() { HttpRequest request = new HttpRequest(DEFAULT_URI).setAuthType(AuthType.NONE); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI).setLegacyParam(1, AuthType.NONE); assertEquals(key.build(), cache.createKey(request)); }
@Test public void testInstanceId() { builder.setLegacyParam(6, "id"); assertEquals("http://example.com:signed:0:0:0:0:id:0:0", builder.build()); }
@Before public void setUp() { builder = new CacheKeyBuilder() .setLegacyParam(0, Uri.parse("http://example.com")) .setLegacyParam(1, AuthType.SIGNED); }
@Test public void testBuilder() { assertEquals("http://example.com:signed:0:0:0:0:0:0:0", builder.build()); }
@Test public void createKeySimpleImageRequest() throws Exception { // Mock the Request with Image Resize (Quality) params, without rewrite mimeType. HttpRequest request = getMockImageRequest("100", "80", "70", false, null, "Mozilla"); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, IMAGE_URI) .setLegacyParam(1, AuthType.NONE) .setParam("rh", "100") .setParam("rw", "80") .setParam("rq", "70") .setParam("ua", "Mozilla"); assertEquals(key.build(), cache.createKey(request)); }
@Test public void createKeySimple() { HttpRequest request = new HttpRequest(DEFAULT_URI).setAuthType(AuthType.NONE); CacheKeyBuilder key = new CacheKeyBuilder() .setLegacyParam(0, DEFAULT_URI).setLegacyParam(1, AuthType.NONE); assertEquals(key.build(), cache.createKey(request)); }
@Test public void testTokenName() { builder.setLegacyParam(8, "token"); assertEquals("http://example.com:signed:0:0:0:0:0:0:token", builder.build()); }
@Before public void setUp() { builder = new CacheKeyBuilder() .setLegacyParam(0, Uri.parse("http://example.com")) .setLegacyParam(1, AuthType.SIGNED); }
@Test public void testBuilder() { assertEquals("http://example.com:signed:0:0:0:0:0:0:0", builder.build()); }
private void appendLegacyKeys(StringBuilder key) { boolean first = true; for (Object legacyParam : legacyParams) { if (!first) { key.append(KEY_SEPARATOR); } else { first = false; } key.append(getValueOrDefault(legacyParam)); } } }