package gov.samhsa.acs.contexthandler; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import gov.samhsa.acs.common.dto.PdpRequestResponse; import gov.samhsa.acs.common.dto.XacmlRequest; import gov.samhsa.acs.common.dto.XacmlResponse; import gov.samhsa.acs.contexthandler.exception.NoPolicyFoundException; import gov.samhsa.acs.contexthandler.exception.PolicyProviderException; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import ch.qos.logback.audit.AuditException; @RunWith(MockitoJUnitRunner.class) public class ContextHandlerImplTest { @Rule public ExpectedException thrown = ExpectedException.none(); @Mock private PolicyDecisionPoint policyDesicionPoint; @InjectMocks private ContextHandlerImpl sut; @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void testEnforcePolicy() throws AuditException, NoPolicyFoundException, PolicyProviderException { // Arrange final XacmlRequest xacmlRequest = mock(XacmlRequest.class); final XacmlResponse xacmlResponse = mock(XacmlResponse.class); when(policyDesicionPoint.evaluateRequest(xacmlRequest)).thenReturn( xacmlResponse); // Act final XacmlResponse response = sut.enforcePolicy(xacmlRequest); // Assert verify(policyDesicionPoint, times(1)).evaluateRequest(xacmlRequest); assertEquals(xacmlResponse, response); } @SuppressWarnings("unchecked") @Test public void testEnforcePolicy_Throws_AuditException() throws AuditException, NoPolicyFoundException, PolicyProviderException { // Arrange thrown.expect(AuditException.class); final XacmlRequest xacmlRequest = mock(XacmlRequest.class); final XacmlResponse xacmlResponse = mock(XacmlResponse.class); when(policyDesicionPoint.evaluateRequest(xacmlRequest)).thenThrow( AuditException.class); // Act final XacmlResponse response = sut.enforcePolicy(xacmlRequest); // Assert verify(policyDesicionPoint, times(1)).evaluateRequest(xacmlRequest); assertEquals(xacmlResponse, response); } @SuppressWarnings("unchecked") @Test public void testEnforcePolicy_Throws_NoPolicyFoundException() throws AuditException, NoPolicyFoundException, PolicyProviderException { // Arrange thrown.expect(NoPolicyFoundException.class); final XacmlRequest xacmlRequest = mock(XacmlRequest.class); final XacmlResponse xacmlResponse = mock(XacmlResponse.class); when(policyDesicionPoint.evaluateRequest(xacmlRequest)).thenThrow( NoPolicyFoundException.class); // Act final XacmlResponse response = sut.enforcePolicy(xacmlRequest); // Assert verify(policyDesicionPoint, times(1)).evaluateRequest(xacmlRequest); assertEquals(xacmlResponse, response); } @SuppressWarnings("unchecked") @Test public void testEnforcePolicy_Throws_PolicyProviderException() throws AuditException, NoPolicyFoundException, PolicyProviderException { // Arrange thrown.expect(PolicyProviderException.class); final XacmlRequest xacmlRequest = mock(XacmlRequest.class); final XacmlResponse xacmlResponse = mock(XacmlResponse.class); when(policyDesicionPoint.evaluateRequest(xacmlRequest)).thenThrow( PolicyProviderException.class); // Act final XacmlResponse response = sut.enforcePolicy(xacmlRequest); // Assert verify(policyDesicionPoint, times(1)).evaluateRequest(xacmlRequest); assertEquals(xacmlResponse, response); } @Test public void testMakeDecisionForTryingPolicy() { // Arrange final String purposeOfUse = "purposeOfUse"; final String xacmlPolicy = "xacmlPolic"; final PdpRequestResponse pdpResp = mock(PdpRequestResponse.class); when( policyDesicionPoint.evaluatePolicyForTrying(xacmlPolicy, purposeOfUse)).thenReturn(pdpResp); // Act final PdpRequestResponse resp = sut.makeDecisionForTryingPolicy( xacmlPolicy, purposeOfUse); // Assert verify(policyDesicionPoint, times(1)).evaluatePolicyForTrying( xacmlPolicy, purposeOfUse); assertEquals(pdpResp, resp); } }