/**
* 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.activityfeedct;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.societies.activity.model.Activity;
import org.societies.api.activity.IActivityFeedCallback;
import org.societies.api.cis.attributes.MembershipCriteria;
import org.societies.api.cis.directory.ICisAdvertisementRecord;
import org.societies.api.cis.management.ICisOwned;
import org.societies.api.context.model.CtxAttributeTypes;
import org.societies.api.context.model.MalformedCtxIdentifierException;
import org.societies.api.identity.*;
import org.societies.api.privacytrust.privacy.model.PrivacyException;
import org.societies.api.privacytrust.privacy.model.privacypolicy.*;
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.PrivacyPolicyUtils;
import org.societies.api.schema.activityfeed.MarshaledActivityFeed;
import org.societies.api.schema.cis.directory.CisAdvertisementRecord;
import org.societies.api.schema.identity.DataIdentifier;
import org.societies.api.schema.identity.DataIdentifierScheme;
import org.societies.api.schema.servicelifecycle.model.ServiceResourceIdentifier;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
/**
* Test list:
*
* @author Bjørn Magnus Mathisen (SINTEF)
*
*/
public class ActivityFeedManagerHostingTest {
private static Logger LOG = LoggerFactory.getLogger(ActivityFeedManagerHostingTest.class.getSimpleName());
public static Integer testCaseNumber;
private String privacyPolicyWithoutRequestor;
private String cssId;
private List<String> cisIds;
private String cssPassword;
public static String cisName;
private String cisDescription;
private String cisType;
private int numCIS = 6;
private Hashtable<String, MembershipCriteria> cisMembershipCriteria;
@Before
public void setUp() {
LOG.info("[#"+testCaseNumber+"] setUp");
cisIds = new ArrayList<String>();
cssId = TestCase109611.commManager.getIdManager().getThisNetworkNode().getJid();
cssPassword = "password.societies.local";
cisName = "CisTest";
cisDescription = "CIS to Test ActivityFeedManager";
cisType = "testCis";
}
@After
public void tearDown() {
LOG.info("[#"+testCaseNumber+"] tearDown");
}
//Write/Read to multiple activities feeds with the container and test that what is written for a cis can be read only for that cis.
@Test
public void testActivityFeedManager() {
LOG.info("[#"+testCaseNumber+"] creating cis1");
/* try {
privacyPolicy = getRequestPolicy();
} catch (InvalidFormatException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (MalformedCtxIdentifierException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}*/
//LOG.info("[#"+testCaseNumber+"] creating cis with policy: "+privacyPolicy.toXMLString());
Future<ICisOwned> cis1 = TestCase109611.cisManager.createCis(cisName, cisType, cisMembershipCriteria, cisDescription,"<RequestPolicy></RequestPolicy>");//,"<RequestPolicy></RequestPolicy>");
try {
RequestorCis requestor = getRequestorCis("admin.societies.local",cis1.get().getCisId());
RequestPolicy privacyPolicy = new RequestPolicy(requestor,new ArrayList<RequestItem>());
TestCase109611.privacyPolicyManager.updatePrivacyPolicy(privacyPolicy);
LOG.info("[#"+testCaseNumber+"#] setting new policy: for the pair (admin.societies.local,"+cis1.get().getCisId()+") "+privacyPolicy.toXMLString());
//ICisOwned cisOwned = cis1.get();
//CisAdvertisementRecord cisAdvertisementRecord = new CisAdvertisementRecord();
//cisAdvertisementRecord.setName(cisOwned.getName()); cisAdvertisementRecord.setId(cisOwned.getCisId()); cisAdvertisementRecord.setCssownerid(cisOwned.getOwnerId());
//TestCase109611.cisDirectory.addCisAdvertisementRecord(cisAdvertisementRecord);
LOG.info("[#"+testCaseNumber+"] inserting 1 activity into cis1");
//inserting 1 activity into cis1
cis1.get().getActivityFeed().addActivity(makeMessage("heh", "heh", "nonsense", "0"), new IActivityFeedCallback() {
@Override
public void receiveResult(MarshaledActivityFeed activityFeedObject) {
}
});
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (ExecutionException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (InvalidFormatException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (PrivacyException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
LOG.info("[#"+testCaseNumber+"] has been run successfully");
assert(cisIds.size()==this.numCIS);
}
//util methods
/* public RequestPolicy makePolicy(){
List<PrivacyConditionForm> conditionsCisMemberList = new ArrayList<PrivacyConditionForm>();
List<PrivacyConditionForm> conditionsCisMembershipCriteria = new ArrayList<PrivacyConditionForm>();
List<PrivacyConditionForm> conditionsCisCommunityContext = new ArrayList<PrivacyConditionForm>();
conditionsCisMemberList.add(new PrivacyConditionForm(ConditionConstants.RIGHT_TO_OPTOUT, "1", false));
conditionsCisMemberList.add(new PrivacyConditionForm(ConditionConstants.STORE_IN_SECURE_STORAGE, "1", false));
conditionsCisMemberList.add(new PrivacyConditionForm(ConditionConstants.SHARE_WITH_3RD_PARTIES, "1", false));
conditionsCisCommunityContext.add(new PrivacyConditionForm(ConditionConstants.RIGHT_TO_OPTOUT, "1", false));
conditionsCisCommunityContext.add(new PrivacyConditionForm(ConditionConstants.STORE_IN_SECURE_STORAGE, "1", false));
conditionsCisCommunityContext.add(new PrivacyConditionForm(ConditionConstants.SHARE_WITH_3RD_PARTIES, "1", false));
}*/
public RequestPolicy getRequestPolicy() throws InvalidFormatException, MalformedCtxIdentifierException {
// -- Requestor
RequestorCis requestor = null;
// -- Resources
List<RequestItem> requestItems = new ArrayList<RequestItem>();
//RequestItem item = new RequestItem(new Resource(DataTypeFactory.fromUri()))
RequestPolicy privacyPolicy = new RequestPolicy(requestItems);
privacyPolicy.setRequestor(requestor);
return privacyPolicy;
}
public Activity makeMessage(String user1, String user2, String message, String published){
Activity ret = new Activity();
ret.setActor(user1);
ret.setObject(message);
ret.setTarget(user2);
ret.setPublished(published);
return ret;
}
private RequestPolicy getRequestPolicy(Requestor requestor) {
List<RequestItem> requestItems = getRequestItems();
RequestPolicy requestPolicy = new RequestPolicy(requestor, requestItems);
return requestPolicy;
}
private List<RequestItem> getRequestItems() {
List<RequestItem> items = new ArrayList<RequestItem>();
Resource locationResource = new Resource(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.LOCATION_SYMBOLIC);
List<Condition> conditions = new ArrayList<Condition>();
conditions.add(new Condition(ConditionConstants.SHARE_WITH_3RD_PARTIES,"YES"));
List<Action> actions = new ArrayList<Action>();
actions.add(new Action(ActionConstants.READ));
RequestItem rItem = new RequestItem(locationResource, actions, conditions, false);
items.add(rItem);
Resource someResource = new Resource(DataIdentifierScheme.CONTEXT, "someResource");
List<Condition> extendedConditions = new ArrayList<Condition>();
extendedConditions.add(new Condition(ConditionConstants.SHARE_WITH_3RD_PARTIES,"YES"));
extendedConditions.add(new Condition(ConditionConstants.RIGHT_TO_ACCESS_HELD_DATA, "YES"));
List<Action> extendedActions = new ArrayList<Action>();
extendedActions.add(new Action(ActionConstants.READ));
extendedActions.add(new Action(ActionConstants.CREATE));
extendedActions.add(new Action(ActionConstants.WRITE));
extendedActions.add(new Action(ActionConstants.DELETE));
RequestItem someItem = new RequestItem(someResource, extendedActions, extendedConditions, false);
items.add(someItem);
return items;
}
private RequestorService getRequestorService() throws InvalidFormatException{
IIdentity requestorId = TestCase109611.commManager.getIdManager().fromJid("red.societies.local");
ServiceResourceIdentifier serviceId = new ServiceResourceIdentifier();
serviceId.setServiceInstanceIdentifier("css://red@societies.local/HelloEarth");
try {
serviceId.setIdentifier(new URI("css://red@societies.local/HelloEarth"));
} catch (URISyntaxException e) {
LOG.error("Can't create the service ID", e);
}
return new RequestorService(requestorId, serviceId);
}
private RequestorCis getRequestorCis(String cssIdString, String cisIdString) throws InvalidFormatException{
IIdentity otherCssId = TestCase109611.commManager.getIdManager().fromJid(cssIdString);
IIdentity cisId = TestCase109611.commManager.getIdManager().fromJid(cisIdString);
return new RequestorCis(otherCssId, cisId);
}
}