Search in sources :

Example 26 with Configuration

use of io.apiman.test.policies.Configuration in project apiman by apiman.

the class TransferQuotaPolicyTest method testDownloadLimitEmptyHeaderConfig.

@Test
@Configuration("{" + "  \"limit\" : 1000," + "  \"direction\" : \"download\"," + "  \"granularity\" : \"Api\"," + "  \"period\" : \"Day\"," + "  \"headerRemaining\" : \"\"," + "  \"headerLimit\" : \"\"," + "  \"headerReset\" : \"\"" + "}")
@BackEndApi(DownloadTestBackEndApi.class)
public void testDownloadLimitEmptyHeaderConfig() throws Throwable {
    PolicyTestRequest request = PolicyTestRequest.build(PolicyTestRequestType.GET, "/some/resource");
    request.header("X-Payload-Size", "389");
    PolicyTestResponse response = send(request);
    Assert.assertNotNull(response.body());
    Assert.assertEquals("1000", response.header("X-TransferQuota-Remaining"));
    Assert.assertEquals("1000", response.header("X-TransferQuota-Limit"));
    send(request);
    send(request);
    // Now if we try it one more time, we'll get a failure!
    try {
        send(request);
        Assert.fail("Expected a policy failure!");
    } catch (PolicyFailureError e) {
        PolicyFailure failure = e.getFailure();
        Assert.assertEquals(PolicyFailureCodes.BYTE_QUOTA_EXCEEDED, failure.getFailureCode());
        Assert.assertEquals("Transfer quota exceeded.", failure.getMessage());
        Assert.assertEquals(429, failure.getResponseCode());
    }
}
Also used : PolicyFailure(io.apiman.gateway.engine.beans.PolicyFailure) PolicyTestRequest(io.apiman.test.policies.PolicyTestRequest) PolicyTestResponse(io.apiman.test.policies.PolicyTestResponse) PolicyFailureError(io.apiman.test.policies.PolicyFailureError) IPolicyTestBackEndApi(io.apiman.test.policies.IPolicyTestBackEndApi) BackEndApi(io.apiman.test.policies.BackEndApi) Configuration(io.apiman.test.policies.Configuration) ApimanPolicyTest(io.apiman.test.policies.ApimanPolicyTest) Test(org.junit.Test)

Example 27 with Configuration

use of io.apiman.test.policies.Configuration in project apiman by apiman.

the class TransferQuotaPolicyTest method testUploadLimit.

@Test
@Configuration("{" + "  \"limit\" : 100," + "  \"direction\" : \"upload\"," + "  \"granularity\" : \"Api\"," + "  \"period\" : \"Day\"," + "  \"headerRemaining\" : \"X-Bytes-Remaining\"," + "  \"headerLimit\" : \"X-Bytes-Limit\"," + "  \"headerReset\" : \"X-Bytes-Reset\"" + "}")
public void testUploadLimit() throws Throwable {
    PolicyTestRequest request = PolicyTestRequest.build(PolicyTestRequestType.POST, "/some/resource");
    request.body("0123456789");
    PolicyTestResponse response = send(request);
    EchoResponse echo = response.entity(EchoResponse.class);
    Assert.assertNotNull(echo);
    Assert.assertEquals("90", response.header("X-Bytes-Remaining"));
    Assert.assertEquals("100", response.header("X-Bytes-Limit"));
    // Now try sending a few more times to get closer to the limit
    for (int i = 0; i < 9; i++) {
        response = send(request);
    }
    echo = response.entity(EchoResponse.class);
    Assert.assertNotNull(echo);
    Assert.assertEquals("0", response.header("X-Bytes-Remaining"));
    Assert.assertEquals("100", response.header("X-Bytes-Limit"));
    // Now if we try it one more time, we'll get a failure!
    try {
        send(request);
        Assert.fail("Expected a policy failure!");
    } catch (PolicyFailureError e) {
        PolicyFailure failure = e.getFailure();
        Assert.assertEquals(PolicyFailureCodes.BYTE_QUOTA_EXCEEDED, failure.getFailureCode());
        Assert.assertEquals("Transfer quota exceeded.", failure.getMessage());
        Assert.assertEquals(429, failure.getResponseCode());
    }
}
Also used : EchoResponse(io.apiman.test.common.mock.EchoResponse) PolicyFailure(io.apiman.gateway.engine.beans.PolicyFailure) PolicyTestRequest(io.apiman.test.policies.PolicyTestRequest) PolicyTestResponse(io.apiman.test.policies.PolicyTestResponse) PolicyFailureError(io.apiman.test.policies.PolicyFailureError) Configuration(io.apiman.test.policies.Configuration) ApimanPolicyTest(io.apiman.test.policies.ApimanPolicyTest) Test(org.junit.Test)

Example 28 with Configuration

use of io.apiman.test.policies.Configuration in project apiman by apiman.

the class TransferQuotaPolicyTest method testLargeUploadLimit.

@Test
@Configuration("{" + "  \"limit\" : 10485760," + "  \"direction\" : \"upload\"," + "  \"granularity\" : \"Api\"," + "  \"period\" : \"Day\"," + "  \"headerRemaining\" : \"X-Data-Remaining\"," + "  \"headerLimit\" : \"X-Data-Limit\"," + "  \"headerReset\" : \"X-Data-Reset\"" + "}")
public void testLargeUploadLimit() throws Throwable {
    PolicyTestRequest request = PolicyTestRequest.build(PolicyTestRequestType.POST, "/some/large-resource");
    // The 4th of these should exceed our limits
    byte[] data = new byte[11000000 / 4];
    Arrays.fill(data, (byte) 80);
    request.body(new String(data));
    PolicyTestResponse response = send(request);
    EchoResponse echo = response.entity(EchoResponse.class);
    Assert.assertNotNull(echo);
    Assert.assertEquals("7735760", response.header("X-Data-Remaining"));
    Assert.assertEquals("10485760", response.header("X-Data-Limit"));
    send(request);
    send(request);
    send(request);
    // Now if we try it one more time, we'll get a failure!
    try {
        send(request);
        Assert.fail("Expected a policy failure!");
    } catch (PolicyFailureError e) {
        PolicyFailure failure = e.getFailure();
        Assert.assertEquals(PolicyFailureCodes.BYTE_QUOTA_EXCEEDED, failure.getFailureCode());
        Assert.assertEquals("Transfer quota exceeded.", failure.getMessage());
        Assert.assertEquals(429, failure.getResponseCode());
        String remaining = failure.getHeaders().get("X-Data-Remaining");
        Assert.assertEquals("-514240", remaining);
    }
}
Also used : EchoResponse(io.apiman.test.common.mock.EchoResponse) PolicyFailure(io.apiman.gateway.engine.beans.PolicyFailure) PolicyTestRequest(io.apiman.test.policies.PolicyTestRequest) PolicyTestResponse(io.apiman.test.policies.PolicyTestResponse) PolicyFailureError(io.apiman.test.policies.PolicyFailureError) Configuration(io.apiman.test.policies.Configuration) ApimanPolicyTest(io.apiman.test.policies.ApimanPolicyTest) Test(org.junit.Test)

Example 29 with Configuration

use of io.apiman.test.policies.Configuration in project apiman by apiman.

the class TransferQuotaPolicyTest method testBothLimit.

@Test
@Configuration("{" + "  \"limit\" : 500," + "  \"direction\" : \"both\"," + "  \"granularity\" : \"Api\"," + "  \"period\" : \"Day\"," + "  \"headerRemaining\" : \"X-Bytes-Remaining\"," + "  \"headerLimit\" : \"X-Bytes-Limit\"," + "  \"headerReset\" : \"X-Bytes-Reset\"" + "}")
@BackEndApi(DownloadTestBackEndApi.class)
public void testBothLimit() throws Throwable {
    PolicyTestRequest request = PolicyTestRequest.build(PolicyTestRequestType.PUT, "/some/resource");
    request.header("X-Payload-Size", "50");
    byte[] data = new byte[50];
    Arrays.fill(data, (byte) 80);
    request.body(new String(data));
    PolicyTestResponse response = send(request);
    Assert.assertNotNull(response.body());
    Assert.assertEquals("450", response.header("X-Bytes-Remaining"));
    Assert.assertEquals("500", response.header("X-Bytes-Limit"));
    send(request);
    send(request);
    send(request);
    send(request);
    // Now if we try it one more time, we'll get a failure!
    try {
        send(request);
        Assert.fail("Expected a policy failure!");
    } catch (PolicyFailureError e) {
        PolicyFailure failure = e.getFailure();
        Assert.assertEquals(PolicyFailureCodes.BYTE_QUOTA_EXCEEDED, failure.getFailureCode());
        Assert.assertEquals("Transfer quota exceeded.", failure.getMessage());
        Assert.assertEquals(429, failure.getResponseCode());
    }
}
Also used : PolicyFailure(io.apiman.gateway.engine.beans.PolicyFailure) PolicyTestRequest(io.apiman.test.policies.PolicyTestRequest) PolicyTestResponse(io.apiman.test.policies.PolicyTestResponse) PolicyFailureError(io.apiman.test.policies.PolicyFailureError) IPolicyTestBackEndApi(io.apiman.test.policies.IPolicyTestBackEndApi) BackEndApi(io.apiman.test.policies.BackEndApi) Configuration(io.apiman.test.policies.Configuration) ApimanPolicyTest(io.apiman.test.policies.ApimanPolicyTest) Test(org.junit.Test)

Example 30 with Configuration

use of io.apiman.test.policies.Configuration in project apiman by apiman.

the class CachingPolicyTest method testCachingUsingQueryString.

/**
 * Verify that the query string is used as part of the cache key - expect
 * that requests with different query strings are treated as different, from
 * a caching perspective.
 */
@Test
@Configuration("{" + "  \"ttl\" : 2," + "  \"includeQueryInKey\" : true" + "}")
public void testCachingUsingQueryString() throws Throwable {
    final String originalUri = "/some/cached-resource?foo=bar";
    PolicyTestResponse response = send(PolicyTestRequest.build(PolicyTestRequestType.GET, originalUri));
    EchoResponse echo = response.entity(EchoResponse.class);
    assertNotNull(echo);
    Long counterValue = echo.getCounter();
    assertNotNull(counterValue);
    assertEquals("application/json", response.header("Content-Type"));
    assertEquals(200, response.code());
    // Request with a different query string - expect an uncached response
    response = send(PolicyTestRequest.build(PolicyTestRequestType.GET, "/some/cached-resource?foo=different"));
    echo = response.entity(EchoResponse.class);
    assertNotNull(echo);
    Long counterValue2 = echo.getCounter();
    assertNotNull(counterValue2);
    assertNotEquals(counterValue, counterValue2);
    assertEquals("application/json", response.header("Content-Type"));
    assertEquals(200, response.code());
    // Request the original URI (including query string) - expect a cached response
    response = send(PolicyTestRequest.build(PolicyTestRequestType.GET, originalUri));
    echo = response.entity(EchoResponse.class);
    assertNotNull(echo);
    Long counterValue3 = echo.getCounter();
    assertNotNull(counterValue3);
    assertEquals(counterValue, counterValue3);
    assertEquals("application/json", response.header("Content-Type"));
    assertEquals(200, response.code());
}
Also used : EchoResponse(io.apiman.test.common.mock.EchoResponse) PolicyTestResponse(io.apiman.test.policies.PolicyTestResponse) Configuration(io.apiman.test.policies.Configuration) ApimanPolicyTest(io.apiman.test.policies.ApimanPolicyTest) Test(org.junit.Test)

Aggregations

ApimanPolicyTest (io.apiman.test.policies.ApimanPolicyTest)51 Configuration (io.apiman.test.policies.Configuration)51 Test (org.junit.Test)51 PolicyTestRequest (io.apiman.test.policies.PolicyTestRequest)40 PolicyTestResponse (io.apiman.test.policies.PolicyTestResponse)39 PolicyFailureError (io.apiman.test.policies.PolicyFailureError)24 EchoResponse (io.apiman.test.common.mock.EchoResponse)23 PolicyFailure (io.apiman.gateway.engine.beans.PolicyFailure)19 BackEndApi (io.apiman.test.policies.BackEndApi)15 ConsumeJsonBackEndApi (io.apiman.plugins.transformation_policy.backend.ConsumeJsonBackEndApi)8 ConsumeXmlBackEndApi (io.apiman.plugins.transformation_policy.backend.ConsumeXmlBackEndApi)8 ProduceComplexJsonBackEndApi (io.apiman.plugins.transformation_policy.backend.ProduceComplexJsonBackEndApi)8 ProduceJsonBackEndApi (io.apiman.plugins.transformation_policy.backend.ProduceJsonBackEndApi)8 ProduceXmlBackEndApi (io.apiman.plugins.transformation_policy.backend.ProduceXmlBackEndApi)8 HashSet (java.util.HashSet)8 IPolicyTestBackEndApi (io.apiman.test.policies.IPolicyTestBackEndApi)7 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)4 ByteArrayOutputStream (java.io.ByteArrayOutputStream)4 PrintStream (java.io.PrintStream)4 TimeoutConfigBean (io.apiman.plugins.timeoutpolicy.beans.TimeoutConfigBean)1