Search in sources :

Example 6 with DummyHttpServerRequest

use of org.swisspush.gateleen.core.http.DummyHttpServerRequest in project gateleen by swisspush.

the class RouterTest method testForwarderRequestWithHeadersFilterNotMatching.

@Test
public void testForwarderRequestWithHeadersFilterNotMatching(TestContext context) {
    storage = new MockResourceStorage(ImmutableMap.of(rulesPath, RULES_WITH_HEADERSFILTER, serverUrl + "forward/to/backend", RANDOM_RESOURCE));
    Router router = new Router(vertx, storage, properties, loggingResourceManager, monitoringHandler, httpClient, serverUrl, rulesPath, userProfilePath, info, storagePort);
    ConfigurationResourceManager configurationResourceManager = Mockito.mock(ConfigurationResourceManager.class);
    router.enableRoutingConfiguration(configurationResourceManager, serverUrl + "/admin/v1/routing/config");
    context.assertFalse(router.isRoutingBroken(), "Routing should not be broken");
    context.assertNull(router.getRoutingBrokenMessage(), "RoutingBrokenMessage should be null");
    final DummyHttpServerResponse response = new DummyHttpServerResponse();
    response.setStatusCode(StatusCode.OK.getStatusCode());
    response.setStatusMessage(StatusCode.OK.getStatusMessage());
    MultiMap headers = new HeadersMultiMap();
    headers.set("x-foo", "X");
    DummyHttpServerRequest request = buildRequest(HttpMethod.GET, "/gateleen/server/forward/to/backend", headers, Buffer.buffer(RANDOM_RESOURCE), response);
    router.route(request);
    context.assertEquals(StatusCode.BAD_REQUEST.getStatusCode(), request.response().getStatusCode(), "StatusCode should be 400");
    context.assertEquals(StatusCode.BAD_REQUEST.getStatusMessage(), request.response().getStatusMessage(), "StatusMessage should be Bad Request");
}
Also used : MultiMap(io.vertx.core.MultiMap) HeadersMultiMap(io.vertx.core.http.impl.headers.HeadersMultiMap) DummyHttpServerResponse(org.swisspush.gateleen.core.http.DummyHttpServerResponse) DummyHttpServerRequest(org.swisspush.gateleen.core.http.DummyHttpServerRequest) HeadersMultiMap(io.vertx.core.http.impl.headers.HeadersMultiMap) MockResourceStorage(org.swisspush.gateleen.core.storage.MockResourceStorage) ConfigurationResourceManager(org.swisspush.gateleen.core.configuration.ConfigurationResourceManager) Test(org.junit.Test)

Example 7 with DummyHttpServerRequest

use of org.swisspush.gateleen.core.http.DummyHttpServerRequest in project gateleen by swisspush.

the class RouterTest method testRequestHopValidationLimitNotYetReached.

@Test
public void testRequestHopValidationLimitNotYetReached(TestContext context) {
    storage = new MockResourceStorage(ImmutableMap.of(rulesPath, RULES_WITH_HOPS, serverUrl + "/loop/4/resource", RANDOM_RESOURCE));
    Router router = new Router(vertx, storage, properties, loggingResourceManager, monitoringHandler, httpClient, serverUrl, rulesPath, userProfilePath, info, storagePort);
    ConfigurationResourceManager configurationResourceManager = Mockito.mock(ConfigurationResourceManager.class);
    router.enableRoutingConfiguration(configurationResourceManager, serverUrl + "/admin/v1/routing/config");
    context.assertFalse(router.isRoutingBroken(), "Routing should not be broken");
    context.assertNull(router.getRoutingBrokenMessage(), "RoutingBrokenMessage should be null");
    // change the hops limit to 5
    router.resourceChanged(serverUrl + "/admin/v1/routing/config", Buffer.buffer("{\"request.hops.limit\":5}"));
    final DummyHttpServerResponse response = new DummyHttpServerResponse();
    response.setStatusCode(StatusCode.OK.getStatusCode());
    response.setStatusMessage(StatusCode.OK.getStatusMessage());
    class GETRandomResourceRequest extends DummyHttpServerRequest {

        MultiMap headers = MultiMap.caseInsensitiveMultiMap();

        @Override
        public HttpMethod method() {
            return HttpMethod.GET;
        }

        @Override
        public String uri() {
            return "/gateleen/server/loop/4/resource";
        }

        @Override
        public String path() {
            return "/gateleen/server/loop/4/resource";
        }

        @Override
        public MultiMap headers() {
            return headers;
        }

        @Override
        public MultiMap params() {
            return MultiMap.caseInsensitiveMultiMap();
        }

        @Override
        public HttpServerRequest bodyHandler(Handler<Buffer> bodyHandler) {
            bodyHandler.handle(Buffer.buffer(RANDOM_RESOURCE));
            return this;
        }

        @Override
        public HttpServerRequest handler(Handler<Buffer> handler) {
            handler.handle(Buffer.buffer(RANDOM_RESOURCE));
            return this;
        }

        @Override
        public HttpServerRequest endHandler(Handler<Void> endHandler) {
            endHandler.handle(null);
            return this;
        }

        @Override
        public DummyHttpServerResponse response() {
            return response;
        }
    }
    GETRandomResourceRequest request = new GETRandomResourceRequest();
    router.route(request);
    context.assertEquals("1", request.headers().get("x-hops"), "x-hops header should have value 1");
    context.assertEquals(StatusCode.OK.getStatusCode(), request.response().getStatusCode(), "StatusCode should be 200");
    context.assertEquals(StatusCode.OK.getStatusMessage(), request.response().getStatusMessage(), "StatusMessage should be OK");
}
Also used : MultiMap(io.vertx.core.MultiMap) HeadersMultiMap(io.vertx.core.http.impl.headers.HeadersMultiMap) DummyHttpServerResponse(org.swisspush.gateleen.core.http.DummyHttpServerResponse) DummyHttpServerRequest(org.swisspush.gateleen.core.http.DummyHttpServerRequest) MockResourceStorage(org.swisspush.gateleen.core.storage.MockResourceStorage) MonitoringHandler(org.swisspush.gateleen.monitoring.MonitoringHandler) Handler(io.vertx.core.Handler) ConfigurationResourceManager(org.swisspush.gateleen.core.configuration.ConfigurationResourceManager) Test(org.junit.Test)

Example 8 with DummyHttpServerRequest

use of org.swisspush.gateleen.core.http.DummyHttpServerRequest in project gateleen by swisspush.

the class RouterTest method testRequestHopValidationNoLimitConfiguration.

@Test
public void testRequestHopValidationNoLimitConfiguration(TestContext context) {
    storage = new MockResourceStorage(ImmutableMap.of(rulesPath, RULES_WITH_HOPS, serverUrl + "/loop/4/resource", RANDOM_RESOURCE));
    Router router = new Router(vertx, storage, properties, loggingResourceManager, monitoringHandler, httpClient, serverUrl, rulesPath, userProfilePath, info, storagePort);
    context.assertFalse(router.isRoutingBroken(), "Routing should not be broken");
    context.assertNull(router.getRoutingBrokenMessage(), "RoutingBrokenMessage should be null");
    final DummyHttpServerResponse response = new DummyHttpServerResponse();
    response.setStatusCode(StatusCode.OK.getStatusCode());
    response.setStatusMessage(StatusCode.OK.getStatusMessage());
    class GETRandomResourceRequest extends DummyHttpServerRequest {

        MultiMap headers = MultiMap.caseInsensitiveMultiMap();

        @Override
        public HttpMethod method() {
            return HttpMethod.GET;
        }

        @Override
        public String uri() {
            return "/gateleen/server/loop/4/resource";
        }

        @Override
        public String path() {
            return "/gateleen/server/loop/4/resource";
        }

        @Override
        public MultiMap headers() {
            return headers;
        }

        @Override
        public MultiMap params() {
            return MultiMap.caseInsensitiveMultiMap();
        }

        @Override
        public HttpServerRequest bodyHandler(Handler<Buffer> bodyHandler) {
            bodyHandler.handle(Buffer.buffer(RANDOM_RESOURCE));
            return this;
        }

        @Override
        public HttpServerRequest handler(Handler<Buffer> handler) {
            handler.handle(Buffer.buffer(RANDOM_RESOURCE));
            return this;
        }

        @Override
        public HttpServerRequest endHandler(Handler<Void> endHandler) {
            endHandler.handle(null);
            return this;
        }

        @Override
        public DummyHttpServerResponse response() {
            return response;
        }
    }
    GETRandomResourceRequest request = new GETRandomResourceRequest();
    for (int i = 0; i < 20; i++) {
        router.route(request);
    }
    context.assertNull(request.headers().get("x-hops"), "No x-hops header should be present");
    context.assertEquals(StatusCode.OK.getStatusCode(), request.response().getStatusCode(), "StatusCode should be 200");
    context.assertEquals(StatusCode.OK.getStatusMessage(), request.response().getStatusMessage(), "StatusMessage should be OK");
}
Also used : MultiMap(io.vertx.core.MultiMap) HeadersMultiMap(io.vertx.core.http.impl.headers.HeadersMultiMap) DummyHttpServerResponse(org.swisspush.gateleen.core.http.DummyHttpServerResponse) DummyHttpServerRequest(org.swisspush.gateleen.core.http.DummyHttpServerRequest) MockResourceStorage(org.swisspush.gateleen.core.storage.MockResourceStorage) MonitoringHandler(org.swisspush.gateleen.monitoring.MonitoringHandler) Handler(io.vertx.core.Handler) Test(org.junit.Test)

Example 9 with DummyHttpServerRequest

use of org.swisspush.gateleen.core.http.DummyHttpServerRequest in project gateleen by swisspush.

the class RouterTest method testFixBrokenRouting.

@Test
public void testFixBrokenRouting(TestContext context) {
    Router router = new Router(vertx, storage, properties, loggingResourceManager, monitoringHandler, httpClient, serverUrl, rulesPath, userProfilePath, info, storagePort);
    context.assertTrue(router.isRoutingBroken(), "Routing should be broken because of missing properties entry");
    context.assertNotNull(router.getRoutingBrokenMessage(), "RoutingBrokenMessage should contain 'gateleen.test.prop.1' property");
    context.assertTrue(router.getRoutingBrokenMessage().contains("gateleen.test.prop.1"), "RoutingBrokenMessage should contain 'gateleen.test.prop.1' property");
    // fix routing by passing a valid rules resource via PUT request
    final DummyHttpServerResponse response = new DummyHttpServerResponse();
    class UpdateRulesWithValidResourceRequest extends DummyHttpServerRequest {

        @Override
        public HttpMethod method() {
            return HttpMethod.PUT;
        }

        @Override
        public String uri() {
            return "/gateleen/server/admin/v1/routing/rules";
        }

        @Override
        public HttpServerRequest bodyHandler(Handler<Buffer> bodyHandler) {
            bodyHandler.handle(Buffer.buffer(RULES_WITH_VALID_PROPS));
            return this;
        }

        @Override
        public MultiMap headers() {
            return MultiMap.caseInsensitiveMultiMap();
        }

        @Override
        public HttpServerResponse response() {
            return response;
        }
    }
    router.route(new UpdateRulesWithValidResourceRequest());
    context.assertFalse(router.isRoutingBroken(), "Routing should not be broken anymore");
    context.assertNull(router.getRoutingBrokenMessage(), "RoutingBrokenMessage should be null");
}
Also used : DummyHttpServerResponse(org.swisspush.gateleen.core.http.DummyHttpServerResponse) DummyHttpServerRequest(org.swisspush.gateleen.core.http.DummyHttpServerRequest) MonitoringHandler(org.swisspush.gateleen.monitoring.MonitoringHandler) Handler(io.vertx.core.Handler) Test(org.junit.Test)

Example 10 with DummyHttpServerRequest

use of org.swisspush.gateleen.core.http.DummyHttpServerRequest in project gateleen by swisspush.

the class LoggingResourceManagerTest method invalidRegexGetsRejected.

@Test
public void invalidRegexGetsRejected(TestContext testContext) {
    // Wire up victim instance
    final String loggingUrl = "/houston/server/admin/v1/logging";
    final LoggingResourceManager loggingResourceManager = new LoggingResourceManager(vertx, storage, loggingUrl);
    // Mock a request
    final Integer[] responseStatusCode = new Integer[] { null };
    final DummyHttpServerResponse httpServerResponse = new DummyHttpServerResponse() {

        @Override
        public synchronized HttpServerResponse setStatusCode(int statusCode) {
            if (responseStatusCode[0] != null)
                logger.debug("Status code " + responseStatusCode[0] + " got overridden with " + statusCode + ".");
            // Keep status code to assert it later.
            responseStatusCode[0] = statusCode;
            return this;
        }
    };
    final HttpServerRequest request = new DummyHttpServerRequest() {

        @Override
        public String uri() {
            return loggingUrl;
        }

        @Override
        public HttpMethod method() {
            return HttpMethod.PUT;
        }

        @Override
        public HttpServerRequest bodyHandler(Handler<Buffer> bodyHandler) {
            Buffer buffer = new BufferImpl();
            buffer.setBytes(0, ("{\n" + "  \"payload\": {\n" + "    \"filters\": [\n" + "      {\n" + "        \"url\": \"/houston/services/.*(?<!(all/position)$\",\n" + "        \"method\": \"PUT|DELETE\"\n" + "      }\n" + "    ]\n" + "  }\n" + "}\n").getBytes(StandardCharsets.UTF_8));
            bodyHandler.handle(buffer);
            return null;
        }

        @Override
        public MultiMap headers() {
            return MultiMap.caseInsensitiveMultiMap();
        }

        @Override
        public HttpServerResponse response() {
            return httpServerResponse;
        }
    };
    // Trigger victim to do its work.
    final boolean returnValue = loggingResourceManager.handleLoggingResource(request);
    // Assert victim accepted our request.
    testContext.assertTrue(returnValue);
    // did set a response code,
    testContext.assertNotNull(responseStatusCode[0]);
    // responded with a status code of 400,
    testContext.assertEquals(400, responseStatusCode[0]);
    // and wrote a ValidationException to the body.
    testContext.assertTrue(httpServerResponse.getResultBuffer().startsWith("ValidationException: "));
}
Also used : Buffer(io.vertx.core.buffer.Buffer) DummyHttpServerResponse(org.swisspush.gateleen.core.http.DummyHttpServerResponse) DummyHttpServerRequest(org.swisspush.gateleen.core.http.DummyHttpServerRequest) HttpServerRequest(io.vertx.core.http.HttpServerRequest) DummyHttpServerRequest(org.swisspush.gateleen.core.http.DummyHttpServerRequest) Handler(io.vertx.core.Handler) BufferImpl(io.vertx.core.buffer.impl.BufferImpl) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)17 DummyHttpServerRequest (org.swisspush.gateleen.core.http.DummyHttpServerRequest)17 DummyHttpServerResponse (org.swisspush.gateleen.core.http.DummyHttpServerResponse)17 MockResourceStorage (org.swisspush.gateleen.core.storage.MockResourceStorage)12 MultiMap (io.vertx.core.MultiMap)10 HeadersMultiMap (io.vertx.core.http.impl.headers.HeadersMultiMap)10 ConfigurationResourceManager (org.swisspush.gateleen.core.configuration.ConfigurationResourceManager)9 Handler (io.vertx.core.Handler)7 MonitoringHandler (org.swisspush.gateleen.monitoring.MonitoringHandler)6 Buffer (io.vertx.core.buffer.Buffer)1 BufferImpl (io.vertx.core.buffer.impl.BufferImpl)1 HttpServerRequest (io.vertx.core.http.HttpServerRequest)1 JsonObject (io.vertx.core.json.JsonObject)1 HashSet (java.util.HashSet)1