snippets = createSnippets(uris); return new ConcatData(uris, snippets);
elemConcat.setAttribute(type.getSrcAttrib(), concatUri.getUri().toString().replace("&", "&")); firstElem.getParentNode().insertBefore(elemConcat, firstElem); for (Element elem : sourceBatch) { Uri elemOrigUri = uriIt.next(); String snippet = concatUri.getSnippet(elemOrigUri); if (!StringUtils.isEmpty(snippet)) { Node scriptNode = elem.getOwnerDocument().createElement("script");
for (Uri uri : concatUri.getUris()) { Element elemConcat = (Element)firstElem.cloneNode(true); elemConcat.setAttribute(type.getSrcAttrib(), uri.toString()); for (Element elem : sourceBatch) { Uri elemOrigUri = uriIt.next(); String snippet = concatUri.getSnippet(elemOrigUri); if (!Strings.isNullOrEmpty(snippet)) { Node scriptNode = elem.getOwnerDocument().createElement("script");
elemConcat.setAttribute(type.getSrcAttrib(), concatUri.getUri().toString()); firstElem.getParentNode().insertBefore(elemConcat, firstElem); for (Element elem : sourceBatch) { Uri elemOrigUri = uriIt.next(); String snippet = concatUri.getSnippet(elemOrigUri); if (!StringUtils.isEmpty(snippet)) { Node scriptNode = elem.getOwnerDocument().createElement("script");
assertEquals(1, uri.getUris().size()); String json = uri.getUris().get(0).getQueryParameter( (Param.JSON.toString().toLowerCase())); assertTrue(json.startsWith(splitParam)); String currentUri = uri.getUris().get(0).toString(); if (jsonParams.keySet().contains(currentUri)) { assertEquals(jsonParams.get(currentUri), json); 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]); List<Uri> resList = (i % 2 == 0) ? RESOURCES_ONE : RESOURCES_TWO; assertEquals(resList.get(0).toString(), uri.getUris().get(0).getQueryParameter("1")); assertEquals(resList.get(1).toString(), uri.getUris().get(0).getQueryParameter("2")); assertEquals(resList.get(2).toString(), uri.getUris().get(0).getQueryParameter("3"));
assertEquals(1, uri.getUris().size()); String json = uri.getUris().get(0).getQueryParameter( (Param.JSON.toString().toLowerCase())); assertTrue(json.startsWith(splitParam)); String currentUri = uri.getUris().get(0).toString(); if (jsonParams.keySet().contains(currentUri)) { assertEquals(jsonParams.get(currentUri), json); 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]); List<Uri> resList = (i % 2 == 0) ? RESOURCES_ONE : RESOURCES_TWO; assertEquals(resList.get(0).toString(), uri.getUris().get(0).getQueryParameter("1")); assertEquals(resList.get(1).toString(), uri.getUris().get(0).getQueryParameter("2")); assertEquals(resList.get(2).toString(), uri.getUris().get(0).getQueryParameter("3"));
ConcatData uri = concatUris.get(i); assertEquals(DefaultConcatUriManager.getJsSnippet(splitParam, RESOURCE_1), uri.getSnippet(RESOURCE_1)); assertEquals(DefaultConcatUriManager.getJsSnippet(splitParam, RESOURCE_2), uri.getSnippet(RESOURCE_2)); assertEquals(DefaultConcatUriManager.getJsSnippet(splitParam, RESOURCE_3), uri.getSnippet(RESOURCE_3)); assertNull(uri.getUri().getScheme()); assertEquals(host, uri.getUri().getAuthority()); assertEquals(path, uri.getUri().getPath()); assertEquals(10, uri.getUri().getQueryParameters().size()); assertEquals(CONTAINER, uri.getUri().getQueryParameter(Param.CONTAINER.getKey())); assertEquals(SPEC_URI.toString(), uri.getUri().getQueryParameter(Param.GADGET.getKey())); assertEquals(type.getType(), uri.getUri().getQueryParameter(Param.TYPE.getKey())); assertEquals("0", uri.getUri().getQueryParameter(Param.DEBUG.getKey())); assertEquals("0", uri.getUri().getQueryParameter(Param.NO_CACHE.getKey())); assertEquals(type.getType(), uri.getUri().getQueryParameter(Param.TYPE.getKey())); List<Uri> resList = (i % 2 == 0) ? RESOURCES_ONE : RESOURCES_TWO; assertEquals(resList.get(0).toString(), uri.getUri().getQueryParameter("1")); assertEquals(resList.get(1).toString(), uri.getUri().getQueryParameter("2")); assertEquals(resList.get(2).toString(), uri.getUri().getQueryParameter("3")); assertEquals(versions[i], uri.getUri().getQueryParameter(Param.VERSION.getKey()));
manager.make(fromList(gadget, resourceUris, type), false); assertEquals(2, concatUris.get(0).getUris().size()); String jsonFirst = concatUris.get(0).getUris().get(0).getQueryParameter( (Param.JSON.toString().toLowerCase())); checkBasicUriParameters(concatUris.get(0).getUris().get(0), host, path, 9, type, "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")); String jsonSecond = concatUris.get(0).getUris().get(1).getQueryParameter( (Param.JSON.toString().toLowerCase())); checkBasicUriParameters(concatUris.get(0).getUris().get(1), host, path, 8, type, "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"));
manager.make(fromList(gadget, resourceUris, type), false); assertEquals(2, concatUris.get(0).getUris().size()); String jsonFirst = concatUris.get(0).getUris().get(0).getQueryParameter( (Param.JSON.toString().toLowerCase())); checkBasicUriParameters(concatUris.get(0).getUris().get(0), host, path, 9, type, "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")); String jsonSecond = concatUris.get(0).getUris().get(1).getQueryParameter( (Param.JSON.toString().toLowerCase())); checkBasicUriParameters(concatUris.get(0).getUris().get(1), host, path, 8, type, "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"));
return new ConcatData(uriBuilder.toUri(), snippets);
return new ConcatData(uriBuilder.toUri(), snippets);
@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")); }
assertNull(uri.getSnippet(RESOURCE_1)); assertNull(uri.getSnippet(RESOURCE_2)); assertNull(uri.getSnippet(RESOURCE_3)); assertNull(uri.getUri().getScheme()); assertEquals(host, uri.getUri().getAuthority()); assertEquals(path, uri.getUri().getPath()); assertEquals(9, uri.getUri().getQueryParameters().size()); assertEquals(CONTAINER, uri.getUri().getQueryParameter(Param.CONTAINER.getKey())); assertEquals(SPEC_URI.toString(), uri.getUri().getQueryParameter(Param.GADGET.getKey())); assertEquals("1", uri.getUri().getQueryParameter(Param.DEBUG.getKey())); assertEquals("1", uri.getUri().getQueryParameter(Param.NO_CACHE.getKey())); assertEquals(type.getType(), uri.getUri().getQueryParameter(Param.TYPE.getKey())); assertEquals(RESOURCES_ONE.get(0).toString(), uri.getUri().getQueryParameter("1")); assertEquals(RESOURCES_ONE.get(1).toString(), uri.getUri().getQueryParameter("2")); assertEquals(RESOURCES_ONE.get(2).toString(), uri.getUri().getQueryParameter("3")); assertEquals(version, uri.getUri().getQueryParameter(Param.VERSION.getKey()));
@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")); }
assertNull(uri.getSnippet(RESOURCE_1)); assertNull(uri.getSnippet(RESOURCE_2)); assertNull(uri.getSnippet(RESOURCE_3)); assertNull(uri.getUri().getScheme()); assertEquals(host, uri.getUri().getAuthority()); assertEquals(path, uri.getUri().getPath()); assertEquals(9, uri.getUri().getQueryParameters().size()); assertEquals(CONTAINER, uri.getUri().getQueryParameter(Param.CONTAINER.getKey())); assertEquals(SPEC_URI.toString(), uri.getUri().getQueryParameter(Param.GADGET.getKey())); assertEquals("1", uri.getUri().getQueryParameter(Param.DEBUG.getKey())); assertEquals("1", uri.getUri().getQueryParameter(Param.NO_CACHE.getKey())); assertEquals(type.getType(), uri.getUri().getQueryParameter(Param.TYPE.getKey())); List<Uri> resList = (i % 2 == 0) ? RESOURCES_ONE : RESOURCES_TWO; assertEquals(resList.get(0).toString(), uri.getUri().getQueryParameter("1")); assertEquals(resList.get(1).toString(), uri.getUri().getQueryParameter("2")); assertEquals(resList.get(2).toString(), uri.getUri().getQueryParameter("3")); assertEquals(versions[i], uri.getUri().getQueryParameter(Param.VERSION.getKey()));
private void checkBasicParams(ConcatUriManager.Type type) throws Exception { Gadget gadget = mockGadget(false, false); String host = "host.com"; String path = "/concat/path"; DefaultConcatUriManager manager = makeManager(host, path, "token", null); List<List<Uri>> resourceUris = ImmutableList.<List<Uri>>of(RESOURCES_ONE); List<ConcatData> concatUris = manager.make(fromList(gadget, resourceUris, type), true); assertEquals(1, concatUris.size()); ConcatData uri = concatUris.get(0); assertNull(uri.getSnippet(RESOURCE_1)); assertNull(uri.getSnippet(RESOURCE_2)); assertNull(uri.getSnippet(RESOURCE_3)); assertNull(uri.getUri().getScheme()); assertEquals(host, uri.getUri().getAuthority()); assertEquals(path, uri.getUri().getPath()); assertEquals(8, uri.getUri().getQueryParameters().size()); assertEquals(CONTAINER, uri.getUri().getQueryParameter(Param.CONTAINER.getKey())); assertEquals(SPEC_URI.toString(), uri.getUri().getQueryParameter(Param.GADGET.getKey())); assertEquals("0", uri.getUri().getQueryParameter(Param.DEBUG.getKey())); assertEquals("0", uri.getUri().getQueryParameter(Param.NO_CACHE.getKey())); assertEquals(type.getType(), uri.getUri().getQueryParameter(Param.TYPE.getKey())); assertEquals(RESOURCES_ONE.get(0).toString(), uri.getUri().getQueryParameter("1")); assertEquals(RESOURCES_ONE.get(1).toString(), uri.getUri().getQueryParameter("2")); assertEquals(RESOURCES_ONE.get(2).toString(), uri.getUri().getQueryParameter("3")); }
private void checkBatchAdjacent(ConcatUriManager.Type type) throws Exception { Gadget gadget = mockGadget(true, true); String host = "bar.com"; String path = "/other/path"; String[] versions = new String[] { "version1"}; ConcatUriManager.Versioner versioner = makeVersioner(null, 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) { ConcatData uri = concatUris.get(i); assertNull(uri.getSnippet(RESOURCE_1)); assertNull(uri.getSnippet(RESOURCE_2)); assertNull(uri.getSnippet(RESOURCE_3_NOSCHEMA)); assertEquals(1, uri.getUris().size()); checkBasicUriParameters(uri.getUris().get(0), host, path, 9, type, "1", "1", versions[0]); List<Uri> resList = (i % 2 == 0) ? RESOURCES_ONE : RESOURCES_TWO; assertEquals(resList.get(0).toString(), uri.getUris().get(0).getQueryParameter("1")); assertEquals(resList.get(1).toString(), uri.getUris().get(0).getQueryParameter("2")); assertEquals(resList.get(2).toString(), uri.getUris().get(0).getQueryParameter("3")); } }
private void checkBatchAdjacent(ConcatUriManager.Type type) throws Exception { Gadget gadget = mockGadget(true, true); String host = "bar.com"; String path = "/other/path"; String[] versions = new String[] { "version1"}; ConcatUriManager.Versioner versioner = makeVersioner(null, 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) { ConcatData uri = concatUris.get(i); assertNull(uri.getSnippet(RESOURCE_1)); assertNull(uri.getSnippet(RESOURCE_2)); assertNull(uri.getSnippet(RESOURCE_3_NOSCHEMA)); assertEquals(1, uri.getUris().size()); checkBasicUriParameters(uri.getUris().get(0), host, path, 9, type, "1", "1", versions[0]); List<Uri> resList = (i % 2 == 0) ? RESOURCES_ONE : RESOURCES_TWO; assertEquals(resList.get(0).toString(), uri.getUris().get(0).getQueryParameter("1")); assertEquals(resList.get(1).toString(), uri.getUris().get(0).getQueryParameter("2")); assertEquals(resList.get(2).toString(), uri.getUris().get(0).getQueryParameter("3")); } }
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", "v2", "v3" }; ConcatUriManager.Versioner versioner = makeVersioner(UriStatus.VALID_VERSIONED, versions); DefaultConcatUriManager manager = makeManager(host, path, "token", versioner); List<List<Uri>> resourceUris = ImmutableList.<List<Uri>>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).getUri()); assertEquals(UriStatus.VALID_VERSIONED, validated.getStatus()); List<Uri> resList = (i % 2 == 0) ? RESOURCES_ONE : RESOURCES_TWO; assertEquals(resList, validated.getBatch()); assertEquals(type, validated.getType()); } }
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()); } }