From 8485f878af97089c18e19caeb6acd5c9385c19cc Mon Sep 17 00:00:00 2001 From: Richard Millet Date: Thu, 24 Feb 2011 00:37:33 +0000 Subject: [PATCH] CSPACE-3598: Media and Blob tests needed to create example media data in the "Nightly" build --- .../services/client/test/BlobServiceTest.java | 43 +++++------ .../client/test/AbstractServiceTestImpl.java | 3 + .../services/client/MediaClient.java | 15 +++- .../services/client/MediaProxy.java | 16 +++-- .../client/test/MediaServiceTest.java | 68 ++++++++++++++++++ .../test/resources/blobs/03-31-09_1404.jpg | Bin 0 -> 69430 bytes .../services/media/MediaResource.java | 38 +++++----- 7 files changed, 136 insertions(+), 47 deletions(-) create mode 100644 services/media/client/src/test/resources/blobs/03-31-09_1404.jpg diff --git a/services/blob/client/src/test/java/org/collectionspace/services/client/test/BlobServiceTest.java b/services/blob/client/src/test/java/org/collectionspace/services/client/test/BlobServiceTest.java index 8867531fc..d766f4549 100644 --- a/services/blob/client/src/test/java/org/collectionspace/services/client/test/BlobServiceTest.java +++ b/services/blob/client/src/test/java/org/collectionspace/services/client/test/BlobServiceTest.java @@ -57,7 +57,6 @@ public class BlobServiceTest extends AbstractServiceTestImpl { private final String CLASS_NAME = BlobServiceTest.class.getName(); private final Logger logger = LoggerFactory.getLogger(CLASS_NAME); private String knownResourceId = null; - private static final String BLOBS_DIR = "blobs"; private boolean blobCleanup = true; @@ -96,7 +95,7 @@ public class BlobServiceTest extends AbstractServiceTestImpl { } } - private boolean blobCleanup() { + private boolean isBlobCleanup() { return blobCleanup; } @@ -129,14 +128,16 @@ public class BlobServiceTest extends AbstractServiceTestImpl { File[] children = blobsDir.listFiles(); if (children != null && children.length > 0) { for (File child : children) { - String mimeType = this.getMimeType(child); - logger.debug("Processing file URI: " + child.getAbsolutePath()); - logger.debug("MIME type is: " + mimeType); - ClientResponse res = client.createBlobFromURI(child.getAbsolutePath()); - assertStatusCode(res, testName); - if (blobCleanup == true) { - allResourceIdsCreated.add(extractId(res)); - } + if (child.isHidden() == false) { + String mimeType = this.getMimeType(child); + logger.debug("Processing file URI: " + child.getAbsolutePath()); + logger.debug("MIME type is: " + mimeType); + ClientResponse res = client.createBlobFromURI(child.getAbsolutePath()); + assertStatusCode(res, testName); + if (isBlobCleanup() == true) { + allResourceIdsCreated.add(extractId(res)); + } + } } } else { logger.debug("Directory: " + blobsDirPath + " is empty or cannot be read."); @@ -160,16 +161,18 @@ public class BlobServiceTest extends AbstractServiceTestImpl { File[] children = blobsDir.listFiles(); if (children != null && children.length > 0) { for (File child : children) { - String mimeType = this.getMimeType(child); - logger.debug("Posting file: " + child.getAbsolutePath()); - logger.debug("MIME type is: " + mimeType); - MultipartFormDataOutput form = new MultipartFormDataOutput(); - OutputPart outputPart = form.addFormData("file", child, MediaType.valueOf(mimeType)); - ClientResponse res = client.createBlobFromFormData(form); - assertStatusCode(res, testName); - if (blobCleanup == true) { - allResourceIdsCreated.add(extractId(res)); - } + if (child.isHidden() == false) { + String mimeType = this.getMimeType(child); + logger.debug("Posting file: " + child.getAbsolutePath()); + logger.debug("MIME type is: " + mimeType); + MultipartFormDataOutput form = new MultipartFormDataOutput(); + OutputPart outputPart = form.addFormData("file", child, MediaType.valueOf(mimeType)); + ClientResponse res = client.createBlobFromFormData(form); + assertStatusCode(res, testName); + if (blobCleanup == true) { + allResourceIdsCreated.add(extractId(res)); + } + } } } else { logger.debug("Directory: " + blobsDirPath + " is empty or cannot be read."); 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 acd7dae5a..42be818d1 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 @@ -69,9 +69,12 @@ public abstract class AbstractServiceTestImpl extends BaseServiceTest implements static protected final String RESOURCE_PATH = "src" + File.separator + "test" + File.separator + "resources"; + protected static final String BLOBS_DIR = "blobs"; + static protected final String DEFAULT_MIME = "application/octet-stream; charset=ISO-8859-1"; static private final String NO_TEST_CLEANUP = "noTestCleanup"; static protected final String NO_BLOB_CLEANUP = "noBlobCleanup"; + static protected final String NO_MEDIA_CLEANUP = "noMediaCleanup"; protected String getMimeType(File theFile) { String result = null; diff --git a/services/media/client/src/main/java/org/collectionspace/services/client/MediaClient.java b/services/media/client/src/main/java/org/collectionspace/services/client/MediaClient.java index a10b34669..6516d2f06 100644 --- a/services/media/client/src/main/java/org/collectionspace/services/client/MediaClient.java +++ b/services/media/client/src/main/java/org/collectionspace/services/client/MediaClient.java @@ -24,6 +24,7 @@ import org.collectionspace.services.jaxb.AbstractCommonList; import org.jboss.resteasy.client.ProxyFactory; import org.jboss.resteasy.plugins.providers.RegisterBuiltin; +import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput; import org.jboss.resteasy.client.ClientResponse; import org.jboss.resteasy.client.core.executors.ApacheHttpClientExecutor; //import org.jboss.resteasy.plugins.providers.multipart.MultipartInput; @@ -128,10 +129,20 @@ public class MediaClient extends AbstractServiceClientImpl { * @return * */ - public ClientResponse createBlob(String csid, String blobUri) { - return mediaProxy.createBlob(csid, blobUri); + public ClientResponse createBlobFromFormData(String csid, + MultipartFormDataOutput formDataOutput) { + return mediaProxy.createBlobFromFormData(csid, formDataOutput); } + /** + * @param media + * @return + * + */ + public ClientResponse createBlobFromUri(String csid, String blobUri) { + return mediaProxy.createBlobFromUri(csid, blobUri); + } + /** * @param csid * @param media diff --git a/services/media/client/src/main/java/org/collectionspace/services/client/MediaProxy.java b/services/media/client/src/main/java/org/collectionspace/services/client/MediaProxy.java index 28d97631e..89bd4580b 100644 --- a/services/media/client/src/main/java/org/collectionspace/services/client/MediaProxy.java +++ b/services/media/client/src/main/java/org/collectionspace/services/client/MediaProxy.java @@ -17,13 +17,14 @@ import org.collectionspace.services.common.authorityref.AuthorityRefList; import org.collectionspace.services.jaxb.AbstractCommonList; import org.collectionspace.services.client.BlobClient; import org.jboss.resteasy.client.ClientResponse; +import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput; /** * @version $Revision: 2108 $ */ @Path(MediaClient.SERVICE_PATH + "/") -@Produces({"application/xml", "multipart/mixed"}) -@Consumes({"application/xml", "multipart/mixed"}) +@Produces("application/xml") +@Consumes("application/xml") public interface MediaProxy extends CollectionSpaceProxy { //(C)reate @@ -31,9 +32,14 @@ public interface MediaProxy extends CollectionSpaceProxy { ClientResponse create(byte[] xmlPayload); @POST - @Path("{csid}") - @Produces("multipart/form-data") - ClientResponsecreateBlob(@PathParam("csid") String csid, + @Path("/{csid}") + @Consumes("multipart/form-data") + ClientResponse createBlobFromFormData(String csid, + MultipartFormDataOutput formDataOutput); + + @POST + @Path("/{csid}") + ClientResponsecreateBlobFromUri(@PathParam("csid") String csid, @QueryParam(BlobClient.BLOB_URI_PARAM) String blobUri); //(R)ead diff --git a/services/media/client/src/test/java/org/collectionspace/services/client/test/MediaServiceTest.java b/services/media/client/src/test/java/org/collectionspace/services/client/test/MediaServiceTest.java index 84fe26d9a..ca8c97794 100644 --- a/services/media/client/src/test/java/org/collectionspace/services/client/test/MediaServiceTest.java +++ b/services/media/client/src/test/java/org/collectionspace/services/client/test/MediaServiceTest.java @@ -22,6 +22,7 @@ */ package org.collectionspace.services.client.test; +import java.io.File; import java.util.List; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -53,6 +54,28 @@ public class MediaServiceTest extends AbstractServiceTestImpl { private final Logger logger = LoggerFactory.getLogger(MediaServiceTest.class); private String knownResourceId = null; + private boolean mediaCleanup = true; + + /** + * Sets up create tests. + */ + @Override + protected void setupCreate() { + super.setupCreate(); + String noMediaCleanup = System.getProperty(NO_MEDIA_CLEANUP); + if(Boolean.TRUE.toString().equalsIgnoreCase(noMediaCleanup)) { + // + // Don't delete the blobs that we created during the test cycle + // + this.mediaCleanup = false; + } + } + + private boolean isMediaCleanup() { + return mediaCleanup; + } + + @Override public String getServicePathComponent() { return MediaClient.SERVICE_PATH_COMPONENT; @@ -88,6 +111,51 @@ public class MediaServiceTest extends AbstractServiceTestImpl { } allResourceIdsCreated.add(extractId(res)); // Store the IDs from every resource created by tests so they can be deleted after tests have been run. } + + @Test(dataProvider = "testName", dataProviderClass = AbstractServiceTestImpl.class, dependsOnMethods = {"create"}) + public void createWithBlobUri(String testName) throws Exception { + logger.debug(testBanner(testName, CLASS_NAME)); + + setupCreate(); + MediaClient client = new MediaClient(); + PoxPayloadOut multipart = createMediaInstance(createIdentifier()); + ClientResponse mediaRes = client.create(multipart); + assertStatusCode(mediaRes, testName); + String mediaCsid = extractId(mediaRes); + + String currentDir = this.getResourceDir(); + String blobsDirPath = currentDir + File.separator + BLOBS_DIR; + File blobsDir = new File(blobsDirPath); + if (blobsDir != null && blobsDir.exists()) { + File[] children = blobsDir.listFiles(); + if (children != null && children.length > 0) { + File blobFile = null; + for (File child : children) { + if (child.isHidden() == false) { + blobFile = child; + break; + } + } + if (blobFile != null) { + String mimeType = this.getMimeType(blobFile); + logger.debug("Processing file URI: " + blobFile.getAbsolutePath()); + logger.debug("MIME type is: " + mimeType); + ClientResponse res = client.createBlobFromUri(mediaCsid, blobFile.getAbsolutePath()); + assertStatusCode(res, testName); + if (isMediaCleanup() == true) { + allResourceIdsCreated.add(extractId(res)); + allResourceIdsCreated.add(mediaCsid); + } + } else { + logger.debug("Directory: " + blobsDirPath + " contains no readable files."); + } + } else { + logger.debug("Directory: " + blobsDirPath + " is empty or cannot be read."); + } + } else { + logger.debug("Directory: " + blobsDirPath + " is missing or cannot be read."); + } + } // String noTest = System.getProperty("noTestCleanup"); // if(Boolean.TRUE.toString().equalsIgnoreCase(noTest)) { diff --git a/services/media/client/src/test/resources/blobs/03-31-09_1404.jpg b/services/media/client/src/test/resources/blobs/03-31-09_1404.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f24527823be65c0249308d799755e992c900236d GIT binary patch literal 69430 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

xG1ZmX@m%}2!oA=7PSXH^b@jrdQ3$6*(0|Wz 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 Kx%yFJkN?^9O?0LJ literal 0 HcmV?d00001 diff --git a/services/media/service/src/main/java/org/collectionspace/services/media/MediaResource.java b/services/media/service/src/main/java/org/collectionspace/services/media/MediaResource.java index 068b1e66c..24a14ff7e 100644 --- a/services/media/service/src/main/java/org/collectionspace/services/media/MediaResource.java +++ b/services/media/service/src/main/java/org/collectionspace/services/media/MediaResource.java @@ -114,39 +114,38 @@ public class MediaResource extends ResourceBase { public Class getCommonPartClass() { return MediaCommon.class; } - + @POST - @Override - public Response create(@Context UriInfo ui, - String xmlPayload) { + @Path("{csid}") + public Response createBlobWithUri(@PathParam("csid") String csid, + @QueryParam(BlobClient.BLOB_URI_PARAM) String blobUri) { Response response = null; PoxPayloadIn input = null; - MultivaluedMap queryParams = ui.getQueryParameters(); - String blobUri = queryParams.getFirst(BlobClient.BLOB_URI_PARAM); try { - if (blobUri != null) { - ServiceContext ctx = createServiceContext(BlobUtil.BLOB_RESOURCE_NAME, input); - BlobInput blobInput = BlobUtil.getBlobInput(ctx); - blobInput.createBlobFile(blobUri); - response = this.create(input, ctx); - } else { - response = super.create(ui, xmlPayload); - } + ServiceContext ctx = createServiceContext(BlobUtil.BLOB_RESOURCE_NAME, input); + BlobInput blobInput = BlobUtil.getBlobInput(ctx); + blobInput.createBlobFile(blobUri); + response = this.create(input, ctx); + // + // Next, update the Media record to be linked to the blob + // + ServiceContext mediaContext = createServiceContext(); + BlobUtil.setBlobInput(mediaContext, blobInput); //and put the blobInput into the Media context + response = this.update(csid, input, mediaContext); } catch (Exception e) { throw bigReThrow(e, ServiceMessages.CREATE_FAILED); } - + return response; } - + @POST @Path("{csid}") @Consumes("multipart/form-data") - @Produces("application/xml") public Response createBlob(@Context HttpServletRequest req, - @QueryParam(BlobClient.BLOB_URI_PARAM) String blobUri, - @PathParam("csid") String csid) { + @PathParam("csid") String csid, + @QueryParam(BlobClient.BLOB_URI_PARAM) String blobUri) { //FIXME: REM - Do we really need the blobUri query param here? PoxPayloadIn input = null; Response response = null; try { @@ -163,7 +162,6 @@ public class MediaResource extends ResourceBase { ServiceContext mediaContext = createServiceContext(); BlobUtil.setBlobInput(mediaContext, blobInput); //and put the blobInput into the Media context this.update(csid, input, mediaContext); - } catch (Exception e) { throw bigReThrow(e, ServiceMessages.CREATE_FAILED); } -- 2.47.3