Search in sources :

Example 1 with WebFrontendBootstrap

use of org.apache.flink.runtime.webmonitor.utils.WebFrontendBootstrap in project flink by apache.

the class HistoryServerStaticFileServerHandlerTest method testRespondWithFile.

@Test
public void testRespondWithFile() throws Exception {
    File webDir = tmp.newFolder("webDir");
    Router router = new Router().addGet("/:*", new HistoryServerStaticFileServerHandler(webDir));
    WebFrontendBootstrap webUI = new WebFrontendBootstrap(router, LoggerFactory.getLogger(HistoryServerStaticFileServerHandlerTest.class), tmp.newFolder("uploadDir"), null, "localhost", 0, new Configuration());
    int port = webUI.getServerPort();
    try {
        // verify that 404 message is returned when requesting a non-existent file
        Tuple2<Integer, String> notFound404 = HistoryServerTest.getFromHTTP("http://localhost:" + port + "/hello");
        Assert.assertThat(notFound404.f0, is(404));
        Assert.assertThat(notFound404.f1, containsString("not found"));
        // verify that a) a file can be loaded using the ClassLoader and b) that the
        // HistoryServer
        // index_hs.html is injected
        Tuple2<Integer, String> index = HistoryServerTest.getFromHTTP("http://localhost:" + port + "/index.html");
        Assert.assertThat(index.f0, is(200));
        Assert.assertThat(index.f1, containsString("Apache Flink Web Dashboard"));
        // verify that index.html is appended if the request path ends on '/'
        Tuple2<Integer, String> index2 = HistoryServerTest.getFromHTTP("http://localhost:" + port + "/");
        Assert.assertEquals(index, index2);
        // verify that a 405 message is returned when requesting a directory
        File dir = new File(webDir, "dir.json");
        dir.mkdirs();
        Tuple2<Integer, String> dirNotFound = HistoryServerTest.getFromHTTP("http://localhost:" + port + "/dir");
        Assert.assertThat(dirNotFound.f0, is(405));
        Assert.assertThat(dirNotFound.f1, containsString("not found"));
        // verify that a 403 message is returned when requesting a file outside the webDir
        tmp.newFile("secret");
        Tuple2<Integer, String> dirOutsideDirectory = HistoryServerTest.getFromHTTP("http://localhost:" + port + "/../secret");
        Assert.assertThat(dirOutsideDirectory.f0, is(403));
        Assert.assertThat(dirOutsideDirectory.f1, containsString("Forbidden"));
    } finally {
        webUI.shutdown();
    }
}
Also used : WebFrontendBootstrap(org.apache.flink.runtime.webmonitor.utils.WebFrontendBootstrap) Configuration(org.apache.flink.configuration.Configuration) Router(org.apache.flink.runtime.rest.handler.router.Router) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) File(java.io.File) Test(org.junit.Test)

Example 2 with WebFrontendBootstrap

use of org.apache.flink.runtime.webmonitor.utils.WebFrontendBootstrap in project flink by apache.

the class LeaderRetrievalHandlerTest method testLeaderRetrievalGateway.

/**
 * Tests the behaviour of the LeaderRetrievalHandler under the following conditions.
 *
 * <p>1. No gateway resolved --> service unavailable 2. leader gateway
 *
 * @throws Exception
 */
@Test
public void testLeaderRetrievalGateway() throws Exception {
    final String restPath = "/testing";
    final Configuration configuration = new Configuration();
    final Router router = new Router();
    final Time timeout = Time.seconds(10L);
    final CompletableFuture<RestfulGateway> gatewayFuture = new CompletableFuture<>();
    final GatewayRetriever<RestfulGateway> gatewayRetriever = () -> gatewayFuture;
    final RestfulGateway gateway = new TestingRestfulGateway.Builder().build();
    final TestingHandler testingHandler = new TestingHandler(gatewayRetriever, timeout);
    router.addGet(restPath, testingHandler);
    WebFrontendBootstrap bootstrap = new WebFrontendBootstrap(router, log, null, null, "localhost", 0, configuration);
    try (HttpTestClient httpClient = new HttpTestClient("localhost", bootstrap.getServerPort())) {
        // 1. no leader gateway available --> Service unavailable
        httpClient.sendGetRequest(restPath, FutureUtils.toDuration(timeout));
        HttpTestClient.SimpleHttpResponse response = httpClient.getNextResponse(FutureUtils.toDuration(timeout));
        Assert.assertEquals(HttpResponseStatus.SERVICE_UNAVAILABLE, response.getStatus());
        // 2. with leader
        gatewayFuture.complete(gateway);
        httpClient.sendGetRequest(restPath, FutureUtils.toDuration(timeout));
        response = httpClient.getNextResponse(FutureUtils.toDuration(timeout));
        Assert.assertEquals(HttpResponseStatus.OK, response.getStatus());
        Assert.assertEquals(RESPONSE_MESSAGE, response.getContent());
    } finally {
        bootstrap.shutdown();
    }
}
Also used : WebFrontendBootstrap(org.apache.flink.runtime.webmonitor.utils.WebFrontendBootstrap) Configuration(org.apache.flink.configuration.Configuration) Router(org.apache.flink.runtime.rest.handler.router.Router) Time(org.apache.flink.api.common.time.Time) CompletableFuture(java.util.concurrent.CompletableFuture) HttpTestClient(org.apache.flink.runtime.webmonitor.testutils.HttpTestClient) Test(org.junit.Test)

Example 3 with WebFrontendBootstrap

use of org.apache.flink.runtime.webmonitor.utils.WebFrontendBootstrap in project flink by apache.

the class HistoryServer method start.

// ------------------------------------------------------------------------
// Life-cycle
// ------------------------------------------------------------------------
void start() throws IOException, InterruptedException {
    synchronized (startupShutdownLock) {
        LOG.info("Starting history server.");
        Files.createDirectories(webDir.toPath());
        LOG.info("Using directory {} as local cache.", webDir);
        Router router = new Router();
        router.addGet("/:*", new HistoryServerStaticFileServerHandler(webDir));
        createDashboardConfigFile();
        executor.scheduleWithFixedDelay(getArchiveFetchingRunnable(), 0, refreshIntervalMillis, TimeUnit.MILLISECONDS);
        netty = new WebFrontendBootstrap(router, LOG, webDir, serverSSLFactory, webAddress, webPort, config);
    }
}
Also used : WebFrontendBootstrap(org.apache.flink.runtime.webmonitor.utils.WebFrontendBootstrap) Router(org.apache.flink.runtime.rest.handler.router.Router)

Aggregations

Router (org.apache.flink.runtime.rest.handler.router.Router)3 WebFrontendBootstrap (org.apache.flink.runtime.webmonitor.utils.WebFrontendBootstrap)3 Configuration (org.apache.flink.configuration.Configuration)2 Test (org.junit.Test)2 File (java.io.File)1 CompletableFuture (java.util.concurrent.CompletableFuture)1 Time (org.apache.flink.api.common.time.Time)1 HttpTestClient (org.apache.flink.runtime.webmonitor.testutils.HttpTestClient)1 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)1