Serve PolyGerrit index.html from a Soy template

Rather than serving a static file, serve the PolyGerrit index HTML
document from a Soy template. In this way, the path to load PG
dependencies can be safely parameterized in two ways:

* If Gerrit is not running on the root of the domain (e.g. listening on
  https://example.com/my-gerrit/) the path component of the Canonical
  Web URL is used to load PG dependencies.

  Instead of /elements/gr-app.js off the root of the domain it uses
  /my-gerrit/elements/gr-app.js

* If the PolyGerrit static resources are to be served from a CDN rather
  than the Gerrit WAR, the `cdnPath` config in the [gerrit] section can
  be used.

  For example, if the server config says ...

  [gerrit]
    cdnPath = http://my-cdn.com/pg/version/123

  ... then it uses the following style of path for PG dependencies.

  http://my-cdn.com/pg/version/123/my-gerrit/elements/gr-app.js

  If a CDN-path is configured, it supersedes subdirectories appearing
  in the Canonical-Web-URL for this purpose.

Feature: Issue 5845
Change-Id: I2b2d704fe33c90ea2f2a2183fc79897642a48175
(cherry picked from commit 414659c792)
This commit is contained in:
Wyatt Allen
2017-03-15 09:55:31 -07:00
committed by Paladox none
parent 178b7174cc
commit 558a2afbd2
8 changed files with 217 additions and 7 deletions

View File

@@ -0,0 +1,56 @@
// Copyright (C) 2017 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.httpd.raw;
import com.google.gerrit.common.Nullable;
import com.google.template.soy.data.SoyMapData;
import java.net.URISyntaxException;
import org.junit.Test;
import static com.google.common.truth.Truth.assertThat;
public class IndexServletTest {
@Test
public void noPathAndNoCDN() throws URISyntaxException {
SoyMapData data = IndexServlet.getTemplateData("http://example.com/", null);
assertThat(data.getSingle("canonicalPath").stringValue()).isEqualTo("");
assertThat(data.getSingle("staticResourcePath").stringValue()).isEqualTo("");
}
@Test
public void pathAndNoCDN() throws URISyntaxException {
SoyMapData data = IndexServlet.getTemplateData("http://example.com/gerrit/", null);
assertThat(data.getSingle("canonicalPath").stringValue()).isEqualTo("/gerrit");
assertThat(data.getSingle("staticResourcePath").stringValue()).isEqualTo("/gerrit");
}
@Test
public void noPathAndCDN() throws URISyntaxException {
SoyMapData data = IndexServlet.getTemplateData("http://example.com/",
"http://my-cdn.com/foo/bar/");
assertThat(data.getSingle("canonicalPath").stringValue()).isEqualTo("");
assertThat(data.getSingle("staticResourcePath").stringValue())
.isEqualTo("http://my-cdn.com/foo/bar/");
}
@Test
public void pathAndCDN() throws URISyntaxException {
SoyMapData data = IndexServlet.getTemplateData("http://example.com/gerrit",
"http://my-cdn.com/foo/bar/");
assertThat(data.getSingle("canonicalPath").stringValue()).isEqualTo("/gerrit");
assertThat(data.getSingle("staticResourcePath").stringValue())
.isEqualTo("http://my-cdn.com/foo/bar/");
}
}