package gov.samhsa.acs.contexthandler.wsclient; import gov.samhsa.acs.contexthandler.wsclient.ContextHandlerWebServiceClient; import gov.va.ehtac.ds4p.ws.DS4PContextHandler; import gov.va.ehtac.ds4p.ws.DS4PContextHandler_Service; import gov.va.ehtac.ds4p.ws.EnforcePolicy; import gov.va.ehtac.ds4p.ws.XacmlObligationsType; import gov.va.ehtac.ds4p.ws.EnforcePolicyResponse.Return; import gov.va.ehtac.ds4p.ws.XacmlResultType; import gov.va.ehtac.ds4p.ws.XacmlStatusDetailType; import gov.va.ehtac.ds4p.ws.XacmlStatusType; import java.math.BigDecimal; import java.math.BigInteger; import java.net.URL; import java.util.GregorianCalendar; import java.util.Locale; import java.util.Properties; import java.util.TimeZone; import java.util.UUID; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.Duration; import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.namespace.QName; import javax.xml.ws.BindingProvider; import javax.xml.ws.Endpoint; import junit.framework.Assert; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PropertiesLoaderUtils; public class ContextHandlerWebServiceClientTest { protected static Endpoint ep; protected static String address; private static Return returnedValueOfEnforcePolicy; @BeforeClass public static void setUp() { try { Resource resource = new ClassPathResource("/jettyServerPortForTesing.properties"); Properties props = PropertiesLoaderUtils.loadProperties(resource); String portNumber = props.getProperty("jettyServerPortForTesing.number"); address = String.format("http://localhost:%s/services/DS4PContextHandler", portNumber); ep = Endpoint.publish(address, new DS4PContextHandlerImpl()); returnedValueOfEnforcePolicy = new Return (); returnedValueOfEnforcePolicy.setPdpDecision("Permit"); returnedValueOfEnforcePolicy.setPurposeOfUse("TREAT"); returnedValueOfEnforcePolicy.setHomeCommunityId("2.16.840.1.113883.3.467"); returnedValueOfEnforcePolicy.setResourceId(""); returnedValueOfEnforcePolicy.setResourceName(""); returnedValueOfEnforcePolicy.setPdpStatus(""); returnedValueOfEnforcePolicy.setPdpRequest(""); returnedValueOfEnforcePolicy.setPdpResponse(""); returnedValueOfEnforcePolicy.setRequestTime(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(2008,10,1))); returnedValueOfEnforcePolicy.setResponseTime(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(2008,10,1))); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @AfterClass public static void tearDown() { try { ep.stop(); } catch (Throwable t) { System.out.println("Error thrown: " + t.getMessage()); } } // Test if the stub web service activate properly @Test public void testStubWebServiceWorks() { final EnforcePolicy.Xspasubject xspasubject = new EnforcePolicy.Xspasubject(); final EnforcePolicy.Xsparesource xsparesource = new EnforcePolicy.Xsparesource(); DS4PContextHandlerImpl.returnedValueOfEnforcePolicy = returnedValueOfEnforcePolicy; Return resp = createPort().enforcePolicy(xspasubject, xsparesource); validateResponse(resp); } // Test if the SOAP client calling the stub web service correctly? @Test public void testWSClientSOAPCallWorks() { final EnforcePolicy.Xspasubject xspasubject = new EnforcePolicy.Xspasubject(); final EnforcePolicy.Xsparesource xsparesource = new EnforcePolicy.Xsparesource(); DS4PContextHandlerImpl.returnedValueOfEnforcePolicy = returnedValueOfEnforcePolicy; ContextHandlerWebServiceClient wsc = new ContextHandlerWebServiceClient(address); Return resp = wsc.enforcePolicy(xspasubject, xsparesource); validateResponse(resp); } private void validateResponse(Return resp) { System.out.println("resp.getPdpDecision(): " + resp.getPdpDecision()); Assert.assertEquals("Permit", returnedValueOfEnforcePolicy.getPdpDecision(), resp.getPdpDecision()); } private DS4PContextHandler createPort() { final URL WSDL_LOCATION = ClassLoader.getSystemResource("DS4PContextHandler.wsdl"); final QName SERVICE = new QName("http://ws.ds4p.ehtac.va.gov/", "DS4PContextHandler"); DS4PContextHandler port = new DS4PContextHandler_Service(WSDL_LOCATION, SERVICE).getDS4PContextHandlerPort(); BindingProvider bp = (BindingProvider) port; bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, address); return port; } }