String concatHost = getReqVal(ctx.getContainer(), CONCAT_HOST_PARAM); String concatPath = getReqVal(ctx.getContainer(), CONCAT_PATH_PARAM); uriBuilder.setAuthority(concatHost); uriBuilder.setPath(concatPath); i++; if (doSplit) { snippets.put(resource, getJsSnippet(splitParam, resource));
private DefaultConcatUriManager makeManager(String host, String path, String splitToken, ConcatUriManager.Versioner versioner) { ContainerConfig config = createMock(ContainerConfig.class); expect(config.getString(CONTAINER, DefaultConcatUriManager.CONCAT_HOST_PARAM)) .andReturn(host).anyTimes(); expect(config.getString(CONTAINER, DefaultConcatUriManager.CONCAT_PATH_PARAM)) .andReturn(path).anyTimes(); expect(config.getString(CONTAINER, DefaultConcatUriManager.CONCAT_JS_SPLIT_PARAM)) .andReturn(splitToken).anyTimes(); replay(config); return new DefaultConcatUriManager(config, versioner); }
String concatHost = getReqVal(ctx.getContainer(), CONCAT_HOST_PARAM); String concatPath = getReqVal(ctx.getContainer(), CONCAT_PATH_PARAM); UriBuilder uriBuilder = makeUriBuilder(ctx, concatHost, concatPath); int injectedMaxUrlLength = (int) (this.getUrlMaxLength() * URL_LENGTH_BUFFER_MARGIN); uriBuilder.removeQueryParameter(i.toString()); addVersionAndSplitParam(uriBuilder, splitParam, doSplit, batchUris, container, ctx.getType()); uris.add(uriBuilder.toUri()); uriBuilder = makeUriBuilder(ctx, concatHost, concatPath); batchUris = Lists.newArrayList(); i = START_INDEX; addVersionAndSplitParam(uriBuilder, splitParam, doSplit, batchUris, container, ctx.getType()); uris.add(uriBuilder.toUri()); snippets = createSnippets(uris);
@Test public void validateNoContainerStrict() { DefaultConcatUriManager manager = makeManager("host.com", "/path", null, null); manager.setUseStrictParsing(true); ConcatUriManager.ConcatUri validated = manager.process(Uri.parse("http://host.com/path?q=f")); assertEquals(UriStatus.BAD_URI, validated.getStatus()); }
DefaultConcatUriManager manager = makeManager(host, path, "token", versioner); Uri urlA = Uri.parse(generateUrl(manager.getUrlMaxLength() / 4)); Uri urlB = Uri.parse(generateUrl(manager.getUrlMaxLength() / 4)); Uri urlC = Uri.parse(generateUrl(manager.getUrlMaxLength() / 2)); manager.make(fromList(gadget, resourceUris, type), false); "1", "1", versions[0]); assertEquals(urlA.toString(), concatUris.get(0).getUris().get(0).getQueryParameter("1")); assertEquals(DefaultConcatUriManager.getJsSnippet(jsonFirst, urlA), concatUris.get(0).getSnippet(urlA)); assertEquals(urlB.toString(), concatUris.get(0).getUris().get(0).getQueryParameter("2")); assertEquals(DefaultConcatUriManager.getJsSnippet(jsonFirst, urlB), concatUris.get(0).getSnippet(urlB)); assertNull(concatUris.get(0).getUris().get(0).getQueryParameter("3")); "1", "1", versions[0]); assertEquals(urlC.toString(), concatUris.get(0).getUris().get(1).getQueryParameter("1")); assertEquals(DefaultConcatUriManager.getJsSnippet(jsonSecond, urlC), concatUris.get(0).getSnippet(urlC)); assertNull(concatUris.get(0).getUris().get(1).getQueryParameter("2"));
private void checkMissingHostConfig(ConcatUriManager.Type type) throws Exception { Gadget gadget = mockGadget(false, false); DefaultConcatUriManager manager = makeManager(null, "/foo", "token", null); List<List<Uri>> resourceUris = ImmutableList.of(RESOURCES_ONE); manager.make(fromList(gadget, resourceUris, type), true); }
HashMap<String, String> jsonParams = new HashMap<String, String>(); List<ConcatData> concatUris = manager.make(fromList(gadget, resourceUris, type), false); assertEquals(3, concatUris.size()); assertEquals(DefaultConcatUriManager.getJsSnippet(json, RESOURCE_1), uri.getSnippet(RESOURCE_1)); assertEquals(DefaultConcatUriManager.getJsSnippet(json, RESOURCE_2), uri.getSnippet(RESOURCE_2)); assertNull(uri.getSnippet(RESOURCE_3_NOSCHEMA)); assertEquals(DefaultConcatUriManager.getJsSnippet(json, RESOURCE_3_HTTP), uri.getSnippet(RESOURCE_3_HTTP)); checkBasicUriParameters(uri.getUris().get(0), host, path, 10, type, "0", "0", versions[0]);
@Test public void validateNoContainer() { DefaultConcatUriManager manager = makeManager("host.com", "/path", null, null); ConcatUriManager.ConcatUri validated = manager.process(Uri.parse("http://host.com/path?q=f")); assertEquals(UriStatus.BAD_URI, validated.getStatus()); }
private Map<Uri, String> createSnippets(List<Uri> uris) { Map<Uri, String> snippets = Maps.newHashMap(); for (Uri uri : uris) { Integer i = START_INDEX; String splitParam = uri.getQueryParameter(Param.JSON.getKey()); String resourceUri; while ((resourceUri = uri.getQueryParameter(i.toString())) != null) { Uri resource = Uri.parse(resourceUri); snippets.put(resource, getJsSnippet(splitParam, resource)); i++; } } return snippets; }
private void checkValidatedBatchAdjacent(ConcatUriManager.Type type) throws Exception { // This is essentially the "integration" test ensuring that a // DefaultConcatUriManager's created Uris can be validated by it in turn. Gadget gadget = mockGadget(true, true); String host = "bar.com"; String path = "/other/path"; String[] versions = new String[] { "version1"}; ConcatUriManager.Versioner versioner = makeVersioner(UriStatus.VALID_VERSIONED, versions); DefaultConcatUriManager manager = makeManager(host, path, "token", versioner); List<List<Uri>> resourceUris = ImmutableList.of(RESOURCES_ONE, RESOURCES_TWO, RESOURCES_ONE); List<ConcatData> concatUris = manager.make(fromList(gadget, resourceUris, type), true); assertEquals(3, concatUris.size()); for (int i = 0; i < 3; ++i) { ConcatUriManager.ConcatUri validated = manager.process(concatUris.get(i).getUris().get(0)); assertEquals(UriStatus.VALID_VERSIONED, validated.getStatus()); List<Uri> resList = (i % 2 == 0) ? RESOURCES_ONE : RESOURCES_TWO; assertEquals(resList, validated.getBatch()); assertEquals(type, validated.getType()); } }
@Test public void dontConcatMultipleResourceBeyoundUrlLimitAdjacentBatched() throws Exception { Gadget gadget = mockGadget(true, true); String host = "bar.com"; String path = "/other/path"; ConcatUriManager.Type type = ConcatUriManager.Type.JS; String[] versions = new String[] { "v1" }; ConcatUriManager.Versioner versioner = makeVersioner(null, versions); DefaultConcatUriManager manager = makeManager(host, path, null, versioner); Uri urlA = Uri.parse(generateUrl(manager.getUrlMaxLength() / 4)); Uri urlB = Uri.parse(generateUrl(manager.getUrlMaxLength() / 4)); Uri urlC = Uri.parse(generateUrl(manager.getUrlMaxLength() / 2)); List<Uri> urlList = ImmutableList.of(urlA, urlB, urlC); List<List<Uri>> resourceUris = ImmutableList.of(urlList); List<ConcatData> concatUris = manager.make(fromList(gadget, resourceUris, type), true); assertEquals(2, concatUris.get(0).getUris().size()); checkBasicUriParameters(concatUris.get(0).getUris().get(0), host, path, 8, type, "1", "1", versions[0]); assertEquals(urlA.toString(), concatUris.get(0).getUris().get(0).getQueryParameter("1")); assertNull(concatUris.get(0).getSnippet(urlA)); assertEquals(urlB.toString(), concatUris.get(0).getUris().get(0).getQueryParameter("2")); assertNull(concatUris.get(0).getSnippet(urlB)); assertNull(concatUris.get(0).getUris().get(0).getQueryParameter("3")); checkBasicUriParameters(concatUris.get(0).getUris().get(1), host, path, 7, type, "1", "1", versions[0]); assertEquals(urlC.toString(), concatUris.get(0).getUris().get(1).getQueryParameter("1")); assertNull(concatUris.get(0).getSnippet(urlC)); assertNull(concatUris.get(0).getUris().get(1).getQueryParameter("2")); }
public List<ConcatData> make(List<ConcatUri> resourceUris, boolean isAdjacent) { List<ConcatData> concatUris = Lists.newArrayListWithCapacity(resourceUris.size()); if (resourceUris.isEmpty()) { return concatUris; } ConcatUri exemplar = resourceUris.get(0); String container = exemplar.getContainer(); for (ConcatUri ctx : resourceUris) { concatUris.add(makeConcatUri(ctx, isAdjacent, container)); } return concatUris; }
@Test public void validateNoContainerStrict() { DefaultConcatUriManager manager = makeManager("host.com", "/path", null, null); manager.setUseStrictParsing(true); ConcatUriManager.ConcatUri validated = manager.process(Uri.parse("http://host.com/path?q=f")); assertEquals(UriStatus.BAD_URI, validated.getStatus()); }
DefaultConcatUriManager manager = makeManager(host, path, "token", versioner); Uri urlA = Uri.parse(generateUrl(manager.getUrlMaxLength() / 4)); Uri urlB = Uri.parse(generateUrl(manager.getUrlMaxLength() / 4)); Uri urlC = Uri.parse(generateUrl(manager.getUrlMaxLength() / 2)); manager.make(fromList(gadget, resourceUris, type), false); "1", "1", versions[0]); assertEquals(urlA.toString(), concatUris.get(0).getUris().get(0).getQueryParameter("1")); assertEquals(DefaultConcatUriManager.getJsSnippet(jsonFirst, urlA), concatUris.get(0).getSnippet(urlA)); assertEquals(urlB.toString(), concatUris.get(0).getUris().get(0).getQueryParameter("2")); assertEquals(DefaultConcatUriManager.getJsSnippet(jsonFirst, urlB), concatUris.get(0).getSnippet(urlB)); assertNull(concatUris.get(0).getUris().get(0).getQueryParameter("3")); "1", "1", versions[0]); assertEquals(urlC.toString(), concatUris.get(0).getUris().get(1).getQueryParameter("1")); assertEquals(DefaultConcatUriManager.getJsSnippet(jsonSecond, urlC), concatUris.get(0).getSnippet(urlC)); assertNull(concatUris.get(0).getUris().get(1).getQueryParameter("2"));
private void checkMissingPathConfig(ConcatUriManager.Type type) throws Exception { Gadget gadget = mockGadget(false, false); DefaultConcatUriManager manager = makeManager("host.com", null, "token", null); List<List<Uri>> resourceUris = ImmutableList.of(RESOURCES_ONE); manager.make(fromList(gadget, resourceUris, type), false); }
HashMap<String, String> jsonParams = new HashMap<String, String>(); List<ConcatData> concatUris = manager.make(fromList(gadget, resourceUris, type), false); assertEquals(3, concatUris.size()); assertEquals(DefaultConcatUriManager.getJsSnippet(json, RESOURCE_1), uri.getSnippet(RESOURCE_1)); assertEquals(DefaultConcatUriManager.getJsSnippet(json, RESOURCE_2), uri.getSnippet(RESOURCE_2)); assertNull(uri.getSnippet(RESOURCE_3_NOSCHEMA)); assertEquals(DefaultConcatUriManager.getJsSnippet(json, RESOURCE_3_HTTP), uri.getSnippet(RESOURCE_3_HTTP)); checkBasicUriParameters(uri.getUris().get(0), host, path, 10, type, "0", "0", versions[0]);
@Test public void validateNoContainer() { DefaultConcatUriManager manager = makeManager("host.com", "/path", null, null); ConcatUriManager.ConcatUri validated = manager.process(Uri.parse("http://host.com/path?q=f")); assertEquals(UriStatus.BAD_URI, validated.getStatus()); }
@Test public void jsEvalSnippet() { assertEquals("eval(_js['" + StringEscapeUtils.escapeEcmaScript(RESOURCE_1.toString()) + "']);", DefaultConcatUriManager.getJsSnippet("_js", RESOURCE_1)); }
private void checkValidatedBatchAdjacent(ConcatUriManager.Type type) throws Exception { // This is essentially the "integration" test ensuring that a // DefaultConcatUriManager's created Uris can be validated by it in turn. Gadget gadget = mockGadget(true, true); String host = "bar.com"; String path = "/other/path"; String[] versions = new String[] { "version1"}; ConcatUriManager.Versioner versioner = makeVersioner(UriStatus.VALID_VERSIONED, versions); DefaultConcatUriManager manager = makeManager(host, path, "token", versioner); List<List<Uri>> resourceUris = ImmutableList.of(RESOURCES_ONE, RESOURCES_TWO, RESOURCES_ONE); List<ConcatData> concatUris = manager.make(fromList(gadget, resourceUris, type), true); assertEquals(3, concatUris.size()); for (int i = 0; i < 3; ++i) { ConcatUriManager.ConcatUri validated = manager.process(concatUris.get(i).getUris().get(0)); assertEquals(UriStatus.VALID_VERSIONED, validated.getStatus()); List<Uri> resList = (i % 2 == 0) ? RESOURCES_ONE : RESOURCES_TWO; assertEquals(resList, validated.getBatch()); assertEquals(type, validated.getType()); } }