You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2023/02/07 07:32:55 UTC

[camel-quarkus] 09/18: Aws2-sqs: Test with real account fails. #4389

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 <on...@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
+                }
             });
 
         }