From a9217c8ca0231440c7c0af7006e09c73e9fe2d9a Mon Sep 17 00:00:00 2001 From: Ben Bosman Date: Wed, 4 Sep 2019 14:07:55 +0200 Subject: [PATCH] mock authority control solr --- .../authority/AuthoritySolrServiceImpl.java | 13 +++-- .../config/spring/api/solr-services.xml | 34 +++++++++++++ .../app/rest/AuthorityRestRepositoryIT.java | 49 +++++++++++++++++++ .../dspace/authority/MockSolrServiceImpl.java | 44 +++++++++++++++++ 4 files changed, 135 insertions(+), 5 deletions(-) create mode 100644 dspace-server-webapp/src/test/data/dspaceFolder/config/spring/api/solr-services.xml create mode 100644 dspace-server-webapp/src/test/java/org/dspace/authority/MockSolrServiceImpl.java diff --git a/dspace-api/src/main/java/org/dspace/authority/AuthoritySolrServiceImpl.java b/dspace-api/src/main/java/org/dspace/authority/AuthoritySolrServiceImpl.java index 6e7522106e..b214ead594 100644 --- a/dspace-api/src/main/java/org/dspace/authority/AuthoritySolrServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/authority/AuthoritySolrServiceImpl.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.logging.log4j.Logger; +import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrClient; @@ -39,9 +40,9 @@ public class AuthoritySolrServiceImpl implements AuthorityIndexingService, Autho /** * Non-Static CommonsHttpSolrServer for processing indexing events. */ - protected HttpSolrClient solr = null; + protected SolrClient solr = null; - protected HttpSolrClient getSolr() + protected SolrClient getSolr() throws MalformedURLException, SolrServerException, IOException { if (solr == null) { @@ -49,12 +50,14 @@ public class AuthoritySolrServiceImpl implements AuthorityIndexingService, Autho log.debug("Solr authority URL: " + solrService); - solr = new HttpSolrClient.Builder(solrService).build(); - solr.setBaseURL(solrService); + HttpSolrClient solrServer = new HttpSolrClient.Builder(solrService).build(); + solrServer.setBaseURL(solrService); SolrQuery solrQuery = new SolrQuery().setQuery("*:*"); - solr.query(solrQuery); + solrServer.query(solrQuery); + + solr = solrServer; } return solr; diff --git a/dspace-server-webapp/src/test/data/dspaceFolder/config/spring/api/solr-services.xml b/dspace-server-webapp/src/test/data/dspaceFolder/config/spring/api/solr-services.xml new file mode 100644 index 0000000000..cd8148f276 --- /dev/null +++ b/dspace-server-webapp/src/test/data/dspaceFolder/config/spring/api/solr-services.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/AuthorityRestRepositoryIT.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/AuthorityRestRepositoryIT.java index 736cdcf568..b0b5e31861 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/AuthorityRestRepositoryIT.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/AuthorityRestRepositoryIT.java @@ -11,6 +11,8 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import org.apache.solr.client.solrj.SolrQuery; +import org.apache.solr.client.solrj.response.QueryResponse; import org.dspace.app.rest.test.AbstractControllerIntegrationTest; import org.dspace.authority.PersonAuthorityValue; import org.dspace.authority.factory.AuthorityServiceFactory; @@ -50,6 +52,13 @@ public class AuthorityRestRepositoryIT extends AbstractControllerIntegrationTest person1.setValue("Shirasaka, Seiko"); person1.setField("dc_contributor_author"); AuthorityServiceFactory.getInstance().getAuthorityIndexingService().indexContent(person1); + + PersonAuthorityValue person2 = new PersonAuthorityValue(); + person2.setLastName("Miller"); + person2.setFirstName("Tyler E"); + person2.setValue("Miller, Tyler E"); + person2.setField("dc_contributor_author"); + AuthorityServiceFactory.getInstance().getAuthorityIndexingService().indexContent(person2); } @Test @@ -104,6 +113,18 @@ public class AuthorityRestRepositoryIT extends AbstractControllerIntegrationTest .andExpect(jsonPath("$.page.totalElements", Matchers.is(1))); } + @Test + public void noResultsSolrQueryTest() throws Exception { + String token = getAuthToken(admin.getEmail(), password); + getClient(token).perform( + get("/api/integration/authorities/SolrAuthorAuthority/entries") + .param("metadata", "dc.contributor.author") + .param("query", "Smith") + .param("size", "1000")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.page.totalElements", Matchers.is(0))); + } + @Test public void retrieveSrscValueTest() throws Exception { String token = getAuthToken(admin.getEmail(), password); @@ -113,6 +134,19 @@ public class AuthorityRestRepositoryIT extends AbstractControllerIntegrationTest .andExpect(jsonPath("$.page.totalElements", Matchers.is(1))); } + @Test + @Ignore + /** + * This functionality is currently broken, it an empty value + */ + public void noResultsSrscValueTest() throws Exception { + String token = getAuthToken(admin.getEmail(), password); + getClient(token).perform( + get("/api/integration/authorities/srsc/entryValues/DOESNTEXIST")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.page.totalElements", Matchers.is(0))); + } + @Test public void retrieveCommonTypesValueTest() throws Exception { String token = getAuthToken(admin.getEmail(), password); @@ -135,6 +169,21 @@ public class AuthorityRestRepositoryIT extends AbstractControllerIntegrationTest .andExpect(jsonPath("$.page.totalElements", Matchers.is(1))); } + @Test + public void retrieveSolrValueTest() throws Exception { + String token = getAuthToken(admin.getEmail(), password); + + SolrQuery query = new SolrQuery(); + query.setQuery("*:*"); + QueryResponse queryResponse = AuthorityServiceFactory.getInstance().getAuthoritySearchService().search(query); + String id = String.valueOf(queryResponse.getResults().get(0).getFieldValue("id")); + + getClient(token).perform( + get("/api/integration/authorities/SolrAuthorAuthority/entryValues/" + id)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.page.totalElements", Matchers.is(1))); + } + @Override public void destroy() throws Exception { AuthorityServiceFactory.getInstance().getAuthorityIndexingService().cleanIndex(); diff --git a/dspace-server-webapp/src/test/java/org/dspace/authority/MockSolrServiceImpl.java b/dspace-server-webapp/src/test/java/org/dspace/authority/MockSolrServiceImpl.java new file mode 100644 index 0000000000..a8ab8d368f --- /dev/null +++ b/dspace-server-webapp/src/test/java/org/dspace/authority/MockSolrServiceImpl.java @@ -0,0 +1,44 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.authority; + +import org.dspace.solr.MockSolrServer; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Service; + +/** + * Mock SOLR service for the Search Core. + * + *

+ * NOTE: this class overrides one of the same name + * defined in dspace-api and declared as a bean there. + * See {@code config/spring/api/Z-mock-services.xml}. Some kind of classpath + * magic makes this work. + */ +@Service +public class MockSolrServiceImpl extends AuthoritySolrServiceImpl implements InitializingBean, DisposableBean { + + private MockSolrServer mockSolrServer; + + @Override + public void afterPropertiesSet() throws Exception { + mockSolrServer = new MockSolrServer("authority"); + solr = mockSolrServer.getSolrServer(); + } + + /** Clear all records from the search core. */ + public void reset() { + mockSolrServer.reset(); + } + + @Override + public void destroy() throws Exception { + mockSolrServer.destroy(); + } +}