/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.permissions.model; import org.apache.jena.permissions.Factory; import org.apache.jena.permissions.MockSecurityEvaluator; import org.apache.jena.permissions.SecurityEvaluatorParameters; import org.apache.jena.permissions.SecurityEvaluator.Action; import org.apache.jena.permissions.model.SecuredModel; import org.apache.jena.permissions.model.SecuredRDFNode; import org.apache.jena.permissions.model.impl.SecuredRDFNodeImpl; import org.apache.jena.rdf.model.*; import org.apache.jena.shared.ReadDeniedException; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(value = SecurityEvaluatorParameters.class) public class SecuredRDFNodeTest { protected final MockSecurityEvaluator securityEvaluator; protected Model baseModel; protected SecuredModel securedModel; private SecuredRDFNode securedRDFNode; private RDFNode baseRDFNode; public static Resource s = ResourceFactory.createResource("http://example.com/graph/s"); public static Property p = ResourceFactory.createProperty("http://example.com/graph/p"); public static Property p2 = ResourceFactory.createProperty("http://example.com/graph/p2"); public static Resource o = ResourceFactory.createResource("http://example.com/graph/o"); public SecuredRDFNodeTest(final MockSecurityEvaluator securityEvaluator) { this.securityEvaluator = securityEvaluator; } protected Model createModel() { return ModelFactory.createDefaultModel(); } protected RDFNode getBaseRDFNode() { return baseRDFNode; } protected SecuredRDFNode getSecuredRDFNode() { return securedRDFNode; } protected void setSecuredRDFNode(final SecuredRDFNode securedRDFNode, final RDFNode baseRDFNode) { this.securedRDFNode = securedRDFNode; this.baseRDFNode = baseRDFNode; } @Before public void setup() { baseModel = createModel(); baseModel.removeAll(); baseModel.add(SecuredRDFNodeTest.s, SecuredRDFNodeTest.p, SecuredRDFNodeTest.o); baseModel.add(SecuredRDFNodeTest.s, SecuredRDFNodeTest.p2, "yeehaw"); baseModel.add(SecuredRDFNodeTest.s, SecuredRDFNodeTest.p2, "yeehaw yall", "us"); baseModel.add(SecuredRDFNodeTest.s, SecuredRDFNodeTest.p2, "whohoo", "uk"); securedModel = Factory.getInstance(securityEvaluator, "http://example.com/securedGraph", baseModel); baseRDFNode = baseModel.getResource(SecuredRDFNodeTest.o.getURI()); securedRDFNode = SecuredRDFNodeImpl.getInstance(securedModel, baseRDFNode); } @After public void teardown() { securedModel.close(); securedModel = null; } @Test public void testAsNode() { try { securedRDFNode.asNode(); if (!securityEvaluator.evaluate(Action.Read)) { Assert.fail("Should have thrown ReadDeniedException Exception"); } } catch (final ReadDeniedException e) { if (securityEvaluator.evaluate(Action.Read)) { Assert.fail(String.format("Should not have thrown ReadDeniedException Exception: %s - %s", e, e.getTriple())); } } } @Test public void testCanAs() { try { securedRDFNode.canAs(Resource.class); if (!securityEvaluator.evaluate(Action.Read)) { Assert.fail("Should have thrown ReadDeniedException Exception"); } } catch (final ReadDeniedException e) { if (securityEvaluator.evaluate(Action.Read)) { Assert.fail(String.format("Should not have thrown ReadDeniedException Exception: %s - %s", e, e.getTriple())); } } } @Test public void testGetModel() { final Model m2 = securedRDFNode.getModel(); Assert.assertTrue("Model should have been secured", m2 instanceof SecuredModel); } @Test public void testInModel() { final Model m2 = ModelFactory.createDefaultModel(); try { final RDFNode n2 = securedRDFNode.inModel(m2); if (!securityEvaluator.evaluate(Action.Read)) { Assert.fail("Should have thrown ReadDeniedException Exception"); } Assert.assertFalse("RDFNode should not have been secured", n2 instanceof SecuredRDFNode); Assert.assertEquals("Wrong securedModel returned", n2.getModel(), m2); } catch (final ReadDeniedException e) { if (securityEvaluator.evaluate(Action.Read)) { Assert.fail(String.format("Should not have thrown ReadDeniedException Exception: %s - %s", e, e.getTriple())); } } m2.removeAll(); final SecuredModel m3 = Factory.getInstance(securityEvaluator, "http://example.com/securedGraph2", m2); try { final RDFNode n2 = securedRDFNode.inModel(m3); if (!securityEvaluator.evaluate(Action.Read)) { Assert.fail("Should have thrown ReadDeniedException Exception"); } Assert.assertTrue("RDFNode should have been secured", n2 instanceof SecuredRDFNode); Assert.assertEquals("Wrong securedModel returned", n2.getModel(), m3); } catch (final ReadDeniedException e) { if (securityEvaluator.evaluate(Action.Read)) { Assert.fail(String.format("Should not have thrown ReadDeniedException Exception: %s - %s", e, e.getTriple())); } } } }