package edu.stanford.sulair.dlss.dor.admin; import static org.junit.Assert.*; import static org.junit.Assert.assertEquals; import java.io.ByteArrayInputStream; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import edu.stanford.sulair.dlss.dor.AbstractXmlMarhallingTest; import org.custommonkey.xmlunit.Diff; import org.custommonkey.xmlunit.XMLAssert; import org.junit.Test; public class ProcessTests extends AbstractXmlMarhallingTest { @Test public void dumpProcessXml() throws Exception { JAXBContext jaxbContext = JAXBContext .newInstance(edu.stanford.sulair.dlss.dor.admin.Process.class); Process p = new Process(); p.setName("download"); p.setStatus("waiting"); Calendar c = Calendar.getInstance(); c.set(2008, 10, 15, 13, 30, 0); p.setDatetime(c.getTime()); p.setDatastream("GoogleWorkflow"); p.setDruid("dr:123"); p.setId(5); p.setErrorMessage("NullPointerException"); p.setErrorText("stacktrace"); p.setLifecycle("in-process"); p.setElapsed(1.173); p.setRepository("dor"); String xml = marshall(jaxbContext, p); System.out.println(xml); String expected = "<process name=\"download\" status=\"waiting\" datetime=\"2008-11-15T13:30:00-0800\" attempts=\"0\" errorMessage=\"NullPointerException\" " + "errorText=\"stacktrace\" lifecycle=\"in-process\" elapsed=\"1.173\" />"; XMLAssert.assertXMLEqual(expected, xml); Diff diff = new Diff(xml, expected); XMLAssert.assertXMLIdentical(diff, true); } @Test public void unMarshallProcessXml() throws JAXBException, Exception { String xml = "<process name=\"download\" status=\"waiting\" datetime=\"2008-11-15T13:30:00-0800\" errorMessage=\"NullPointerException\" errorText=\"stacktrace\" lifecycle=\"ingested\" elapsed=\"1.173\"/>"; JAXBContext jaxbContext = JAXBContext .newInstance(edu.stanford.sulair.dlss.dor.admin.Process.class); Unmarshaller um = jaxbContext.createUnmarshaller(); ByteArrayInputStream bis = new ByteArrayInputStream(xml.getBytes()); Process p = (Process) um.unmarshal(bis); assertEquals("download", p.getName()); assertEquals("waiting", p.getStatus()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); Date d = sdf.parse("2008-11-15T13:30:00-0800"); assertEquals(0, d.compareTo(p.getDatetime())); assertEquals("NullPointerException", p.getErrorMessage()); assertEquals("stacktrace", p.getErrorText()); assertEquals("ingested", p.getLifecycle()); assertEquals(1.173, p.getElapsed(), .01); } @Test public void unMarshallProcessXmlWithoutCompletedDate() throws JAXBException, Exception { Date now = new Date(); String xml = "<process name=\"download\" status=\"waiting\" />"; JAXBContext jaxbContext = JAXBContext .newInstance(edu.stanford.sulair.dlss.dor.admin.Process.class); Unmarshaller um = jaxbContext.createUnmarshaller(); ByteArrayInputStream bis = new ByteArrayInputStream(xml.getBytes()); Process p = (Process) um.unmarshal(bis); assertEquals("download", p.getName()); assertEquals("waiting", p.getStatus()); assertTrue(p.getDatetime().after(now)); } }