port;
+ /**
+ * The distribution of search services to use.
+ * Defaults to the Elasticsearch distribution.
+ *
+ * {@link #imageName Image name} must be set when
+ * the non-default ({@link Distribution#OPENSEARCH Opensearch}) distribution is used.
+ */
+ @ConfigItem(defaultValue = "elastic")
+ public Distribution distribution;
+
/**
* The Elasticsearch container image to use.
* Defaults to the elasticsearch image provided by Elastic.
+ * {@link #distribution Distribution} must be set to {@code opensearch} when an opensearch image name is set.
*/
@ConfigItem(defaultValue = "docker.elastic.co/elasticsearch/elasticsearch:7.17.0")
public String imageName;
@@ -84,6 +95,7 @@ public boolean equals(Object o) {
return Objects.equals(shared, that.shared)
&& Objects.equals(enabled, that.enabled)
&& Objects.equals(port, that.port)
+ && Objects.equals(distribution, that.distribution)
&& Objects.equals(imageName, that.imageName)
&& Objects.equals(javaOpts, that.javaOpts)
&& Objects.equals(serviceName, that.serviceName)
@@ -92,6 +104,11 @@ public boolean equals(Object o) {
@Override
public int hashCode() {
- return Objects.hash(enabled, port, imageName, javaOpts, shared, serviceName, containerEnv);
+ return Objects.hash(enabled, port, distribution, imageName, javaOpts, shared, serviceName, containerEnv);
+ }
+
+ public enum Distribution {
+ ELASTIC,
+ OPENSEARCH
}
}
diff --git a/extensions/hibernate-search-orm-elasticsearch/deployment/src/main/java/io/quarkus/hibernate/search/orm/elasticsearch/deployment/HibernateSearchElasticsearchProcessor.java b/extensions/hibernate-search-orm-elasticsearch/deployment/src/main/java/io/quarkus/hibernate/search/orm/elasticsearch/deployment/HibernateSearchElasticsearchProcessor.java
index 33efa35f665f1..d89ae9184541a 100644
--- a/extensions/hibernate-search-orm-elasticsearch/deployment/src/main/java/io/quarkus/hibernate/search/orm/elasticsearch/deployment/HibernateSearchElasticsearchProcessor.java
+++ b/extensions/hibernate-search-orm-elasticsearch/deployment/src/main/java/io/quarkus/hibernate/search/orm/elasticsearch/deployment/HibernateSearchElasticsearchProcessor.java
@@ -1,5 +1,6 @@
package io.quarkus.hibernate.search.orm.elasticsearch.deployment;
+import static io.quarkus.elasticsearch.restclient.common.deployment.ElasticsearchDevServicesBuildTimeConfig.Distribution;
import static io.quarkus.hibernate.search.orm.elasticsearch.deployment.ClassNames.INDEXED;
import static io.quarkus.hibernate.search.orm.elasticsearch.deployment.ClassNames.PROJECTION_CONSTRUCTOR;
import static io.quarkus.hibernate.search.orm.elasticsearch.deployment.ClassNames.ROOT_MAPPING;
@@ -402,7 +403,7 @@ DevservicesElasticsearchBuildItem devServices(HibernateSearchElasticsearchBuildT
"hosts");
return new DevservicesElasticsearchBuildItem(hostsPropertyKey,
version.versionString(),
- DevservicesElasticsearchBuildItem.Distribution.valueOf(version.distribution().toString().toUpperCase()));
+ Distribution.valueOf(version.distribution().toString().toUpperCase()));
}
@BuildStep(onlyIfNot = IsNormal.class)
diff --git a/integration-tests/hibernate-search-orm-elasticsearch/README.md b/integration-tests/hibernate-search-orm-elasticsearch/README.md
index 8569383f9017e..733493c55a4cc 100644
--- a/integration-tests/hibernate-search-orm-elasticsearch/README.md
+++ b/integration-tests/hibernate-search-orm-elasticsearch/README.md
@@ -7,12 +7,12 @@ By default, the tests of this module are disabled.
To run the tests in a standard JVM with Elasticsearch started in the JVM, you can run the following command:
```
-mvn clean install -Dtest-containers
+mvn clean install -Dtest-containers -Dstart-containers
```
Additionally, you can generate a native image and run the tests for this native image by adding `-Dnative`:
```
-mvn clean install -Dtest-containers -Dnative
+mvn clean install -Dtest-containers -Dstart-containers -Dnative
```
diff --git a/integration-tests/hibernate-search-orm-opensearch/README.md b/integration-tests/hibernate-search-orm-opensearch/README.md
index ad0835db80754..a4d9c62ddbaf3 100644
--- a/integration-tests/hibernate-search-orm-opensearch/README.md
+++ b/integration-tests/hibernate-search-orm-opensearch/README.md
@@ -7,12 +7,12 @@ By default, the tests of this module are disabled.
To run the tests in a standard JVM with OpenSearch started in the JVM, you can run the following command:
```
-mvn clean install -Dtest-containers
+mvn clean install -Dtest-containers -Dstart-containers
```
Additionally, you can generate a native image and run the tests for this native image by adding `-Dnative`:
```
-mvn clean install -Dtest-containers -Dnative
+mvn clean install -Dtest-containers -Dstart-containers -Dnative
```
diff --git a/integration-tests/hibernate-search-orm-opensearch/src/main/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchDevServicesTestResource.java b/integration-tests/hibernate-search-orm-opensearch/src/main/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchDevServicesTestResource.java
new file mode 100644
index 0000000000000..5a651d21ba19d
--- /dev/null
+++ b/integration-tests/hibernate-search-orm-opensearch/src/main/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchDevServicesTestResource.java
@@ -0,0 +1,71 @@
+package io.quarkus.it.hibernate.search.orm.opensearch.devservices;
+
+import java.util.List;
+
+import jakarta.inject.Inject;
+import jakarta.transaction.Transactional;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.search.mapper.orm.schema.management.SchemaManagementStrategyName;
+import org.hibernate.search.mapper.orm.session.SearchSession;
+
+@Path("/test/dev-services")
+public class HibernateSearchDevServicesTestResource {
+
+ @Inject
+ SessionFactory sessionFactory;
+
+ @Inject
+ Session session;
+
+ @Inject
+ SearchSession searchSession;
+
+ @GET
+ @Path("/hosts")
+ @Transactional
+ @SuppressWarnings("unchecked")
+ public String hosts() {
+ return ((List) sessionFactory.getProperties().get("hibernate.search.backend.hosts")).iterator().next();
+ }
+
+ @GET
+ @Path("/schema-management-strategy")
+ @Transactional
+ public String schemaManagementStrategy() {
+ var strategy = ((SchemaManagementStrategyName) sessionFactory.getProperties()
+ .get("hibernate.search.schema_management.strategy"));
+ return strategy == null ? null : strategy.externalRepresentation();
+ }
+
+ @PUT
+ @Path("/init-data")
+ @Transactional
+ public void initData() {
+ IndexedEntity entity = new IndexedEntity("John Irving");
+ session.persist(entity);
+ }
+
+ @PUT
+ @Path("/refresh")
+ @Produces(MediaType.TEXT_PLAIN)
+ public String refresh() {
+ searchSession.workspace().refresh();
+ return "OK";
+ }
+
+ @GET
+ @Path("/count")
+ @Produces(MediaType.TEXT_PLAIN)
+ public long count() {
+ return searchSession.search(IndexedEntity.class)
+ .where(f -> f.matchAll())
+ .fetchTotalHitCount();
+ }
+}
diff --git a/integration-tests/hibernate-search-orm-opensearch/src/main/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/IndexedEntity.java b/integration-tests/hibernate-search-orm-opensearch/src/main/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/IndexedEntity.java
new file mode 100644
index 0000000000000..fecdad1360bbf
--- /dev/null
+++ b/integration-tests/hibernate-search-orm-opensearch/src/main/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/IndexedEntity.java
@@ -0,0 +1,47 @@
+package io.quarkus.it.hibernate.search.orm.opensearch.devservices;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+
+import org.hibernate.search.engine.backend.types.Sortable;
+import org.hibernate.search.mapper.pojo.mapping.definition.annotation.FullTextField;
+import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed;
+import org.hibernate.search.mapper.pojo.mapping.definition.annotation.KeywordField;
+
+@Entity
+@Indexed
+public class IndexedEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "personSeq")
+ private Long id;
+
+ @FullTextField(analyzer = "standard")
+ @KeywordField(name = "name_sort", normalizer = "lowercase", sortable = Sortable.YES)
+ private String name;
+
+ public IndexedEntity() {
+ }
+
+ public IndexedEntity(String name) {
+ this.name = name;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/integration-tests/hibernate-search-orm-opensearch/src/main/resources/application.properties b/integration-tests/hibernate-search-orm-opensearch/src/main/resources/application.properties
index 94c13ed99e2e1..e0340c30c0ee0 100644
--- a/integration-tests/hibernate-search-orm-opensearch/src/main/resources/application.properties
+++ b/integration-tests/hibernate-search-orm-opensearch/src/main/resources/application.properties
@@ -7,8 +7,14 @@ quarkus.datasource.jdbc.max-size=8
quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.hibernate-search-orm.elasticsearch.version=opensearch:1.2
-quarkus.hibernate-search-orm.elasticsearch.hosts=${opensearch.hosts:localhost:9200}
-quarkus.hibernate-search-orm.elasticsearch.protocol=${opensearch.protocol:http}
quarkus.hibernate-search-orm.elasticsearch.analysis.configurer=bean:backend-analysis
quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create-and-drop
quarkus.hibernate-search-orm.indexing.plan.synchronization.strategy=sync
+
+# Use drop-and-create instead of drop-and-create-and-drop
+# so we can differentiate between the value we set here
+# and the value set automatically by the extension when using dev services
+# See io.quarkus.it.hibernate.search.orm.elasticsearch.devservices.HibernateSearchElasticsearchDevServicesEnabledImplicitlyTest.testHibernateSearch
+%test.quarkus.hibernate-search-orm.schema-management.strategy=drop-and-create
+%test.quarkus.hibernate-search-orm.elasticsearch.hosts=${opensearch.hosts:localhost:9200}
+%test.quarkus.hibernate-search-orm.elasticsearch.protocol=${opensearch.protocol:http}
\ No newline at end of file
diff --git a/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/DevServicesContextSpy.java b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/DevServicesContextSpy.java
new file mode 100644
index 0000000000000..c4d78dd73aaa4
--- /dev/null
+++ b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/DevServicesContextSpy.java
@@ -0,0 +1,32 @@
+package io.quarkus.it.hibernate.search.orm.opensearch.devservices;
+
+import java.util.Collections;
+import java.util.Map;
+
+import io.quarkus.test.common.DevServicesContext;
+import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+
+public class DevServicesContextSpy implements QuarkusTestResourceLifecycleManager, DevServicesContext.ContextAware {
+
+ DevServicesContext devServicesContext;
+
+ @Override
+ public void setIntegrationTestContext(DevServicesContext context) {
+ this.devServicesContext = context;
+ }
+
+ @Override
+ public Map start() {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public void inject(TestInjector testInjector) {
+ testInjector.injectIntoFields(devServicesContext, f -> f.getType().isAssignableFrom(DevServicesContext.class));
+ }
+
+ @Override
+ public void stop() {
+
+ }
+}
diff --git a/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.java b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.java
new file mode 100644
index 0000000000000..019571f43b3d8
--- /dev/null
+++ b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.java
@@ -0,0 +1,75 @@
+package io.quarkus.it.hibernate.search.orm.opensearch.devservices;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.hamcrest.Matchers.is;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledOnOs;
+import org.junit.jupiter.api.condition.OS;
+
+import io.quarkus.test.common.DevServicesContext;
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.QuarkusTestProfile;
+import io.quarkus.test.junit.TestProfile;
+import io.restassured.RestAssured;
+
+@QuarkusTest
+@DisabledOnOs(OS.WINDOWS)
+@TestProfile(HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest.Profile.class)
+public class HibernateSearchElasticsearchDevServicesDisabledExplicitlyTest {
+ public static class Profile implements QuarkusTestProfile {
+ @Override
+ public Map getConfigOverrides() {
+ Map config = new HashMap<>(); // Cannot use Map.of, we need nulls
+ // Even if quarkus.hibernate-search-orm.elasticsearch.hosts is not set,
+ // Quarkus won't start Elasticsearch dev-services because of this explicit setting:
+ config.put("quarkus.elasticsearch.devservices.enabled", "false");
+ // Ensure we can work offline, because without dev-services,
+ // we won't have an Elasticsearch instance to talk to.
+ config.putAll(Map.of(
+ "quarkus.hibernate-search-orm.schema-management.strategy", "none",
+ // This version does not matter as long as it's supported by Hibernate Search:
+ // it won't be checked in this test anyway.
+ "quarkus.hibernate-search-orm.elasticsearch.version", "opensearch:2.8.0",
+ "quarkus.hibernate-search-orm.elasticsearch.version-check.enabled", "false"));
+ return config;
+ }
+
+ @Override
+ public String getConfigProfile() {
+ // Don't use %test properties;
+ // that way, we can control whether quarkus.hibernate-search-orm.elasticsearch.hosts is set or not.
+ // In this test, we do NOT set quarkus.hibernate-search-orm.elasticsearch.hosts.
+ return "someotherprofile";
+ }
+
+ @Override
+ public List testResources() {
+ // Enables injection of DevServicesContext
+ return List.of(new TestResourceEntry(DevServicesContextSpy.class));
+ }
+ }
+
+ DevServicesContext context;
+
+ @Test
+ public void testDevServicesProperties() {
+ assertThat(context.devServicesProperties())
+ .doesNotContainKey("quarkus.hibernate-search-orm.elasticsearch.hosts");
+ }
+
+ @Test
+ public void testHibernateSearch() {
+ RestAssured.when().get("/test/dev-services/hosts").then()
+ .statusCode(200)
+ .body(is("localhost:9200")); // This is the default
+
+ // We don't test Hibernate Search features (indexing, search) here,
+ // because we're not sure that there is a host that Hibernate Search can talk to.
+ // It's fine, though: we checked that Hibernate Search is configured as intended.
+ }
+}
diff --git a/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.java b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.java
new file mode 100644
index 0000000000000..e279109295e7f
--- /dev/null
+++ b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.java
@@ -0,0 +1,73 @@
+package io.quarkus.it.hibernate.search.orm.opensearch.devservices;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.hamcrest.Matchers.is;
+
+import java.util.List;
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledOnOs;
+import org.junit.jupiter.api.condition.OS;
+
+import io.quarkus.test.common.DevServicesContext;
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.QuarkusTestProfile;
+import io.quarkus.test.junit.TestProfile;
+import io.restassured.RestAssured;
+
+@QuarkusTest
+@DisabledOnOs(OS.WINDOWS)
+@TestProfile(HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest.Profile.class)
+public class HibernateSearchElasticsearchDevServicesDisabledImplicitlyTest {
+ private static final String EXPLICIT_HOSTS = "mycompany.com:4242";
+
+ public static class Profile implements QuarkusTestProfile {
+ @Override
+ public Map getConfigOverrides() {
+ return Map.of(
+ // Make sure quarkus.hibernate-search-orm.elasticsearch.hosts is set,
+ // so that Quarkus detects disables Elasticsearch dev-services implicitly.
+ "quarkus.hibernate-search-orm.elasticsearch.hosts", EXPLICIT_HOSTS,
+ // Ensure we can work offline, because the host we set just above does not actually exist.
+ "quarkus.hibernate-search-orm.schema-management.strategy", "none",
+ // This version does not matter as long as it's supported by Hibernate Search:
+ // it won't be checked in this test anyway.
+ "quarkus.hibernate-search-orm.elasticsearch.version", "opensearch:2.8.0",
+ "quarkus.hibernate-search-orm.elasticsearch.version-check.enabled", "false");
+ }
+
+ @Override
+ public String getConfigProfile() {
+ // Don't use %test properties;
+ // that way, we can control whether quarkus.hibernate-search-orm.elasticsearch.hosts is set or not.
+ // In this test, we DO set quarkus.hibernate-search-orm.elasticsearch.hosts (see above).
+ return "someotherprofile";
+ }
+
+ @Override
+ public List testResources() {
+ // Enables injection of DevServicesContext
+ return List.of(new TestResourceEntry(DevServicesContextSpy.class));
+ }
+ }
+
+ DevServicesContext context;
+
+ @Test
+ public void testDevServicesProperties() {
+ assertThat(context.devServicesProperties())
+ .doesNotContainKey("quarkus.hibernate-search-orm.elasticsearch.hosts");
+ }
+
+ @Test
+ public void testHibernateSearch() {
+ RestAssured.when().get("/test/dev-services/hosts").then()
+ .statusCode(200)
+ .body(is(EXPLICIT_HOSTS));
+
+ // We don't test Hibernate Search features (indexing, search) here,
+ // because we're not sure that there is a host that Hibernate Search can talk to.
+ // It's fine, though: we checked that Hibernate Search is configured as intended.
+ }
+}
diff --git a/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchElasticsearchDevServicesEnabledImplicitlyTest.java b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchElasticsearchDevServicesEnabledImplicitlyTest.java
new file mode 100644
index 0000000000000..1b78352c48c90
--- /dev/null
+++ b/integration-tests/hibernate-search-orm-opensearch/src/test/java/io/quarkus/it/hibernate/search/orm/opensearch/devservices/HibernateSearchElasticsearchDevServicesEnabledImplicitlyTest.java
@@ -0,0 +1,85 @@
+package io.quarkus.it.hibernate.search.orm.opensearch.devservices;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.hamcrest.Matchers.is;
+
+import java.util.List;
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledOnOs;
+import org.junit.jupiter.api.condition.OS;
+
+import io.quarkus.test.common.DevServicesContext;
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.QuarkusTestProfile;
+import io.quarkus.test.junit.TestProfile;
+import io.restassured.RestAssured;
+
+@QuarkusTest
+@DisabledOnOs(OS.WINDOWS)
+@TestProfile(HibernateSearchElasticsearchDevServicesEnabledImplicitlyTest.Profile.class)
+public class HibernateSearchElasticsearchDevServicesEnabledImplicitlyTest {
+ public static class Profile implements QuarkusTestProfile {
+ @Override
+ public Map getConfigOverrides() {
+ return Map.of(
+ "quarkus.elasticsearch.devservices.distribution", "opensearch",
+ "quarkus.elasticsearch.devservices.image-name", "docker.io/opensearchproject/opensearch:2.8.0",
+ "quarkus.hibernate-search-orm.elasticsearch.version", "opensearch:2.8.0");
+ }
+
+ @Override
+ public String getConfigProfile() {
+ // Don't use %test properties;
+ // that way, we can control whether quarkus.hibernate-search-orm.elasticsearch.hosts is set or not.
+ // In this test, we do NOT set quarkus.hibernate-search-orm.elasticsearch.hosts.
+ return "someotherprofile";
+ }
+
+ @Override
+ public List testResources() {
+ // Enables injection of DevServicesContext
+ return List.of(new TestResourceEntry(DevServicesContextSpy.class));
+ }
+ }
+
+ DevServicesContext context;
+
+ @Test
+ public void testDevServicesProperties() {
+ assertThat(context.devServicesProperties())
+ .containsKey("quarkus.hibernate-search-orm.elasticsearch.hosts");
+ assertThat(context.devServicesProperties().get("quarkus.hibernate-search-orm.elasticsearch.hosts"))
+ .isNotEmpty()
+ .isNotEqualTo("localhost:9200");
+ }
+
+ @Test
+ public void testHibernateSearch() {
+ RestAssured.when().get("/test/dev-services/hosts").then()
+ .statusCode(200)
+ .body(is(context.devServicesProperties().get("quarkus.hibernate-search-orm.elasticsearch.hosts")));
+
+ RestAssured.when().get("/test/dev-services/schema-management-strategy").then()
+ .statusCode(200)
+ // If the value is drop-and-create, this would indicate we're using the %test profile:
+ // that would be a bug in this test (see the Profile class above).
+ .body(is("drop-and-create-and-drop"));
+
+ RestAssured.when().get("/test/dev-services/count").then()
+ .statusCode(200)
+ .body(is("0"));
+
+ RestAssured.when().put("/test/dev-services/init-data").then()
+ .statusCode(204);
+
+ RestAssured.when().put("/test/hibernate-search/refresh").then()
+ .statusCode(200)
+ .body(is("OK"));
+
+ RestAssured.when().get("/test/dev-services/count").then()
+ .statusCode(200)
+ .body(is("1"));
+ }
+}