package org.societies.integration.test.bit.feedback.privacy; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import junit.framework.Assert; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.api.comm.xmpp.exceptions.CommunicationException; import org.societies.api.comm.xmpp.exceptions.XMPPError; import org.societies.api.comm.xmpp.pubsub.PubsubClient; import org.societies.api.comm.xmpp.pubsub.Subscriber; import org.societies.api.context.model.CtxAttributeTypes; import org.societies.api.identity.IIdentity; import org.societies.api.identity.IIdentityManager; import org.societies.api.internal.schema.useragent.feedback.NegotiationDetailsBean; import org.societies.api.internal.schema.useragent.feedback.UserFeedbackPrivacyNegotiationEvent; import org.societies.api.osgi.event.EventTypes; import org.societies.api.schema.identity.DataIdentifierScheme; import org.societies.api.schema.identity.RequestorBean; import org.societies.api.schema.identity.RequestorCisBean; import org.societies.api.schema.identity.RequestorServiceBean; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.Action; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ActionConstants; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.Condition; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ConditionConstants; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.Decision; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.NegotiationStatus; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.RequestItem; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.Resource; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponseItem; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponsePolicy; import org.societies.api.schema.servicelifecycle.model.ServiceResourceIdentifier; public class Tester implements Subscriber{ private PubsubClient pubsub; private IIdentityManager idMgr; private IIdentity userID; private Logger logging = LoggerFactory.getLogger(this.getClass()); private static final List<String> EVENT_SCHEMA_CLASSES = Collections.unmodifiableList(Arrays.asList( "org.societies.api.internal.schema.useragent.feedback.UserFeedbackPrivacyNegotiationEvent")); private boolean receivedResult = false; private ResponsePolicy receivedPolicy; public Tester() { logging.debug("Tester constructor"); } @Before public void setUp(){ logging.debug("Setting up Tester"); this.pubsub = TestFeedback.getPubsub(); this.idMgr = TestFeedback.getIdMgr(); this.userID = this.idMgr.getThisNetworkNode(); logging.debug("Finished setting up tester"); } @Test public void TestPubSubEvent() throws XMPPError, CommunicationException, ClassNotFoundException{ logging.debug("starting testPubSubEvent"); this.pubsub.addSimpleClasses(EVENT_SCHEMA_CLASSES); this.pubsub.ownerCreate(this.userID, EventTypes.UF_PRIVACY_NEGOTIATION); this.pubsub.ownerCreate(this.userID, EventTypes.UF_PRIVACY_NEGOTIATION_RESPONSE); this.pubsub.subscriberSubscribe(this.userID, EventTypes.UF_PRIVACY_NEGOTIATION, this); this.pubsub.subscriberSubscribe(this.userID, EventTypes.UF_PRIVACY_NEGOTIATION_RESPONSE, this); UserFeedbackPrivacyNegotiationEvent event = new UserFeedbackPrivacyNegotiationEvent(); NegotiationDetailsBean detailsBean = new NegotiationDetailsBean(); detailsBean.setNegotiationID(1223); detailsBean.setRequestor(getRequestorBean()); event.setNegotiationDetails(detailsBean); event.setResponsePolicy(getResponsePolicy()); this.pubsub.publisherPublish(this.userID, EventTypes.UF_PRIVACY_NEGOTIATION, null, event); logging.debug("Finished testPubSubEvent"); while (!receivedResult){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Assert.assertNotNull(this.receivedPolicy); } private ResponsePolicy getResponsePolicy() { ResponsePolicy responsePolicy = new ResponsePolicy(); responsePolicy.setNegotiationStatus(NegotiationStatus.ONGOING); responsePolicy.setRequestor(getRequestorBean()); List<ResponseItem> responseItems = new ArrayList<ResponseItem>(); responseItems.add(this.getResponseItem(CtxAttributeTypes.LOCATION_SYMBOLIC)); responseItems.add(this.getResponseItem(CtxAttributeTypes.NAME)); responseItems.add(this.getResponseItem("SomeDataType")); responseItems.add(this.getResponseItem("AnotherDataType")); responsePolicy.setResponseItems(responseItems); return responsePolicy; } private ResponseItem getResponseItem(String dataType) { ResponseItem item = new ResponseItem(); item.setDecision(Decision.PERMIT); item.setRequestItem(getRequestItem(dataType)); return item; } private RequestItem getRequestItem(String dataType) { RequestItem item = new RequestItem(); //create some actions List<Action> actions = new ArrayList<Action>(); Action read = new Action(); read.setActionConstant(ActionConstants.READ); Action write = new Action(); write.setActionConstant(ActionConstants.WRITE); Action create = new Action(); create.setActionConstant(ActionConstants.CREATE); Action delete = new Action(); delete.setActionConstant(ActionConstants.DELETE); //create some conditions List<Condition> conditions = new ArrayList<Condition>(); Condition dataRetentionHours = new Condition(); dataRetentionHours.setConditionConstant(ConditionConstants.DATA_RETENTION_IN_HOURS); dataRetentionHours.setOptional(true); dataRetentionHours.setValue("24"); Condition rightToOptOut = new Condition(); rightToOptOut.setConditionConstant(ConditionConstants.RIGHT_TO_OPTOUT); rightToOptOut.setOptional(false); rightToOptOut.setValue("YES"); Condition shareWith3p = new Condition(); shareWith3p.setConditionConstant(ConditionConstants.SHARE_WITH_3RD_PARTIES); shareWith3p.setOptional(true); shareWith3p.setValue("YES"); Condition shareWithCISAdmin = new Condition(); shareWithCISAdmin.setConditionConstant(ConditionConstants.SHARE_WITH_CIS_OWNER_ONLY); shareWithCISAdmin.setOptional(false); shareWithCISAdmin.setValue("YES"); Condition shareWithCISmembers = new Condition(); shareWithCISmembers.setConditionConstant(ConditionConstants.SHARE_WITH_CIS_MEMBERS_ONLY); shareWithCISmembers.setOptional(true); shareWithCISmembers.setValue("YES"); //create the resource Resource resource = new Resource(); resource.setScheme(DataIdentifierScheme.CONTEXT); resource.setDataType(dataType); if(dataType.equalsIgnoreCase(CtxAttributeTypes.LOCATION_SYMBOLIC) || dataType.equalsIgnoreCase(CtxAttributeTypes.NAME)){ actions.add(read); conditions.add(shareWithCISmembers); conditions.add(shareWith3p); conditions.add(rightToOptOut); conditions.add(dataRetentionHours); } else{ actions.add(read); actions.add(write); actions.add(create); actions.add(delete); conditions.add(shareWithCISmembers); conditions.add(shareWith3p); conditions.add(rightToOptOut); } item.setActions(actions); item.setConditions(conditions); item.setResource(resource); return item; } @After public void tearDown(){ } private RequestorBean getRequestorBean(){ /* ServiceResourceIdentifier myServiceID = new ServiceResourceIdentifier(); myServiceID .setServiceInstanceIdentifier("css://eliza@societies.org/HelloEarth"); try { myServiceID.setIdentifier(new URI( "css://eliza@societies.org/HelloEarth")); } catch (URISyntaxException e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ RequestorCisBean bean = new RequestorCisBean(); bean.setCisRequestorId("cisJid.ict-societies.eu"); bean.setRequestorId(this.userID.getJid()); return bean; } @Override public void pubsubEvent(IIdentity pubsubService, String node, String itemId, Object item) { logging.debug("Received pubsub event"); this.receivedResult = true; Assert.assertTrue(item instanceof UserFeedbackPrivacyNegotiationEvent); UserFeedbackPrivacyNegotiationEvent event = (UserFeedbackPrivacyNegotiationEvent) item; this.receivedPolicy = event.getResponsePolicy(); } }