package org.apache.ode.bpel.engine; import java.util.Map; import javax.xml.namespace.QName; import org.apache.ode.bpel.dao.MessageDAO; import org.apache.ode.bpel.dao.MessageExchangeDAO; import org.apache.ode.utils.DOMUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import junit.framework.TestCase; /** * Tests for org.apache.ode.bpel.iapi.MessageImpl */ public class MessageTest extends TestCase { /** * Test that setting a header replaces existing header of same name */ public void testSetHeaderPart() { String headerName = "h1"; MessageDAOMock mock = new MessageDAOMock(); MessageImpl message = new MessageImpl(mock); message.setHeaderPart(headerName, "hello"); // overwrite existing header String expected = "bye"; message.setHeaderPart(headerName, expected); assertHasHeaders(message, mock, 1, headerName, expected); // try setting element content Document doc = DOMUtils.newDocument(); Element content = doc.createElement("content"); content.setTextContent(expected); message.setHeaderPart(headerName, content); assertHasHeaders(message, mock, 1, headerName, expected); // check children not removed content.setTextContent(expected); message.setHeaderPart("content", "testing"); assertHasHeaders(message, mock, 2, headerName, expected); Element el = message.getHeaderPart(headerName); assertTrue("Missing header content",el.getElementsByTagName("content").getLength() == 1); // add new header String newHeader = "h2"; String newExpected = "why"; message.setHeaderPart(newHeader, newExpected); assertHasHeaders(message, mock, 3, newHeader, newExpected); } private static void assertHasHeaders(MessageImpl message, MessageDAOMock mock, int size, String name, String expected) { Map<String, Node> headers = message.getHeaderParts(); assertTrue("Expected: "+size+" headers but found: "+headers.size(),headers.size() == size); assertEquals("Expected header content: "+expected+" but found: "+headers.get(name).getTextContent(),headers.get(name).getTextContent(), expected); // check underlying document to be sure Element el = mock.getHeader(); NodeList list = el.getElementsByTagName(name); assertTrue("There should only be 1 element in headers for name: "+name, list.getLength() == 1); } /** * Mock MessageDAO to test simple Message operations */ private class MessageDAOMock implements MessageDAO { Document _doc = null; Element _header = null; public MessageDAOMock() { _doc = DOMUtils.newDocument(); _header = _doc.createElement("header"); } public Element getData() { return null; } public Element getHeader() { return _header; } public MessageExchangeDAO getMessageExchange() { return null; } public QName getType() { return null; } public void setData(Element value) { } public void setHeader(Element value) { _header = value; } public void setType(QName type) { } } }