Skip to content

Commit

Permalink
Merge pull request quarkusio#34159 from yrodiere/i31970
Browse files Browse the repository at this point in the history
Add DevUI JsonRPC service tests for Hibernate Search
  • Loading branch information
phillip-kruger committed Jun 20, 2023
2 parents 6683c1b + 2694f1d commit c1f6479
Show file tree
Hide file tree
Showing 18 changed files with 343 additions and 160 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package io.quarkus.hibernate.orm.devui;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.Iterator;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.databind.JsonNode;

import io.quarkus.devui.tests.DevUIJsonRPCTest;

/**
* All tests test the same api call, with different configuration and different expected results
* This abstract class reduce the code in each test
*/
public abstract class AbstractDevUIHibernateOrmTest extends DevUIJsonRPCTest {

private final String expectedPersistenceUnitName;
private final String expectedTableName;
private final String expectedClassName;

public AbstractDevUIHibernateOrmTest(String expectedPersistenceUnitName, String expectedTableName,
String expectedClassName) {
super("io.quarkus.quarkus-hibernate-orm");
this.expectedPersistenceUnitName = expectedPersistenceUnitName;
this.expectedTableName = expectedTableName;
this.expectedClassName = expectedClassName;
}

@Test
public void testGetInfo() throws Exception {
JsonNode getInfoResponse = super.executeJsonRPCMethod("getInfo");
assertNotNull(getInfoResponse);

JsonNode persistenceUnits = getInfoResponse.get("persistenceUnits");
assertNotNull(persistenceUnits);
assertTrue(persistenceUnits.isArray());

if (expectedPersistenceUnitName == null) {
assertEquals(0, persistenceUnits.size());
} else {
assertEquals(1, persistenceUnits.size());
Iterator<JsonNode> persistenceUnitsIterator = persistenceUnits.elements();
while (persistenceUnitsIterator.hasNext()) {
JsonNode persistenceUnit = persistenceUnitsIterator.next();
JsonNode name = persistenceUnit.get("name");
assertEquals(expectedPersistenceUnitName, name.asText());

JsonNode managedEntities = persistenceUnit.get("managedEntities");
assertNotNull(managedEntities);
assertTrue(managedEntities.isArray());

Iterator<JsonNode> managedEntitiesIterator = managedEntities.elements();
while (managedEntitiesIterator.hasNext()) {
JsonNode myEntity = managedEntitiesIterator.next();

String tableName = myEntity.get("tableName").asText();
assertEquals(expectedTableName, tableName);

String className = myEntity.get("className").asText();
assertEquals(expectedClassName, className);

}

JsonNode namedQueries = persistenceUnit.get("namedQueries");
assertNotNull(namedQueries);
assertTrue(namedQueries.isArray());
}
}
}

@Test
public void testGetNumberOfPersistenceUnits() throws Exception {
JsonNode getNumberOfPersistenceUnitsResponse = super.executeJsonRPCMethod("getNumberOfPersistenceUnits");
assertNotNull(getNumberOfPersistenceUnitsResponse);
assertTrue(getNumberOfPersistenceUnitsResponse.isInt());
assertEquals(expectedPersistenceUnitName == null ? 0 : 1, getNumberOfPersistenceUnitsResponse.asInt());
}

@Test
public void testGetNumberOfEntityTypes() throws Exception {
JsonNode getNumberOfEntityTypesResponse = super.executeJsonRPCMethod("getNumberOfEntityTypes");
assertNotNull(getNumberOfEntityTypesResponse);
assertTrue(getNumberOfEntityTypesResponse.isInt());
assertEquals(expectedClassName == null ? 0 : 1, getNumberOfEntityTypesResponse.asInt());
}

@Test
public void testGetNumberOfNamedQueries() throws Exception {
JsonNode getNumberOfNamedQueriesResponse = super.executeJsonRPCMethod("getNumberOfNamedQueries");
assertNotNull(getNumberOfNamedQueriesResponse);
assertTrue(getNumberOfNamedQueriesResponse.isInt());
assertEquals(0, getNumberOfNamedQueriesResponse.asInt());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import io.quarkus.hibernate.orm.devui.namedpu.MyNamedPuEntity;
import io.quarkus.test.QuarkusDevModeTest;

public class DevUIHibernateOrmActiveFalseAndNamedPuActiveTrueTest extends DevUIHibernateOrmTest {
public class DevUIHibernateOrmActiveFalseAndNamedPuActiveTrueTest extends AbstractDevUIHibernateOrmTest {

@RegisterExtension
static final QuarkusDevModeTest test = new QuarkusDevModeTest()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import io.quarkus.test.QuarkusDevModeTest;

public class DevUIHibernateOrmActiveFalseTest extends DevUIHibernateOrmTest {
public class DevUIHibernateOrmActiveFalseTest extends AbstractDevUIHibernateOrmTest {

@RegisterExtension
static final QuarkusDevModeTest test = new QuarkusDevModeTest()
Expand All @@ -18,7 +18,7 @@ public class DevUIHibernateOrmActiveFalseTest extends DevUIHibernateOrmTest {
.addClasses(MyEntity.class));

public DevUIHibernateOrmActiveFalseTest() {
super(0, 0);
super(null, null, null);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import io.quarkus.test.QuarkusDevModeTest;

public class DevUIHibernateOrmSmokeTest extends DevUIHibernateOrmTest {
public class DevUIHibernateOrmSmokeTest extends AbstractDevUIHibernateOrmTest {

@RegisterExtension
static final QuarkusDevModeTest test = new QuarkusDevModeTest()
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@
<artifactId>quarkus-jdbc-h2-deployment</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-vertx-http-dev-ui-tests</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-test-h2</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import static io.quarkus.hibernate.search.orm.elasticsearch.runtime.HibernateSearchElasticsearchRuntimeConfig.defaultBackendPropertyKeys;
import static io.quarkus.hibernate.search.orm.elasticsearch.runtime.HibernateSearchElasticsearchRuntimeConfig.elasticsearchVersionPropertyKey;
import static io.quarkus.hibernate.search.orm.elasticsearch.runtime.HibernateSearchElasticsearchRuntimeConfig.mapperPropertyKey;
import static io.quarkus.hibernate.search.orm.elasticsearch.runtime.HibernateSearchElasticsearchRuntimeConfig.mapperPropertyKeys;

import java.nio.file.Files;
import java.nio.file.Path;
Expand Down Expand Up @@ -341,23 +342,30 @@ private void registerReflectionForGson(BuildProducer<ReflectiveClassBuildItem> r
reflectiveClass.produce(ReflectiveClassBuildItem.builder(reflectiveClasses).methods().fields().build());
}

@BuildStep
@BuildStep(onlyIfNot = IsNormal.class)
DevservicesElasticsearchBuildItem devServices(HibernateSearchElasticsearchBuildTimeConfig buildTimeConfig) {
if (buildTimeConfig.defaultPersistenceUnit() != null
&& buildTimeConfig.defaultPersistenceUnit().defaultBackend() != null
// If the version is not set, the default backend is not in use.
&& buildTimeConfig.defaultPersistenceUnit().defaultBackend().version().isPresent()) {
ElasticsearchVersion version = buildTimeConfig.defaultPersistenceUnit().defaultBackend().version().get();
String hostsPropertyKey = backendPropertyKey(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, null, null,
"hosts");
return new DevservicesElasticsearchBuildItem(hostsPropertyKey,
version.versionString(),
DevservicesElasticsearchBuildItem.Distribution.valueOf(version.distribution().toString().toUpperCase()));
} else {
if (buildTimeConfig.defaultPersistenceUnit() == null) {
// Currently we only start dev-services for the default backend of the default persistence unit.
// See https://github.com/quarkusio/quarkus/issues/24011
return null;
}
if (buildTimeConfig.defaultPersistenceUnit().defaultBackend() == null
|| !buildTimeConfig.defaultPersistenceUnit().defaultBackend().version().isPresent()) {
// If the version is not set, the default backend is not in use.
return null;
}
Optional<Boolean> active = ConfigUtils.getFirstOptionalValue(
mapperPropertyKeys(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, "active"), Boolean.class);
if (active.isPresent() && !active.get()) {
// If Hibernate Search is deactivated, we don't want to trigger dev services.
return null;
}
ElasticsearchVersion version = buildTimeConfig.defaultPersistenceUnit().defaultBackend().version().get();
String hostsPropertyKey = backendPropertyKey(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, null, null,
"hosts");
return new DevservicesElasticsearchBuildItem(hostsPropertyKey,
version.versionString(),
DevservicesElasticsearchBuildItem.Distribution.valueOf(version.distribution().toString().toUpperCase()));
}

@BuildStep(onlyIfNot = IsNormal.class)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package io.quarkus.hibernate.search.orm.elasticsearch.test.devui;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.Iterator;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.databind.JsonNode;

import io.quarkus.devui.tests.DevUIJsonRPCTest;

/**
* All tests test the same api call, with different configuration and different expected results.
* This abstract class reduces the code in each test.
*/
public abstract class AbstractDevUIHibernateSearchTest extends DevUIJsonRPCTest {

private final String expectedPersistenceUnitName;
private final String expectedClassName;

public AbstractDevUIHibernateSearchTest(String expectedPersistenceUnitName, String expectedClassName) {
super("io.quarkus.quarkus-hibernate-search-orm-elasticsearch");
this.expectedPersistenceUnitName = expectedPersistenceUnitName;
this.expectedClassName = expectedClassName;
}

@Test
public void testGetInfo() throws Exception {
JsonNode getInfoResponse = executeJsonRPCMethod("getInfo");
assertNotNull(getInfoResponse);

JsonNode numberOfIndexedEntities = getInfoResponse.get("numberOfIndexedEntities");
assertNotNull(numberOfIndexedEntities);
assertTrue(numberOfIndexedEntities.isInt());
assertEquals(expectedClassName == null ? 0 : 1, numberOfIndexedEntities.asInt());

JsonNode persistenceUnits = getInfoResponse.get("persistenceUnits");
assertNotNull(persistenceUnits);
assertTrue(persistenceUnits.isArray());

if (expectedPersistenceUnitName == null) {
assertEquals(0, persistenceUnits.size());
} else {
assertEquals(1, persistenceUnits.size());
Iterator<JsonNode> persistenceUnitsIterator = persistenceUnits.elements();
while (persistenceUnitsIterator.hasNext()) {
JsonNode persistenceUnit = persistenceUnitsIterator.next();
JsonNode name = persistenceUnit.get("name");
assertEquals(expectedPersistenceUnitName, name.asText());

JsonNode indexedEntities = persistenceUnit.get("indexedEntities");
assertNotNull(indexedEntities);
assertTrue(indexedEntities.isArray());

Iterator<JsonNode> managedEntitiesIterator = indexedEntities.elements();
while (managedEntitiesIterator.hasNext()) {
JsonNode myEntity = managedEntitiesIterator.next();
String javaClassName = myEntity.get("javaClass").asText();
assertEquals(expectedClassName, javaClassName);
}
}
}
}

@Test
public void testGetNumberOfPersistenceUnits() throws Exception {
JsonNode getNumberOfPersistenceUnitsResponse = executeJsonRPCMethod("getNumberOfPersistenceUnits");
assertNotNull(getNumberOfPersistenceUnitsResponse);
assertTrue(getNumberOfPersistenceUnitsResponse.isInt());
assertEquals(expectedPersistenceUnitName == null ? 0 : 1, getNumberOfPersistenceUnitsResponse.asInt());
}

@Test
public void testGetNumberOfIndexedEntityTypes() throws Exception {
JsonNode getNumberOfEntityTypesResponse = executeJsonRPCMethod("getNumberOfIndexedEntityTypes");
assertNotNull(getNumberOfEntityTypesResponse);
assertTrue(getNumberOfEntityTypesResponse.isInt());
assertEquals(expectedClassName == null ? 0 : 1, getNumberOfEntityTypesResponse.asInt());
}
}
Loading

0 comments on commit c1f6479

Please sign in to comment.