/** * 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.api.privacytrust.privacy.util.privacypolicy; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.api.context.model.CtxAttributeTypes; import org.societies.api.schema.identity.DataIdentifierScheme; 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.RequestItem; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.Resource; /** * @author Olivier Maridat (Trialog) * */ public class RequestItemUtilsTest { private static Logger LOG = LoggerFactory.getLogger(RequestItemUtilsTest.class.getName()); @Test public void testBean2Java() { // - Data Resource resource1 = ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION); org.societies.api.privacytrust.privacy.model.privacypolicy.Resource resource2 = new org.societies.api.privacytrust.privacy.model.privacypolicy.Resource(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION); List<Action> actions1 = ActionUtils.createList(ActionConstants.READ); List<org.societies.api.privacytrust.privacy.model.privacypolicy.Action> actions2 = new ArrayList<org.societies.api.privacytrust.privacy.model.privacypolicy.Action>(); org.societies.api.privacytrust.privacy.model.privacypolicy.Action action2 = new org.societies.api.privacytrust.privacy.model.privacypolicy.Action(org.societies.api.privacytrust.privacy.model.privacypolicy.constants.ActionConstants.READ); actions2.add(action2); List<Condition> conditions1 = new ArrayList<Condition>(); Condition condition1 = ConditionUtils.create(ConditionConstants.MAY_BE_INFERRED, "1"); conditions1.add(condition1); List<org.societies.api.privacytrust.privacy.model.privacypolicy.Condition> conditions2 = new ArrayList<org.societies.api.privacytrust.privacy.model.privacypolicy.Condition>(); org.societies.api.privacytrust.privacy.model.privacypolicy.Condition condition2 = new org.societies.api.privacytrust.privacy.model.privacypolicy.Condition(org.societies.api.privacytrust.privacy.model.privacypolicy.constants.ConditionConstants.MAY_BE_INFERRED, "1", false); conditions2.add(condition2); // Test Condition assertTrue("Different condition constant type should be equals", ConditionConstantsUtils.equal(condition1.getConditionConstant(), ConditionUtils.toConditionBean(condition2).getConditionConstant())); assertTrue("Different condition constant type should be equals (inverse)", condition2.getConditionName().equals(ConditionUtils.toCondition(condition1).getConditionName())); assertTrue("Different condition value type should be equals", StringUtils.equals(condition1.getValue(), ConditionUtils.toConditionBean(condition2).getValue())); assertTrue("Different condition value type should be equals (inverse)", StringUtils.equals(condition2.getValue(), ConditionUtils.toCondition(condition1).getValue())); assertTrue("Different condition optional type should be equals (direct)", condition2.isOptional() == condition1.isOptional()); assertTrue("Different condition optional type should be equals", condition1.isOptional() == ConditionUtils.toConditionBean(condition2).isOptional()); assertTrue("Different condition optional type should be equals (inverse)", condition2.isOptional() == ConditionUtils.toCondition(condition1).isOptional()); assertTrue("Different condition type should be equals", ConditionUtils.equal(condition1, ConditionUtils.toConditionBean(condition2))); assertTrue("Different condition type should be equals (inverse)", condition2.equals(ConditionUtils.toCondition(condition1))); // -- Tests // - Equal RequestItem RequestItem requestItem1 = RequestItemUtils.create(resource1, actions1, conditions1); org.societies.api.privacytrust.privacy.model.privacypolicy.RequestItem requestItem2 = new org.societies.api.privacytrust.privacy.model.privacypolicy.RequestItem(resource2, actions2, conditions2); LOG.debug("####### RequestItem bean: "+RequestItemUtils.toXmlString(requestItem1)); LOG.debug("####### RequestItem bean transformed: "+RequestItemUtils.toRequestItem(requestItem1).toString()); LOG.debug("####### RequestItem : "+requestItem2.toString()); LOG.debug("####### RequestItem transformed: "+RequestItemUtils.toXmlString(RequestItemUtils.toRequestItemBean(requestItem2))); // Test RequestItem equals assertFalse("Different request item types should be different", RequestItemUtils.equal(requestItem1, requestItem2)); assertFalse("Different request item types should be different (inverse)", requestItem2.equals(requestItem1)); assertTrue("Different request item types should be equals", RequestItemUtils.equal(requestItem1, RequestItemUtils.toRequestItemBean(requestItem2))); assertTrue("Different request item types should be equals (inverse)", requestItem2.equals(RequestItemUtils.toRequestItem(requestItem1))); // Confirm this test by testing RequestItem attributes equals assertTrue("Different request item optional types should be equals", requestItem1.isOptional() == requestItem2.isOptional()); assertTrue("Different request item actions types should be equals", ActionUtils.equal(requestItem1.getActions(), ActionUtils.toActionBeans(requestItem2.getActions()))); assertTrue("Different request item conditions types should be equals", ConditionUtils.equal(requestItem1.getConditions(), ConditionUtils.toConditionBeans(requestItem2.getConditions()))); assertTrue("Different request item resources types should be equals", ResourceUtils.equal(requestItem1.getResource(), ResourceUtils.toResourceBean(requestItem2.getResource()))); // - RequestItem: optional is different requestItem1 = RequestItemUtils.create(resource1, actions1, conditions1, true); requestItem2 = new org.societies.api.privacytrust.privacy.model.privacypolicy.RequestItem(resource2, actions2, conditions2, false); LOG.debug("####### RequestItem bean: "+RequestItemUtils.toXmlString(requestItem1)); LOG.debug("####### RequestItem bean transformed: "+RequestItemUtils.toRequestItem(requestItem1).toString()); LOG.debug("####### RequestItem : "+requestItem2.toString()); LOG.debug("####### RequestItem transformed: "+RequestItemUtils.toXmlString(RequestItemUtils.toRequestItemBean(requestItem2))); // Test RequestItem equals assertFalse("Different request item types should be different", RequestItemUtils.equal(requestItem1, requestItem2)); assertFalse("Different request item types should be different (inverse)", requestItem2.equals(requestItem1)); assertFalse("Different request (optional) item types should not be equals", RequestItemUtils.equal(requestItem1, RequestItemUtils.toRequestItemBean(requestItem2))); assertFalse("Different request item (optional) types should not be equals (inverse)", requestItem2.equals(RequestItemUtils.toRequestItem(requestItem1))); // Confirm this test by testing RequestItem attributes equals assertFalse("Different request item (optional) optional types should be equals", requestItem1.isOptional() == requestItem2.isOptional()); assertTrue("Different request item actions types should be equals", ActionUtils.equal(requestItem1.getActions(), ActionUtils.toActionBeans(requestItem2.getActions()))); assertTrue("Different request item conditions types should be equals", ConditionUtils.equal(requestItem1.getConditions(), ConditionUtils.toConditionBeans(requestItem2.getConditions()))); assertTrue("Different request item resources types should be equals", ResourceUtils.equal(requestItem1.getResource(), ResourceUtils.toResourceBean(requestItem2.getResource()))); // - RequestItem: optional is different requestItem1 = RequestItemUtils.create(resource1, ActionUtils.createList(ActionConstants.READ, ActionConstants.WRITE), conditions1, true); requestItem2 = new org.societies.api.privacytrust.privacy.model.privacypolicy.RequestItem(resource2, actions2, conditions2, false); LOG.debug("####### RequestItem bean: "+RequestItemUtils.toXmlString(requestItem1)); LOG.debug("####### RequestItem bean transformed: "+RequestItemUtils.toRequestItem(requestItem1).toString()); LOG.debug("####### RequestItem : "+requestItem2.toString()); LOG.debug("####### RequestItem transformed: "+RequestItemUtils.toXmlString(RequestItemUtils.toRequestItemBean(requestItem2))); // Test RequestItem equals assertFalse("Different request item types should be different", RequestItemUtils.equal(requestItem1, requestItem2)); assertFalse("Different request item types should be different (inverse)", requestItem2.equals(requestItem1)); assertFalse("Different request (actions, optional) item types should not be equals", RequestItemUtils.equal(requestItem1, RequestItemUtils.toRequestItemBean(requestItem2))); assertFalse("Different request item (actions, optional) types should not be equals (inverse)", requestItem2.equals(RequestItemUtils.toRequestItem(requestItem1))); // Confirm this test by testing RequestItem attributes equals assertFalse("Different request item (actions, optional) optional types should be equals", requestItem1.isOptional() == requestItem2.isOptional()); assertFalse("Different request item (actions, optional) actions types should be equals", ActionUtils.equal(requestItem1.getActions(), ActionUtils.toActionBeans(requestItem2.getActions()))); assertTrue("Different request item conditions types should be equals", ConditionUtils.equal(requestItem1.getConditions(), ConditionUtils.toConditionBeans(requestItem2.getConditions()))); assertTrue("Different request item resources types should be equals", ResourceUtils.equal(requestItem1.getResource(), ResourceUtils.toResourceBean(requestItem2.getResource()))); } @Test public void testOptionalField() { // -- Empty RequestItem requestItem = new RequestItem(); assertFalse("Empty request item should be mandatory", requestItem.isOptional()); // -- Filled List<Condition> conditions1 = new ArrayList<Condition>(); conditions1.add(ConditionUtils.create(ConditionConstants.SHARE_WITH_3RD_PARTIES, "1")); requestItem = RequestItemUtils.create(ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION), ActionUtils.createList(ActionConstants.READ), conditions1); assertFalse("Request item 1 should be mandatory", requestItem.isOptional()); requestItem = RequestItemUtils.create(ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION), ActionUtils.createList(ActionConstants.READ), conditions1, false); assertFalse("Request item 1 should be mandatory", requestItem.isOptional()); requestItem = RequestItemUtils.create(ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION), ActionUtils.createList(ActionConstants.READ), conditions1, true); assertTrue("Request item 3 should be optional", requestItem.isOptional()); } @Test public void testEqual() { RequestItem requestItem1 = null; RequestItem requestItem2 = null; Action notPrivacyPolicy = null; // -- Null Privacy Policy assertTrue("Same null privacy policy should be equal", RequestItemUtils.equal(requestItem1, requestItem1)); assertTrue("Null privacy policies should be equal", RequestItemUtils.equal(requestItem1, requestItem2)); assertTrue("Null privacy policy and null object should be equal", RequestItemUtils.equal(requestItem1, notPrivacyPolicy)); // -- Empty Privacy Policy requestItem1 = new RequestItem(); requestItem2 = new RequestItem(); notPrivacyPolicy = new Action(); assertTrue("Same empty privacy policy should be equal", RequestItemUtils.equal(requestItem1, requestItem1)); assertTrue("Empty privacy policies should be equal", RequestItemUtils.equal(requestItem1, requestItem2)); assertTrue("Empty privacy policies should be equal (inverse)", RequestItemUtils.equal(requestItem2, requestItem1)); assertFalse("Empty privacy policy and empty object should not be equal", RequestItemUtils.equal(requestItem1, notPrivacyPolicy)); // -- Privacy Policy List<Condition> conditions1 = new ArrayList<Condition>(); conditions1.add(ConditionUtils.create(ConditionConstants.SHARE_WITH_3RD_PARTIES, "1")); requestItem1 = RequestItemUtils.create(ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION), ActionUtils.createList(ActionConstants.READ), conditions1); assertTrue("Same privacy policy should be equal", RequestItemUtils.equal(requestItem1, requestItem1)); assertFalse("Different privacy policies should be equal", RequestItemUtils.equal(requestItem1, requestItem2)); assertFalse("Different privacy policies should be equal (inverse)", RequestItemUtils.equal(requestItem2, requestItem1)); requestItem2 = RequestItemUtils.create(ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION), ActionUtils.createList(ActionConstants.WRITE), conditions1); assertFalse("Different privacy policies should be equal (2)", RequestItemUtils.equal(requestItem1, requestItem2)); assertFalse("Different privacy policies should be equal (inverse) (2)", RequestItemUtils.equal(requestItem2, requestItem1)); requestItem2 = RequestItemUtils.create(ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION), ActionUtils.createList(ActionConstants.READ), conditions1); assertTrue("Equal privacy policies should be equal", RequestItemUtils.equal(requestItem1, requestItem2)); assertTrue("Equal privacy policies should be equal (inverse)", RequestItemUtils.equal(requestItem2, requestItem1)); assertFalse("Privacy policy and object should not be equal", RequestItemUtils.equal(requestItem1, notPrivacyPolicy)); // Equality with different "optional" requestItem2 = RequestItemUtils.create(ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION), ActionUtils.createList(ActionConstants.READ), conditions1, true); assertFalse("Equal privacy policies should not be equal", RequestItemUtils.equal(requestItem1, requestItem2)); assertFalse("Equal privacy policies should not be equal (inverse)", RequestItemUtils.equal(requestItem2, requestItem1)); assertTrue("Similar privacy policies should be Similar", RequestItemUtils.equal(requestItem1, requestItem2, true)); assertTrue("Similar privacy policies should be Similar (inverse)", RequestItemUtils.equal(requestItem2, requestItem1, true)); } @Test public void testEqualList() { String testTitle = "Equal: list"; LOG.info("[Test] "+testTitle); List<RequestItem> requestItems1 = null; List<RequestItem> requestItems2 = null; Action notPrivacyPolicy = null; // -- Null assertTrue("Same null item should be equal", RequestItemUtils.equal(requestItems1, requestItems1)); assertTrue("Null items should be equal", RequestItemUtils.equal(requestItems1, requestItems2)); assertTrue("Null item and null object should be equal", RequestItemUtils.equal(requestItems1, notPrivacyPolicy)); // -- Empty requestItems1 = new ArrayList<RequestItem>(); requestItems2 = new ArrayList<RequestItem>(); notPrivacyPolicy = new Action(); assertTrue("Same empty item should be equal", RequestItemUtils.equal(requestItems1, requestItems1)); assertTrue("Empty items should be equal", RequestItemUtils.equal(requestItems1, requestItems2)); assertTrue("Empty items should be equal (inverse)", RequestItemUtils.equal(requestItems2, requestItems1)); assertFalse("Empty item and empty object should not be equal", RequestItemUtils.equal(requestItems1, notPrivacyPolicy)); // Filled List<Condition> conditions1 = new ArrayList<Condition>(); conditions1.add(ConditionUtils.create(ConditionConstants.SHARE_WITH_3RD_PARTIES, "Yes")); List<Condition> conditions2 = new ArrayList<Condition>(); conditions2.add(ConditionUtils.create(ConditionConstants.SHARE_WITH_3RD_PARTIES, "Yes")); conditions2.add(ConditionUtils.create(ConditionConstants.MAY_BE_INFERRED, "Yes")); requestItems1.add(RequestItemUtils.create( ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION), ActionUtils.createList(ActionConstants.READ), conditions1)); assertTrue("Same item should be equal", RequestItemUtils.equal(requestItems1, requestItems1)); assertFalse("Different items should not be equal", RequestItemUtils.equal(requestItems1, requestItems2)); assertFalse("Different items should not be equal (inverse)", RequestItemUtils.equal(requestItems2, requestItems1)); requestItems2.add(RequestItemUtils.create( ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION), ActionUtils.createList(ActionConstants.READ), conditions1)); assertTrue("Same item should be equal", RequestItemUtils.equal(requestItems1, requestItems2)); assertTrue("Same item should be equal (inverse)", RequestItemUtils.equal(requestItems2, requestItems1)); } }