package gov.samhsa.acs.contexthandler;
import static org.junit.Assert.*;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Matchers.*;
import gov.samhsa.acs.audit.AuditService;
import gov.samhsa.acs.audit.AuditVerb;
import gov.samhsa.acs.audit.PredicateKey;
import gov.samhsa.acs.common.dto.XacmlRequest;
import gov.samhsa.acs.common.dto.XacmlResponse;
import gov.samhsa.acs.common.tool.DocumentAccessor;
import gov.samhsa.acs.common.tool.DocumentXmlConverter;
import gov.samhsa.acs.contexthandler.PolicyDecisionPoint;
import gov.samhsa.acs.contexthandler.PolicyDecisionPointImpl;
import gov.samhsa.acs.contexthandler.PolicyProvider;
import gov.samhsa.acs.contexthandler.RequestGenerator;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import org.herasaf.xacml.core.api.PDP;
import org.herasaf.xacml.core.context.RequestMarshaller;
import org.herasaf.xacml.core.context.impl.RequestType;
import org.herasaf.xacml.core.policy.Evaluatable;
import org.herasaf.xacml.core.policy.PolicyMarshaller;
import org.herasaf.xacml.core.simplePDP.SimplePDPFactory;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.audit.AuditException;
public class PolicyDecisionPointDemoIT {
private static final Logger LOGGER = LoggerFactory
.getLogger(PolicyDecisionPointDemoIT.class);
private final String policyFile = "src/test/resources/samplePolicy.xml";
private final String requestFile = "src/test/resources/samplePolicyRequest.xml";
private PDP simplePDP;
private Evaluatable policy;
private List<Evaluatable> policies;
private RequestType request;
private PolicyDecisionPoint pdp;
@Mock
private PolicyProvider dataMock;
@Mock
private RequestGenerator requestGeneratorMock;
@Mock
private AuditService auditServiceMock;
@Mock
private DocumentXmlConverter documentXmlConverterMock;
@Mock
private DocumentAccessor documentAccessorMock;
@Before
public void setUp() throws Exception {
simplePDP = SimplePDPFactory.getSimplePDP();
pdp = new PolicyDecisionPointImpl(dataMock,requestGeneratorMock, documentAccessorMock, documentXmlConverterMock, auditServiceMock);
doNothing().when(auditServiceMock).audit(anyObject(), anyString(), isA(AuditVerb.class), anyString(), anyMapOf(PredicateKey.class, String.class));
try {
InputStream is = new FileInputStream(policyFile);
policy = PolicyMarshaller.unmarshal(is);
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
InputStream requestis = null;
try {
requestis = new FileInputStream(requestFile);
request = RequestMarshaller.unmarshal(requestis);
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
policies = new LinkedList<Evaluatable>();
policies.add(policy);
}
public void printPolicy(){
try {
InputStream in=new FileInputStream(policyFile);;
String readLine;
BufferedReader br = new BufferedReader(new InputStreamReader(in));
System.out.println("");
System.out.println("");
System.out.println("****************************************");
System.out.println("**Policy file being evaluated against**");
System.out.println("****************************************");
System.out.println("");
while (((readLine = br.readLine()) != null)) {
System.out.println(readLine);
}
} catch (IOException e) {
LOGGER.warn("Error happens when printing policy file:", e);
}
}
public void printRequest(){
try {
InputStream in=new FileInputStream(requestFile);;
String readLine;
BufferedReader br = new BufferedReader(new InputStreamReader(in));
System.out.println("");
System.out.println("");
System.out.println("**************************************");
System.out.println("**Request being sent to XACML engine**");
System.out.println("**************************************");
System.out.println("");
while (((readLine = br.readLine()) != null)) {
System.out.println(readLine);
}
} catch (IOException e) {
LOGGER.warn("Error happens when printing request file:", e);
}
}
@Test
public void test() throws AuditException {
XacmlRequest xacmlRequest = new XacmlRequest();
XacmlResponse response = pdp.evaluateRequest(simplePDP,request,policies, xacmlRequest);
printPolicy();
printRequest();
System.out.println("");
System.out.println("");
System.out.println("************");
System.out.println("**Decision**");
System.out.println("************");
System.out.println("");
System.out.println("Decision: " + response.getPdpDecision());
for (String obligation : response.getPdpObligation())
System.out.println("With Obligation: " + obligation);
}
}