Search in sources :

Example 1 with DummyHttpServerRequest

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

the class RouterTest method testRequestHopValidationWithLimitZero.

@Test
public void testRequestHopValidationWithLimitZero(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 0, so no re-routing is allowed
    router.resourceChanged(serverUrl + "/admin/v1/routing/config", Buffer.buffer("{\"request.hops.limit\":0}"));
    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.INTERNAL_SERVER_ERROR.getStatusCode(), request.response().getStatusCode(), "StatusCode should be 500");
    context.assertEquals("Request hops limit exceeded", request.response().getStatusMessage(), "StatusMessage should be 'Request hops limit exceeded'");
}
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 2 with DummyHttpServerRequest

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

the class RouterTest method testForwarderRequestWithHeadersFilterPresent.

@Test
public void testForwarderRequestWithHeadersFilterPresent(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", "A");
    DummyHttpServerRequest request = buildRequest(HttpMethod.GET, "/gateleen/server/forward/to/backend", headers, Buffer.buffer(RANDOM_RESOURCE), response);
    router.route(request);
    // we expect a status code 500 because of a NullPointerException in the test setup
    // however, this means that the headersFilter evaluation did not return a 400 Bad Request
    context.assertEquals(StatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), request.response().getStatusCode(), "StatusCode should be 500");
}
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 3 with DummyHttpServerRequest

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

the class RouterTest method testStorageRequestWithHeadersFilterAbsent.

@Test
public void testStorageRequestWithHeadersFilterAbsent(TestContext context) {
    storage = new MockResourceStorage(ImmutableMap.of(rulesPath, RULES_WITH_HEADERSFILTER, serverUrl + "forward/to/storage", 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();
    DummyHttpServerRequest request = buildRequest(HttpMethod.GET, "/gateleen/server/forward/to/storage", 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 4 with DummyHttpServerRequest

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

the class RouterTest method testGETAnyResourceAfterFixingBrokenRouterShouldWorkAgain.

@Test
public void testGETAnyResourceAfterFixingBrokenRouterShouldWorkAgain(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");
    // get random resource with broken routing. Should not work
    final DummyHttpServerResponse response = new DummyHttpServerResponse();
    class GETRandomResourceRequest extends DummyHttpServerRequest {

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

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

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

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

        @Override
        public DummyHttpServerResponse response() {
            return response;
        }
    }
    GETRandomResourceRequest request = new GETRandomResourceRequest();
    router.route(request);
    context.assertTrue(router.isRoutingBroken(), "Routing should still be broken");
    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");
    context.assertEquals(StatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), request.response().getStatusCode(), "StatusCode should be 500");
    context.assertEquals(StatusCode.INTERNAL_SERVER_ERROR.getStatusMessage(), request.response().getStatusMessage(), "StatusMessage should be Internal Server Error");
    context.assertTrue(request.response().getResultBuffer().contains("Routing is broken"), "Routing is broken message should be returned");
    context.assertTrue(request.response().getResultBuffer().contains("gateleen.test.prop.1"), "The message should contain 'gateleen.test.prop.1' in the message");
    // fix routing
    final DummyHttpServerResponse responseFix = 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 responseFix;
        }
    }
    router.route(new UpdateRulesWithValidResourceRequest());
    context.assertFalse(router.isRoutingBroken(), "Routing should not be broken anymore");
    context.assertNull(router.getRoutingBrokenMessage(), "RoutingBrokenMessage should be null");
    // retry get random resource. Should work now
    final DummyHttpServerResponse responseRandomResource = new DummyHttpServerResponse();
    class GETRandomResourceAgainRequest extends DummyHttpServerRequest {

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

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

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

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

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

        @Override
        public DummyHttpServerResponse response() {
            return responseRandomResource;
        }

        @Override
        public HttpServerRequest pause() {
            return this;
        }
    }
    GETRandomResourceAgainRequest requestRandomResource = new GETRandomResourceAgainRequest();
    router.route(requestRandomResource);
    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 5 with DummyHttpServerRequest

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

the class RouterTest method testServerInfoRequestsAreAvailableWithDefaultRoutes.

@Test
public void testServerInfoRequestsAreAvailableWithDefaultRoutes(TestContext context) {
    storage = new MockResourceStorage(ImmutableMap.of(rulesPath, RULES_WITH_HOPS));
    long ts = System.currentTimeMillis();
    JsonObject info = new JsonObject().put("ts", ts);
    Router router = new Router(vertx, storage, properties, loggingResourceManager, monitoringHandler, httpClient, serverUrl, rulesPath, userProfilePath, info, storagePort);
    final DummyHttpServerResponse response = new DummyHttpServerResponse();
    response.setStatusCode(StatusCode.OK.getStatusCode());
    response.setStatusMessage(StatusCode.OK.getStatusMessage());
    class GETServerInfoRequest extends DummyHttpServerRequest {

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

        @Override
        public String uri() {
            return "/gateleen/server/info";
        }

        @Override
        public String path() {
            return "/gateleen/server/info";
        }

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

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

        @Override
        public DummyHttpServerResponse response() {
            return response;
        }
    }
    GETServerInfoRequest request = new GETServerInfoRequest();
    router.route(request);
    context.assertEquals(StatusCode.OK.getStatusCode(), request.response().getStatusCode(), "StatusCode should be 200");
    context.assertEquals(StatusCode.OK.getStatusMessage(), request.response().getStatusMessage(), "StatusMessage should be OK");
    context.assertEquals(ts, new JsonObject(request.response().getResultBuffer()).getLong("ts"));
}
Also used : DummyHttpServerResponse(org.swisspush.gateleen.core.http.DummyHttpServerResponse) DummyHttpServerRequest(org.swisspush.gateleen.core.http.DummyHttpServerRequest) MockResourceStorage(org.swisspush.gateleen.core.storage.MockResourceStorage) JsonObject(io.vertx.core.json.JsonObject) 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