Skip to content

Commit

Permalink
Merge branch 'dev' into #343_suggest_change_and_log
Browse files Browse the repository at this point in the history
  • Loading branch information
marcos-lg committed Apr 22, 2021
2 parents 0e69d1d + 4c91b09 commit 763a879
Show file tree
Hide file tree
Showing 50 changed files with 321 additions and 235 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import org.gbif.api.service.registry.DatasetService;
import org.gbif.api.service.registry.InstallationService;
import org.gbif.api.service.registry.NetworkService;
import org.gbif.api.service.registry.OrganizationService;
import org.gbif.registry.search.dataset.indexing.DatasetJsonConverter;
import org.gbif.registry.search.dataset.indexing.checklistbank.ChecklistbankPersistenceServiceImpl;
Expand All @@ -27,6 +28,7 @@
import org.gbif.registry.search.dataset.indexing.ws.JacksonObjectMapper;
import org.gbif.registry.ws.client.DatasetClient;
import org.gbif.registry.ws.client.InstallationClient;
import org.gbif.registry.ws.client.NetworkClient;
import org.gbif.registry.ws.client.OrganizationClient;
import org.gbif.ws.client.ClientBuilder;

Expand Down Expand Up @@ -196,5 +198,10 @@ public OrganizationService organizationService(ClientBuilder clientBuilder) {
public DatasetService datasetService(ClientBuilder clientBuilder) {
return clientBuilder.build(DatasetClient.class);
}

@Bean
public NetworkService networkService(ClientBuilder clientBuilder) {
return clientBuilder.build(NetworkClient.class);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,19 @@
import org.gbif.registry.search.dataset.indexing.es.IndexingConstants;

import java.io.IOException;
import java.util.Date;
import java.util.Properties;

import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
Expand All @@ -49,6 +51,10 @@ public class DatasetBatchIndexerIT {

private static final String API_URL = "http://api.gbif-dev.org/v1/";

private static final String INDEX_NAME = IndexingConstants.ALIAS + '_' + new Date().getTime();

private static final String INDEX_ALIAS = INDEX_NAME + "_a" ;

@RegisterExtension
public static SingleInstancePostgresExtension database =
EmbeddedPostgresExtension.singleInstance();
Expand Down Expand Up @@ -82,7 +88,8 @@ DatasetBatchIndexerConfiguration getConfiguration() {

ElasticsearchConfig elasticsearchConfigDataset = new ElasticsearchConfig();
elasticsearchConfigDataset.setHosts("http://" + embeddedElastic.getHttpHostAddress());
elasticsearchConfigDataset.setAlias(IndexingConstants.ALIAS);
elasticsearchConfigDataset.setAlias(INDEX_ALIAS);
elasticsearchConfigDataset.setIndex(INDEX_NAME);
configuration.setDatasetEs(elasticsearchConfigDataset);

ElasticsearchConfig elasticsearchConfigOccurrence = new ElasticsearchConfig();
Expand All @@ -107,16 +114,6 @@ DatasetBatchIndexerConfiguration getConfiguration() {
return configuration;
}

public void refresh(RestHighLevelClient restHighLevelClient) {
try {
RefreshRequest refreshRequest = new RefreshRequest();
refreshRequest.indices("*");
restHighLevelClient.indices().refresh(refreshRequest, RequestOptions.DEFAULT);
} catch (IOException ex) {
throw new IllegalStateException(ex);
}
}

@Test
public void indexTests() throws IOException {

Expand All @@ -125,13 +122,12 @@ public void indexTests() throws IOException {
datasetBatchIndexerCommand.doRun();

RestHighLevelClient restHighLevelClient = buildRestClient();
refresh(restHighLevelClient);

SearchResponse searchResponse =
buildRestClient()
restHighLevelClient
.search(
new SearchRequest()
.indices(IndexingConstants.ALIAS)
.indices(INDEX_ALIAS)
.source(new SearchSourceBuilder().size(0)),
RequestOptions.DEFAULT);

Expand All @@ -141,6 +137,11 @@ public void indexTests() throws IOException {
"Wrong amount of indexed dataset");
}

@AfterEach
public void deleteIndex() throws IOException {
buildRestClient().indices().delete(new DeleteIndexRequest(INDEX_NAME), RequestOptions.DEFAULT);
}

@AfterAll
public static void finish() throws Exception {
if (embeddedElastic != null && !embeddedElastic.isShouldBeReused()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

import org.gbif.api.model.registry.Dataset;
import org.gbif.api.model.registry.Installation;
import org.gbif.api.model.registry.NetworkEntity;
import org.gbif.api.model.registry.Network;
import org.gbif.api.model.registry.Organization;
import org.gbif.api.model.registry.Tag;
import org.gbif.api.service.registry.DatasetService;
Expand Down Expand Up @@ -57,14 +57,14 @@ public DatasetIndexUpdateListener(
}

@Subscribe
public final <T extends NetworkEntity> void created(CreateEvent<T> event) {
public final <T> void created(CreateEvent<T> event) {
if (event.getObjectClass().equals(Dataset.class)) {
indexService.index((Dataset) event.getNewObject());
}
}

@Subscribe
public final <T extends NetworkEntity> void updated(UpdateEvent<T> event) {
public final <T> void updated(UpdateEvent<T> event) {
if (event.getObjectClass().equals(Dataset.class)) {
indexService.index((Dataset) event.getNewObject());

Expand All @@ -83,11 +83,18 @@ public final <T extends NetworkEntity> void updated(UpdateEvent<T> event) {
if (!i1.getOrganizationKey().equals(i2.getOrganizationKey())) {
indexService.index(i2);
}
} else if (event.getObjectClass().equals(Network.class)) {
// we only care about title changes
Network network1 = (Network)event.getOldObject();
Network network2 = (Network)event.getNewObject();
if (!network1.getTitle().equals(network2.getTitle())) {
indexService.index(network2);
}
}
}

@Subscribe
public final <T extends NetworkEntity> void deleted(DeleteEvent<T> event) {
public final <T> void deleted(DeleteEvent<T> event) {
if (event.getObjectClass().equals(Dataset.class)) {
indexService.delete((Dataset) event.getOldObject());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,38 +18,29 @@
import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.google.common.base.Throwables;
import io.zonky.test.db.postgres.junit5.PreparedDbExtension;
import lombok.Builder;
import lombok.Data;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import lombok.experimental.UtilityClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* A Rule that initializes a database for All test cases in a Test class or in test suite.
*
* <pre>
* @RegisterExtension
* public TestsDatabaseInitializer = TestsDatabaseInitializer
* .builder()
* .dbExtension(dbExtension) // developer required to provide DB Extension
* .build();
* RegistryDatabaseInitializer().init();
* </pre>
*/
@Data
@Builder
public class TestsDatabaseInitializer implements BeforeAllCallback {
@UtilityClass
public class RegistryDatabaseInitializer {

private static final Logger LOG = LoggerFactory.getLogger(TestsDatabaseInitializer.class);
private final PreparedDbExtension dbExtension;
private static final Logger LOG = LoggerFactory.getLogger(RegistryDatabaseInitializer.class);

private void createTestUsers() throws Exception {
public static void init(DataSource dataSource) {
LOG.info("Create test users");
try (Connection connection = dbExtension.getTestDatabase().getConnection()) {
try (Connection connection = dataSource.getConnection()) {
connection.setAutoCommit(false);
connection.prepareStatement("TRUNCATE public.user CASCADE").execute();

connection.prepareStatement(
"INSERT INTO public.\"user\" (key, username, email, password, first_name, last_name, roles, settings, system_settings, created, last_login, deleted, challenge_code_key) "
Expand All @@ -63,11 +54,7 @@ private void createTestUsers() throws Exception {
} catch (SQLException e) {
Throwables.propagate(e);
}
LOG.info("Registry tables truncated");
LOG.info("Initial test data loaded");
}

@Override
public void beforeAll(ExtensionContext extensionContext) throws Exception {
createTestUsers();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,37 +20,31 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import javax.sql.DataSource;

import lombok.Builder;
import lombok.Data;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Throwables;
import org.springframework.test.context.junit.jupiter.SpringExtension;

/**
* A Rule that will truncate the tables ready for a new test. It is expected to do this before each
* test by using the following:
*
* <pre>
* @RegisterExtension
* public TestCaseDatabaseInitializer = TestCaseDatabaseInitializer.builder()
* .dataSource(database.getTestDatabase()) // developer required to provide datasource
* .build();
* @RegisterExtension TestCaseDatabaseInitializer = TestCaseDatabaseInitializer(tables);
* </pre>
*/
@Data
@Builder
public class TestCaseDatabaseInitializer implements BeforeEachCallback {

private static final Logger LOG = LoggerFactory.getLogger(TestCaseDatabaseInitializer.class);

@Builder.Default
private List<String> tables = Arrays.asList("contact", "endpoint", "tag", "identifier", "comment", "node_identifier",
"node_identifier", "node_identifier", "node_machine_tag", "node_tag", "node_comment",
"occurrence_download", "organization_contact", "organization_endpoint", "organization_machine_tag",
Expand All @@ -60,15 +54,19 @@ public class TestCaseDatabaseInitializer implements BeforeEachCallback {
"dataset_identifier", "dataset_comment", "dataset_network", "network_contact",
"network_endpoint", "network_machine_tag", "network_tag", "network_comment",
"machine_tag, metadata", "editor_rights", "network", "dataset", "installation",
"organization, node", "collection_collection_person", "collection_identifier",
"organization, node", "collection_person", "collection_collection_person", "collection_identifier",
"collection_tag", "institution_collection_person", "institution_identifier",
"institution_tag", "institution_occurrence_mapping", "collection_occurrence_mapping",
"collection_person", "collection", "institution", "address", "gbif_doi", "pipeline_step",
"pipeline_process", "pipeline_execution", "derived_dataset", "change_suggestion");

private final DataSource dataSource;
public TestCaseDatabaseInitializer() {
}

private void truncateTables() throws Exception {
public TestCaseDatabaseInitializer(String...tables) {
this.tables = Arrays.asList(tables);
}
private void truncateTables(DataSource dataSource) throws Exception {
LOG.info("Truncating registry tables");
try (Connection connection = dataSource.getConnection()) {
connection.setAutoCommit(false);
Expand Down Expand Up @@ -108,6 +106,6 @@ private void truncateTables() throws Exception {

@Override
public void beforeEach(ExtensionContext extensionContext) throws Exception {
truncateTables();
truncateTables(SpringExtension.getApplicationContext(extensionContext).getBean(DataSource.class));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.gbif.api.model.occurrence.search.OccurrenceSearchParameter;
import org.gbif.api.service.registry.DatasetService;
import org.gbif.api.service.registry.InstallationService;
import org.gbif.api.service.registry.NetworkService;
import org.gbif.api.service.registry.OrganizationService;
import org.gbif.registry.search.dataset.indexing.ws.GbifApiService;
import org.gbif.registry.search.dataset.indexing.ws.GbifWsClient;
Expand All @@ -43,11 +44,13 @@ public class SearchTestConfiguration {
@Bean
@Primary
public GbifWsClient gbifWsClient(
InstallationService installationService,
OrganizationService organizationService,
DatasetService datasetService) {
InstallationService installationService,
OrganizationService organizationService,
DatasetService datasetService,
NetworkService networkService
) {
return new GbifWsRetrofitClient(
gbifApiService(), installationService, organizationService, datasetService);
gbifApiService(), installationService, organizationService, datasetService, networkService);
}

public GbifApiService gbifApiService() {
Expand Down
Loading

0 comments on commit 763a879

Please sign in to comment.