/**
* Copyright (c) 2011, SOCIETIES Consortium (WATERFORD INSTITUTE OF TECHNOLOGY (TSSG), HERIOT-WATT UNIVERSITY (HWU), SOLUTA.NET
* (SN), GERMAN AEROSPACE CENTRE (Deutsches Zentrum fuer Luft- und Raumfahrt e.V.) (DLR), Zavod za varnostne tehnologije
* informacijske družbe in elektronsko poslovanje (SETCCE), INSTITUTE OF COMMUNICATION AND COMPUTER SYSTEMS (ICCS), LAKE
* COMMUNICATIONS (LAKE), INTEL PERFORMANCE LEARNING SOLUTIONS LTD (INTEL), PORTUGAL TELECOM INOVAÇÃO, SA (PTIN), IBM Corp.,
* INSTITUT TELECOM (ITSUD), AMITEC DIACHYTI EFYIA PLIROFORIKI KAI EPIKINONIES ETERIA PERIORISMENIS EFTHINIS (AMITEC), TELECOM
* ITALIA S.p.a.(TI), TRIALOG (TRIALOG), Stiftelsen SINTEF (SINTEF), NEC EUROPE LTD (NEC))
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.societies.integration.test.bit.privacynegotiationmanagement;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.societies.api.context.CtxException;
import org.societies.api.context.model.CtxAttribute;
import org.societies.api.context.model.CtxAttributeIdentifier;
import org.societies.api.context.model.CtxAttributeTypes;
import org.societies.api.context.model.CtxIdentifier;
import org.societies.api.context.model.CtxModelType;
import org.societies.api.context.model.IndividualCtxEntity;
import org.societies.api.identity.IIdentity;
import org.societies.api.identity.InvalidFormatException;
import org.societies.api.identity.RequestorCis;
import org.societies.api.identity.RequestorService;
import org.societies.api.identity.util.RequestorUtils;
import org.societies.api.internal.privacytrust.privacyprotection.model.privacypolicy.AgreementEnvelope;
import org.societies.api.internal.privacytrust.privacyprotection.model.privacypolicy.PPNegotiationEvent;
import org.societies.api.internal.privacytrust.privacyprotection.negotiation.NegotiationDetails;
import org.societies.api.osgi.event.CSSEvent;
import org.societies.api.osgi.event.EventListener;
import org.societies.api.osgi.event.EventTypes;
import org.societies.api.osgi.event.InternalEvent;
import org.societies.api.privacytrust.privacy.model.PrivacyException;
import org.societies.api.privacytrust.privacy.model.privacypolicy.Action;
import org.societies.api.privacytrust.privacy.model.privacypolicy.Condition;
import org.societies.api.privacytrust.privacy.model.privacypolicy.Decision;
import org.societies.api.privacytrust.privacy.model.privacypolicy.NegotiationStatus;
import org.societies.api.privacytrust.privacy.model.privacypolicy.RequestItem;
import org.societies.api.privacytrust.privacy.model.privacypolicy.RequestPolicy;
import org.societies.api.privacytrust.privacy.model.privacypolicy.Resource;
import org.societies.api.privacytrust.privacy.model.privacypolicy.ResponseItem;
import org.societies.api.privacytrust.privacy.model.privacypolicy.ResponsePolicy;
import org.societies.api.privacytrust.privacy.model.privacypolicy.constants.ActionConstants;
import org.societies.api.privacytrust.privacy.model.privacypolicy.constants.ConditionConstants;
import org.societies.api.privacytrust.privacy.util.privacypolicy.ResponseItemUtils;
import org.societies.api.schema.identity.DataIdentifierScheme;
import org.societies.api.schema.servicelifecycle.model.ServiceResourceIdentifier;
import org.societies.integration.test.userfeedback.UserFeedbackMockResult;
import org.societies.integration.test.userfeedback.UserFeedbackType;
/**
* @author Eliza, Olivier Maridat (Trialog)
*
*/
public class PrivacyNegotiationTest {
private static Logger LOG = LoggerFactory.getLogger(PrivacyNegotiationTest.class);
public static int testCaseNumber = 0;
/**
* Asynchronous helper
*/
private CountDownLatch lock;
/**
* Received data from the asynchronous call
*/
private boolean negotiationResult;
private EventListener eventListener;
private String[] eventListened;
private RequestorService requestorService;
private RequestorCis requestorCis;
private RequestPolicy servicePrivacyPolicy;
private RequestPolicy cisPrivacyPolicy;
private ResponsePolicy serviceResponsePolicy;
private ResponsePolicy cisResponsePolicy;
private IIdentity userId;
private IndividualCtxEntity userCtxEntity;
private CtxAttributeIdentifier ctxLocationAttributeId;
private CtxAttribute locationAttribute;
private CtxAttributeIdentifier ctxStatusAttributeId;
private CtxAttribute statusAttribute;
//
// @BeforeClass
// public static void setUpClass() {
// String testTitle = new String("setUpClass");
// LOG.info("[#"+testCaseNumber+"] "+testTitle);
//
//
// }
//
// @AfterClass
// public static void tearDownClass() {
// String testTitle = new String("tearDownClass");
// LOG.info("[#"+testCaseNumber+"] "+testTitle);
//
//
// }
@Before
public void setUp() {
String testTitle = new String("setUp");
LOG.info("[#"+testCaseNumber+"] "+testTitle);
// -- Verify dependency injection
if (!TestCase.isDepencyInjectionDone()) {
LOG.error("[#"+testCaseNumber+"] [Dependency Injection "+TestCase.class.getSimpleName()+" not ready] "+testTitle);
fail("Dependency Injection "+TestCase.class.getSimpleName()+" not ready: "+testTitle);
}
// -- Events
lock = new CountDownLatch(1);
negotiationResult = false;
// -- Subscribe to Negotiation Events
eventListener = new EventListener() {
@Override
public void handleInternalEvent(InternalEvent event) {
String type = event.geteventType();
LOG.info("[#"+testCaseNumber+"][Event] Internal event received: "+type);
negotiationResult = false;
// Negotiation Finished
if (type.equals(EventTypes.PRIVACY_POLICY_NEGOTIATION_EVENT)) {
PPNegotiationEvent evenInfo = (PPNegotiationEvent) event.geteventInfo();
LOG.info("[#"+testCaseNumber+"][Event] "+evenInfo.getNegotiationStatus());
// Success
if (org.societies.api.schema.privacytrust.privacy.model.privacypolicy.NegotiationStatus.SUCCESSFUL.name().equals(evenInfo.getNegotiationStatus().name())) {
negotiationResult = true;
}
}
LOG.info("[#"+testCaseNumber+"][Event] "+negotiationResult);
lock.countDown();
}
@Override
public void handleExternalEvent(CSSEvent event) { }
};
eventListened = new String[] {
EventTypes.FAILED_NEGOTIATION_EVENT,
EventTypes.PRIVACY_POLICY_NEGOTIATION_EVENT
};
TestCase.eventManager.subscribeInternalEvent(eventListener, eventListened, null);
// -- Add privacy policies
try {
// 3P service privacy policy
requestorService = getRequestorService();
servicePrivacyPolicy = getServicePolicy();
TestCase.privacyPolicyManager.updatePrivacyPolicy(servicePrivacyPolicy);
// CIS privacy policy
requestorCis = getRequestorCis();
cisPrivacyPolicy = getCisPolicy();
TestCase.privacyPolicyManager.updatePrivacyPolicy(cisPrivacyPolicy);
RequestPolicy updatedPrivacyPolicy = TestCase.privacyPolicyManager.getPrivacyPolicy(requestorCis);
assertNotNull("Retrieved privacy policy should not be null", updatedPrivacyPolicy);
assertNotNull("Retrieved privacy policy items should not be null", updatedPrivacyPolicy.getRequests());
assertTrue("Retrieved privacy policy items should not be empty", updatedPrivacyPolicy.getRequests().size() > 0);
// RequestPolicy updatedPrivacyPolicy = TestCase.privacyPolicyManagerRemote.getPrivacyPolicy(requestorCis);
// assertNotNull("Retrieved privacy policy should not be null", updatedPrivacyPolicy);
// assertNotNull("Retrieved privacy policy items should not be null", updatedPrivacyPolicy.getRequests());
// assertTrue("Retrieved privacy policy items should not be empty", updatedPrivacyPolicy.getRequests().size() > 0);
} catch (PrivacyException e) {
LOG.error("[#"+testCaseNumber+"] [Error PrivacyException] "+testTitle, e);
fail("Error PrivacyException: "+e.getLocalizedMessage()+" - "+testTitle);
} catch (InvalidFormatException e) {
LOG.error("[#"+testCaseNumber+"] [Error InvalidFormatException when generating the CIS id] "+testTitle, e);
fail("Error InvalidFormatException when generating the CIS id: "+e.getMessage()+" - "+testTitle);
} catch (URISyntaxException e) {
LOG.error("[#"+testCaseNumber+"] [Error URISyntaxException when generating the service id] "+testTitle, e);
fail("Error URISyntaxException when generating the service id: "+e.getMessage()+" - "+testTitle);
}
// -- Generate expected ResponsePolicy
this.serviceResponsePolicy = this.getServiceResponsePolicy();
this.cisResponsePolicy = this.getCisResponsePolicy();
// -- Add types to context
setupContext();
}
@After
public void tearDown() {
String testTitle = new String("tearDown");
LOG.info("[#"+testCaseNumber+"] "+testTitle);
// -- Delete privacy policies
try {
deleteContext();
TestCase.privacyPolicyManager.deletePrivacyPolicy(requestorService);
TestCase.privacyPolicyManager.deletePrivacyPolicy(requestorCis);
} catch (PrivacyException e) {
LOG.error("[#"+testCaseNumber+"] [Error PrivacyException] "+testTitle, e);
fail("Error PrivacyException: "+e.getMessage()+" - "+testTitle);
}
// -- Unlisten events
TestCase.eventManager.unSubscribeInternalEvent(eventListener, eventListened, null);
}
@Test
public void testStartNegotiationCis() {
String testTitle = new String("Start Negotiation CIS: nominal");
LOG.info("[#"+testCaseNumber+"][Test] "+testTitle);
AgreementEnvelope retrievedPrivacyAgreement = null;
try {
// -- Launch negotiation
int negotiationId = new Random().nextInt();
TestCase.privacyPolicyNegotiationManager.negotiateCISPolicy(new NegotiationDetails(requestorCis, negotiationId));
// -- Test
// Negotiation Result
LOG.info("[#"+testCaseNumber+"] Waiting for "+TestCase.getTimeout()+"ms");
boolean releaseBeforeTimeout = lock.await(TestCase.getTimeout(), TimeUnit.MILLISECONDS);
// Check timeout
if (!releaseBeforeTimeout) {
// Do stuff
fail("Timeout");
}
assertTrue("Negotiation should have succeed", negotiationResult);
// Check Agreement
retrievedPrivacyAgreement = TestCase.privacyAgreementManager.getAgreement(requestorCis);
assertNotNull("Privacy agreement should not be null", retrievedPrivacyAgreement);
assertNotNull("Privacy agreement (agreement) should not be null", retrievedPrivacyAgreement.getAgreement());
assertNotNull("Privacy agreement response items should not be null", retrievedPrivacyAgreement.getAgreement().getRequestedItems());
LOG.debug("[#"+testCaseNumber+"] Agreement: "+ResponseItemUtils.toXmlString(retrievedPrivacyAgreement.getAgreement().getRequestedItems()));
// assertTrue("Privacy agreement response items should not be empty", retrievedPrivacyAgreement.getAgreement().getRequestedItems().size() > 0);
// for(org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponseItem responseItem : retrievedPrivacyAgreement.getAgreement().getRequestedItems()) {
// assertTrue("Element rejected: "+ResourceUtils.toString(responseItem.getRequestItem().getResource()), DecisionUtils.equal(org.societies.api.schema.privacytrust.privacy.model.privacypolicy.Decision.PERMIT, responseItem.getDecision()));
// }
}
catch (PrivacyException e) {
LOG.error("[#"+testCaseNumber+"] [Error PrivacyException] "+testTitle, e);
fail("Error PrivacyException: "+e.getMessage()+" - "+testTitle);
}
catch (Exception e) {
LOG.error("[#"+testCaseNumber+"] [Error Exception] "+testTitle, e);
fail("Error Exception: "+e.getMessage()+" - "+testTitle);
}
}
@Test
public void testStartNegotiationCisRefused() {
String testTitle = new String("Start Negotiation CIS: refused");
LOG.info("[#"+testCaseNumber+"][Test] "+testTitle);
AgreementEnvelope retrievedPrivacyAgreement = null;
try {
// -- Mock Userfeedback
org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponsePolicy responsePolicy = new org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponsePolicy();
responsePolicy.setRequestor(RequestorUtils.toRequestorBean(requestorCis));
responsePolicy.setNegotiationStatus(org.societies.api.schema.privacytrust.privacy.model.privacypolicy.NegotiationStatus.FAILED);
List<org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponseItem> responseItems = new ArrayList<org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponseItem>();
responsePolicy.setResponseItems(responseItems);
UserFeedbackMockResult mockResult = new UserFeedbackMockResult(1, responsePolicy);
TestCase.getUserFeedbackMocker().addReply(UserFeedbackType.PRIVACY_NEGOTIATION, mockResult);
// -- Launch negotiation
int negotiationId = new Random().nextInt();
TestCase.privacyPolicyNegotiationManager.negotiateCISPolicy(new NegotiationDetails(requestorCis, negotiationId));
// -- Test
// Negotiation Result
boolean releaseBeforeTimeout = lock.await(TestCase.getTimeout(), TimeUnit.MILLISECONDS);
// Check timeout
if (!releaseBeforeTimeout) {
// Do stuff
fail("Timeout");
}
assertFalse("Negotiation should have failled", negotiationResult);
// Check Agreement
retrievedPrivacyAgreement = TestCase.privacyAgreementManager.getAgreement(requestorCis);
assertNull("Privacy agreement should be null", retrievedPrivacyAgreement);
}
catch (PrivacyException e) {
LOG.error("[#"+testCaseNumber+"] [Error PrivacyException] "+testTitle, e);
fail("Error PrivacyException: "+e.getMessage()+" - "+testTitle);
}
catch (Exception e) {
LOG.error("[#"+testCaseNumber+"] [Error Exception] "+testTitle, e);
fail("Error Exception: "+e.getMessage()+" - "+testTitle);
}
}
@Test
@Ignore
public void testStartNegotiationCisFaillure() {
String testTitle = new String("Start Negotiation CIS: faillure");
LOG.info("[#"+testCaseNumber+"][Test] "+testTitle);
AgreementEnvelope retrievedPrivacyAgreement = null;
try {
// -- Mock Userfeedback
// org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponsePolicy responsePolicy = new org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponsePolicy();
// responsePolicy.setRequestor(RequestorUtils.toRequestorBean(requestorCis));
// responsePolicy.setNegotiationStatus(org.societies.api.schema.privacytrust.privacy.model.privacypolicy.NegotiationStatus.SUCCESSFUL);
// List<org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponseItem> responseItems = new ArrayList<org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponseItem>();
// responsePolicy.setResponseItems(responseItems);
UserFeedbackMockResult mockResult = new UserFeedbackMockResult(1);
mockResult.addResultIndexes(1);
TestCase.getUserFeedbackMocker().addReply(UserFeedbackType.PRIVACY_NEGOTIATION, mockResult);
// -- Launch negotiation
int negotiationId = new Random().nextInt();
TestCase.privacyPolicyNegotiationManager.negotiateCISPolicy(new NegotiationDetails(requestorCis, negotiationId));
// -- Test
// Negotiation Result
boolean releaseBeforeTimeout = lock.await(TestCase.getTimeout(), TimeUnit.MILLISECONDS);
// Check timeout
if (!releaseBeforeTimeout) {
// Do stuff
fail("Timeout");
}
assertFalse("Negotiation should have failled", negotiationResult);
// Check Agreement
retrievedPrivacyAgreement = TestCase.privacyAgreementManager.getAgreement(requestorCis);
assertNull("Privacy agreement should be null", retrievedPrivacyAgreement);
}
catch (PrivacyException e) {
LOG.error("[#"+testCaseNumber+"] [Error PrivacyException] "+testTitle, e);
fail("Error PrivacyException: "+e.getMessage()+" - "+testTitle);
}
catch (Exception e) {
LOG.error("[#"+testCaseNumber+"] [Error Exception] "+testTitle, e);
fail("Error Exception: "+e.getMessage()+" - "+testTitle);
}
}
@Test
@Ignore
public void testStartNegotiationService() {
String testTitle = new String("Start Negotiation Service: nominal");
LOG.info("[#"+testCaseNumber+"][Test] "+testTitle);
AgreementEnvelope retrievedPrivacyAgreement = null;
try {
// -- Launch negotiation
int negotiationId = new Random().nextInt();
TestCase.privacyPolicyNegotiationManager.negotiateServicePolicy(new NegotiationDetails(requestorService, negotiationId));
// -- Test
LOG.info("[#"+testCaseNumber+"] Waiting for "+TestCase.getTimeout()+"ms");
// Negotiation Result
boolean releaseBeforeTimeout = lock.await(TestCase.getTimeout(), TimeUnit.MILLISECONDS);
// Check timeout
if (!releaseBeforeTimeout) {
// Do stuff
fail("Timeout");
}
assertTrue("Negotiation should have succeed", negotiationResult);
// Check Agreement
retrievedPrivacyAgreement = TestCase.privacyAgreementManager.getAgreement(requestorService);
assertNotNull("Privacy agreement should not be null", retrievedPrivacyAgreement);
assertNotNull("Privacy agreement (agreement) should not be null", retrievedPrivacyAgreement.getAgreement());
assertNotNull("Privacy agreement response items should not be null", retrievedPrivacyAgreement.getAgreement().getRequestedItems());
LOG.debug("[#"+testCaseNumber+"] Agreement: "+ResponseItemUtils.toXmlString(retrievedPrivacyAgreement.getAgreement().getRequestedItems()));
// assertTrue("Privacy agreement response items should not be empty", retrievedPrivacyAgreement.getAgreement().getRequestedItems().size() > 0);
// for(org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponseItem responseItem : retrievedPrivacyAgreement.getAgreement().getRequestedItems()) {
// assertTrue("Element rejected: "+ResourceUtils.toString(responseItem.getRequestItem().getResource()), DecisionUtils.equal(org.societies.api.schema.privacytrust.privacy.model.privacypolicy.Decision.PERMIT, responseItem.getDecision()));
// }
} catch (PrivacyException e) {
LOG.error("[#"+testCaseNumber+"] [Error PrivacyException] "+testTitle, e);
fail("Error PrivacyException: "+e.getMessage()+" - "+testTitle);
} catch (Exception e) {
LOG.error("[#"+testCaseNumber+"] [Error Exception] "+testTitle, e);
fail("Error Exception: "+e.getMessage()+" - "+testTitle);
}
}
/* **************
* Tools *
* **************/
private RequestorService getRequestorService() throws InvalidFormatException, URISyntaxException {
IIdentity requestorId = TestCase.commManager.getIdManager().fromJid("red@societies.local");
ServiceResourceIdentifier serviceId = new ServiceResourceIdentifier();
serviceId.setServiceInstanceIdentifier("css://red@societies.local/HelloEarth");
serviceId.setIdentifier(new URI("css://red@societies.local/HelloEarth"));
return new RequestorService(requestorId, serviceId);
}
private RequestorCis getRequestorCis() throws InvalidFormatException {
IIdentity requestorId = TestCase.commManager.getIdManager().getThisNetworkNode();
int randomInt = new Random().nextInt();
IIdentity cisId =TestCase.commManager.getIdManager().fromJid("cis-"+randomInt+".societies.local");
return new RequestorCis(requestorId, cisId);
}
private RequestPolicy getServicePolicy(){
/*
* location requestItem
*/
Resource rLocation = new Resource(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.LOCATION_SYMBOLIC);
List<Action> actions = new ArrayList<Action>();
actions.add(new Action(ActionConstants.READ));
List<Condition> conditions = new ArrayList<Condition>();
conditions.add(new Condition(ConditionConstants.DATA_RETENTION_IN_HOURS, "48"));
conditions.add(new Condition(ConditionConstants.SHARE_WITH_3RD_PARTIES, "1"));
conditions.add(new Condition(ConditionConstants.STORE_IN_SECURE_STORAGE, "1"));
conditions.add(new Condition(ConditionConstants.RIGHT_TO_OPTOUT, "1"));
RequestItem itemLocation = new RequestItem(rLocation, actions, conditions);
/*
* status requestItem
*/
Resource rStatus = new Resource(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.STATUS);
List<Action> actions1 = new ArrayList<Action>();
actions1.add(new Action(ActionConstants.READ));
List<Condition> conditions1 = new ArrayList<Condition>();
conditions1.add(new Condition(ConditionConstants.DATA_RETENTION_IN_HOURS, "48"));
conditions1.add(new Condition(ConditionConstants.SHARE_WITH_3RD_PARTIES, "1"));
conditions1.add(new Condition(ConditionConstants.STORE_IN_SECURE_STORAGE, "1"));
conditions1.add(new Condition(ConditionConstants.RIGHT_TO_OPTOUT, "1"));
RequestItem itemStatus = new RequestItem(rStatus, actions1, conditions1, true);
/* ----------------------------------------------------*/
List<RequestItem> requests = new ArrayList<RequestItem>();
requests.add(itemLocation);
requests.add(itemStatus);
RequestPolicy policy = new RequestPolicy(this.requestorService, requests);
return policy;
}
private ResponsePolicy getCisResponsePolicy() {
List<ResponseItem> responses = new ArrayList<ResponseItem>();
for (RequestItem requestItem : this.cisPrivacyPolicy.getRequests()){
ResponseItem responseItem = new ResponseItem(requestItem, Decision.PERMIT);
responses.add(responseItem);
}
ResponsePolicy response = new ResponsePolicy(this.requestorCis, responses, NegotiationStatus.SUCCESSFUL);
return response;
}
private ResponsePolicy getServiceResponsePolicy() {
List<ResponseItem> responses = new ArrayList<ResponseItem>();
for (RequestItem requestItem : this.servicePrivacyPolicy.getRequests()){
ResponseItem responseItem = new ResponseItem(requestItem, Decision.PERMIT);
responses.add(responseItem);
}
ResponsePolicy response = new ResponsePolicy(this.requestorService, responses, NegotiationStatus.SUCCESSFUL);
return response;
}
private RequestPolicy getCisPolicy(){
/*
* location requestItem
*/
Resource rLocation = new Resource(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.LOCATION_SYMBOLIC);
List<Action> actions = new ArrayList<Action>();
actions.add(new Action(ActionConstants.READ));
List<Condition> conditions = new ArrayList<Condition>();
conditions.add(new Condition(ConditionConstants.DATA_RETENTION_IN_HOURS, "48"));
conditions.add(new Condition(ConditionConstants.SHARE_WITH_3RD_PARTIES, "1"));
conditions.add(new Condition(ConditionConstants.STORE_IN_SECURE_STORAGE, "1"));
conditions.add(new Condition(ConditionConstants.RIGHT_TO_OPTOUT, "1"));
RequestItem itemLocation = new RequestItem(rLocation, actions, conditions, true);
/*
* status requestItem
*/
Resource rStatus = new Resource(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.STATUS);
List<Action> actions1 = new ArrayList<Action>();
actions1.add(new Action(ActionConstants.READ));
List<Condition> conditions1 = new ArrayList<Condition>();
conditions1.add(new Condition(ConditionConstants.DATA_RETENTION_IN_HOURS, "48"));
conditions1.add(new Condition(ConditionConstants.SHARE_WITH_3RD_PARTIES, "1"));
conditions1.add(new Condition(ConditionConstants.STORE_IN_SECURE_STORAGE, "1"));
conditions1.add(new Condition(ConditionConstants.RIGHT_TO_OPTOUT, "1"));
RequestItem itemStatus = new RequestItem(rStatus, actions1, conditions1, true);
/*
* birthday requestItem
*/
Resource rBirthday = new Resource(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.BIRTHDAY);
List<Action> actions2 = new ArrayList<Action>();
actions2.add(new Action(ActionConstants.WRITE));
actions2.add(new Action(ActionConstants.CREATE));
List<Condition> conditions2 = new ArrayList<Condition>();
conditions2.add(new Condition(ConditionConstants.DATA_RETENTION_IN_HOURS, "48"));
conditions2.add(new Condition(ConditionConstants.SHARE_WITH_3RD_PARTIES, "1"));
conditions2.add(new Condition(ConditionConstants.STORE_IN_SECURE_STORAGE, "0"));
conditions2.add(new Condition(ConditionConstants.RIGHT_TO_OPTOUT, "1"));
RequestItem itemBirthday = new RequestItem(rBirthday, actions2, conditions2, true);
/* ----------------------------------------------------*/
List<RequestItem> requests = new ArrayList<RequestItem>();
requests.add(itemLocation);
requests.add(itemStatus);
requests.add(itemBirthday);
RequestPolicy policy = new RequestPolicy(this.requestorCis, requests);
return policy;
}
private void setupContext() {
userId = TestCase.commManager.getIdManager().getThisNetworkNode();
try {
userCtxEntity = TestCase.ctxBroker.retrieveIndividualEntity(userId).get();
List<CtxIdentifier> lookupSymLocAttributes = TestCase.ctxBroker.lookup(CtxModelType.ATTRIBUTE, CtxAttributeTypes.LOCATION_SYMBOLIC).get();
if (lookupSymLocAttributes.size()==0){
this.locationAttribute = TestCase.ctxBroker.createAttribute(userCtxEntity.getId(), CtxAttributeTypes.LOCATION_SYMBOLIC).get();
}else{
this.locationAttribute = (CtxAttribute) TestCase.ctxBroker.retrieve(lookupSymLocAttributes.get(0)).get();
}
this.locationAttribute.setStringValue("home");
this.ctxLocationAttributeId = this.locationAttribute.getId();
TestCase.ctxBroker.update(locationAttribute);
List<CtxIdentifier> list = TestCase.ctxBroker.lookup(CtxModelType.ATTRIBUTE, CtxAttributeTypes.STATUS).get();
if (list.size()==0){
this.statusAttribute = TestCase.ctxBroker.createAttribute(userCtxEntity.getId(), CtxAttributeTypes.STATUS).get();
}else{
this.statusAttribute = (CtxAttribute) TestCase.ctxBroker.retrieve(list.get(0)).get();
}
this.statusAttribute.setStringValue("busy");
this.ctxStatusAttributeId = this.statusAttribute.getId();
TestCase.ctxBroker.update(statusAttribute);
} catch (CtxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void deleteContext() {
}
}