/* The contents of this file are subject to the license and copyright terms * detailed in the license directory at the root of the source tree (also * available online at http://fedora-commons.org/license/). */ package fedora.server.storage.translation; import java.io.ByteArrayInputStream; import java.util.List; import org.junit.After; import org.junit.Test; import fedora.server.storage.types.AuditRecord; import fedora.server.storage.types.Datastream; import fedora.server.storage.types.DatastreamXMLMetadata; import fedora.server.utilities.DateUtility; import fedora.test.FedoraTestCase; import static fedora.server.storage.translation.DOTranslationUtility.DESERIALIZE_INSTANCE; import static fedora.server.storage.translation.DOTranslationUtility.SERIALIZE_EXPORT_ARCHIVE; import static fedora.server.storage.translation.DOTranslationUtility.SERIALIZE_EXPORT_MIGRATE; import static fedora.server.storage.translation.DOTranslationUtility.SERIALIZE_EXPORT_PUBLIC; import static fedora.server.storage.translation.DOTranslationUtility.SERIALIZE_STORAGE_INTERNAL; /** * @author Edwin Shin * @version $Id: DOTranslationUtilityTest.java 6996 2008-04-18 18:46:06Z * pangloss $ */ public class DOTranslationUtilityTest extends FedoraTestCase { /** * @throws java.lang.Exception */ @Override @After public void tearDown() throws Exception { } /** * Test method for * {@link fedora.server.storage.translation.DOTranslationUtility#normalizeDSLocationURLs(java.lang.String, fedora.server.storage.types.Datastream, int)}. */ @Test public void testNormalizeDSLocationURLs() { String baseURL = getBaseURL(); Datastream ds, ds2; String pid = "demo:foo"; ContextControlPair[] absoluteURLPairs = {new ContextControlPair(DESERIALIZE_INSTANCE, "E"), new ContextControlPair(DESERIALIZE_INSTANCE, "R"), new ContextControlPair(SERIALIZE_EXPORT_PUBLIC, "E"), new ContextControlPair(SERIALIZE_EXPORT_PUBLIC, "R")}; ContextControlPair[] dissemURLPairs = {new ContextControlPair(SERIALIZE_EXPORT_PUBLIC, "M"), new ContextControlPair(SERIALIZE_EXPORT_MIGRATE, "M"), new ContextControlPair(SERIALIZE_EXPORT_ARCHIVE, "M")}; ContextControlPair[] localURLPairs = { new ContextControlPair(SERIALIZE_EXPORT_MIGRATE, "E"), new ContextControlPair(SERIALIZE_EXPORT_MIGRATE, "R"), new ContextControlPair(SERIALIZE_STORAGE_INTERNAL, "E"), new ContextControlPair(SERIALIZE_STORAGE_INTERNAL, "R"), new ContextControlPair(SERIALIZE_EXPORT_ARCHIVE, "E"), new ContextControlPair(SERIALIZE_EXPORT_ARCHIVE, "R")}; // TODO also need one for internal ds = new DatastreamXMLMetadata(); for (ContextControlPair pair : absoluteURLPairs) { ds.DSControlGrp = pair.getControlGroup(); ds.DSLocation = "http://localhost:8080/fedora-demo/simple-image-demo/coliseum-veryhigh.jpg"; ds2 = DOTranslationUtility.normalizeDSLocationURLs(pid, ds, pair .getContext()); assertEquals(ds.DSLocation, ds2.DSLocation); ds.DSLocation = baseURL + "/get/demo:foo/DS1"; ds2 = DOTranslationUtility.normalizeDSLocationURLs(pid, ds, pair .getContext()); assertEquals(ds.DSLocation, ds2.DSLocation); } ds = new DatastreamXMLMetadata(); for (ContextControlPair pair : dissemURLPairs) { ds.DatastreamID = "DC"; ds.DSControlGrp = pair.getControlGroup(); ds.DSLocation = String .format("%s/get/%s/%s", baseURL, pid, ds.DatastreamID); System.setProperty("fedoraAppServerContext", getFedoraAppServerContext()); ds2 = DOTranslationUtility.normalizeDSLocationURLs(pid, ds, pair .getContext()); assertEquals(ds.DSLocation, ds2.DSLocation); } ds = new DatastreamXMLMetadata(); for (ContextControlPair pair : localURLPairs) { ds.DatastreamID = "DC"; ds.DSControlGrp = pair.getControlGroup(); String url = String .format("%s/get/%s/%s", baseURL, pid, ds.DatastreamID); String localURL = String .format("http://local.fedora.server/" + getFedoraAppServerContext() + "/get/%s/%s", pid, ds.DatastreamID); ds.DSLocation = url; ds2 = DOTranslationUtility.normalizeDSLocationURLs(pid, ds, pair .getContext()); assertEquals(localURL, ds2.DSLocation); ds.DSLocation = url; ds2 = DOTranslationUtility.normalizeDSLocationURLs(pid, ds, pair .getContext()); assertEquals(localURL, ds2.DSLocation); } } /** * Test method for * {@link fedora.server.storage.translation.DOTranslationUtility#normalizeInlineXML(java.lang.String, int)}. */ @Test public void testNormalizeInlineXML() { String xml = "<foo/>"; String result = DOTranslationUtility .normalizeInlineXML(xml, DOTranslationUtility.SERIALIZE_EXPORT_PUBLIC); assertEquals(xml, result); } /** * Test method for * {@link fedora.server.storage.translation.DOTranslationUtility#getAuditRecords(fedora.server.storage.types.Datastream)}. */ @Test public void testGetAuditRecords() throws Exception { StringBuilder sb = new StringBuilder(); sb .append("<audit:auditTrail xmlns:audit=\"info:fedora/fedora-system:def/audit#\">"); sb.append(" <audit:record audit:ID=\"AUDREC1\">"); sb.append(" <audit:process audit:type=\"Fedora API-M\"/>"); sb .append(" <audit:action>modifyDatastreamByReference</audit:action>"); sb.append(" <audit:componentID>DRAWING-ICON</audit:componentID>"); sb .append(" <audit:responsibility>fedoraAdmin</audit:responsibility>"); sb.append(" <audit:date>2005-01-20T22:46:07.428Z</audit:date>"); sb.append(" <audit:justification>spite</audit:justification>"); sb.append(" </audit:record>"); sb.append(" <audit:record audit:ID=\"AUDREC2\">"); sb.append(" <audit:process audit:type=\"Fedora API-M\"/>"); sb.append(" <audit:action>modifyDatastreamByValue</audit:action>"); sb.append(" <audit:componentID>DC</audit:componentID>"); sb .append(" <audit:responsibility>fedoraAdmin</audit:responsibility>"); sb.append(" <audit:date>2008-01-20T22:46:07.001Z</audit:date>"); sb.append(" <audit:justification>malice</audit:justification>"); sb.append(" </audit:record>"); sb.append("</audit:auditTrail>"); String auditXML = sb.toString(); List<AuditRecord> records = DOTranslationUtility.getAuditRecords(new ByteArrayInputStream(auditXML.getBytes("utf-8"))); assertEquals(2, records.size()); assertEquals("AUDREC1", records.get(0).id); assertEquals("modifyDatastreamByReference", records.get(0).action); assertEquals("DRAWING-ICON", records.get(0).componentID); assertEquals(DateUtility.convertStringToDate("2005-01-20T22:46:07.428Z"), records.get(0).date); assertEquals("spite", records.get(0).justification); assertEquals("Fedora API-M", records.get(0).processType); assertEquals("fedoraAdmin", records.get(0).responsibility); assertEquals("AUDREC2", records.get(1).id); assertEquals("modifyDatastreamByValue", records.get(1).action); assertEquals("DC", records.get(1).componentID); assertEquals(DateUtility.convertStringToDate("2008-01-20T22:46:07.001Z"), records.get(1).date); assertEquals("malice", records.get(1).justification); assertEquals("Fedora API-M", records.get(1).processType); assertEquals("fedoraAdmin", records.get(1).responsibility); } // /** // * Test method for {@link fedora.server.storage.translation.DOTranslationUtility#setDatastreamDefaults(fedora.server.storage.types.Datastream)}. // */ // @Test // public void testSetDatastreamDefaults() { // fail("Not yet implemented"); // } // // /** // * Test method for {@link fedora.server.storage.translation.DOTranslationUtility#appendXMLStream(java.io.InputStream, java.lang.StringBuffer, java.lang.String)}. // */ // @Test // public void testAppendXMLStream() { // fail("Not yet implemented"); // } // // /** // * Test method for {@link fedora.server.storage.translation.DOTranslationUtility#setDisseminatorDefaults(fedora.server.storage.types.Disseminator)}. // */ // @Test // public void testSetDisseminatorDefaults() { // fail("Not yet implemented"); // } // // /** // * Test method for {@link fedora.server.storage.translation.DOTranslationUtility#oneString(java.lang.String[])}. // */ // @Test // public void testOneString() { // fail("Not yet implemented"); // } // // /** // * Test method for {@link fedora.server.storage.translation.DOTranslationUtility#writeToStream(java.lang.StringBuffer, java.io.OutputStream, java.lang.String, boolean)}. // */ // @Test // public void testWriteToStream() { // fail("Not yet implemented"); // } // // /** // * Test method for {@link fedora.server.storage.translation.DOTranslationUtility#getStateAttribute(fedora.server.storage.types.DigitalObject)}. // */ // @Test // public void testGetStateAttribute() { // fail("Not yet implemented"); // } // // /** // * Test method for {@link fedora.server.storage.translation.DOTranslationUtility#getTypeAttribute(fedora.server.storage.types.DigitalObject, fedora.common.xml.format.XMLFormat)}. // */ // @Test // public void testGetTypeAttribute() { // fail("Not yet implemented"); // } // // /** // * Test method for {@link fedora.server.storage.translation.DOTranslationUtility#validateAudit(fedora.server.storage.types.AuditRecord)}. // */ // @Test // public void testValidateAudit() { // fail("Not yet implemented"); // } // // /** // * Test method for {@link fedora.server.storage.translation.DOTranslationUtility#getAuditTrail(fedora.server.storage.types.DigitalObject)}. // */ // @Test // public void testGetAuditTrail() { // fail("Not yet implemented"); // } // Supports legacy test runners public static junit.framework.Test suite() { return new junit.framework.JUnit4TestAdapter(DOTranslationUtilityTest.class); } class ContextControlPair { private final int context; private final String controlGroup; public ContextControlPair(int context, String controlGroup) { this.context = context; this.controlGroup = controlGroup; } public int getContext() { return context; } public String getControlGroup() { return controlGroup; } } }