From: remillet Date: Tue, 26 Apr 2016 02:42:43 +0000 (-0700) Subject: CSPACE-6937-A: More development of SAS related tests and test code refactoring. X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=7228d2f24c924757b53c6ef494f4ae51bcab5300;p=tmp%2Fjakarta-migration.git CSPACE-6937-A: More development of SAS related tests and test code refactoring. --- diff --git a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityServiceUtils.java b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityServiceUtils.java index 498e97908..3a92dfa9c 100644 --- a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityServiceUtils.java +++ b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityServiceUtils.java @@ -6,6 +6,7 @@ import java.util.regex.Pattern; import javax.ws.rs.core.Response; import org.collectionspace.services.client.AuthorityClient; +import org.collectionspace.services.client.CollectionSpaceClient; import org.collectionspace.services.client.PoxPayloadIn; import org.collectionspace.services.common.api.RefNameUtils.AuthorityTermInfo; import org.collectionspace.services.common.context.MultipartServiceContextImpl; @@ -43,10 +44,19 @@ public class AuthorityServiceUtils { public static final Boolean NO_CHANGE = null; + /** + * Make a request to the SAS Server for an authority payload. + * + * @param ctx + * @param specifier + * @param responseType + * @return + * @throws Exception + */ static public PoxPayloadIn requestPayloadIn(ServiceContext ctx, Specifier specifier, Class responseType) throws Exception { PoxPayloadIn result = null; - AuthorityClient client = (AuthorityClient) ctx.getClient(); + AuthorityClient client = (AuthorityClient) ctx.getClient(CollectionSpaceClient.SAS_CLIENT_PROPERTIES_FILENAME); Response res = client.read(specifier.getURNValue()); try { int statusCode = res.getStatus(); @@ -72,7 +82,7 @@ public class AuthorityServiceUtils { PoxPayloadIn result = null; ServiceContext parentCtx = new MultipartServiceContextImpl(serviceName); - AuthorityClient client = (AuthorityClient) parentCtx.getClient(); + AuthorityClient client = (AuthorityClient) parentCtx.getClient(CollectionSpaceClient.SAS_CLIENT_PROPERTIES_FILENAME); Response res = client.readItem(specifier.getParentSpecifier().getURNValue(), specifier.getItemSpecifier().getURNValue()); try { int statusCode = res.getStatus(); diff --git a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/nuxeo/AuthorityDocumentModelHandler.java b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/nuxeo/AuthorityDocumentModelHandler.java index e9d2427df..58af1e5a5 100644 --- a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/nuxeo/AuthorityDocumentModelHandler.java +++ b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/nuxeo/AuthorityDocumentModelHandler.java @@ -489,7 +489,15 @@ public abstract class AuthorityDocumentModelHandler */ } - + + /** + * Request an authority item list payload from the SAS server. + * + * @param ctx + * @param specifier + * @return + * @throws Exception + */ private PoxPayloadIn requestPayloadInItemList(ServiceContext ctx, Specifier specifier) throws Exception { PoxPayloadIn result = null; diff --git a/services/client/src/main/java/org/collectionspace/services/client/AbstractServiceClientImpl.java b/services/client/src/main/java/org/collectionspace/services/client/AbstractServiceClientImpl.java index d72a9d854..5a1191c70 100644 --- a/services/client/src/main/java/org/collectionspace/services/client/AbstractServiceClientImpl.java +++ b/services/client/src/main/java/org/collectionspace/services/client/AbstractServiceClientImpl.java @@ -144,8 +144,7 @@ public abstract class AbstractServiceClientImpl public Response getItemAuthorityRefs(String parentcsid, String itemcsid); /* - * + * Synchronization methods + */ + Response syncByName(String name); + + + /* + * READ/GET by name method */ Response readByName(String name); diff --git a/services/client/src/main/java/org/collectionspace/services/client/AuthorityClientImpl.java b/services/client/src/main/java/org/collectionspace/services/client/AuthorityClientImpl.java index faa4fe750..903c76f83 100644 --- a/services/client/src/main/java/org/collectionspace/services/client/AuthorityClientImpl.java +++ b/services/client/src/main/java/org/collectionspace/services/client/AuthorityClientImpl.java @@ -1,5 +1,6 @@ package org.collectionspace.services.client; +import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; import org.jboss.resteasy.client.ClientResponse; @@ -76,6 +77,13 @@ public abstract class AuthorityClientImpl allSASResourceItemIdsCreated = new HashMap(); /* itemURN, parentURN */; + protected String knownResourceRefName = null; protected String knownItemResourceId = null; protected String knownItemResourceShortIdentifer = null; @@ -61,6 +68,24 @@ public abstract class AbstractAuthorityServiceTest entry : allResourceItemIdsCreated.entrySet()) { + itemResourceId = entry.getKey(); + parentResourceId = entry.getValue(); + Response response = client.deleteItem(parentResourceId, itemResourceId); + try { + int status = response.getStatus(); + if (status != Response.Status.OK.getStatusCode()) { + logger.debug(String.format("Could not deleted authority item '%s' in authority '%s'.", + itemResourceId, parentResourceId)); + } + } finally { + response.close(); + } + } + // + // Clean up authority items using the SAS client. + // + client = (AuthorityClient) this.getSASClientInstance(); + for (Map.Entry entry : allResourceItemIdsCreated.entrySet()) { + itemResourceId = entry.getKey(); + parentResourceId = entry.getValue(); + // Note: Any non-success responses from the delete operation + // below are ignored and not reported. + client.deleteItem(parentResourceId, itemResourceId).close(); + } + // + // Call out superclass's cleanUp method to delete the SAS authorities + // + super.cleanUp(client); + // + // Finally, call out superclass's cleanUp method to deleted the local authorities + // + super.cleanUp(); + } } diff --git a/services/client/src/main/java/org/collectionspace/services/client/test/AbstractServiceTestImpl.java b/services/client/src/main/java/org/collectionspace/services/client/test/AbstractServiceTestImpl.java index 6026fe55c..f38701f51 100644 --- a/services/client/src/main/java/org/collectionspace/services/client/test/AbstractServiceTestImpl.java +++ b/services/client/src/main/java/org/collectionspace/services/client/test/AbstractServiceTestImpl.java @@ -155,8 +155,16 @@ public abstract class AbstractServiceTestImpl getEntityResponseType(); diff --git a/services/client/src/main/java/org/collectionspace/services/client/test/BaseServiceTest.java b/services/client/src/main/java/org/collectionspace/services/client/test/BaseServiceTest.java index 538a37a25..8dd3d4e78 100644 --- a/services/client/src/main/java/org/collectionspace/services/client/test/BaseServiceTest.java +++ b/services/client/src/main/java/org/collectionspace/services/client/test/BaseServiceTest.java @@ -750,26 +750,10 @@ public abstract class BaseServiceTest { } return; } - - if (logger.isDebugEnabled()) { - logger.debug("Cleaning up temporary resources created for testing ..."); - } - CollectionSpaceClient client = this.getClientInstance(); - // - // First, check to see if we need to cleanup any authority items - // - if (this.isAuthorityClient(client) == true) { - AuthorityClient authorityClient = (AuthorityClient) client; - for (Map.Entry entry : allResourceItemIdsCreated.entrySet()) { - String itemResourceId = entry.getKey(); - String authorityResourceId = entry.getValue(); - // Note: Any non-success responses are ignored and not reported. - authorityClient.deleteItem(authorityResourceId, itemResourceId).close(); - } - } - // - // Next, delete all other entities include possible authorities. - // + cleanUp(this.getClientInstance()); + } + + public void cleanUp(CollectionSpaceClient client) { for (String resourceId : allResourceIdsCreated) { // Note: Any non-success responses are ignored and not reported. client.delete(resourceId).close(); diff --git a/services/client/src/main/java/org/collectionspace/services/client/test/ServiceRequestType.java b/services/client/src/main/java/org/collectionspace/services/client/test/ServiceRequestType.java index b28313d4b..45d1458ed 100644 --- a/services/client/src/main/java/org/collectionspace/services/client/test/ServiceRequestType.java +++ b/services/client/src/main/java/org/collectionspace/services/client/test/ServiceRequestType.java @@ -109,6 +109,7 @@ public enum ServiceRequestType { return javax.ws.rs.HttpMethod.GET; } }, + READ_LIST { @Override @@ -143,6 +144,7 @@ public enum ServiceRequestType { return javax.ws.rs.HttpMethod.GET; } }, + UPDATE { @Override @@ -178,6 +180,7 @@ public enum ServiceRequestType { return javax.ws.rs.HttpMethod.PUT; } }, + DELETE { @Override @@ -212,6 +215,7 @@ public enum ServiceRequestType { return javax.ws.rs.HttpMethod.DELETE; } }, + SEARCH { @Override @@ -245,6 +249,42 @@ public enum ServiceRequestType { return javax.ws.rs.HttpMethod.GET; } }, + + SYNC { + + @Override + public int[] validStatusCodes() { + final int[] STATUS_CODES = { + Response.Status.OK.getStatusCode(), + Response.Status.BAD_REQUEST.getStatusCode(), + Response.Status.UNAUTHORIZED.getStatusCode(), + Response.Status.FORBIDDEN.getStatusCode(), + Response.Status.NOT_FOUND.getStatusCode(), + Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() + }; + Arrays.sort(STATUS_CODES); + return STATUS_CODES; + } + + @Override + public boolean isValidStatusCode(int statusCode) { + if (Arrays.binarySearch(SYNC.validStatusCodes(), statusCode) >= 0) { + return true; + } else { + return false; + } + } + + @Override + public String validStatusCodesAsString() { + return Arrays.toString(SYNC.validStatusCodes()); + } + + @Override + public String httpMethodName() { + return javax.ws.rs.HttpMethod.GET; // Should be POST + } + }, // Used by guard code. NON_EXISTENT { diff --git a/services/common/src/main/java/org/collectionspace/services/common/context/AbstractServiceContextImpl.java b/services/common/src/main/java/org/collectionspace/services/common/context/AbstractServiceContextImpl.java index 21fd25516..716ad14fb 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/context/AbstractServiceContextImpl.java +++ b/services/common/src/main/java/org/collectionspace/services/common/context/AbstractServiceContextImpl.java @@ -33,6 +33,7 @@ import javax.ws.rs.core.UriInfo; import org.collectionspace.authentication.spi.AuthNContext; import org.collectionspace.services.client.AuthorityClient; +import org.collectionspace.services.client.CollectionSpaceClient; import org.collectionspace.services.client.IClientQueryParams; import org.collectionspace.services.client.IQueryManager; import org.collectionspace.services.client.workflow.WorkflowClient; @@ -633,27 +634,51 @@ public abstract class AbstractServiceContextImpl return valHandlers; } + /** + * If one doesn't already exist, use the default properties filename to load a set of properties that + * will be used to create an HTTP client to a CollectionSpace instance. + */ @Override public AuthorityClient getClient() throws Exception { AuthorityClient result = authorityClient; - + if (authorityClient == null) { - String authorityClientClazz = getServiceBinding().getClientHandler(); - ClassLoader tccl = Thread.currentThread().getContextClassLoader(); - authorityClientClazz = authorityClientClazz.trim(); - try { - Class c = tccl.loadClass(authorityClientClazz); - if (AuthorityClient.class.isAssignableFrom(c)) { - result = authorityClient = ((AuthorityClient) c.newInstance()); - } else { - logger.error(String.format("The service binding clientHandler class '%s' for '%s' service was not of type AuthorityClient.", - authorityClientClazz, this.getServiceName())); - } - } catch (ClassNotFoundException e) { - String msg = String.format("Missing document validation handler: '%s'.", authorityClientClazz); - logger.warn(msg); - logger.trace(msg, e); - } + result = authorityClient = getClient(CollectionSpaceClient.DEFAULT_CLIENT_PROPERTIES_FILENAME); + } + + return result; + } + + /* + * Use the properties filename passed in to load the URL and credentials that will be used + * to create a new HTTP client. + * + * Never uses or resets the this.authorityClient member. Always creates a new HTTP client using + * the loaded properties. + * + * (non-Javadoc) + * @see org.collectionspace.services.common.context.ServiceContext#getClient(java.lang.String) + */ + @Override + public AuthorityClient getClient(String clientPropertiesFilename) throws Exception { + AuthorityClient result = null; + + String authorityClientClazz = getServiceBinding().getClientHandler(); + ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + authorityClientClazz = authorityClientClazz.trim(); + try { + Class c = tccl.loadClass(authorityClientClazz); + if (AuthorityClient.class.isAssignableFrom(c)) { + result = authorityClient = ((AuthorityClient) c.newInstance()); + result.setClientProperties(clientPropertiesFilename); + } else { + logger.error(String.format("The service binding clientHandler class '%s' for '%s' service was not of type AuthorityClient.", + authorityClientClazz, this.getServiceName())); + } + } catch (ClassNotFoundException e) { + String msg = String.format("Missing document validation handler: '%s'.", authorityClientClazz); + logger.warn(msg); + logger.trace(msg, e); } return result; diff --git a/services/common/src/main/java/org/collectionspace/services/common/context/ServiceContext.java b/services/common/src/main/java/org/collectionspace/services/common/context/ServiceContext.java index 0275bf484..f72dbe648 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/context/ServiceContext.java +++ b/services/common/src/main/java/org/collectionspace/services/common/context/ServiceContext.java @@ -357,6 +357,8 @@ public interface ServiceContext { public void setRepositoryDomain(RepositoryDomainType repositoryDomain); public CollectionSpaceClient getClient() throws Exception; + + public CollectionSpaceClient getClient(String clientProperitesFilename) throws Exception; /** * @return the JAX-RS resource of service for the current context. diff --git a/services/person/client/src/test/java/org/collectionspace/services/client/test/PersonAuthorityServiceTest.java b/services/person/client/src/test/java/org/collectionspace/services/client/test/PersonAuthorityServiceTest.java index 54cb1ccbe..29c301791 100644 --- a/services/person/client/src/test/java/org/collectionspace/services/client/test/PersonAuthorityServiceTest.java +++ b/services/person/client/src/test/java/org/collectionspace/services/client/test/PersonAuthorityServiceTest.java @@ -49,8 +49,6 @@ import org.collectionspace.services.person.PersonauthoritiesCommon; import org.collectionspace.services.person.PersonTermGroup; import org.collectionspace.services.person.PersonTermGroupList; import org.collectionspace.services.person.PersonsCommon; -import org.jboss.resteasy.client.ClientResponse; -//import org.jboss.resteasy.plugins.providers.multipart.OutputPart; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; @@ -1269,9 +1267,11 @@ public class PersonAuthorityServiceTest extends AbstractAuthorityServiceTest entry : allResourceItemIdsCreated.entrySet()) { - itemResourceId = entry.getKey(); - parentResourceId = entry.getValue(); - // Note: Any non-success responses from the delete operation - // below are ignored and not reported. - Response response = client.deleteItem(parentResourceId, itemResourceId); - try { - int status = response.getStatus(); - if (status != Response.Status.OK.getStatusCode()) { - logger.debug(String.format("Could not deleted authority item '%s' in authority '%s'.", - itemResourceId, parentResourceId)); - } - } finally { - response.close(); - } - } - // Clean up item using the SAS client resources. - client = (PersonAuthorityClient) this.getSASClientInstance(); - for (Map.Entry entry : allResourceItemIdsCreated.entrySet()) { - itemResourceId = entry.getKey(); - parentResourceId = entry.getValue(); - // Note: Any non-success responses from the delete operation - // below are ignored and not reported. - client.deleteItem(parentResourceId, itemResourceId).close(); - } // - // Finally, clean up parent resources. + // Finally, clean call our superclass' cleanUp method. // super.cleanUp(); } @@ -1486,7 +1460,7 @@ public class PersonAuthorityServiceTest extends AbstractAuthorityServiceTest