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");
}
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");
}
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");
}
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");
}
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: "));
}
Aggregations