]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.core/src/test/java/org/argeo/slc/core/process/SlcExecutionCastorTest.java
Added testModify to SlcExecutionHibernateTest. So that date format errors don't show...
[gpl/argeo-slc.git] / org.argeo.slc.core / src / test / java / org / argeo / slc / core / process / SlcExecutionCastorTest.java
1 package org.argeo.slc.core.process;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.io.StringReader;
6 import java.io.StringWriter;
7 import java.text.SimpleDateFormat;
8 import java.util.UUID;
9
10 import javax.xml.transform.stream.StreamResult;
11 import javax.xml.transform.stream.StreamSource;
12
13 import org.apache.commons.io.IOUtils;
14 import org.apache.commons.logging.Log;
15 import org.apache.commons.logging.LogFactory;
16 import org.argeo.slc.msg.process.SlcExecutionRequest;
17 import org.argeo.slc.msg.process.SlcExecutionStepsRequest;
18 import org.argeo.slc.unit.AbstractSpringTestCase;
19 import org.springframework.oxm.Marshaller;
20 import org.springframework.oxm.Unmarshaller;
21
22 public class SlcExecutionCastorTest extends AbstractSpringTestCase {
23 private Log log = LogFactory.getLog(getClass());
24
25 private Marshaller marshaller;
26 private Unmarshaller unmarshaller;
27
28 public void setUp() {
29 marshaller = getBean("marshaller");
30 unmarshaller = getBean("marshaller");
31 }
32
33 public void testMarshalling() throws Exception {
34 SlcExecution slcExec = SlcExecutionTestUtils.createSimpleSlcExecution();
35
36 SlcExecutionRequest msgSave = new SlcExecutionRequest();
37 msgSave.setSlcExecution(slcExec);
38
39 String msgSaveXml = marshallAndLog(marshaller, msgSave);
40
41 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
42 SlcExecutionStep step0 = new SlcExecutionStep();
43 step0.setUuid(UUID.randomUUID().toString());
44 step0.setBegin(sdf.parse("2008-04-17 18:21"));
45 step0.setType("LOG");
46 step0.addLog("A log message\nand another line");
47
48 SlcExecutionStep step1 = new SlcExecutionStep();
49 step1.setUuid(UUID.randomUUID().toString());
50 step1.setBegin(sdf.parse("2008-04-17 18:25"));
51 step1.setType("LOG");
52 step1.addLog("A nother log message");
53
54 SlcExecutionStepsRequest msgNotif = new SlcExecutionStepsRequest();
55 msgNotif.addStep(step0);
56 msgNotif.addStep(step1);
57 msgNotif.setSlcExecutionUuid(slcExec.getUuid());
58
59 String msgNotifXml = marshallAndLog(marshaller, msgNotif);
60
61 SlcExecutionRequest msgSaveUnm = unmarshall(unmarshaller, msgSaveXml);
62 assertNotNull(msgSaveUnm);
63 SlcExecutionTestUtils.assertSlcExecution(slcExec, msgSaveUnm
64 .getSlcExecution());
65
66 SlcExecutionStepsRequest msgNotifUnm = unmarshall(unmarshaller,
67 msgNotifXml);
68 assertNotNull(msgNotifUnm);
69 assertEquals(slcExec.getUuid(), msgNotifUnm.getSlcExecutionUuid());
70 assertEquals(2, msgNotifUnm.getSteps().size());
71 SlcExecutionTestUtils.assertSlcExecutionStep(step0, msgNotifUnm
72 .getSteps().get(0));
73 SlcExecutionTestUtils.assertSlcExecutionStep(step1, msgNotifUnm
74 .getSteps().get(1));
75
76 SlcExecution slcExecUnm = msgSaveUnm.getSlcExecution();
77 slcExecUnm.getSteps().addAll(msgNotifUnm.getSteps());
78
79 SlcExecutionRequest msgUpdate = new SlcExecutionRequest();
80 msgUpdate.setSlcExecution(slcExecUnm);
81 String msgUpdateXml = marshallAndLog(marshaller, msgUpdate);
82
83 SlcExecutionRequest msgUpdateUnm = unmarshall(unmarshaller,
84 msgUpdateXml);
85 assertNotNull(msgUpdateUnm);
86 }
87
88 private String marshallAndLog(Marshaller marshaller, Object obj)
89 throws IOException {
90 StringWriter writer = new StringWriter();
91 marshaller.marshal(obj, new StreamResult(writer));
92 String xml = writer.toString();
93 log.info(xml);
94 IOUtils.closeQuietly(writer);
95 return xml;
96 }
97
98 private <T> T unmarshall(Unmarshaller unmarshaller, String xml)
99 throws IOException {
100 StringReader reader = new StringReader(xml);
101 Object obj = unmarshaller.unmarshal(new StreamSource(reader));
102 IOUtils.closeQuietly(reader);
103 return (T) obj;
104 }
105 }