This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch 2.13.x in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 019ff1483337a22324bbb033d92cc015ccd9d0d2 Author: JiriOndrusek <ondrusek.j...@gmail.com> AuthorDate: Fri Jan 27 13:32:25 2023 +0100 Aws2-sqs: Test with real account fails. #4389 --- .../component/aws2/sqs/it/Aws2SqsResource.java | 18 ++++---- .../quarkus/component/aws2/sqs/it/Aws2SqsTest.java | 53 ++++++++++------------ .../aws2/sqs/it/Aws2SqsTestEnvCustomizer.java | 19 +++++++- 3 files changed, 49 insertions(+), 41 deletions(-) diff --git a/integration-test-groups/aws2/aws2-sqs/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsResource.java b/integration-test-groups/aws2/aws2-sqs/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsResource.java index 65ea892b2a..9a5af39999 100644 --- a/integration-test-groups/aws2/aws2-sqs/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsResource.java +++ b/integration-test-groups/aws2/aws2-sqs/src/main/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsResource.java @@ -151,20 +151,18 @@ public class Aws2SqsResource { return Response.ok().build(); } - @Path("queue/autocreate/delayed/{queueName}/{delay}") - @POST - @Produces(MediaType.APPLICATION_JSON) - public List<String> autoCreateDelayedQueue(@PathParam("queueName") String queueName, @PathParam("delay") String delay) - throws Exception { - // queue creation without any operation resulted in 405 status code - String uri = String.format("aws2-sqs://%s?autoCreateQueue=true&delayQueue=true&delaySeconds=%s&operation=listQueues", + @Path("queue/autocreate/delayed/{queueName}/{delay}/{msg}") + @GET + @Produces(MediaType.TEXT_PLAIN) + public String autoCreateDelayedQueue(@PathParam("queueName") String queueName, @PathParam("delay") String delay, + @PathParam("msg") String msg) { + String uri = String.format("aws2-sqs://%s?autoCreateQueue=true&delayQueue=true&delaySeconds=%s", queueName, delay); return producerTemplate .requestBody( uri, - null, - ListQueuesResponse.class) - .queueUrls(); + msg, + String.class); } private String componentUri() { diff --git a/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java b/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java index 72a8c40103..b485452a09 100644 --- a/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java +++ b/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTest.java @@ -23,7 +23,6 @@ import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Locale; import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.stream.Stream; @@ -32,9 +31,10 @@ import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; import org.apache.camel.quarkus.test.support.aws2.Aws2LocalStack; import org.apache.camel.quarkus.test.support.aws2.Aws2TestResource; -import org.apache.commons.lang3.RandomStringUtils; import org.awaitility.Awaitility; import org.eclipse.microprofile.config.ConfigProvider; import org.jboss.logging.Logger; @@ -43,6 +43,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.hamcrest.Matchers.anyOf; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; @QuarkusTest @@ -66,6 +67,10 @@ class Aws2SqsTest { return ConfigProvider.getConfig().getValue("aws-sqs.deadletter-name", String.class); } + private String getDelayedQueueName() { + return ConfigProvider.getConfig().getValue("aws-sqs.delayed-name", String.class); + } + private Integer getPollIntervalSendToDelayQueueInSecs() { return ConfigProvider.getConfig().getOptionalValue("aws-sqs.delayed-queue.poll-interval-secs", Integer.class) .orElse(10); @@ -137,8 +142,8 @@ class Aws2SqsTest { // assertion is here twice because in case delete wouldn't work in our queue would be two messages // it's possible that the first retrieval would retrieve the correct message and therefore the test // would incorrectly pass. By receiving message twice we check if the message was really deleted. - Assertions.assertEquals(receiveMessageFromQueue(qName, false), msg); - Assertions.assertEquals(receiveMessageFromQueue(qName, false), msg); + awaitMessageWithExpectedContentFromQueue(msg, qName); + awaitMessageWithExpectedContentFromQueue(msg, qName); } private String sendSingleMessageToQueue(String queueName) { @@ -172,48 +177,38 @@ class Aws2SqsTest { @Test void sqsAutoCreateDelayedQueue() { - final String qName = "delayQueue-" + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT); + final String qName = getDelayedQueueName(); final int delay = 20; try { - createDelayQueueAndVerifyExistence(qName, delay); + final String msg = "sqs" + UUID.randomUUID().toString().replace("-", ""); Instant start = Instant.now(); - final String[] msgSent = new String[1]; - // verifying existence is not enough, as the queue can be in not Ready state, so we just keep trying to send messages - Awaitility.await().pollInterval(getPollIntervalSendToDelayQueueInSecs(), TimeUnit.SECONDS) - .atMost(getTimeoutSendToDelayQueueInMins(), TimeUnit.MINUTES) - .until(() -> { - try { - msgSent[0] = sendSingleMessageToQueue(qName); - } catch (Throwable e) { - LOG.debug("Expected exception", e); - return false; - } - return true; - }); - awaitMessageWithExpectedContentFromQueue(msgSent[0], qName); + RestAssured.get("/aws2-sqs/queue/autocreate/delayed/" + qName + "/" + delay + "/" + msg) + .then() + .statusCode(200) + .body(equalTo(msg)); + awaitMessageWithExpectedContentFromQueue(msg, qName); Assertions.assertTrue(Duration.between(start, Instant.now()).getSeconds() >= delay); } catch (AssertionError e) { e.printStackTrace(); Assertions.fail(); - } finally { - deleteQueue(qName); } } - private void createDelayQueueAndVerifyExistence(String queueName, int delay) { - RestAssured.post("/aws2-sqs/queue/autocreate/delayed/" + queueName + "/" + delay) + private String createDelayQueueAndVerifyExistence(String queueName, int delay) { + return RestAssured.get("/aws2-sqs/queue/autocreate/delayed/" + queueName + "/" + delay) .then() .statusCode(200) .extract() - .body() - .as(String[].class); - Awaitility.await().pollInterval(1, TimeUnit.SECONDS).atMost(120, TimeUnit.SECONDS).until( - () -> Stream.of(listQueues()).anyMatch(url -> url.contains(queueName))); + .body().asString(); } private void awaitMessageWithExpectedContentFromQueue(String expectedContent, String queueName) { Awaitility.await().pollInterval(1, TimeUnit.SECONDS).atMost(120, TimeUnit.SECONDS).until( - () -> receiveMessageFromQueue(queueName, false).equals(expectedContent)); + () -> { + ExtractableResponse<Response> resp = RestAssured.get("/aws2-sqs/receive/" + queueName + "/false") + .then().extract(); + return resp.statusCode() == 200 && expectedContent.equals(resp.body().asString()); + }); } private void deleteQueue(String queueName) { diff --git a/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java b/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java index ca00184f19..679b0acb94 100644 --- a/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java +++ b/integration-test-groups/aws2/aws2-sqs/src/test/java/org/apache/camel/quarkus/component/aws2/sqs/it/Aws2SqsTestEnvCustomizer.java @@ -25,6 +25,8 @@ import org.testcontainers.containers.localstack.LocalStackContainer.Service; import software.amazon.awssdk.services.sqs.SqsClient; import software.amazon.awssdk.services.sqs.model.CreateQueueRequest; import software.amazon.awssdk.services.sqs.model.DeleteQueueRequest; +import software.amazon.awssdk.services.sqs.model.GetQueueUrlRequest; +import software.amazon.awssdk.services.sqs.model.QueueDoesNotExistException; public class Aws2SqsTestEnvCustomizer implements Aws2TestEnvCustomizer { @@ -38,10 +40,15 @@ public class Aws2SqsTestEnvCustomizer implements Aws2TestEnvCustomizer { /* SQS */ final String queueName = "camel-quarkus-" + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT); envContext.property("aws-sqs.queue-name", queueName); - final String failingQueueName = "camel-quarkus-" + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT); + final String failingQueueName = "camel-quarkus-failing-" + + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT); envContext.property("aws-sqs.failing-name", failingQueueName); - final String deadletterQueueName = "camel-quarkus-" + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT); + final String deadletterQueueName = "camel-quarkus-dead-letter-" + + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT); envContext.property("aws-sqs.deadletter-name", deadletterQueueName); + final String delayedQueueName = "camel-quarkus-delayed-" + + RandomStringUtils.randomAlphanumeric(49).toLowerCase(Locale.ROOT); + envContext.property("aws-sqs.delayed-name", delayedQueueName); final SqsClient sqsClient = envContext.client(Service.SQS, SqsClient::builder); { @@ -67,6 +74,14 @@ public class Aws2SqsTestEnvCustomizer implements Aws2TestEnvCustomizer { sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(queueUrl).build()); sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(failingUrl).build()); sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(deadletterUrl).build()); + + try { + String url = sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(delayedQueueName).build()) + .queueUrl(); + sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl(url).build()); + } catch (QueueDoesNotExistException e) { + //no need to do anything, the queue does not exist + } }); }