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

[camel] 02/03: [CAMEL-18837] Refactoring tests

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 1e1d85d24e4a388283419199bc97a3051f5b2cff
Author: Adriano Machado <ad...@redhat.com>
AuthorDate: Fri Jun 30 09:28:25 2023 -0400

    [CAMEL-18837] Refactoring tests
---
 components/camel-opensearch/pom.xml                |  11 +-
 .../opensearch/integration/OpensearchBulkIT.java   |  57 +--
 .../integration/OpensearchClusterIndexIT.java      |   7 +-
 .../OpensearchGetSearchDeleteExistsUpdateIT.java   | 394 +++++++++++----------
 .../opensearch/integration/OpensearchIndexIT.java  |  28 +-
 .../opensearch/integration/OpensearchPingIT.java   |   2 +-
 .../integration/OpensearchScrollSearchIT.java      |  12 +-
 .../integration/OpensearchSizeLimitIT.java         |  27 +-
 .../integration/OpensearchTestSupport.java         |  94 +++--
 9 files changed, 348 insertions(+), 284 deletions(-)

diff --git a/components/camel-opensearch/pom.xml b/components/camel-opensearch/pom.xml
index 06901b275a2..968c4fca974 100644
--- a/components/camel-opensearch/pom.xml
+++ b/components/camel-opensearch/pom.xml
@@ -75,14 +75,15 @@
             <artifactId>camel-core-catalog</artifactId>
             <scope>test</scope>
         </dependency>
+
+        <!-- test infra -->
         <dependency>
-            <groupId>org.awaitility</groupId>
-            <artifactId>awaitility</artifactId>
-            <version>${awaitility-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-infra-core</artifactId>
+            <version>${project.version}</version>
             <scope>test</scope>
+            <type>test-jar</type>
         </dependency>
-
-        <!-- test infra -->
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-test-infra-opensearch</artifactId>
diff --git a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchBulkIT.java b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchBulkIT.java
index cb3bf9e98a8..77540d6d86a 100644
--- a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchBulkIT.java
+++ b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchBulkIT.java
@@ -60,7 +60,7 @@ class OpensearchBulkIT extends OpensearchTestSupport {
         documents.add(document1);
         documents.add(document2);
 
-        List<?> indexIds = template.requestBody("direct:bulk", documents, List.class);
+        List<?> indexIds = getCamelContextExtension().getProducerTemplate().requestBody("direct:bulk", documents, List.class);
         assertNotNull(indexIds, "indexIds should be set");
         assertCollectionSize("Indexed documents should match the size of documents", indexIds, documents.size());
     }
@@ -70,7 +70,7 @@ class OpensearchBulkIT extends OpensearchTestSupport {
         List<String> documents = List.of(
                 "{\"testBulkWithString1\": \"some-value\"}", "{\"testBulkWithString2\": \"some-value\"}");
 
-        List<?> indexIds = template.requestBody("direct:bulk", documents, List.class);
+        List<?> indexIds = getCamelContextExtension().getProducerTemplate().requestBody("direct:bulk", documents, List.class);
         assertNotNull(indexIds, "indexIds should be set");
         assertCollectionSize("Indexed documents should match the size of documents", indexIds, documents.size());
     }
@@ -81,7 +81,7 @@ class OpensearchBulkIT extends OpensearchTestSupport {
                 "{\"testBulkWithBytes1\": \"some-value\"}".getBytes(StandardCharsets.UTF_8),
                 "{\"testBulkWithBytes2\": \"some-value\"}".getBytes(StandardCharsets.UTF_8));
 
-        List<?> indexIds = template.requestBody("direct:bulk", documents, List.class);
+        List<?> indexIds = getCamelContextExtension().getProducerTemplate().requestBody("direct:bulk", documents, List.class);
         assertNotNull(indexIds, "indexIds should be set");
         assertCollectionSize("Indexed documents should match the size of documents", indexIds, documents.size());
     }
@@ -92,7 +92,7 @@ class OpensearchBulkIT extends OpensearchTestSupport {
                 new StringReader("{\"testBulkWithReader1\": \"some-value\"}"),
                 new StringReader("{\"testBulkWithReader2\": \"some-value\"}"));
 
-        List<?> indexIds = template.requestBody("direct:bulk", documents, List.class);
+        List<?> indexIds = getCamelContextExtension().getProducerTemplate().requestBody("direct:bulk", documents, List.class);
         assertNotNull(indexIds, "indexIds should be set");
         assertCollectionSize("Indexed documents should match the size of documents", indexIds, documents.size());
     }
@@ -105,14 +105,14 @@ class OpensearchBulkIT extends OpensearchTestSupport {
                 new ByteArrayInputStream(
                         "{\"testBulkWithInputStream2\": \"some-value\"}".getBytes(StandardCharsets.UTF_8)));
 
-        List<?> indexIds = template.requestBody("direct:bulk", documents, List.class);
+        List<?> indexIds = getCamelContextExtension().getProducerTemplate().requestBody("direct:bulk", documents, List.class);
         assertNotNull(indexIds, "indexIds should be set");
         assertCollectionSize("Indexed documents should match the size of documents", indexIds, documents.size());
     }
 
     @Test
     void testBulkListRequestBody() {
-        String prefix = createPrefix();
+        String prefix = getPrefix();
 
         // given
         List<Map<String, String>> request = new ArrayList<>();
@@ -121,7 +121,8 @@ class OpensearchBulkIT extends OpensearchTestSupport {
         valueMap.put("content", prefix + "hello");
         request.add(valueMap);
         // when
-        List<?> indexedDocumentIds = template.requestBody("direct:bulk", request, List.class);
+        List<?> indexedDocumentIds
+                = getCamelContextExtension().getProducerTemplate().requestBody("direct:bulk", request, List.class);
 
         // then
         assertThat(indexedDocumentIds, notNullValue());
@@ -130,7 +131,7 @@ class OpensearchBulkIT extends OpensearchTestSupport {
 
     @Test
     void testBulkRequestBody() {
-        String prefix = createPrefix();
+        String prefix = getPrefix();
 
         // given
         BulkRequest.Builder builder = new BulkRequest.Builder();
@@ -142,7 +143,8 @@ class OpensearchBulkIT extends OpensearchTestSupport {
 
         // when
         @SuppressWarnings("unchecked")
-        List<BulkResponseItem> response = template.requestBody("direct:bulk", builder, List.class);
+        List<BulkResponseItem> response
+                = getCamelContextExtension().getProducerTemplate().requestBody("direct:bulk", builder, List.class);
 
         // then
         assertThat(response, notNullValue());
@@ -153,7 +155,7 @@ class OpensearchBulkIT extends OpensearchTestSupport {
 
     @Test
     void bulkRequestBody() {
-        String prefix = createPrefix();
+        String prefix = getPrefix();
 
         // given
         BulkRequest.Builder builder = new BulkRequest.Builder();
@@ -164,7 +166,8 @@ class OpensearchBulkIT extends OpensearchTestSupport {
                         .build());
         // when
         @SuppressWarnings("unchecked")
-        List<BulkResponseItem> response = template.requestBody("direct:bulk", builder, List.class);
+        List<BulkResponseItem> response
+                = getCamelContextExtension().getProducerTemplate().requestBody("direct:bulk", builder, List.class);
 
         // then
         assertThat(response, notNullValue());
@@ -175,18 +178,20 @@ class OpensearchBulkIT extends OpensearchTestSupport {
     void bulkDeleteOperation() {
         // given
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = getCamelContextExtension().getProducerTemplate().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         DeleteOperation.Builder builder = new DeleteOperation.Builder().index("twitter").id(indexId);
         // when
         @SuppressWarnings("unchecked")
-        List<BulkResponseItem> response = template.requestBody("direct:bulk", List.of(builder), List.class);
+        List<BulkResponseItem> response
+                = getCamelContextExtension().getProducerTemplate().requestBody("direct:bulk", List.of(builder), List.class);
 
         // then
         assertThat(response, notNullValue());
         assertEquals(indexId, response.get(0).id());
-        GetResponse<?> resp = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> resp
+                = getCamelContextExtension().getProducerTemplate().requestBody("direct:get", indexId, GetResponse.class);
         assertNotNull(resp, "response should not be null");
         assertNull(resp.source(), "response source should be null");
     }
@@ -194,17 +199,19 @@ class OpensearchBulkIT extends OpensearchTestSupport {
     @Test
     void bulkCreateOperation() {
         // given
-        String prefix = createPrefix();
+        String prefix = getPrefix();
 
         CreateOperation.Builder<?> builder
                 = new CreateOperation.Builder<>().index("twitter").document(Map.of(prefix + "content", prefix + "hello"));
         // when
         @SuppressWarnings("unchecked")
-        List<BulkResponseItem> response = template.requestBody("direct:bulk", List.of(builder), List.class);
+        List<BulkResponseItem> response
+                = getCamelContextExtension().getProducerTemplate().requestBody("direct:bulk", List.of(builder), List.class);
 
         // then
         assertThat(response, notNullValue());
-        GetResponse<?> resp = template.requestBody("direct:get", response.get(0).id(), GetResponse.class);
+        GetResponse<?> resp = getCamelContextExtension().getProducerTemplate().requestBody("direct:get", response.get(0).id(),
+                GetResponse.class);
         assertNotNull(resp, "response should not be null");
         assertNotNull(resp.source(), "response source should not be null");
     }
@@ -212,11 +219,13 @@ class OpensearchBulkIT extends OpensearchTestSupport {
     @Test
     void bulkUpdateOperation() {
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = getCamelContextExtension().getProducerTemplate().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
 
+        String prefix = getPrefix();
+
         Map<String, String> document
-                = Map.of(String.format("%skey2", createPrefix()), String.format("%svalue2", createPrefix()));
+                = Map.of(String.format("%skey2", prefix), String.format("%svalue2", prefix));
 
         UpdateOperation<?> builder = new UpdateOperation.Builder<>()
                 .index("twitter")
@@ -225,16 +234,18 @@ class OpensearchBulkIT extends OpensearchTestSupport {
                 .build();
 
         @SuppressWarnings("unchecked")
-        List<BulkResponseItem> response = template.requestBody("direct:bulk", List.of(builder), List.class);
+        List<BulkResponseItem> response
+                = getCamelContextExtension().getProducerTemplate().requestBody("direct:bulk", List.of(builder), List.class);
 
         //now, verify GET succeeded
         assertThat(response, notNullValue());
-        GetResponse<?> resp = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> resp
+                = getCamelContextExtension().getProducerTemplate().requestBody("direct:get", indexId, GetResponse.class);
         assertNotNull(resp, "response should not be null");
         assertNotNull(resp.source(), "response source should not be null");
         assertInstanceOf(ObjectNode.class, resp.source(), "response source should be a ObjectNode");
-        assertTrue(((ObjectNode) resp.source()).has(createPrefix() + "key2"));
-        assertEquals(createPrefix() + "value2", ((ObjectNode) resp.source()).get(createPrefix() + "key2").asText());
+        assertTrue(((ObjectNode) resp.source()).has(prefix + "key2"));
+        assertEquals(prefix + "value2", ((ObjectNode) resp.source()).get(prefix + "key2").asText());
     }
 
     @Override
diff --git a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchClusterIndexIT.java b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchClusterIndexIT.java
index e2ad8dbbfe6..2f663a68d6a 100644
--- a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchClusterIndexIT.java
+++ b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchClusterIndexIT.java
@@ -33,6 +33,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class OpensearchClusterIndexIT extends OpensearchTestSupport {
+
     @Test
     void indexWithIpAndPort() throws Exception {
         Map<String, String> map = createIndexedData();
@@ -41,10 +42,10 @@ class OpensearchClusterIndexIT extends OpensearchTestSupport {
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter");
         headers.put(OpensearchConstants.PARAM_INDEX_ID, "1");
 
-        String indexId = template.requestBodyAndHeaders("direct:indexWithIpAndPort", map, headers, String.class);
+        String indexId = template().requestBodyAndHeaders("direct:indexWithIpAndPort", map, headers, String.class);
         assertNotNull(indexId, "indexId should be set");
 
-        indexId = template.requestBodyAndHeaders("direct:indexWithIpAndPort", map, headers, String.class);
+        indexId = template().requestBodyAndHeaders("direct:indexWithIpAndPort", map, headers, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         assertTrue(client.get(new GetRequest.Builder().index("twitter").id("1").build(), ObjectNode.class).found(),
@@ -59,7 +60,7 @@ class OpensearchClusterIndexIT extends OpensearchTestSupport {
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "facebook");
         headers.put(OpensearchConstants.PARAM_INDEX_ID, "4");
 
-        String indexId = template.requestBodyAndHeaders("direct:indexWithSniffer", map, headers, String.class);
+        String indexId = template().requestBodyAndHeaders("direct:indexWithSniffer", map, headers, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         assertTrue(client.get(new GetRequest.Builder().index("facebook").id("4").build(), ObjectNode.class).found(),
diff --git a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchGetSearchDeleteExistsUpdateIT.java b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchGetSearchDeleteExistsUpdateIT.java
index a5e63a99349..ca604e31953 100644
--- a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchGetSearchDeleteExistsUpdateIT.java
+++ b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchGetSearchDeleteExistsUpdateIT.java
@@ -23,7 +23,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.concurrent.TimeUnit;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.JsonNode;
@@ -31,7 +30,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.opensearch.OpensearchConstants;
 import org.apache.camel.component.opensearch.OpensearchOperation;
-import org.awaitility.Awaitility;
 import org.junit.jupiter.api.Test;
 import org.opensearch.client.opensearch._types.FieldValue;
 import org.opensearch.client.opensearch._types.Result;
@@ -67,11 +65,11 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     void testIndexWithMap() {
         //first, Index a value
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
         assertInstanceOf(ObjectNode.class, response.source(), "response source should be a ObjectNode");
@@ -83,11 +81,11 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     @Test
     void testIndexWithString() {
         //first, Index a value
-        String indexId = template.requestBody("direct:index", "{\"testIndexWithString\": \"some-value\"}", String.class);
+        String indexId = template().requestBody("direct:index", "{\"testIndexWithString\": \"some-value\"}", String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
         assertInstanceOf(ObjectNode.class, response.source(), "response source should be a ObjectNode");
@@ -98,12 +96,12 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     @Test
     void testIndexWithReader() {
         //first, Index a value
-        String indexId = template.requestBody("direct:index", new StringReader("{\"testIndexWithReader\": \"some-value\"}"),
+        String indexId = template().requestBody("direct:index", new StringReader("{\"testIndexWithReader\": \"some-value\"}"),
                 String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
         assertInstanceOf(ObjectNode.class, response.source(), "response source should be a ObjectNode");
@@ -114,12 +112,12 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     @Test
     void testIndexWithBytes() {
         //first, Index a value
-        String indexId = template.requestBody("direct:index",
+        String indexId = template().requestBody("direct:index",
                 "{\"testIndexWithBytes\": \"some-value\"}".getBytes(StandardCharsets.UTF_8), String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
         assertInstanceOf(ObjectNode.class, response.source(), "response source should be a ObjectNode");
@@ -130,13 +128,13 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     @Test
     void testIndexWithInputStream() {
         //first, Index a value
-        String indexId = template.requestBody("direct:index",
+        String indexId = template().requestBody("direct:index",
                 new ByteArrayInputStream("{\"testIndexWithInputStream\": \"some-value\"}".getBytes(StandardCharsets.UTF_8)),
                 String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
         assertInstanceOf(ObjectNode.class, response.source(), "response source should be a ObjectNode");
@@ -154,11 +152,11 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         product.setName("Guinness book of records 2021");
 
         //first, Index a value
-        String indexId = template.requestBody("direct:index-product", product, String.class);
+        String indexId = template().requestBody("direct:index-product", product, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
-        GetResponse<?> response = template.requestBodyAndHeader("direct:get", indexId,
+        GetResponse<?> response = template().requestBodyAndHeader("direct:get", indexId,
                 OpensearchConstants.PARAM_DOCUMENT_CLASS, Product.class, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
@@ -172,11 +170,11 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     void testGetWithString() {
         //first, Index a value
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
         assertInstanceOf(ObjectNode.class, response.source());
@@ -192,11 +190,11 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         product.setDescription("The book of the year!");
         product.setName("Guinness book of records 1890");
 
-        String indexId = template.requestBody("direct:index", product, String.class);
+        String indexId = template().requestBody("direct:index", product, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
-        GetResponse<?> response = template.requestBodyAndHeader(
+        GetResponse<?> response = template().requestBodyAndHeader(
                 "direct:get", indexId, OpensearchConstants.PARAM_DOCUMENT_CLASS, Product.class, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
@@ -209,12 +207,12 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     void testMGetWithString() {
         //first, Index a value
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
         @SuppressWarnings("unchecked")
-        List<MultiGetResponseItem<?>> response = template.requestBody("direct:multiget", List.of(indexId), List.class);
+        List<MultiGetResponseItem<?>> response = template().requestBody("direct:multiget", List.of(indexId), List.class);
         assertNotNull(response, "response should not be null");
         assertEquals(1, response.size(), "response should contain one result");
         assertTrue(response.get(0).isResult());
@@ -232,12 +230,12 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         product.setDescription("The book of the year!");
         product.setName("Guinness book of records 1890");
 
-        String indexId = template.requestBody("direct:index", product, String.class);
+        String indexId = template().requestBody("direct:index", product, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
         @SuppressWarnings("unchecked")
-        List<MultiGetResponseItem<?>> response = template.requestBodyAndHeader(
+        List<MultiGetResponseItem<?>> response = template().requestBodyAndHeader(
                 "direct:multiget", List.of(indexId), OpensearchConstants.PARAM_DOCUMENT_CLASS, Product.class, List.class);
         assertNotNull(response, "response should not be null");
         assertEquals(1, response.size(), "response should contain one result");
@@ -252,33 +250,33 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     void testDeleteWithString() {
         //first, Index a value
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
 
         //now, perform Delete
-        Result deleteResponse = template.requestBody("direct:delete", indexId, Result.class);
+        Result deleteResponse = template().requestBody("direct:delete", indexId, Result.class);
         assertNotNull(deleteResponse, "response should not be null");
 
         //now, verify GET fails to find the indexed value
-        response = template.requestBody("direct:get", indexId, GetResponse.class);
+        response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNull(response.source(), "response source should be null");
     }
 
     @Test
-    void testSearchWithMapQuery() {
+    void testSearchWithMapQuery() throws Exception {
         //first, Index a value
         Map<String, String> map1 = Map.of("testSearchWithMapQuery1", "foo");
         Map<String, String> map2 = Map.of("testSearchWithMapQuery2", "bar");
         Map<String, Object> headers = Map.of(
                 OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Bulk,
                 OpensearchConstants.PARAM_INDEX_NAME, "twitter");
-        template.requestBodyAndHeaders("direct:start", List.of(Map.of("doc", map1), Map.of("doc", map2)), headers,
+        template().requestBodyAndHeaders("direct:start", List.of(Map.of("doc", map1), Map.of("doc", map2)), headers,
                 String.class);
 
         // No match
@@ -288,38 +286,40 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         match.put("match", actualQuery);
         Map<String, Object> query = new HashMap<>();
         query.put("query", match);
-        HitsMetadata<?> response = template.requestBody("direct:search", query, HitsMetadata.class);
+        HitsMetadata<?> response = template().requestBody("direct:search", query, HitsMetadata.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.total());
         assertEquals(0, response.total().value(), "response hits should be == 0");
 
         // Match
         actualQuery.put("doc.testSearchWithMapQuery1", "foo");
-        // the result may see stale data so use Awaitility
-        Awaitility.await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
-            HitsMetadata<?> resp = template.requestBody("direct:search", query, HitsMetadata.class);
-            assertNotNull(resp, "response should not be null");
-            assertNotNull(resp.total());
-            assertEquals(1, resp.total().value(), "response hits should be == 1");
-            assertEquals(1, resp.hits().size(), "response hits should be == 1");
-            Object result = resp.hits().get(0).source();
-            assertInstanceOf(ObjectNode.class, result);
-            assertTrue(((ObjectNode) result).has("doc"));
-            JsonNode node = ((ObjectNode) result).get("doc");
-            assertTrue(node.has("testSearchWithMapQuery1"));
-            assertEquals("foo", node.get("testSearchWithMapQuery1").asText());
-        });
+
+        // Delay the execution, because the search is getting stale results
+        Thread.sleep(2000);
+
+        HitsMetadata<?> resp = template().requestBody("direct:search", query, HitsMetadata.class);
+
+        assertNotNull(resp, "response should not be null");
+        assertNotNull(resp.total());
+        assertEquals(1, resp.total().value(), "response hits should be == 1");
+        assertEquals(1, resp.hits().size(), "response hits should be == 1");
+        Object result = resp.hits().get(0).source();
+        assertInstanceOf(ObjectNode.class, result);
+        assertTrue(((ObjectNode) result).has("doc"));
+        JsonNode node = ((ObjectNode) result).get("doc");
+        assertTrue(node.has("testSearchWithMapQuery1"));
+        assertEquals("foo", node.get("testSearchWithMapQuery1").asText());
     }
 
     @Test
-    void testSearchWithStringQuery() {
+    void testSearchWithStringQuery() throws Exception {
         //first, Index a value
         Map<String, String> map1 = Map.of("testSearchWithStringQuery1", "foo");
         Map<String, String> map2 = Map.of("testSearchWithStringQuery2", "bar");
         Map<String, Object> headers = new HashMap<>();
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Bulk);
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter");
-        template.requestBodyAndHeaders("direct:start", List.of(Map.of("doc", map1), Map.of("doc", map2)), headers,
+        template().requestBodyAndHeaders("direct:start", List.of(Map.of("doc", map1), Map.of("doc", map2)), headers,
                 String.class);
 
         // No match
@@ -329,42 +329,43 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
                 }
                 """;
 
-        HitsMetadata<?> response = template.requestBody("direct:search", query, HitsMetadata.class);
+        HitsMetadata<?> response = template().requestBody("direct:search", query, HitsMetadata.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.total());
         assertEquals(0, response.total().value(), "response hits should be == 0");
 
+        // Delay the execution, because the search is getting stale results
+        Thread.sleep(2000);
+
         // Match
         String q = """
                 {
                     "query" : { "match" : { "doc.testSearchWithStringQuery1" : "foo" }}
                 }
                 """;
-        // the result may see stale data so use Awaitility
-        Awaitility.await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
-            HitsMetadata<?> resp = template.requestBody("direct:search", q, HitsMetadata.class);
-            assertNotNull(resp, "response should not be null");
-            assertNotNull(resp.total());
-            assertEquals(1, resp.total().value(), "response hits should be == 1");
-            assertEquals(1, resp.hits().size(), "response hits should be == 1");
-            Object result = resp.hits().get(0).source();
-            assertInstanceOf(ObjectNode.class, result);
-            assertTrue(((ObjectNode) result).has("doc"));
-            JsonNode node = ((ObjectNode) result).get("doc");
-            assertTrue(node.has("testSearchWithStringQuery1"));
-            assertEquals("foo", node.get("testSearchWithStringQuery1").asText());
-        });
+
+        HitsMetadata<?> resp = template().requestBody("direct:search", q, HitsMetadata.class);
+        assertNotNull(resp, "response should not be null");
+        assertNotNull(resp.total());
+        assertEquals(1, resp.total().value(), "response hits should be == 1");
+        assertEquals(1, resp.hits().size(), "response hits should be == 1");
+        Object result = resp.hits().get(0).source();
+        assertInstanceOf(ObjectNode.class, result);
+        assertTrue(((ObjectNode) result).has("doc"));
+        JsonNode node = ((ObjectNode) result).get("doc");
+        assertTrue(node.has("testSearchWithStringQuery1"));
+        assertEquals("foo", node.get("testSearchWithStringQuery1").asText());
     }
 
     @Test
-    void testSearchWithBuilder() {
+    void testSearchWithBuilder() throws Exception {
         //first, Index a value
         Map<String, String> map1 = Map.of("testSearchWithBuilder1", "foo");
         Map<String, String> map2 = Map.of("testSearchWithBuilder2", "bar");
         Map<String, Object> headers = new HashMap<>();
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Bulk);
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter");
-        template.requestBodyAndHeaders("direct:start", List.of(Map.of("doc", map1), Map.of("doc", map2)), headers,
+        template().requestBodyAndHeaders("direct:start", List.of(Map.of("doc", map1), Map.of("doc", map2)), headers,
                 String.class);
 
         // No match
@@ -372,36 +373,37 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
                 .query(new Query.Builder()
                         .match(new MatchQuery.Builder().field("doc.testSearchWithBuilder1").query(FieldValue.of("bar")).build())
                         .build());
-        HitsMetadata<?> response = template.requestBody("direct:search", builder, HitsMetadata.class);
+        HitsMetadata<?> response = template().requestBody("direct:search", builder, HitsMetadata.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.total());
         assertEquals(0, response.total().value(), "response hits should be == 0");
 
+        // Delay the execution, because the search is getting stale results
+        Thread.sleep(2000);
+
+        SearchRequest.Builder b = new SearchRequest.Builder()
+                .query(new Query.Builder()
+                        .match(new MatchQuery.Builder().field("doc.testSearchWithBuilder1").query(FieldValue.of("foo"))
+                                .build())
+                        .build());
+
         // Match
-        // the result may see stale data so use Awaitility
-        Awaitility.await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
-            SearchRequest.Builder b = new SearchRequest.Builder()
-                    .query(new Query.Builder()
-                            .match(new MatchQuery.Builder().field("doc.testSearchWithBuilder1").query(FieldValue.of("foo"))
-                                    .build())
-                            .build());
-
-            HitsMetadata<?> resp = template.requestBody("direct:search", b, HitsMetadata.class);
-            assertNotNull(resp, "response should not be null");
-            assertNotNull(resp.total());
-            assertEquals(1, resp.total().value(), "response hits should be == 1");
-            assertEquals(1, resp.hits().size(), "response hits should be == 1");
-            Object result = resp.hits().get(0).source();
-            assertInstanceOf(ObjectNode.class, result);
-            assertTrue(((ObjectNode) result).has("doc"));
-            JsonNode node = ((ObjectNode) result).get("doc");
-            assertTrue(node.has("testSearchWithBuilder1"));
-            assertEquals("foo", node.get("testSearchWithBuilder1").asText());
-        });
+        HitsMetadata<?> resp = template().requestBody("direct:search", b, HitsMetadata.class);
+
+        assertNotNull(resp, "response should not be null");
+        assertNotNull(resp.total());
+        assertEquals(1, resp.total().value(), "response hits should be == 1");
+        assertEquals(1, resp.hits().size(), "response hits should be == 1");
+        Object result = resp.hits().get(0).source();
+        assertInstanceOf(ObjectNode.class, result);
+        assertTrue(((ObjectNode) result).has("doc"));
+        JsonNode node = ((ObjectNode) result).get("doc");
+        assertTrue(node.has("testSearchWithBuilder1"));
+        assertEquals("foo", node.get("testSearchWithBuilder1").asText());
     }
 
     @Test
-    void testSearchWithDocumentType() {
+    void testSearchWithDocumentType() throws Exception {
         //first, Index a value
         Product product1 = new Product();
         product1.setId("book-world-records-2020");
@@ -419,70 +421,72 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         Map<String, Object> headers = new HashMap<>();
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Bulk);
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter");
-        template.requestBodyAndHeaders("direct:start", List.of(product1, product2), headers, String.class);
+        template().requestBodyAndHeaders("direct:start", List.of(product1, product2), headers, String.class);
 
         // No match
         SearchRequest.Builder builder = new SearchRequest.Builder()
                 .query(new Query.Builder().match(new MatchQuery.Builder().field("doc.id").query(FieldValue.of("bar")).build())
                         .build());
-        HitsMetadata<?> response = template.requestBodyAndHeader(
+        HitsMetadata<?> response = template().requestBodyAndHeader(
                 "direct:search", builder, OpensearchConstants.PARAM_DOCUMENT_CLASS, Product.class, HitsMetadata.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.total());
         assertEquals(0, response.total().value(), "response hits should be == 0");
 
+        SearchRequest.Builder b = new SearchRequest.Builder()
+                .query(new Query.Builder().match(new MatchQuery.Builder().field("id").query(FieldValue.of("2020")).build())
+                        .build());
+
+        // Delay the execution, because the search is getting stale results
+        Thread.sleep(2000);
+
         // Match
-        // the result may see stale data so use Awaitility
-        Awaitility.await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
-            SearchRequest.Builder b = new SearchRequest.Builder()
-                    .query(new Query.Builder().match(new MatchQuery.Builder().field("id").query(FieldValue.of("2020")).build())
-                            .build());
-
-            HitsMetadata<?> resp = template.requestBodyAndHeader(
-                    "direct:search", b, OpensearchConstants.PARAM_DOCUMENT_CLASS, Product.class, HitsMetadata.class);
-            assertNotNull(resp, "response should not be null");
-            assertNotNull(resp.total());
-            assertEquals(1, resp.total().value(), "response hits should be == 1");
-            assertEquals(1, resp.hits().size(), "response hits should be == 1");
-            Object result = resp.hits().get(0).source();
-            assertInstanceOf(Product.class, result);
-            Product p = (Product) result;
-            assertEquals(product1, p);
-        });
+        HitsMetadata<?> resp = template().requestBodyAndHeader("direct:search", b, OpensearchConstants.PARAM_DOCUMENT_CLASS,
+                Product.class, HitsMetadata.class);
+
+        assertNotNull(resp, "response should not be null");
+        assertNotNull(resp.total());
+        assertEquals(1, resp.total().value(), "response hits should be == 1");
+        assertEquals(1, resp.hits().size(), "response hits should be == 1");
+        Object result = resp.hits().get(0).source();
+        assertInstanceOf(Product.class, result);
+        Product p = (Product) result;
+        assertEquals(product1, p);
     }
 
     @Test
-    void testMultiSearch() {
+    void testMultiSearch() throws Exception {
         //first, Index a value
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
 
-        // the result may see stale data so use Awaitility
-        Awaitility.await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
-            //now, verify GET succeeded
-            MsearchRequest.Builder builder = new MsearchRequest.Builder().index("twitter").searches(
-                    new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
-                            .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build(),
-                    new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
-                            .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build());
-            @SuppressWarnings("unchecked")
-            List<MultiSearchResponseItem<?>> response = template.requestBody("direct:multiSearch", builder, List.class);
-            assertNotNull(response, "response should not be null");
-            assertEquals(2, response.size(), "response should be == 2");
-            assertInstanceOf(MultiSearchResponseItem.class, response.get(0));
-            assertTrue(response.get(0).isResult());
-            assertNotNull(response.get(0).result());
-            assertTrue(response.get(0).result().hits().total().value() > 0);
-            assertInstanceOf(MultiSearchResponseItem.class, response.get(1));
-            assertTrue(response.get(1).isResult());
-            assertNotNull(response.get(1).result());
-            assertTrue(response.get(1).result().hits().total().value() > 0);
-        });
+        MsearchRequest.Builder builder = new MsearchRequest.Builder().index("twitter").searches(
+                new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
+                        .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build(),
+                new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
+                        .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build());
+
+        // Delay the execution, because the search is getting stale results
+        Thread.sleep(2000);
+
+        @SuppressWarnings("unchecked")
+        List<MultiSearchResponseItem<?>> response = template().requestBody("direct:multiSearch", builder, List.class);
+
+        assertNotNull(response, "response should not be null");
+        assertEquals(2, response.size(), "response should be == 2");
+        assertInstanceOf(MultiSearchResponseItem.class, response.get(0));
+        assertTrue(response.get(0).isResult());
+        assertNotNull(response.get(0).result());
+        assertTrue(response.get(0).result().hits().total().value() > 0);
+        assertInstanceOf(MultiSearchResponseItem.class, response.get(1));
+        assertTrue(response.get(1).isResult());
+        assertNotNull(response.get(1).result());
+        assertTrue(response.get(1).result().hits().total().value() > 0);
     }
 
     @Test
-    void testMultiSearchWithDocumentType() {
+    void testMultiSearchWithDocumentType() throws Exception {
         //first, Index a value
         Product product = new Product();
         product.setId("book-world-records-2022");
@@ -490,58 +494,60 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         product.setPrice(100);
         product.setDescription("The book of the year!");
         product.setName("Guinness book of records 2022");
-        String indexId = template.requestBodyAndHeader("direct:index", product, OpensearchConstants.PARAM_INDEX_NAME,
+        String indexId = template().requestBodyAndHeader("direct:index", product, OpensearchConstants.PARAM_INDEX_NAME,
                 "multi-search", String.class);
         assertNotNull(indexId, "indexId should be set");
 
-        // the result may see stale data so use Awaitility
-        Awaitility.await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
-            //now, verify GET succeeded
-            MsearchRequest.Builder builder = new MsearchRequest.Builder().index("multi-search").searches(
-                    new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
-                            .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build(),
-                    new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
-                            .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build());
-            @SuppressWarnings("unchecked")
-            List<MultiSearchResponseItem<?>> response = template.requestBodyAndHeaders(
-                    "direct:multiSearch", builder,
-                    Map.of(
-                            OpensearchConstants.PARAM_INDEX_NAME, "multi-search",
-                            OpensearchConstants.PARAM_DOCUMENT_CLASS, Product.class),
-                    List.class);
-            assertNotNull(response, "response should not be null");
-            assertEquals(2, response.size(), "response should be == 2");
-            assertInstanceOf(MultiSearchResponseItem.class, response.get(0));
-            assertTrue(response.get(0).isResult());
-            assertNotNull(response.get(0).result());
-            assertTrue(response.get(0).result().hits().total().value() > 0);
-            assertInstanceOf(MultiSearchResponseItem.class, response.get(1));
-            assertTrue(response.get(1).isResult());
-            assertNotNull(response.get(1).result());
-            assertTrue(response.get(1).result().hits().total().value() > 0);
-        });
+        MsearchRequest.Builder builder = new MsearchRequest.Builder().index("multi-search").searches(
+                new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
+                        .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build(),
+                new RequestItem.Builder().header(new MultisearchHeader.Builder().build())
+                        .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build());
+
+        // Delay the execution, because the search is getting stale results
+        Thread.sleep(2000);
+
+        @SuppressWarnings("unchecked")
+        List<MultiSearchResponseItem<?>> response = template().requestBodyAndHeaders(
+                "direct:multiSearch", builder,
+                Map.of(
+                        OpensearchConstants.PARAM_INDEX_NAME, "multi-search",
+                        OpensearchConstants.PARAM_DOCUMENT_CLASS, Product.class),
+                List.class);
+
+        assertNotNull(response, "response should not be null");
+        assertEquals(2, response.size(), "response should be == 2");
+        assertInstanceOf(MultiSearchResponseItem.class, response.get(0));
+        assertTrue(response.get(0).isResult());
+        assertNotNull(response.get(0).result());
+        assertTrue(response.get(0).result().hits().total().value() > 0);
+        assertInstanceOf(MultiSearchResponseItem.class, response.get(1));
+        assertTrue(response.get(1).isResult());
+        assertNotNull(response.get(1).result());
+        assertTrue(response.get(1).result().hits().total().value() > 0);
     }
 
     @Test
     void testUpdateWithMap() {
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         Map<String, String> newMap = new HashMap<>();
-        newMap.put(createPrefix() + "key2", createPrefix() + "value2");
+        String prefix = getPrefix();
+        newMap.put(prefix + "key2", prefix + "value2");
         Map<String, Object> headers = new HashMap<>();
         headers.put(OpensearchConstants.PARAM_INDEX_ID, indexId);
-        indexId = template.requestBodyAndHeaders("direct:update", Map.of("doc", newMap), headers, String.class);
+        indexId = template().requestBodyAndHeaders("direct:update", Map.of("doc", newMap), headers, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         //now, verify GET succeeded
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
         assertInstanceOf(ObjectNode.class, response.source(), "response source should be a ObjectNode");
-        assertTrue(((ObjectNode) response.source()).has(createPrefix() + "key2"));
-        assertEquals(createPrefix() + "value2", ((ObjectNode) response.source()).get(createPrefix() + "key2").asText());
+        assertTrue(((ObjectNode) response.source()).has(prefix + "key2"));
+        assertEquals(prefix + "value2", ((ObjectNode) response.source()).get(prefix + "key2").asText());
     }
 
     @Test
@@ -552,11 +558,11 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Index);
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter");
 
-        String indexId = template.requestBodyAndHeaders("direct:start", map, headers, String.class);
+        String indexId = template().requestBodyAndHeaders("direct:start", map, headers, String.class);
 
         //now, verify GET
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.GetById);
-        GetResponse<?> response = template.requestBodyAndHeaders("direct:start", indexId, headers, GetResponse.class);
+        GetResponse<?> response = template().requestBodyAndHeaders("direct:start", indexId, headers, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
     }
@@ -569,12 +575,12 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Index);
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter");
 
-        template.requestBodyAndHeaders("direct:start", map, headers, String.class);
+        template().requestBodyAndHeaders("direct:start", map, headers, String.class);
 
         //now, verify GET
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Exists);
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter");
-        Boolean exists = template.requestBodyAndHeaders("direct:exists", "", headers, Boolean.class);
+        Boolean exists = template().requestBodyAndHeaders("direct:exists", "", headers, Boolean.class);
         assertNotNull(exists, "response should not be null");
         assertTrue(exists, "Index should exists");
     }
@@ -584,7 +590,7 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         Map<String, Object> headers = new HashMap<>();
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Exists);
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter-tweet");
-        Boolean exists = template.requestBodyAndHeaders("direct:exists", "", headers, Boolean.class);
+        Boolean exists = template().requestBodyAndHeaders("direct:exists", "", headers, Boolean.class);
         assertNotNull(exists, "response should not be null");
         assertFalse(exists, "Index should not exists");
     }
@@ -597,23 +603,23 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Index);
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter");
 
-        String indexId = template.requestBodyAndHeaders("direct:start", map, headers, String.class);
+        String indexId = template().requestBodyAndHeaders("direct:start", map, headers, String.class);
 
         //now, verify GET
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.GetById);
-        GetResponse<?> response = template.requestBodyAndHeaders("direct:start", indexId, headers, GetResponse.class);
+        GetResponse<?> response = template().requestBodyAndHeaders("direct:start", indexId, headers, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNotNull(response.source(), "response source should not be null");
 
         //now, perform Delete
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Delete);
         Result deleteResponse
-                = template.requestBodyAndHeaders("direct:start", indexId, headers, Result.class);
+                = template().requestBodyAndHeaders("direct:start", indexId, headers, Result.class);
         assertEquals(Result.Deleted, deleteResponse, "response should not be null");
 
         //now, verify GET fails to find the indexed value
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.GetById);
-        response = template.requestBodyAndHeaders("direct:start", indexId, headers, GetResponse.class);
+        response = template().requestBodyAndHeaders("direct:start", indexId, headers, GetResponse.class);
         assertNotNull(response, "response should not be null");
         assertNull(response.source(), "response source should be null");
     }
@@ -626,32 +632,32 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter");
         headers.put(OpensearchConstants.PARAM_INDEX_ID, "123");
 
-        String indexId = template.requestBodyAndHeaders("direct:start", map, headers, String.class);
+        String indexId = template().requestBodyAndHeaders("direct:start", map, headers, String.class);
         assertNotNull(indexId, "indexId should be set");
         assertEquals("123", indexId, "indexId should be equals to the provided id");
 
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Update);
 
-        indexId = template.requestBodyAndHeaders("direct:start", Map.of("doc", map), headers, String.class);
+        indexId = template().requestBodyAndHeaders("direct:start", Map.of("doc", map), headers, String.class);
         assertNotNull(indexId, "indexId should be set");
         assertEquals("123", indexId, "indexId should be equals to the provided id");
     }
 
     @Test
     void testGetRequestBody() {
-        String prefix = createPrefix();
+        String prefix = getPrefix();
 
         // given
         GetRequest.Builder builder = new GetRequest.Builder().index(prefix + "foo");
 
         // when
-        String documentId = template.requestBody("direct:index",
+        String documentId = template().requestBody("direct:index",
                 new IndexRequest.Builder<>()
                         .index(prefix + "foo")
                         .id(prefix + "testId")
                         .document(Map.of(prefix + "content", prefix + "hello")),
                 String.class);
-        GetResponse<?> response = template.requestBody("direct:get",
+        GetResponse<?> response = template().requestBody("direct:get",
                 builder.id(documentId), GetResponse.class);
 
         // then
@@ -665,29 +671,29 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
 
     @Test
     void testDeleteWithBuilder() {
-        String prefix = createPrefix();
+        String prefix = getPrefix();
 
         // given
-        String documentId = template.requestBody("direct:index",
+        String documentId = template().requestBody("direct:index",
                 new IndexRequest.Builder<>()
                         .index(prefix + "foo")
                         .id(prefix + "testId")
                         .document(Map.of(prefix + "content", prefix + "hello")),
                 String.class);
 
-        GetResponse<?> getResponse = template.requestBodyAndHeader(
+        GetResponse<?> getResponse = template().requestBodyAndHeader(
                 "direct:get", documentId, OpensearchConstants.PARAM_INDEX_NAME, prefix + "foo", GetResponse.class);
         assertNotNull(getResponse, "response should not be null");
         assertNotNull(getResponse.source(), "response source should not be null");
 
         // when
         Result response
-                = template.requestBody("direct:delete", new DeleteRequest.Builder().index(prefix + "foo").id(documentId),
+                = template().requestBody("direct:delete", new DeleteRequest.Builder().index(prefix + "foo").id(documentId),
                         Result.class);
 
         // then
         assertThat(response, equalTo(Result.Deleted));
-        getResponse = template.requestBodyAndHeader(
+        getResponse = template().requestBodyAndHeader(
                 "direct:get", documentId, OpensearchConstants.PARAM_INDEX_NAME, prefix + "foo", GetResponse.class);
         assertNotNull(getResponse, "response should not be null");
         assertNull(getResponse.source(), "response source should be null");
@@ -696,17 +702,17 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     @Test
     void testUpdateWithString() {
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
         String key = map.keySet().iterator().next();
         Object body = String.format("{ \"doc\": {\"%s\" : \"testUpdateWithString-updated\"}}", key);
 
         Map<String, Object> headers = new HashMap<>();
         headers.put(OpensearchConstants.PARAM_INDEX_ID, indexId);
-        indexId = template.requestBodyAndHeaders("direct:update", body, headers, String.class);
+        indexId = template().requestBodyAndHeaders("direct:update", body, headers, String.class);
         assertNotNull(indexId, "indexId should be set");
 
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertThat(response.source(), notNullValue());
         ObjectNode node = (ObjectNode) response.source();
         assertThat(node.has(key), equalTo(true));
@@ -716,17 +722,17 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     @Test
     void testUpdateWithReader() {
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
         String key = map.keySet().iterator().next();
         Object body = new StringReader(String.format("{ \"doc\": {\"%s\" : \"testUpdateWithReader-updated\"}}", key));
 
         Map<String, Object> headers = new HashMap<>();
         headers.put(OpensearchConstants.PARAM_INDEX_ID, indexId);
-        indexId = template.requestBodyAndHeaders("direct:update", body, headers, String.class);
+        indexId = template().requestBodyAndHeaders("direct:update", body, headers, String.class);
         assertNotNull(indexId, "indexId should be set");
 
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertThat(response.source(), notNullValue());
         ObjectNode node = (ObjectNode) response.source();
         assertThat(node.has(key), equalTo(true));
@@ -736,7 +742,7 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     @Test
     void testUpdateWithBytes() {
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
         String key = map.keySet().iterator().next();
         Object body
@@ -744,10 +750,10 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
 
         Map<String, Object> headers = new HashMap<>();
         headers.put(OpensearchConstants.PARAM_INDEX_ID, indexId);
-        indexId = template.requestBodyAndHeaders("direct:update", body, headers, String.class);
+        indexId = template().requestBodyAndHeaders("direct:update", body, headers, String.class);
         assertNotNull(indexId, "indexId should be set");
 
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertThat(response.source(), notNullValue());
         ObjectNode node = (ObjectNode) response.source();
         assertThat(node.has(key), equalTo(true));
@@ -757,7 +763,7 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
     @Test
     void testUpdateWithInputStream() {
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
         String key = map.keySet().iterator().next();
         Object body = new ByteArrayInputStream(
@@ -766,10 +772,10 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
 
         Map<String, Object> headers = new HashMap<>();
         headers.put(OpensearchConstants.PARAM_INDEX_ID, indexId);
-        indexId = template.requestBodyAndHeaders("direct:update", body, headers, String.class);
+        indexId = template().requestBodyAndHeaders("direct:update", body, headers, String.class);
         assertNotNull(indexId, "indexId should be set");
 
-        GetResponse<?> response = template.requestBody("direct:get", indexId, GetResponse.class);
+        GetResponse<?> response = template().requestBody("direct:get", indexId, GetResponse.class);
         assertThat(response.source(), notNullValue());
         ObjectNode node = (ObjectNode) response.source();
         assertThat(node.has(key), equalTo(true));
@@ -785,7 +791,7 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         product.setDescription("The book of the year!");
         product.setName("Guinness book of records 2010");
 
-        String indexId = template.requestBody("direct:index", product, String.class);
+        String indexId = template().requestBody("direct:index", product, String.class);
         assertNotNull(indexId, "indexId should be set");
 
         Product productUpdate = new Product();
@@ -796,10 +802,10 @@ class OpensearchGetSearchDeleteExistsUpdateIT extends OpensearchTestSupport {
         Map<String, Object> headers = new HashMap<>();
         headers.put(OpensearchConstants.PARAM_INDEX_ID, indexId);
         headers.put(OpensearchConstants.PARAM_DOCUMENT_CLASS, Product.class);
-        indexId = template.requestBodyAndHeaders("direct:update", productUpdate, headers, String.class);
+        indexId = template().requestBodyAndHeaders("direct:update", productUpdate, headers, String.class);
         assertNotNull(indexId, "indexId should be set");
 
-        GetResponse<?> response = template.requestBodyAndHeader(
+        GetResponse<?> response = template().requestBodyAndHeader(
                 "direct:get", indexId, OpensearchConstants.PARAM_DOCUMENT_CLASS, Product.class, GetResponse.class);
         assertThat(response.source(), notNullValue());
         Product actual = (Product) response.source();
diff --git a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchIndexIT.java b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchIndexIT.java
index d5174a84b59..469377f977c 100644
--- a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchIndexIT.java
+++ b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchIndexIT.java
@@ -35,40 +35,40 @@ class OpensearchIndexIT extends OpensearchTestSupport {
     @Test
     void testIndex() {
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
     }
 
     @Test
     void testIndexDeleteWithBuilder() {
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
 
-        boolean exists = template.requestBody("direct:exists", null, Boolean.class);
+        boolean exists = template().requestBody("direct:exists", null, Boolean.class);
         assertTrue(exists, "index should be present");
 
         DeleteIndexRequest.Builder builder = new DeleteIndexRequest.Builder().index("twitter");
-        Boolean status = template.requestBody("direct:deleteIndex", builder, Boolean.class);
+        Boolean status = template().requestBody("direct:deleteIndex", builder, Boolean.class);
         assertEquals(true, status, "status should be 200");
 
-        exists = template.requestBody("direct:exists", null, Boolean.class);
+        exists = template().requestBody("direct:exists", null, Boolean.class);
         assertFalse(exists, "index should be absent");
     }
 
     @Test
     void testIndexDeleteWithString() {
         Map<String, String> map = createIndexedData();
-        String indexId = template.requestBody("direct:index", map, String.class);
+        String indexId = template().requestBody("direct:index", map, String.class);
         assertNotNull(indexId, "indexId should be set");
 
-        boolean exists = template.requestBody("direct:exists", null, Boolean.class);
+        boolean exists = template().requestBody("direct:exists", null, Boolean.class);
         assertTrue(exists, "index should be present");
 
-        Boolean status = template.requestBody("direct:deleteIndex", "twitter", Boolean.class);
+        Boolean status = template().requestBody("direct:deleteIndex", "twitter", Boolean.class);
         assertEquals(true, status, "status should be 200");
 
-        exists = template.requestBody("direct:exists", null, Boolean.class);
+        exists = template().requestBody("direct:exists", null, Boolean.class);
         assertFalse(exists, "index should be absent");
     }
 
@@ -79,7 +79,7 @@ class OpensearchIndexIT extends OpensearchTestSupport {
         headers.put(OpensearchConstants.PARAM_OPERATION, OpensearchOperation.Index);
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter");
 
-        String indexId = template.requestBodyAndHeaders("direct:start", map, headers, String.class);
+        String indexId = template().requestBodyAndHeaders("direct:start", map, headers, String.class);
         assertNotNull(indexId, "indexId should be set");
     }
 
@@ -91,21 +91,21 @@ class OpensearchIndexIT extends OpensearchTestSupport {
         headers.put(OpensearchConstants.PARAM_INDEX_NAME, "twitter");
         headers.put(OpensearchConstants.PARAM_INDEX_ID, "123");
 
-        String indexId = template.requestBodyAndHeaders("direct:start", map, headers, String.class);
+        String indexId = template().requestBodyAndHeaders("direct:start", map, headers, String.class);
         assertNotNull(indexId, "indexId should be set");
         assertEquals("123", indexId, "indexId should be equals to the provided id");
     }
 
     @Test
     void testExists() {
-        boolean exists = template.requestBodyAndHeader(
+        boolean exists = template().requestBodyAndHeader(
                 "direct:exists", null, OpensearchConstants.PARAM_INDEX_NAME, "test_exists", Boolean.class);
         assertFalse(exists, "index should be absent");
 
         Map<String, String> map = createIndexedData();
-        template.sendBodyAndHeader("direct:index", map, OpensearchConstants.PARAM_INDEX_NAME, "test_exists");
+        template().sendBodyAndHeader("direct:index", map, OpensearchConstants.PARAM_INDEX_NAME, "test_exists");
 
-        exists = template.requestBodyAndHeader(
+        exists = template().requestBodyAndHeader(
                 "direct:exists", null, OpensearchConstants.PARAM_INDEX_NAME, "test_exists", Boolean.class);
         assertTrue(exists, "index should be present");
     }
diff --git a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchPingIT.java b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchPingIT.java
index 23e0fb0c96a..a06bdb5076b 100644
--- a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchPingIT.java
+++ b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchPingIT.java
@@ -25,7 +25,7 @@ class OpensearchPingIT extends OpensearchTestSupport {
 
     @Test
     void testPing() {
-        boolean pingResult = template.requestBody("direct:ping", "test", Boolean.class);
+        boolean pingResult = template().requestBody("direct:ping", "test", Boolean.class);
         assertTrue(pingResult, "indexId should be set");
     }
 
diff --git a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchScrollSearchIT.java b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchScrollSearchIT.java
index 585290db046..88cd7b4675c 100644
--- a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchScrollSearchIT.java
+++ b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchScrollSearchIT.java
@@ -54,7 +54,7 @@ class OpensearchScrollSearchIT extends OpensearchTestSupport {
         // add some documents
         for (int i = 0; i < 10; i++) {
             Map<String, String> map = createIndexedData();
-            String indexId = template.requestBody("direct:scroll-index", map, String.class);
+            String indexId = template().requestBody("direct:scroll-index", map, String.class);
             assertNotNull(indexId, "indexId should be set");
         }
 
@@ -65,13 +65,13 @@ class OpensearchScrollSearchIT extends OpensearchTestSupport {
 
         SearchRequest.Builder req = getScrollSearchRequestBuilder(TWITTER_OPENSEARCH_INDEX_NAME);
 
-        Exchange exchange = ExchangeBuilder.anExchange(context)
+        Exchange exchange = ExchangeBuilder.anExchange(camelContext())
                 .withHeader(PARAM_SCROLL_KEEP_ALIVE_MS, 50000)
                 .withHeader(PARAM_SCROLL, true)
                 .withBody(req)
                 .build();
 
-        exchange = template.send("direct:scroll-search", exchange);
+        exchange = template().send("direct:scroll-search", exchange);
 
         try (OpensearchScrollRequestIterator<?> scrollRequestIterator
                 = exchange.getIn().getBody(OpensearchScrollRequestIterator.class)) {
@@ -96,7 +96,7 @@ class OpensearchScrollSearchIT extends OpensearchTestSupport {
         // add some documents
         for (int i = 0; i < 10; i++) {
             Map<String, String> map = createIndexedData();
-            String indexId = template.requestBody("direct:scroll-n-split-index", map, String.class);
+            String indexId = template().requestBody("direct:scroll-n-split-index", map, String.class);
             assertNotNull(indexId, "indexId should be set");
         }
 
@@ -111,8 +111,8 @@ class OpensearchScrollSearchIT extends OpensearchTestSupport {
 
         SearchRequest.Builder req = getScrollSearchRequestBuilder(SPLIT_TWITTER_OPENSEARCH_INDEX_NAME);
 
-        Exchange exchange = ExchangeBuilder.anExchange(context).withBody(req).build();
-        exchange = template.send("direct:scroll-n-split-search", exchange);
+        Exchange exchange = ExchangeBuilder.anExchange(camelContext()).withBody(req).build();
+        exchange = template().send("direct:scroll-n-split-search", exchange);
 
         // wait for aggregation
         mock.assertIsSatisfied();
diff --git a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchSizeLimitIT.java b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchSizeLimitIT.java
index cac6a8063a2..4ca3b3d9bb8 100644
--- a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchSizeLimitIT.java
+++ b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchSizeLimitIT.java
@@ -18,22 +18,22 @@ package org.apache.camel.component.opensearch.integration;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.builder.RouteBuilder;
-import org.awaitility.Awaitility;
 import org.junit.jupiter.api.Test;
 import org.opensearch.client.opensearch.core.search.HitsMetadata;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 class OpensearchSizeLimitIT extends OpensearchTestSupport {
 
     @Test
-    void testSize() {
+    void testSize() throws Exception {
         //put 4
-        template.requestBody("direct:index", getContent("content"), String.class);
-        template.requestBody("direct:index", getContent("content1"), String.class);
-        template.requestBody("direct:index", getContent("content2"), String.class);
-        template.requestBody("direct:index", getContent("content3"), String.class);
+        template().requestBody("direct:index", getContent("content"), String.class);
+        template().requestBody("direct:index", getContent("content1"), String.class);
+        template().requestBody("direct:index", getContent("content2"), String.class);
+        template().requestBody("direct:index", getContent("content3"), String.class);
 
         String query = """
                 {
@@ -43,12 +43,13 @@ class OpensearchSizeLimitIT extends OpensearchTestSupport {
                 }
                 """;
 
-        // the result may see stale data so use Awaitility
-        Awaitility.await().atMost(10, TimeUnit.SECONDS).until(() -> {
-            HitsMetadata<?> searchWithSizeTwo = template.requestBody("direct:searchWithSizeTwo", query, HitsMetadata.class);
-            HitsMetadata<?> searchFrom3 = template.requestBody("direct:searchFrom3", query, HitsMetadata.class);
-            return searchWithSizeTwo.hits().size() == 2 && searchFrom3.hits().size() == 1;
-        });
+        // Delay the execution, because the search is getting stale results
+        Thread.sleep(2000);
+
+        HitsMetadata<?> searchWithSizeTwo = template().requestBody("direct:searchWithSizeTwo", query, HitsMetadata.class);
+        HitsMetadata<?> searchFrom3 = template().requestBody("direct:searchFrom3", query, HitsMetadata.class);
+        assertEquals(2, searchWithSizeTwo.hits().size());
+        assertEquals(1, searchFrom3.hits().size());
     }
 
     @Override
diff --git a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchTestSupport.java b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchTestSupport.java
index 431217a51e6..051068e6a6b 100644
--- a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchTestSupport.java
+++ b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchTestSupport.java
@@ -16,19 +16,32 @@
  */
 package org.apache.camel.component.opensearch.integration;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.opensearch.OpensearchComponent;
+import org.apache.camel.test.infra.core.CamelContextExtension;
+import org.apache.camel.test.infra.core.DefaultCamelContextExtension;
+import org.apache.camel.test.infra.core.annotations.ContextFixture;
+import org.apache.camel.test.infra.core.annotations.RouteFixture;
+import org.apache.camel.test.infra.core.api.CamelTestSupportHelper;
+import org.apache.camel.test.infra.core.api.ConfigurableContext;
+import org.apache.camel.test.infra.core.api.ConfigurableRoute;
 import org.apache.camel.test.infra.opensearch.services.OpenSearchService;
 import org.apache.camel.test.infra.opensearch.services.OpenSearchServiceFactory;
-import org.apache.camel.test.junit5.CamelTestSupport;
 import org.apache.http.HttpHost;
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.CredentialsProvider;
 import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.TestInfo;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.opensearch.client.RestClient;
@@ -40,19 +53,26 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
-public class OpensearchTestSupport extends CamelTestSupport {
+public abstract class OpensearchTestSupport implements CamelTestSupportHelper, ConfigurableRoute, ConfigurableContext {
 
+    @Order(1)
     @RegisterExtension
-    protected static OpenSearchService service = OpenSearchServiceFactory.createSingletonService();
+    public static final OpenSearchService service = OpenSearchServiceFactory.createSingletonService();
+
+    @Order(2)
+    @RegisterExtension
+    public static final CamelContextExtension contextExtension = new DefaultCamelContextExtension();
 
     protected static String clusterName = "docker-cluster";
-    protected static RestClient restClient;
-    protected static OpenSearchClient client;
     private static final Logger LOG = LoggerFactory.getLogger(OpensearchTestSupport.class);
 
-    @Override
-    protected void setupResources() throws Exception {
-        super.setupResources();
+    protected RestClient restClient;
+    protected OpenSearchClient client;
+
+    private String prefix;
+
+    @BeforeEach
+    public void beforeEach(TestInfo testInfo) {
         HttpHost host
                 = new HttpHost(service.getOpenSearchHost(), service.getPort(), "http");
         final RestClientBuilder builder = RestClient.builder(host);
@@ -66,27 +86,33 @@ public class OpensearchTestSupport extends CamelTestSupport {
                 });
         restClient = builder.build();
         client = new OpenSearchClient(new RestClientTransport(restClient, new JacksonJsonpMapper()));
+
+        // make use of the test method name to avoid collision
+        prefix = testInfo.getDisplayName().toLowerCase() + "-";
     }
 
-    @Override
-    protected void cleanupResources() throws Exception {
-        super.cleanupResources();
+    @AfterEach
+    public void afterEach() throws IOException {
         if (restClient != null) {
             restClient.close();
         }
     }
 
     @Override
-    protected CamelContext createCamelContext() throws Exception {
-        final OpensearchComponent openSearchComponent = new OpensearchComponent();
-        openSearchComponent.setHostAddresses(String.format("%s:%d", service.getOpenSearchHost(), service.getPort()));
-        openSearchComponent.setUser(service.getUsername());
-        openSearchComponent.setPassword(service.getPassword());
+    public CamelContextExtension getCamelContextExtension() {
+        return contextExtension;
+    }
 
-        CamelContext context = super.createCamelContext();
-        context.addComponent("opensearch", openSearchComponent);
+    protected String getPrefix() {
+        return prefix;
+    }
+
+    protected CamelContext camelContext() {
+        return getCamelContextExtension().getContext();
+    }
 
-        return context;
+    protected ProducerTemplate template() {
+        return getCamelContextExtension().getProducerTemplate();
     }
 
     /**
@@ -94,7 +120,7 @@ public class OpensearchTestSupport extends CamelTestSupport {
      * slower), we need to make sure there's no side effect of the same used data through creating unique indexes.
      */
     Map<String, String> createIndexedData(String... additionalPrefixes) {
-        String prefix = createPrefix();
+        String prefix = getPrefix();
 
         // take over any potential prefixes we may have been asked for
         if (additionalPrefixes.length > 0) {
@@ -114,12 +140,30 @@ public class OpensearchTestSupport extends CamelTestSupport {
         return map;
     }
 
-    String createPrefix() {
-        // make use of the test method name to avoid collision
-        return getCurrentTestName().toLowerCase() + "-";
-    }
-
     RestClient getClient() {
         return restClient;
     }
+
+    @ContextFixture
+    @Override
+    public void configureContext(CamelContext context) {
+        final OpensearchComponent openSearchComponent = new OpensearchComponent();
+        openSearchComponent.setHostAddresses(String.format("%s:%d", service.getOpenSearchHost(), service.getPort()));
+        openSearchComponent.setUser(service.getUsername());
+        openSearchComponent.setPassword(service.getPassword());
+
+        context.addComponent("opensearch", openSearchComponent);
+    }
+
+    @RouteFixture
+    @Override
+    public void createRouteBuilder(CamelContext context) throws Exception {
+        final RouteBuilder routeBuilder = createRouteBuilder();
+
+        if (routeBuilder != null) {
+            context.addRoutes(routeBuilder);
+        }
+    }
+
+    protected abstract RouteBuilder createRouteBuilder();
 }