| 1 | package gov.hhs.fha.nhinc.transform.audit;
|
|---|
| 2 |
|
|---|
| 3 | import com.services.nhinc.schema.auditmessage.AuditMessageType;
|
|---|
| 4 | import com.services.nhinc.schema.auditmessage.AuditSourceIdentificationType;
|
|---|
| 5 | import com.services.nhinc.schema.auditmessage.EventIdentificationType;
|
|---|
| 6 | import static org.junit.Assert.*;
|
|---|
| 7 | import org.junit.Test;
|
|---|
| 8 | import gov.hhs.fha.nhinc.common.auditlog.LogEventRequestType;
|
|---|
| 9 | import gov.hhs.fha.nhinc.common.auditlog.LogNhinSubscribeRequestType;
|
|---|
| 10 | import gov.hhs.fha.nhinc.common.auditlog.LogSubscribeResponseType;
|
|---|
| 11 | import gov.hhs.fha.nhinc.common.auditlog.SubscribeResponseMessageType;
|
|---|
| 12 | import gov.hhs.fha.nhinc.common.nhinccommon.AssertionType;
|
|---|
| 13 | import gov.hhs.fha.nhinc.common.nhinccommon.HomeCommunityType;
|
|---|
| 14 | import gov.hhs.fha.nhinc.common.nhinccommoninternalorch.SubscribeRequestType;
|
|---|
| 15 | import oasis.names.tc.ebxml_regrep.xsd.rim._3.AdhocQueryType;
|
|---|
| 16 | import gov.hhs.fha.nhinc.common.nhinccommon.PersonNameType;
|
|---|
| 17 | import oasis.names.tc.ebxml_regrep.xsd.rim._3.SlotType1;
|
|---|
| 18 | import gov.hhs.fha.nhinc.common.nhinccommon.UserType;
|
|---|
| 19 | import javax.xml.parsers.DocumentBuilderFactory;
|
|---|
| 20 | import javax.xml.parsers.ParserConfigurationException;
|
|---|
| 21 | import javax.xml.ws.wsaddressing.W3CEndpointReference;
|
|---|
| 22 | import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
|
|---|
| 23 | import oasis.names.tc.ebxml_regrep.xsd.rim._3.ValueListType;
|
|---|
| 24 | import org.apache.commons.logging.Log;
|
|---|
| 25 | import org.apache.commons.logging.LogFactory;
|
|---|
| 26 | import org.oasis_open.docs.wsn.b_2.FilterType;
|
|---|
| 27 | import org.oasis_open.docs.wsn.b_2.Subscribe;
|
|---|
| 28 | import org.oasis_open.docs.wsn.b_2.TopicExpressionType;
|
|---|
| 29 | import org.oasis_open.docs.wsn.b_2.SubscribeResponse;
|
|---|
| 30 | import org.w3c.dom.Document;
|
|---|
| 31 | import org.w3c.dom.Element;
|
|---|
| 32 |
|
|---|
| 33 | /**
|
|---|
| 34 | * Test for SubscribeTransforms class
|
|---|
| 35 | *
|
|---|
| 36 | * @author Neil Webb
|
|---|
| 37 | */
|
|---|
| 38 | public class SubscribeTransformsTest
|
|---|
| 39 | {
|
|---|
| 40 | private static Log log = LogFactory.getLog(SubscribeTransformsTest.class);
|
|---|
| 41 |
|
|---|
| 42 | @Test
|
|---|
| 43 | public void testSubscribeRequest()
|
|---|
| 44 | {
|
|---|
| 45 | log.debug("Begin testSubscribeRequest");
|
|---|
| 46 | try
|
|---|
| 47 | {
|
|---|
| 48 | LogNhinSubscribeRequestType logSubscribeRequest = new LogNhinSubscribeRequestType();
|
|---|
| 49 | logSubscribeRequest.setDirection("Inbound");
|
|---|
| 50 | logSubscribeRequest.setInterface("Nhin");
|
|---|
| 51 |
|
|---|
| 52 | SubscribeRequestType subscribeRequest = new SubscribeRequestType();
|
|---|
| 53 | Subscribe subscribe = new Subscribe();
|
|---|
| 54 |
|
|---|
| 55 | // Consumer Reference
|
|---|
| 56 | subscribe.setConsumerReference(createNhinSubscriptionReference("http://www.somewhere.com/SubscriptionManager", "http://www.hhs.gov/healthid/nhin", "SubscriptionId", "testval"));
|
|---|
| 57 |
|
|---|
| 58 | // Filter
|
|---|
| 59 | FilterType filter = new FilterType();
|
|---|
| 60 | TopicExpressionType topic = new TopicExpressionType();
|
|---|
| 61 | topic.setDialect("http://doc.oasis-open.org/wsn/t-1/TopicExpression/Simple");
|
|---|
| 62 | topic.getContent().add("document");
|
|---|
| 63 | org.oasis_open.docs.wsn.b_2.ObjectFactory wsntObjectFactory = new org.oasis_open.docs.wsn.b_2.ObjectFactory();
|
|---|
| 64 | filter.getAny().add(wsntObjectFactory.createTopicExpression(topic));
|
|---|
| 65 | subscribe.setFilter(filter);
|
|---|
| 66 |
|
|---|
| 67 | // AdhocQuery
|
|---|
| 68 | AdhocQueryType adhocQuery = new AdhocQueryType();
|
|---|
| 69 | oasis.names.tc.ebxml_regrep.xsd.rim._3.ObjectFactory rimObjectFactory = new oasis.names.tc.ebxml_regrep.xsd.rim._3.ObjectFactory();
|
|---|
| 70 | adhocQuery.setId("urn:uuid:14d4debf-8f97-4251-9a74-a90016b0af0d");
|
|---|
| 71 | SlotType1 slot = new SlotType1();
|
|---|
| 72 | slot.setName("$XDSDocumentEntryPatientId");
|
|---|
| 73 | ValueListType valueList = new ValueListType();
|
|---|
| 74 | valueList.getValue().add("'Local-1^^^&1.1&ISO'");
|
|---|
| 75 | adhocQuery.getSlot().add(slot);
|
|---|
| 76 | slot = new SlotType1();
|
|---|
| 77 | slot.setName("$XDSDocumentEntryClassCode");
|
|---|
| 78 | valueList = new ValueListType();
|
|---|
| 79 | valueList.getValue().add("('XNHIN-CONSENT')");
|
|---|
| 80 | adhocQuery.getSlot().add(slot);
|
|---|
| 81 | subscribe.getAny().add(rimObjectFactory.createAdhocQuery(adhocQuery));
|
|---|
| 82 |
|
|---|
| 83 | // Assertion
|
|---|
| 84 | HomeCommunityType home = new HomeCommunityType();
|
|---|
| 85 | home.setHomeCommunityId("2.16.840.1.113883.3.200");
|
|---|
| 86 | home.setName("Federal - VA");
|
|---|
| 87 | UserType userInfo = new UserType();
|
|---|
| 88 | userInfo.setOrg(home);
|
|---|
| 89 | PersonNameType personName = new PersonNameType();
|
|---|
| 90 | personName.setFamilyName("Smith");
|
|---|
| 91 | personName.setGivenName("Mary");
|
|---|
| 92 | userInfo.setPersonName(personName);
|
|---|
| 93 | AssertionType assertion = new AssertionType();
|
|---|
| 94 | assertion.setUserInfo(userInfo);
|
|---|
| 95 |
|
|---|
| 96 | subscribeRequest.setSubscribe(subscribe);
|
|---|
| 97 | subscribeRequest.setAssertion(assertion);
|
|---|
| 98 | logSubscribeRequest.setMessage(subscribeRequest);
|
|---|
| 99 |
|
|---|
| 100 | // Expected log result
|
|---|
| 101 | LogEventRequestType expResult = new LogEventRequestType();
|
|---|
| 102 | AuditMessageType auditMsg = new AuditMessageType();
|
|---|
| 103 | expResult.setAuditMessage(auditMsg);
|
|---|
| 104 | AuditMessageType.ActiveParticipant participant = new AuditMessageType.ActiveParticipant();
|
|---|
| 105 | participant.setUserName("Mary Smith");
|
|---|
| 106 | expResult.getAuditMessage().getActiveParticipant().add(participant);
|
|---|
| 107 | AuditSourceIdentificationType sourceId = new AuditSourceIdentificationType();
|
|---|
| 108 | sourceId.setAuditEnterpriseSiteID(home.getName());
|
|---|
| 109 | expResult.getAuditMessage().getAuditSourceIdentification().add(sourceId);
|
|---|
| 110 | EventIdentificationType eventId = new EventIdentificationType();
|
|---|
| 111 | eventId.setEventActionCode(AuditDataTransformConstants.EVENT_ACTION_CODE_CREATE);
|
|---|
| 112 | expResult.getAuditMessage().setEventIdentification(eventId);
|
|---|
| 113 |
|
|---|
| 114 | // Transform
|
|---|
| 115 | SubscribeTransforms transform = new SubscribeTransforms();
|
|---|
| 116 | LogEventRequestType result = transform.transformNhinSubscribeRequestToAuditMessage(logSubscribeRequest);
|
|---|
| 117 |
|
|---|
| 118 | // Validate
|
|---|
| 119 | assertNotNull("LogEventRequestType was null", result);
|
|---|
| 120 | assertEquals(expResult.getAuditMessage().getActiveParticipant().get(0).getUserName(), result.getAuditMessage().getActiveParticipant().get(0).getUserName());
|
|---|
| 121 | assertEquals(expResult.getAuditMessage().getAuditSourceIdentification().get(0).getAuditEnterpriseSiteID(),
|
|---|
| 122 | result.getAuditMessage().getAuditSourceIdentification().get(0).getAuditEnterpriseSiteID());
|
|---|
| 123 | assertEquals(expResult.getAuditMessage().getEventIdentification().getEventActionCode(), result.getAuditMessage().getEventIdentification().getEventActionCode());
|
|---|
| 124 | } catch (Throwable t)
|
|---|
| 125 | {
|
|---|
| 126 | log.error("Error in testSubscribeRequest: " + t.getMessage(), t);
|
|---|
| 127 | fail(t.getMessage());
|
|---|
| 128 | }
|
|---|
| 129 | log.debug("End testSubscribeRequest");
|
|---|
| 130 | }
|
|---|
| 131 |
|
|---|
| 132 | @Test
|
|---|
| 133 | public void testSubscribeResponse()
|
|---|
| 134 | {
|
|---|
| 135 | log.debug("Begin testSubscribeResponse");
|
|---|
| 136 | try
|
|---|
| 137 | {
|
|---|
| 138 | LogSubscribeResponseType logSubscribeResponse = new LogSubscribeResponseType();
|
|---|
| 139 | logSubscribeResponse.setDirection("Outbound");
|
|---|
| 140 | logSubscribeResponse.setInterface("Nhin");
|
|---|
| 141 |
|
|---|
| 142 | SubscribeResponseMessageType subscribeResponseMessage = new SubscribeResponseMessageType();
|
|---|
| 143 | logSubscribeResponse.setMessage(subscribeResponseMessage);
|
|---|
| 144 |
|
|---|
| 145 | // SubscribeResponse
|
|---|
| 146 | SubscribeResponse subscribeResponse = new SubscribeResponse();
|
|---|
| 147 | subscribeResponse.setSubscriptionReference(createNhinSubscriptionReference("http://www.somewhere.com/SubscriptionManager", "http://www.hhs.gov/healthid/nhin", "SubscriptionId", "testval"));
|
|---|
| 148 |
|
|---|
| 149 | subscribeResponseMessage.setSubscribeResponse(subscribeResponse);
|
|---|
| 150 |
|
|---|
| 151 | // Assertion
|
|---|
| 152 | HomeCommunityType home = new HomeCommunityType();
|
|---|
| 153 | home.setHomeCommunityId("2.16.840.1.113883.3.200");
|
|---|
| 154 | home.setName("Federal - VA");
|
|---|
| 155 | UserType userInfo = new UserType();
|
|---|
| 156 | userInfo.setOrg(home);
|
|---|
| 157 | PersonNameType personName = new PersonNameType();
|
|---|
| 158 | personName.setFamilyName("Smith");
|
|---|
| 159 | personName.setGivenName("Mary");
|
|---|
| 160 | userInfo.setPersonName(personName);
|
|---|
| 161 | AssertionType assertion = new AssertionType();
|
|---|
| 162 | assertion.setUserInfo(userInfo);
|
|---|
| 163 | subscribeResponseMessage.setAssertion(assertion);
|
|---|
| 164 |
|
|---|
| 165 | // Expected log result
|
|---|
| 166 | LogEventRequestType expResult = new LogEventRequestType();
|
|---|
| 167 | AuditMessageType auditMsg = new AuditMessageType();
|
|---|
| 168 | expResult.setAuditMessage(auditMsg);
|
|---|
| 169 | AuditMessageType.ActiveParticipant participant = new AuditMessageType.ActiveParticipant();
|
|---|
| 170 | participant.setUserName("Mary Smith");
|
|---|
| 171 | expResult.getAuditMessage().getActiveParticipant().add(participant);
|
|---|
| 172 | AuditSourceIdentificationType sourceId = new AuditSourceIdentificationType();
|
|---|
| 173 | sourceId.setAuditEnterpriseSiteID(home.getName());
|
|---|
| 174 | expResult.getAuditMessage().getAuditSourceIdentification().add(sourceId);
|
|---|
| 175 | EventIdentificationType eventId = new EventIdentificationType();
|
|---|
| 176 | eventId.setEventActionCode(AuditDataTransformConstants.EVENT_ACTION_CODE_CREATE);
|
|---|
| 177 | expResult.getAuditMessage().setEventIdentification(eventId);
|
|---|
| 178 |
|
|---|
| 179 | // Transform
|
|---|
| 180 | SubscribeTransforms transform = new SubscribeTransforms();
|
|---|
| 181 | LogEventRequestType result = transform.transformSubscribeResponseToAuditMessage(logSubscribeResponse);
|
|---|
| 182 |
|
|---|
| 183 | // Validate
|
|---|
| 184 | assertNotNull("LogEventRequestType was null", result);
|
|---|
| 185 | assertEquals(expResult.getAuditMessage().getActiveParticipant().get(0).getUserName(), result.getAuditMessage().getActiveParticipant().get(0).getUserName());
|
|---|
| 186 | assertEquals(expResult.getAuditMessage().getAuditSourceIdentification().get(0).getAuditEnterpriseSiteID(),
|
|---|
| 187 | result.getAuditMessage().getAuditSourceIdentification().get(0).getAuditEnterpriseSiteID());
|
|---|
| 188 | assertEquals(expResult.getAuditMessage().getEventIdentification().getEventActionCode(), result.getAuditMessage().getEventIdentification().getEventActionCode());
|
|---|
| 189 | } catch (Throwable t)
|
|---|
| 190 | {
|
|---|
| 191 | log.error("Error in testSubscribeResponse: " + t.getMessage(), t);
|
|---|
| 192 | fail(t.getMessage());
|
|---|
| 193 | }
|
|---|
| 194 | log.debug("End testSubscribeResponse");
|
|---|
| 195 | }
|
|---|
| 196 |
|
|---|
| 197 | public static W3CEndpointReference createNhinSubscriptionReference(String subMgrEndpointAddress, String refParamNamespace, String refParamElementName, String refParamValue)
|
|---|
| 198 | {
|
|---|
| 199 | log.info("begin createNhinSubscriptionReference");
|
|---|
| 200 | W3CEndpointReference subRef;
|
|---|
| 201 |
|
|---|
| 202 | W3CEndpointReferenceBuilder resultBuilder = new W3CEndpointReferenceBuilder();
|
|---|
| 203 | log.info("internalSubscriptionRef.getSubscriptionManagerEndpointAddress()=" + subMgrEndpointAddress);
|
|---|
| 204 | resultBuilder.address(subMgrEndpointAddress);
|
|---|
| 205 |
|
|---|
| 206 | DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
|
|---|
| 207 | Document doc = null;
|
|---|
| 208 | try
|
|---|
| 209 | {
|
|---|
| 210 | doc = docBuilderFactory.newDocumentBuilder().newDocument();
|
|---|
| 211 | } catch (ParserConfigurationException ex)
|
|---|
| 212 | {
|
|---|
| 213 | throw new RuntimeException(ex);
|
|---|
| 214 | }
|
|---|
| 215 |
|
|---|
| 216 | doc.setXmlStandalone(true);
|
|---|
| 217 |
|
|---|
| 218 | log.info("handling reference parameter " + refParamNamespace + ";" + refParamElementName + ";" + refParamValue);
|
|---|
| 219 | Element subscriptionElem = doc.createElementNS(refParamNamespace, refParamElementName);
|
|---|
| 220 | subscriptionElem.setTextContent(refParamValue);
|
|---|
| 221 | resultBuilder.referenceParameter(subscriptionElem);
|
|---|
| 222 |
|
|---|
| 223 | log.info("building.. resultBuilder.build()");
|
|---|
| 224 | subRef = resultBuilder.build();
|
|---|
| 225 | log.info("end createNhinSubscriptionReference");
|
|---|
| 226 | return subRef;
|
|---|
| 227 | }
|
|---|
| 228 | }
|
|---|