Maven migration (first draft)

This commit is contained in:
Graham Triggs 2015-11-19 23:47:41 +00:00
parent da79ac3e1d
commit fee48b0b50
1711 changed files with 662 additions and 0 deletions

View file

@ -0,0 +1,495 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.searchindex.extensions;
import static com.hp.hpl.jena.rdf.model.ResourceFactory.createPlainLiteral;
import static com.hp.hpl.jena.rdf.model.ResourceFactory.createProperty;
import static com.hp.hpl.jena.rdf.model.ResourceFactory.createResource;
import static com.hp.hpl.jena.rdf.model.ResourceFactory.createStatement;
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.WhichService.CONTENT;
import static edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames.ALLTEXT;
import static edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames.ALLTEXTUNSTEMMED;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import stubs.edu.cornell.mannlib.vitro.webapp.modelaccess.ContextModelAccessStub;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.RDFS;
import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
import edu.cornell.mannlib.vitro.webapp.beans.IndividualImpl;
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchInputDocument;
import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchInputField;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.jena.model.RDFServiceModel;
/**
* TODO
*/
public class LabelsAcrossContextNodesTest extends AbstractTestClass {
// Types
private static final String CORE_ACADEMIC_DEGREE = "http://vivoweb.org/ontology/core#AcademicDegree";
private static final String CORE_ADVISING_RELATIONSHIP = "http://vivoweb.org/ontology/core#AdvisingRelationship";
private static final String CORE_POSITION = "http://vivoweb.org/ontology/core#Position";
private static final String FOAF_PERSON = "http://xmlns.com/foaf/0.1/#Person";
private static final String FOAF_ORGANIZATION = "http://xmlns.com/foaf/0.1/#Organization";
// Individuals
// Note: Person3 has no label and so no effect, but doesn't cause a problem.
private static final String URI_PERSON1 = "http://ns#Person1";
private static final String NAME_PERSON1 = "Person1";
private static final String URI_PERSON2 = "http://ns#Person2";
private static final String NAME_PERSON2 = "Person2";
private static final String URI_PERSON3 = "http://ns#Person3";
private static final String NAME_PERSON3 = null;
private static final String URI_PERSON4 = "http://ns#Person4";
private static final String NAME_PERSON4 = "Person4";
private static final String URI_ORGANIZATION1 = "http://ns#Organization1";
private static final String NAME_ORGANIZATION1 = "Organization1";
// Context nodes
private static final String URI_POSITION1 = "http://ns#Position1";
private static final String NAME_POSITION1 = "Position1";
private static final String URI_POSITION2 = "http://ns#Position2";
private static final String NAME_POSITION2 = "Position2";
private static final String URI_ADVISING1 = "http://ns#Advising1";
private static final String NAME_ADVISING1 = "Advising1";
private static final String URI_ADVISING2 = "http://ns#Advising2";
private static final String NAME_ADVISING2 = "Advising2";
// Properties
private static final String CORE_RELATED_BY = "http://vivoweb.org/ontology/core#relatedBy";
private static final String CORE_RELATES = "http://vivoweb.org/ontology/core#relates";
private static final String CORE_ASSIGNED_BY = "http://vivoweb.org/ontology/core#assignedBy";
private Model m;
private RDFService rdfService;
private LabelsAcrossContextNodes lacn;
private MockSearchInputDocument doc;
private List<String> foundUris;
/**
* Create these relationships (where "r/r" denotes "relatedBy/relates"
* combination.
*
* <pre>
* Person1 r/r Position1 r/r Organization1
* Person1 r/r AdvisingRelationship1 r/r Person2
* Person1 r/r AdvisingRelationship2 r/r Person3(no label!)
* Person2 r/r Position2 r/r Organization1
* Person4
* </pre>
*/
@Before
public void populateModel() {
m = ModelFactory.createDefaultModel();
addIndividual(URI_PERSON1, NAME_PERSON1, FOAF_PERSON);
addIndividual(URI_PERSON2, NAME_PERSON2, FOAF_PERSON);
addIndividual(URI_PERSON3, NAME_PERSON3, FOAF_PERSON);
addIndividual(URI_PERSON4, NAME_PERSON4, FOAF_PERSON);
addIndividual(URI_ORGANIZATION1, NAME_ORGANIZATION1, FOAF_ORGANIZATION);
addIndividual(URI_POSITION1, NAME_POSITION1, CORE_POSITION);
addIndividual(URI_POSITION2, NAME_POSITION2, CORE_POSITION);
addIndividual(URI_ADVISING1, NAME_ADVISING1, CORE_ADVISING_RELATIONSHIP);
addIndividual(URI_ADVISING2, NAME_ADVISING2, CORE_ADVISING_RELATIONSHIP);
addRelationship(URI_PERSON1, URI_POSITION1, URI_ORGANIZATION1);
addRelationship(URI_PERSON1, URI_ADVISING1, URI_PERSON2);
addRelationship(URI_PERSON1, URI_ADVISING2, URI_PERSON3);
addRelationship(URI_PERSON2, URI_POSITION2, URI_ORGANIZATION1);
rdfService = new RDFServiceModel(m);
ContextModelAccessStub models = new ContextModelAccessStub();
models.setRDFService(CONTENT, rdfService);
lacn = new LabelsAcrossContextNodes();
lacn.setContextModels(models);
lacn.setIncomingProperty(CORE_RELATED_BY);
lacn.setOutgoingProperty(CORE_RELATES);
lacn.validate();
}
// ----------------------------------------------------------------------
// Test DocumentModifier
// ----------------------------------------------------------------------
/*
* If there is a type restriction and the individual does not meet it, no
* change.
*
* If contextNodeClasses are not specified, get labels from all context
* nodes. note that a partner without a label should just be a no-op.
*
* If contextNodeClasses are specified, accept some and ignore others.
*
* Confirm that the expected data is written to the text fields.
*/
@Test
public void noRestrictions_returnLabelsOfAllPartners() {
setTypeRestrictions();
setContextNodeTypes();
exerciseDocumentModifier(URI_PERSON1);
assertExpectedFieldValues(NAME_ORGANIZATION1, NAME_PERSON2);
}
@Test
public void typeRestrictionOnCorrectType_returnAll() {
setTypeRestrictions(FOAF_PERSON);
setContextNodeTypes();
exerciseDocumentModifier(URI_PERSON1);
assertExpectedFieldValues(NAME_ORGANIZATION1, NAME_PERSON2);
}
@Test
public void typeRestrictionOnWrongType_returnNothing() {
setTypeRestrictions(FOAF_ORGANIZATION);
setContextNodeTypes();
exerciseDocumentModifier(URI_PERSON1);
assertExpectedFieldValues();
}
@Test
public void limitByContextNodeType_returnLimited() {
setTypeRestrictions();
setContextNodeTypes(CORE_POSITION);
exerciseDocumentModifier(URI_PERSON1);
assertExpectedFieldValues(NAME_ORGANIZATION1);
}
@Test
public void inclusiveContextNodeTypes_returnAll() {
setTypeRestrictions();
setContextNodeTypes(CORE_POSITION, CORE_ADVISING_RELATIONSHIP);
exerciseDocumentModifier(URI_PERSON1);
assertExpectedFieldValues(NAME_ORGANIZATION1, NAME_PERSON2);
}
@Test
public void noContextNodes_noResultsNoProblem() {
setTypeRestrictions();
setContextNodeTypes();
exerciseDocumentModifier(URI_PERSON4);
assertExpectedFieldValues();
}
// ----------------------------------------------------------------------
// Test IndexingUriFinder
// ----------------------------------------------------------------------
/**
* <pre>
* If neither a label nor a relates, ignore it.
*
* If label, test if no partners, if some partners, if some partners restricted by type.
* test with both contextNodeClasses and not.
* Test with typeRestrictions or without.
*
* If relates, and fails contextNodeClasses, ignore it.
* Test with contextNodeClasses and without.
* Find partners, both with typeRestrictions and without.
* </pre>
*/
@Test
public void irrelevantStatement_returnsNothing() {
setTypeRestrictions();
setContextNodeTypes();
exerciseUriFinder(stmt(URI_POSITION1, CORE_ASSIGNED_BY, URI_PERSON4));
assertExpectedUris();
}
@Test
public void label_noPartners_returnsNothing() {
setTypeRestrictions();
setContextNodeTypes();
exerciseUriFinder(labelStmt(URI_PERSON4, "New Name"));
assertExpectedUris();
}
@Test
public void label_returnsAllPartners() {
setTypeRestrictions();
setContextNodeTypes();
exerciseUriFinder(labelStmt(URI_PERSON1, "New Name"));
assertExpectedUris(URI_PERSON2, URI_PERSON3, URI_ORGANIZATION1);
}
@Test
public void label_restrictByContextNode_returnEligiblePartners() {
setTypeRestrictions();
setContextNodeTypes(CORE_ADVISING_RELATIONSHIP);
exerciseUriFinder(labelStmt(URI_PERSON1, "New Name"));
assertExpectedUris(URI_PERSON2, URI_PERSON3);
}
@Test
public void label_restrictByContextNodes_returnEligiblePartners() {
setTypeRestrictions();
setContextNodeTypes(CORE_ADVISING_RELATIONSHIP, CORE_POSITION);
exerciseUriFinder(labelStmt(URI_PERSON1, "New Name"));
assertExpectedUris(URI_PERSON2, URI_PERSON3, URI_ORGANIZATION1);
}
@Test
public void label_typeRestriction_limitsResults() {
setTypeRestrictions(FOAF_PERSON);
setContextNodeTypes();
exerciseUriFinder(labelStmt(URI_PERSON1, "New Name"));
assertExpectedUris(URI_PERSON2, URI_PERSON3);
}
@Test
public void label_inclusiveTypeRestrictions_allResults() {
setTypeRestrictions(FOAF_PERSON, FOAF_ORGANIZATION);
setContextNodeTypes();
exerciseUriFinder(labelStmt(URI_PERSON1, "New Name"));
assertExpectedUris(URI_PERSON2, URI_PERSON3, URI_ORGANIZATION1);
}
@Test
public void label_prohibitiveTypeRestrictions_nothing() {
setTypeRestrictions(CORE_ACADEMIC_DEGREE);
setContextNodeTypes();
exerciseUriFinder(labelStmt(URI_PERSON1, "New Name"));
assertExpectedUris();
}
@Test
public void relatedBy_returnsPartner() {
setTypeRestrictions();
setContextNodeTypes();
exerciseUriFinder(stmt(URI_POSITION1, CORE_RELATED_BY, URI_PERSON1));
assertExpectedUris(URI_ORGANIZATION1);
}
@Test
public void relatedBy_inclusiveTypeRestriction_returnsPartner() {
setTypeRestrictions(FOAF_ORGANIZATION);
setContextNodeTypes();
exerciseUriFinder(stmt(URI_POSITION1, CORE_RELATED_BY, URI_PERSON1));
assertExpectedUris(URI_ORGANIZATION1);
}
@Test
public void relatedBy_exclusiveTypeRestriction_returnsNothing() {
setTypeRestrictions(CORE_ADVISING_RELATIONSHIP);
setContextNodeTypes();
exerciseUriFinder(stmt(URI_POSITION1, CORE_RELATED_BY, URI_PERSON1));
assertExpectedUris();
}
@Test
public void relatedBy_inclusiveContextType_returnsPartner() {
setTypeRestrictions();
setContextNodeTypes(CORE_POSITION);
exerciseUriFinder(stmt(URI_POSITION1, CORE_RELATED_BY, URI_PERSON1));
assertExpectedUris(URI_ORGANIZATION1);
}
@Test
public void relatedBy_exclusiveContextType_returnsNothing() {
setTypeRestrictions();
setContextNodeTypes(CORE_ADVISING_RELATIONSHIP);
exerciseUriFinder(stmt(URI_POSITION1, CORE_RELATED_BY, URI_PERSON1));
assertExpectedUris();
}
// ----------------------------------------------------------------------
// Helper methods
// ----------------------------------------------------------------------
private void addIndividual(String uri, String label, String... types) {
Resource subject = createResource(uri);
if (label != null) {
m.add(subject, RDFS.label, label);
}
for (String type : types) {
m.add(subject, RDF.type, createResource(type));
}
}
private void addRelationship(String ind1Uri, String contextNodeUri,
String ind2Uri) {
Resource ind1 = createResource(ind1Uri);
Resource contextNode = createResource(contextNodeUri);
Resource ind2 = createResource(ind2Uri);
Property relatedBy = createProperty(CORE_RELATED_BY);
Property relates = createProperty(CORE_RELATES);
m.add(ind1, relatedBy, contextNode);
m.add(contextNode, relates, ind1);
m.add(ind2, relatedBy, contextNode);
m.add(contextNode, relates, ind2);
}
private void setTypeRestrictions(String... uris) {
for (String uri : uris) {
lacn.addTypeRestriction(uri);
}
}
private void setContextNodeTypes(String... uris) {
for (String uri : uris) {
lacn.addContextNodeClass(uri);
}
}
private void exerciseDocumentModifier(String individualUri) {
Individual ind = createIndividual(individualUri);
doc = new MockSearchInputDocument();
lacn.modifyDocument(ind, doc);
}
private Individual createIndividual(String individualUri) {
Individual ind = new IndividualImpl(individualUri);
List<VClass> vclasses = new ArrayList<>();
for (RDFNode node : m.listObjectsOfProperty(
createResource(individualUri), RDF.type).toList()) {
if (node.isURIResource()) {
vclasses.add(new VClass(node.asResource().getURI()));
}
}
ind.setVClasses(vclasses, false);
return ind;
}
private void assertExpectedFieldValues(String... values) {
List<String> expected = new ArrayList<>(Arrays.asList(values));
Collections.sort(expected);
List<String> actual1 = doc.getValues(ALLTEXT);
Collections.sort(actual1);
assertEquals("ALLTEXT", expected, actual1);
List<String> actual2 = doc.getValues(ALLTEXTUNSTEMMED);
Collections.sort(actual2);
assertEquals("ALLTEXTUNSTEMMED", expected, actual2);
}
private void exerciseUriFinder(Statement stmt) {
foundUris = lacn.findAdditionalURIsToIndex(stmt);
}
private Statement stmt(String subjectUri, String predicateUri,
String objectUri) {
return createStatement(createResource(subjectUri),
createProperty(predicateUri), createResource(objectUri));
}
private Statement labelStmt(String subjectUri, String labelText) {
return createStatement(createResource(subjectUri), RDFS.label,
createPlainLiteral(labelText));
}
private void assertExpectedUris(String... expectedArray) {
Set<String> expected = new HashSet<>(Arrays.asList(expectedArray));
Set<String> actual = new HashSet<>(foundUris);
assertEquals("found URIs", expected, actual);
}
// ----------------------------------------------------------------------
// Helper classes
// ----------------------------------------------------------------------
private static class MockSearchInputDocument implements SearchInputDocument {
// ----------------------------------------------------------------------
// Stub infrastructure
// ----------------------------------------------------------------------
private Map<String, List<String>> fieldValues = new HashMap<>();
public List<String> getValues(String fieldName) {
if (fieldValues.containsKey(fieldName)) {
return new ArrayList<>(fieldValues.get(fieldName));
} else {
return new ArrayList<>();
}
}
// ----------------------------------------------------------------------
// Stub methods
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// Un-implemented methods
// ----------------------------------------------------------------------
@Override
public void addField(SearchInputField arg0) {
throw new RuntimeException("addField() not implemented.");
}
@Override
public void addField(String name, Object... values) {
List<String> stringValues = getValues(name);
for (Object value : values) {
stringValues.add(String.valueOf(value));
}
fieldValues.put(name, stringValues);
}
@Override
public void addField(String arg0, Collection<Object> arg1) {
throw new RuntimeException("addField() not implemented.");
}
@Override
public void addField(String arg0, float arg1, Object... arg2) {
throw new RuntimeException("addField() not implemented.");
}
@Override
public void addField(String arg0, float arg1, Collection<Object> arg2) {
throw new RuntimeException("addField() not implemented.");
}
@Override
public SearchInputField createField(String arg0) {
throw new RuntimeException("createField() not implemented.");
}
@Override
public float getDocumentBoost() {
throw new RuntimeException("getDocumentBoost() not implemented.");
}
@Override
public SearchInputField getField(String arg0) {
throw new RuntimeException("getField() not implemented.");
}
@Override
public Map<String, SearchInputField> getFieldMap() {
throw new RuntimeException("getFieldMap() not implemented.");
}
@Override
public void setDocumentBoost(float arg0) {
throw new RuntimeException("setDocumentBoost() not implemented.");
}
}
}

View file

@ -0,0 +1,448 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vivo.auth.policy;
import static edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.Authorization.AUTHORIZED;
import static edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.Authorization.INCONCLUSIVE;
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.RequestedAction.SOME_LITERAL;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import stubs.edu.cornell.mannlib.vitro.webapp.auth.policy.bean.PropertyRestrictionBeanStub;
import stubs.javax.servlet.ServletContextStub;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
import edu.cornell.mannlib.vitro.webapp.auth.identifier.ArrayIdentifierBundle;
import edu.cornell.mannlib.vitro.webapp.auth.identifier.IdentifierBundle;
import edu.cornell.mannlib.vitro.webapp.auth.identifier.common.HasProfile;
import edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.Authorization;
import edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.PolicyDecision;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.RequestedAction;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.ServerStatus;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddDataPropertyStatement;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddObjectPropertyStatement;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.resource.AddResource;
import edu.cornell.mannlib.vitro.webapp.beans.Property;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
/**
* Check the relationships in the SelfEditorRelationshipPolicy.
*
* This only checks the relationships that deal with InfoContentEntitys. Testing
* the others seems too redundant. If we generalize this to use configurable
* relationships, then we'll be able to make more general tests as well.
*/
public class SelfEditorRelationshipPolicyTest extends AbstractTestClass {
private static final Log log = LogFactory
.getLog(SelfEditorRelationshipPolicyTest.class);
/** Can edit properties or resources in this namespace. */
private static final String NS_PERMITTED = "http://vivo.mydomain.edu/individual/";
/** Can't edit properties or resources in this namespace. */
private static final String NS_RESTRICTED = VitroVocabulary.vitroURI;
/** The resource type is not checked by the admin restrictor. */
private static final String RESOURCE_TYPE = NS_RESTRICTED + "funkyType";
private static final String URI_PERMITTED_RESOURCE = NS_PERMITTED
+ "permittedResource";
private static final String URI_RESTRICTED_RESOURCE = NS_RESTRICTED
+ "restrictedResource";
private static final String URI_PERMITTED_PREDICATE = NS_PERMITTED
+ "permittedPredicate";
private static final Property PERMITTED_PREDICATE = new Property(
URI_PERMITTED_PREDICATE);
private static final String URI_RESTRICTED_PREDICATE = NS_RESTRICTED
+ "restrictedPredicate";
private static final Property RESTRICTED_PREDICATE = new Property(
URI_RESTRICTED_PREDICATE);
/**
* Where the model statements are stored for this test.
*/
private static final String N3_DATA_FILENAME = "SelfEditorRelationship"
+ "PolicyTest.n3";
/**
* These URIs must match the data in the N3 file.
*/
private static final String URI_BOZO = NS_PERMITTED + "bozo";
private static final String URI_JOE = NS_PERMITTED + "joe";
private static final String URI_NOBODY_WROTE_IT = NS_PERMITTED
+ "nobodyWroteIt";
private static final String URI_BOZO_WROTE_IT = NS_PERMITTED
+ "bozoWroteIt";
private static final String URI_BOZO_EDITED_IT = NS_PERMITTED
+ "bozoEditedIt";
private static final String URI_BOZO_FEATURED_IN_IT = NS_PERMITTED
+ "bozoFeaturedInIt";
private static final String URI_JOE_WROTE_IT = NS_PERMITTED + "joeWroteIt";
private static final String URI_JOE_EDITED_IT = NS_PERMITTED
+ "joeEditedIt";
private static final String URI_JOE_FEATURED_IN_IT = NS_PERMITTED
+ "joeFeaturedInIt";
private static OntModel ontModel;
@BeforeClass
public static void setupModel() throws IOException {
InputStream stream = SelfEditorRelationshipPolicyTest.class
.getResourceAsStream(N3_DATA_FILENAME);
Model model = ModelFactory.createDefaultModel();
model.read(stream, null, "N3");
stream.close();
ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM,
model);
ontModel.prepare();
dumpModel();
}
private SelfEditorRelationshipPolicy policy;
private RequestedAction action;
@Before
public void setupPolicy() {
ServletContextStub ctx = new ServletContextStub();
PropertyRestrictionBeanStub.getInstance(new String[] { NS_RESTRICTED });
policy = new SelfEditorRelationshipPolicy(ctx);
}
private IdentifierBundle idNobody;
private IdentifierBundle idBozo;
private IdentifierBundle idJoe;
private IdentifierBundle idBozoAndJoe;
@Before
public void setupIdBundles() {
idNobody = new ArrayIdentifierBundle();
idBozo = new ArrayIdentifierBundle();
idBozo.add(makeSelfEditingId(URI_BOZO));
idJoe = new ArrayIdentifierBundle();
idJoe.add(makeSelfEditingId(URI_JOE));
idBozoAndJoe = new ArrayIdentifierBundle();
idBozoAndJoe.add(makeSelfEditingId(URI_BOZO));
idBozoAndJoe.add(makeSelfEditingId(URI_JOE));
}
@Before
public void setLogging() {
// setLoggerLevel(this.getClass(), Level.DEBUG);
}
// ----------------------------------------------------------------------
// boilerplate tests
// ----------------------------------------------------------------------
@Test
public void whoIsNull() {
action = new AddResource(RESOURCE_TYPE, URI_PERMITTED_RESOURCE);
assertDecision(INCONCLUSIVE, policy.isAuthorized(null, action));
}
@Test
public void whatIsNull() {
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, null));
}
@Test
public void notSelfEditing() {
action = new AddResource(RESOURCE_TYPE, URI_PERMITTED_RESOURCE);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idNobody, action));
}
@Test
public void requestedActionOutOfScope() {
action = new ServerStatus();
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void dataPropSubjectIsRestricted() {
action = new AddDataPropertyStatement(ontModel,
URI_RESTRICTED_RESOURCE, URI_PERMITTED_PREDICATE, SOME_LITERAL);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void dataPropPredicateIsRestricted() {
action = new AddDataPropertyStatement(ontModel, URI_JOE_EDITED_IT,
URI_RESTRICTED_PREDICATE, SOME_LITERAL);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void objectPropSubjectIsRestricted() {
action = new AddObjectPropertyStatement(ontModel,
URI_RESTRICTED_RESOURCE, PERMITTED_PREDICATE, URI_JOE_EDITED_IT);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void objectPropPredicateIsRestricted() {
action = new AddObjectPropertyStatement(ontModel,
URI_PERMITTED_RESOURCE, RESTRICTED_PREDICATE, URI_JOE_EDITED_IT);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void objectPropObjectIsRestricted() {
action = new AddObjectPropertyStatement(ontModel, URI_JOE_EDITED_IT,
PERMITTED_PREDICATE, URI_RESTRICTED_RESOURCE);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
// ----------------------------------------------------------------------
// InfoContentEntity tests
// ----------------------------------------------------------------------
@Test
public void dataPropSubjectIsIceButNobodyIsSelfEditing() {
action = new AddDataPropertyStatement(ontModel, URI_JOE_WROTE_IT,
URI_PERMITTED_PREDICATE, SOME_LITERAL);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idNobody, action));
}
@Test
public void dataPropSubjectIsIceButNoAuthorsOrEditorsOrFeatured() {
action = new AddDataPropertyStatement(ontModel, URI_NOBODY_WROTE_IT,
URI_PERMITTED_PREDICATE, SOME_LITERAL);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
assertDecision(INCONCLUSIVE, policy.isAuthorized(idBozoAndJoe, action));
}
@Test
public void dataPropSubjectIsIceButWrongAuthor() {
action = new AddDataPropertyStatement(ontModel, URI_BOZO_WROTE_IT,
URI_PERMITTED_PREDICATE, SOME_LITERAL);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void dataPropSubjectIsIceButWrongEditor() {
action = new AddDataPropertyStatement(ontModel, URI_BOZO_EDITED_IT,
URI_PERMITTED_PREDICATE, SOME_LITERAL);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void dataPropSubjectIsIceButWrongFeatured() {
action = new AddDataPropertyStatement(ontModel,
URI_BOZO_FEATURED_IN_IT, URI_PERMITTED_PREDICATE, SOME_LITERAL);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void dataPropSubjectIsIceWithSelfEditingAuthor() {
action = new AddDataPropertyStatement(ontModel, URI_JOE_WROTE_IT,
URI_PERMITTED_PREDICATE, SOME_LITERAL);
assertDecision(AUTHORIZED, policy.isAuthorized(idJoe, action));
assertDecision(AUTHORIZED, policy.isAuthorized(idBozoAndJoe, action));
}
@Test
public void dataPropSubjectIsIceWithSelfEditingEditor() {
action = new AddDataPropertyStatement(ontModel, URI_JOE_EDITED_IT,
URI_PERMITTED_PREDICATE, SOME_LITERAL);
assertDecision(AUTHORIZED, policy.isAuthorized(idJoe, action));
assertDecision(AUTHORIZED, policy.isAuthorized(idBozoAndJoe, action));
}
@Test
public void dataPropSubjectIsIceWithSelfEditingFeatured() {
action = new AddDataPropertyStatement(ontModel, URI_JOE_FEATURED_IN_IT,
URI_PERMITTED_PREDICATE, SOME_LITERAL);
assertDecision(AUTHORIZED, policy.isAuthorized(idJoe, action));
assertDecision(AUTHORIZED, policy.isAuthorized(idBozoAndJoe, action));
}
@Test
public void objectPropSubjectIsIceButNobodyIsSelfEditing() {
action = new AddObjectPropertyStatement(ontModel, URI_JOE_EDITED_IT,
PERMITTED_PREDICATE, URI_PERMITTED_RESOURCE);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idNobody, action));
}
@Test
public void objectPropSubjectIsIceButNoAuthorsOrEditorsOrFeatured() {
action = new AddObjectPropertyStatement(ontModel, URI_NOBODY_WROTE_IT,
PERMITTED_PREDICATE, URI_PERMITTED_RESOURCE);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
assertDecision(INCONCLUSIVE, policy.isAuthorized(idBozoAndJoe, action));
}
@Test
public void objectPropSubjectIsIceButWrongAuthor() {
action = new AddObjectPropertyStatement(ontModel, URI_BOZO_WROTE_IT,
PERMITTED_PREDICATE, URI_PERMITTED_RESOURCE);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void objectPropSubjectIsIceButWrongEditor() {
action = new AddObjectPropertyStatement(ontModel, URI_BOZO_EDITED_IT,
PERMITTED_PREDICATE, URI_PERMITTED_RESOURCE);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void objectPropSubjectIsIceButWrongFeatured() {
action = new AddObjectPropertyStatement(ontModel,
URI_BOZO_FEATURED_IN_IT, PERMITTED_PREDICATE,
URI_PERMITTED_RESOURCE);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void objectPropSubjectIsIceWithSelfEditingAuthor() {
action = new AddObjectPropertyStatement(ontModel, URI_JOE_WROTE_IT,
PERMITTED_PREDICATE, URI_PERMITTED_RESOURCE);
assertDecision(AUTHORIZED, policy.isAuthorized(idJoe, action));
assertDecision(AUTHORIZED, policy.isAuthorized(idBozoAndJoe, action));
}
@Test
public void objectPropSubjectIsIceWithSelfEditingEditor() {
action = new AddObjectPropertyStatement(ontModel, URI_JOE_EDITED_IT,
PERMITTED_PREDICATE, URI_PERMITTED_RESOURCE);
assertDecision(AUTHORIZED, policy.isAuthorized(idJoe, action));
assertDecision(AUTHORIZED, policy.isAuthorized(idBozoAndJoe, action));
}
@Test
public void objectPropSubjectIsIceWithSelfEditingFeatured() {
action = new AddObjectPropertyStatement(ontModel,
URI_JOE_FEATURED_IN_IT, PERMITTED_PREDICATE,
URI_PERMITTED_RESOURCE);
assertDecision(AUTHORIZED, policy.isAuthorized(idJoe, action));
assertDecision(AUTHORIZED, policy.isAuthorized(idBozoAndJoe, action));
}
@Test
public void objectPropObjectIsIcebutNobodyIsSelfEditing() {
action = new AddObjectPropertyStatement(ontModel,
URI_PERMITTED_RESOURCE, PERMITTED_PREDICATE, URI_JOE_EDITED_IT);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idNobody, action));
}
@Test
public void objectPropObjectIsIceButNoAuthorsOrEditors() {
action = new AddObjectPropertyStatement(ontModel,
URI_PERMITTED_RESOURCE, PERMITTED_PREDICATE,
URI_NOBODY_WROTE_IT);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
assertDecision(INCONCLUSIVE, policy.isAuthorized(idBozoAndJoe, action));
}
@Test
public void objectPropObjectIsIceButWrongAuthor() {
action = new AddObjectPropertyStatement(ontModel,
URI_PERMITTED_RESOURCE, PERMITTED_PREDICATE, URI_BOZO_WROTE_IT);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void objectPropObjectIsIceButWrongEditor() {
action = new AddObjectPropertyStatement(ontModel,
URI_PERMITTED_RESOURCE, PERMITTED_PREDICATE, URI_BOZO_EDITED_IT);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void objectPropObjectIsIceButWrongFeatured() {
action = new AddObjectPropertyStatement(ontModel,
URI_PERMITTED_RESOURCE, PERMITTED_PREDICATE,
URI_BOZO_FEATURED_IN_IT);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void objectPropObjectIsIceWithSelfEditingAuthor() {
action = new AddObjectPropertyStatement(ontModel,
URI_PERMITTED_RESOURCE, PERMITTED_PREDICATE, URI_JOE_WROTE_IT);
assertDecision(AUTHORIZED, policy.isAuthorized(idJoe, action));
assertDecision(AUTHORIZED, policy.isAuthorized(idBozoAndJoe, action));
}
@Test
public void objectPropObjectIsIceWithSelfEditingEditor() {
action = new AddObjectPropertyStatement(ontModel,
URI_PERMITTED_RESOURCE, PERMITTED_PREDICATE, URI_JOE_EDITED_IT);
assertDecision(AUTHORIZED, policy.isAuthorized(idJoe, action));
assertDecision(AUTHORIZED, policy.isAuthorized(idBozoAndJoe, action));
}
@Test
public void objectPropObjectIsIceWithSelfEditingFeatured() {
action = new AddObjectPropertyStatement(ontModel,
URI_PERMITTED_RESOURCE, PERMITTED_PREDICATE,
URI_JOE_FEATURED_IN_IT);
assertDecision(AUTHORIZED, policy.isAuthorized(idJoe, action));
assertDecision(AUTHORIZED, policy.isAuthorized(idBozoAndJoe, action));
}
// ----------------------------------------------------------------------
// Other tests
// ----------------------------------------------------------------------
@Test
public void dataPropSubjectIsNotIce() {
action = new AddDataPropertyStatement(ontModel, URI_PERMITTED_RESOURCE,
URI_PERMITTED_PREDICATE, SOME_LITERAL);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
@Test
public void objectPropNeitherSubjectOrObjectIsIce() {
action = new AddObjectPropertyStatement(ontModel,
URI_PERMITTED_RESOURCE, PERMITTED_PREDICATE,
URI_PERMITTED_RESOURCE);
assertDecision(INCONCLUSIVE, policy.isAuthorized(idJoe, action));
}
// ----------------------------------------------------------------------
// helper methods
// ----------------------------------------------------------------------
private HasProfile makeSelfEditingId(String uri) {
return new HasProfile(uri);
}
private void assertDecision(Authorization expected, PolicyDecision decision) {
log.debug("Decision is: " + decision);
assertNotNull("decision exists", decision);
assertEquals("authorization", expected, decision.getAuthorized());
}
private static void dumpModel() {
if (log.isDebugEnabled()) {
StmtIterator stmtIt = ontModel.listStatements();
while (stmtIt.hasNext()) {
Statement stmt = stmtIt.next();
log.debug("stmt: " + stmt);
}
}
}
}

View file

@ -0,0 +1,165 @@
# $This file is distributed under the terms of the license in /doc/license.txt$
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix bib: <http://purl.org/ontology/bibo/> .
@prefix core: <http://vivoweb.org/ontology/core#> .
@prefix obo: <http://purl.obolibrary.org/obo/> .
@prefix mydomain: <http://vivo.mydomain.edu/individual/> .
### This file contains data for SelfEditorRelationshipPolicyTest.java.
#
# Bozo
#
mydomain:bozo
a foaf:Agent ;
a foaf:Person ;
a owl:Thing ;
a core:EmeritusProfessor ;
rdfs:label "Person, Bozo" ;
foaf:firstName "Bozo" ;
foaf:lastName "Person" ;
core:relatedBy mydomain:authorshipBozo ;
core:relatedBy mydomain:editorshipBozo ;
.
#
# Joe
#
mydomain:joe
a foaf:Agent ;
a foaf:Person ;
a owl:Thing ;
a core:EmeritusProfessor ;
rdfs:label "Person, Joe" ;
foaf:firstName "Joe" ;
foaf:lastName "Person" ;
core:relatedBy mydomain:authorshipJoe ;
core:relatedBy mydomain:editorshipJoe ;
.
#
# info content entity with no author or editor
#
mydomain:nobodyWroteIt
a core:BlogPosting ;
a obo:IAO_0000030 ;
a bib:Article ;
a bib:Document ;
a owl:Thing ;
rdfs:label "No author or editor" ;
.
#
# info content entity with Bozo as author
#
mydomain:bozoWroteIt
a core:BlogPosting ;
a obo:IAO_0000030 ;
a bib:Article ;
a bib:Document ;
a owl:Thing ;
rdfs:label "Bozo is author" ;
core:relatedBy mydomain:authorshipBozo ;
.
mydomain:authorshipBozo
a core:Authorship ;
a core:Relationship ;
a owl:Thing ;
core:relates mydomain:bozoWroteIt ;
core:relates mydomain:bozo ;
.
#
# info content entity with Bozo as editor
#
mydomain:bozoEditedIt
a core:BlogPosting ;
a obo:IAO_0000030 ;
a bib:Article ;
a bib:Document ;
a owl:Thing ;
rdfs:label "Bozo is editor" ;
core:relatedBy mydomain:editorshipBozo ;
.
mydomain:editorshipBozo
a core:Editorship ;
a core:Relationship ;
a owl:Thing ;
core:relates mydomain:bozoEditedIt ;
core:relates mydomain:bozo ;
.
#
# info content entity with Bozo featured
#
mydomain:bozoFeaturedInIt
a core:BlogPosting ;
a obo:IAO_0000030 ;
a bib:Article ;
a bib:Document ;
a owl:Thing ;
rdfs:label "Bozo is featured" ;
core:features mydomain:bozo ;
.
#
# info content entity with Joe as author
#
mydomain:joeWroteIt
a core:BlogPosting ;
a obo:IAO_0000030 ;
a bib:Article ;
a bib:Document ;
a owl:Thing ;
rdfs:label "Joe is author" ;
core:relatedBy mydomain:authorshipJoe ;
.
mydomain:authorshipJoe
a core:Authorship ;
a core:Relationship ;
a owl:Thing ;
core:relates mydomain:joeWroteIt ;
core:relates mydomain:joe ;
.
#
# info content entity with Joe as editor
#
mydomain:joeEditedIt
a core:BlogPosting ;
a obo:IAO_0000030 ;
a bib:Article ;
a bib:Document ;
a owl:Thing ;
rdfs:label "Joe is editor" ;
core:relatedBy mydomain:editorshipJoe ;
.
mydomain:editorshipJoe
a core:Editorship ;
a core:Relationship ;
a owl:Thing ;
core:relates mydomain:joeEditedIt ;
core:relates mydomain:joe ;
.
#
# info content entity with Joe featured
#
mydomain:joeFeaturedInIt
a core:BlogPosting ;
a obo:IAO_0000030 ;
a bib:Article ;
a bib:Document ;
a owl:Thing ;
rdfs:label "Joe is featured" ;
core:features mydomain:joe ;
.

View file

@ -0,0 +1,10 @@
#
# A simple Log4J configuration for unit tests.
#
# It's not very important, because the tests themselves will override this
# configuration in AbstractTestClass.initializeLogging().
#
log4j.rootLogger=WARN, AllAppender
log4j.appender.AllAppender=org.apache.log4j.ConsoleAppender
log4j.appender.AllAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.AllAppender.layout.ConversionPattern=%p %t %c - %m%n