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 | }
|
---|