/** * 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.privacytrust.privacyprotection.privacynegotiation.policyGeneration.client.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.api.context.model.CtxAttributeTypes; import org.societies.api.identity.util.RequestorUtils; import org.societies.api.privacytrust.privacy.util.privacypolicy.ActionUtils; import org.societies.api.privacytrust.privacy.util.privacypolicy.ConditionUtils; import org.societies.api.privacytrust.privacy.util.privacypolicy.RequestItemUtils; import org.societies.api.privacytrust.privacy.util.privacypolicy.ResourceUtils; import org.societies.api.privacytrust.privacy.util.privacypolicy.ResponseItemUtils; import org.societies.api.schema.identity.DataIdentifierScheme; 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.ResponseItem; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponsePolicy; import org.societies.privacytrust.privacyprotection.privacynegotiation.policyGeneration.client.ClientResponseChecker; /** * @author Olivier Maridat (Trialog) * */ public class ClientResponseCheckerTest { private static Logger LOG = LoggerFactory.getLogger(ClientResponseCheckerTest.class); private ClientResponseChecker checkResponseChecked; @Before public void setUp() { checkResponseChecked = new ClientResponseChecker(); } @Test public void testCheckResponse() { String testTitle = "Check Response"; LOG.info("[Test Case] "+testTitle); // Common data List<Condition> conditionsPublic = new ArrayList<Condition>(); conditionsPublic.add(ConditionUtils.create(ConditionConstants.SHARE_WITH_3RD_PARTIES, "1")); List<Condition> conditionsPublicAndMaybBeInferred = new ArrayList<Condition>(); conditionsPublicAndMaybBeInferred.add(ConditionUtils.create(ConditionConstants.SHARE_WITH_3RD_PARTIES, "1")); conditionsPublicAndMaybBeInferred.add(ConditionUtils.create(ConditionConstants.MAY_BE_INFERRED, "1")); RequestItem requestItemLocation = RequestItemUtils.create(ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.LOCATION_COORDINATES), ActionUtils.createList(ActionConstants.READ), conditionsPublic); RequestItem requestItemAction = RequestItemUtils.create(ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION), ActionUtils.createList(ActionConstants.READ, ActionConstants.WRITE), conditionsPublicAndMaybBeInferred); RequestItem requestItemActionOptional = RequestItemUtils.create(ResourceUtils.create(DataIdentifierScheme.CONTEXT, CtxAttributeTypes.ACTION), ActionUtils.createList(ActionConstants.READ, ActionConstants.WRITE), conditionsPublicAndMaybBeInferred, true); // - NULL LOG.info("[Test] NULL"); ResponsePolicy requestedPolicy = null; ResponsePolicy providedPolicy = null; assertTrue("Null response policies should match", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // - Empty LOG.info("[Test] Empty"); requestedPolicy = new ResponsePolicy(); providedPolicy = new ResponsePolicy(); assertTrue("Empty response policies should match", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // - Filled but empty LOG.info("[Test] Filled but empty"); requestedPolicy.setRequestor(RequestorUtils.create("emma.ict-societies.eu", "cis-test.ict-societies.eu")); requestedPolicy.setNegotiationStatus(NegotiationStatus.ONGOING); List<ResponseItem> requestedResponseItems = new ArrayList<ResponseItem>(); List<ResponseItem> providedResponseItems = new ArrayList<ResponseItem>(); requestedPolicy.setResponseItems(requestedResponseItems); providedPolicy = new ResponsePolicy(); assertTrue("Empty pre-filled Response policies should match", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // - Filled with one mandatory LOG.info("[Test] Filled with one mandatory"); requestedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemLocation)); // Empty providedPolicy = new ResponsePolicy(); assertFalse("Only mandatory Response policies should not match (1/3)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with DENY providedPolicy.setRequestor(RequestorUtils.create("emma.ict-societies.eu", "cis-test.ict-societies.eu")); providedPolicy.setNegotiationStatus(NegotiationStatus.ONGOING); providedResponseItems.add(ResponseItemUtils.create(Decision.DENY, requestItemLocation)); providedPolicy.setResponseItems(providedResponseItems); assertFalse("Only mandatory Response policies should not match (2/3)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with PERMIT providedPolicy = new ResponsePolicy(); providedPolicy.setRequestor(RequestorUtils.create("emma.ict-societies.eu", "cis-test.ict-societies.eu")); providedPolicy.setNegotiationStatus(NegotiationStatus.ONGOING); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemLocation)); providedPolicy.setResponseItems(providedResponseItems); assertTrue("Only mandatory Response policies should match (3/3)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // - Filled with several mandatory LOG.info("[Test] Filled with several mandatory"); requestedPolicy = new ResponsePolicy(); requestedPolicy.setRequestor(RequestorUtils.create("emma.ict-societies.eu", "cis-test.ict-societies.eu")); requestedPolicy.setNegotiationStatus(NegotiationStatus.ONGOING); providedPolicy = new ResponsePolicy(); providedPolicy.setRequestor(RequestorUtils.create("emma.ict-societies.eu", "cis-test.ict-societies.eu")); providedPolicy.setNegotiationStatus(NegotiationStatus.ONGOING); // Empty LOG.info("[Test] Filled with several mandatory: with two missing"); requestedResponseItems = new ArrayList<ResponseItem>(); requestedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemLocation)); requestedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemAction)); requestedPolicy.setResponseItems(requestedResponseItems); assertFalse("Only mandatories Response policies should not match (1/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with DENY LOG.info("[Test] Filled with several mandatory: with two DENY"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.DENY, requestItemLocation)); providedResponseItems.add(ResponseItemUtils.create(Decision.DENY, requestItemAction)); providedPolicy.setResponseItems(providedResponseItems); assertFalse("Only mandatories Response policies should not match (2/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with PERMIT LOG.info("[Test] Filled with several mandatory: with two PERMIT"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemLocation)); providedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemAction)); providedPolicy.setResponseItems(providedResponseItems); assertTrue("Only mandatories Response policies should match (7/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with one DENY, one PERMIT LOG.info("[Test] Filled with several mandatory: with one DENY, one PERMIT"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.DENY, requestItemLocation)); providedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemAction)); providedPolicy.setResponseItems(providedResponseItems); assertFalse("Only mandatories Response policies should not match (3/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with one PERMIT, one DENY LOG.info("[Test] Filled with several mandatory: with one PERMIT, one DENY"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemLocation)); providedResponseItems.add(ResponseItemUtils.create(Decision.DENY, requestItemAction)); providedPolicy.setResponseItems(providedResponseItems); assertFalse("Only mandatories Response policies should not match (4/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with one DENY, one missing LOG.info("[Test] Filled with several mandatory: with one DENY, one missing"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.DENY, requestItemLocation)); providedPolicy.setResponseItems(providedResponseItems); assertFalse("Only mandatories Response policies should not match (5/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with one PERMIT, one missing LOG.info("[Test] Filled with several mandatory: with one PERMIT, one missing"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemLocation)); providedPolicy.setResponseItems(providedResponseItems); assertFalse("Only mandatories Response policies should not match (6/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // - Filled with one mandatory, one optional LOG.info("[Test] Filled with one mandatory, one optional"); requestedPolicy = new ResponsePolicy(); requestedPolicy.setRequestor(RequestorUtils.create("emma.ict-societies.eu", "cis-test.ict-societies.eu")); requestedPolicy.setNegotiationStatus(NegotiationStatus.ONGOING); providedPolicy = new ResponsePolicy(); providedPolicy.setRequestor(RequestorUtils.create("emma.ict-societies.eu", "cis-test.ict-societies.eu")); providedPolicy.setNegotiationStatus(NegotiationStatus.ONGOING); // Empty LOG.info("[Test] Filled with one mandatory, one optional: with two missing"); requestedResponseItems = new ArrayList<ResponseItem>(); requestedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemLocation)); requestedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemActionOptional)); requestedPolicy.setResponseItems(requestedResponseItems); assertFalse(" one mandatory, one optional Response policies should not match (1/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with DENY LOG.info("[Test] Filled with one mandatory, one optional: with two DENY"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.DENY, requestItemLocation)); providedResponseItems.add(ResponseItemUtils.create(Decision.DENY, requestItemAction)); providedPolicy.setResponseItems(providedResponseItems); assertFalse(" one mandatory, one optional Response policies should not match (2/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with PERMIT LOG.info("[Test] Filled with one mandatory, one optional: with two PERMIT"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemLocation)); providedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemAction)); providedPolicy.setResponseItems(providedResponseItems); assertTrue(" one mandatory, one optional Response policies should match (7/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with one DENY, one PERMIT LOG.info("[Test] Filled with one mandatory, one optional: with one DENY, one PERMIT"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.DENY, requestItemLocation)); providedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemAction)); providedPolicy.setResponseItems(providedResponseItems); assertFalse(" one mandatory, one optional Response policies should not match (3/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with one PERMIT, one DENY LOG.info("[Test] Filled with one mandatory, one optional: with one PERMIT, one DENY"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemLocation)); providedResponseItems.add(ResponseItemUtils.create(Decision.DENY, requestItemAction)); providedPolicy.setResponseItems(providedResponseItems); assertTrue(" one mandatory, one optional Response policies should match (4/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with one DENY, one missing LOG.info("[Test] Filled with one mandatory, one optional: with one DENY, one missing"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.DENY, requestItemLocation)); providedPolicy.setResponseItems(providedResponseItems); assertFalse(" one mandatory, one optional Response policies should not match (5/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); // Filled with one PERMIT, one missing LOG.info("[Test] Filled with one mandatory, one optional: with one PERMIT, one missing"); providedResponseItems = new ArrayList<ResponseItem>(); providedResponseItems.add(ResponseItemUtils.create(Decision.PERMIT, requestItemLocation)); providedPolicy.setResponseItems(providedResponseItems); assertTrue(" one mandatory, one optional Response policies should match (6/7)", checkResponseChecked.checkResponse(requestedPolicy, providedPolicy)); } }