@Test public void testRDFConnectionError() throws Exception { final TriplestoreResourceService svc = new TriplestoreResourceService(mockRdfConnection); svc.initialize(); doThrow(new RuntimeException("Expected exception")).when(mockRdfConnection).update(any(UpdateRequest.class)); doThrow(new RuntimeException("Expected exception")).when(mockRdfConnection) .loadDataset(any(org.apache.jena.query.Dataset.class)); assertThrows(ExecutionException.class, () -> svc.create(builder(resource).interactionModel(LDP.RDFSource).container(root).build(), rdf.createDataset()).toCompletableFuture().get(), "No (create) exception with dropped backend connection!"); assertThrows(ExecutionException.class, () -> svc.add(resource, rdf.createDataset()).toCompletableFuture().get(), "No (add) exception with dropped backend connection!"); assertThrows(ExecutionException.class, () -> svc.delete(builder(resource).interactionModel(LDP.RDFSource).container(root).build()) .toCompletableFuture().get(), "No (delete) exception with dropped backend connection!"); assertThrows(ExecutionException.class, () -> svc.touch(resource).toCompletableFuture().get(), "No (touch) exception with dropped backend connection!"); }
@Test public void testPutLdpRsWithoutBaseUrl() throws Exception { final TriplestoreResourceService svc = new TriplestoreResourceService( connect(wrap(rdf.createDataset().asJenaDatasetGraph()))); svc.initialize(); final Dataset dataset = rdf.createDataset(); dataset.add(Trellis.PreferUserManaged, resource, DC.title, rdf.createLiteral("title")); dataset.add(Trellis.PreferAudit, rdf.createBlankNode(), RDF.type, AS.Create); final Instant later = meanwhile(); assertDoesNotThrow(() -> allOf( svc.create(builder(resource).interactionModel(LDP.RDFSource).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf( svc.get(resource).thenAccept(checkResource(later, LDP.RDFSource, 1L, 1L, 0L)).toCompletableFuture(), svc.get(root).thenAccept(checkRoot(later, 1L)).toCompletableFuture()).join(); }
@Test public void testPutLdpRs() throws Exception { final TriplestoreResourceService svc = new TriplestoreResourceService( connect(wrap(rdf.createDataset().asJenaDatasetGraph()))); svc.initialize(); final Dataset dataset = rdf.createDataset(); final BlankNode bnode = rdf.createBlankNode(); dataset.add(Trellis.PreferUserManaged, resource, DC.title, rdf.createLiteral("title")); dataset.add(Trellis.PreferAudit, resource, PROV.wasGeneratedBy, bnode); dataset.add(Trellis.PreferAudit, bnode, RDF.type, PROV.Activity); dataset.add(Trellis.PreferAudit, bnode, RDF.type, AS.Create); final Instant later = meanwhile(); assertDoesNotThrow(() -> allOf( svc.create(builder(resource).interactionModel(LDP.RDFSource).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf( svc.get(resource).thenAccept(checkResource(later, LDP.RDFSource, 1L, 3L, 0L)).toCompletableFuture(), svc.get(root).thenAccept(checkRoot(later, 1L)).toCompletableFuture()).join(); }
@Test public void testAddAuditTriples() throws Exception { final TriplestoreResourceService svc = new TriplestoreResourceService( connect(wrap(rdf.createDataset().asJenaDatasetGraph()))); svc.initialize(); final Dataset dataset1 = rdf.createDataset(); final Dataset dataset2 = rdf.createDataset(); final BlankNode bnode = rdf.createBlankNode(); dataset1.add(Trellis.PreferUserManaged, resource, DC.title, rdf.createLiteral("resource")); dataset1.add(Trellis.PreferUserManaged, resource, DC.alternative, rdf.createLiteral("alt title")); dataset2.add(Trellis.PreferAudit, resource, PROV.wasGeneratedBy, bnode); dataset2.add(Trellis.PreferAudit, bnode, RDF.type, AS.Create); final Instant later = meanwhile(); assertDoesNotThrow(() -> allOf( svc.create(builder(resource).interactionModel(LDP.Container).container(root).build(), dataset1) .toCompletableFuture(), svc.add(resource, dataset2).toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf( svc.get(resource).thenAccept(checkResource(later, LDP.Container, 2L, 2L, 0L)).toCompletableFuture(), svc.get(root).thenAccept(checkRoot(later, 1L)).toCompletableFuture()).join(); }
svc.create(builder(resource).interactionModel(LDP.DirectContainer).container(root) .memberRelation(DC.relation).membershipResource(members).build(), dataset).toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf(svc.create(builder(members).interactionModel(LDP.RDFSource).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf(svc.create(builder(child).interactionModel(LDP.RDFSource).container(resource).build(), dataset) .toCompletableFuture(), svc.touch(members).toCompletableFuture(), svc.touch(resource).toCompletableFuture()).join(),
svc.create(builder(resource).interactionModel(LDP.Container).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); svc.create(builder(child).interactionModel(LDP.RDFSource).container(resource).build(), dataset) .toCompletableFuture(), svc.touch(resource).toCompletableFuture()).join(), "Unsuccessful create operation!");
svc.create(builder(resource).interactionModel(LDP.NonRDFSource).container(root).binary(binary).build(), dataset).toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); svc.create(builder(resource3).interactionModel(LDP.RDFSource).build(), dataset).toCompletableFuture() .join(), "Unsuccessful create operation!");
allOf(svc.create(builder(resource).interactionModel(LDP.DirectContainer).membershipResource(resource) .memberRelation(DC.relation).container(root).build(), dataset).toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf(svc.create(builder(child).interactionModel(LDP.RDFSource).container(resource).build(), dataset) .toCompletableFuture(), svc.touch(resource).toCompletableFuture()).join(), "Unsuccessful create operation!");
svc.create(builder(resource).interactionModel(LDP.BasicContainer).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf(svc.create(builder(child).interactionModel(LDP.RDFSource).container(resource).build(), dataset) .toCompletableFuture(), svc.touch(resource).toCompletableFuture()).join(), "Unsuccessful create operation!");
allOf(svc.create(builder(resource).interactionModel(LDP.IndirectContainer).container(root) .membershipResource(members).memberRelation(RDFS.label) .insertedContentRelation(LDP.MemberSubject).build(), dataset).toCompletableFuture(), allOf(svc.create(builder(members).interactionModel(LDP.RDFSource).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf(svc.create(builder(child).interactionModel(LDP.RDFSource).container(resource).build(), dataset) .toCompletableFuture(), svc.touch(members).toCompletableFuture(), svc.touch(resource).toCompletableFuture()).join(),
svc.create(builder(resource).interactionModel(LDP.IndirectContainer).container(root) .membershipResource(members).memberRelation(RDFS.label) .insertedContentRelation(SKOS.prefLabel).build(), dataset).toCompletableFuture(), allOf(svc.create(builder(members).interactionModel(LDP.RDFSource).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf(svc.create(builder(child).interactionModel(LDP.RDFSource).container(resource).build(), dataset) .toCompletableFuture(), svc.touch(members).toCompletableFuture(), svc.touch(resource).toCompletableFuture()).join(),
svc.create(builder(resource).interactionModel(LDP.Container).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); svc.create(builder(child).interactionModel(LDP.RDFSource).container(resource).build(), dataset) .toCompletableFuture(), svc.touch(resource).toCompletableFuture()).join(), "Unsuccessful create operation!");
svc.create(builder(resource).interactionModel(LDP.IndirectContainer).container(root) .membershipResource(members).memberRelation(RDFS.label) .insertedContentRelation(SKOS.prefLabel).build(), dataset).toCompletableFuture(), allOf(svc.create(builder(members).interactionModel(LDP.RDFSource).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf(svc.create(builder(child).interactionModel(LDP.RDFSource).container(resource).build(), dataset) .toCompletableFuture(), svc.touch(members).toCompletableFuture(), svc.touch(resource).toCompletableFuture()).join(),
allOf(svc.create(builder(resource).interactionModel(LDP.DirectContainer).container(root) .membershipResource(members).memberOfRelation(DC.relation).build(), dataset) .toCompletableFuture(), allOf(svc.create(builder(resource2).interactionModel(LDP.DirectContainer).container(root) .membershipResource(members).memberOfRelation(DC.subject).build(), dataset) .toCompletableFuture(), svc.create(builder(members).interactionModel(LDP.RDFSource).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful membership resource create operation!"); allOf(svc.create(builder(child).interactionModel(LDP.RDFSource).container(resource).build(), dataset) .toCompletableFuture(), svc.touch(resource).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf(svc.create(builder(child2).interactionModel(LDP.RDFSource).container(resource2).build(), dataset) .toCompletableFuture(), svc.touch(resource2).toCompletableFuture()).join(), "Unsuccessful create operation!");
allOf(svc.create(builder(resource).interactionModel(LDP.DirectContainer).container(root) .membershipResource(members).memberRelation(DC.relation).build(), dataset).toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf(svc.create(builder(resource2).interactionModel(LDP.DirectContainer).container(root) .membershipResource(members).memberRelation(DC.subject).build(), dataset).toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf(svc.create(builder(members).interactionModel(LDP.RDFSource).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful create operation!"); allOf(svc.create(builder(child).interactionModel(LDP.RDFSource).container(resource).build(), dataset) .toCompletableFuture(), svc.touch(resource).toCompletableFuture(), svc.touch(members).toCompletableFuture()).join(), allOf(svc.create(builder(child2).interactionModel(LDP.RDFSource).container(resource2).build(), dataset) .toCompletableFuture(), svc.touch(members).toCompletableFuture(), svc.touch(resource2).toCompletableFuture()).join(),
allOf(svc.create(builder(resource).interactionModel(LDP.IndirectContainer).container(root) .membershipResource(members).memberRelation(RDFS.label) .insertedContentRelation(SKOS.prefLabel).build(), dataset).toCompletableFuture(), allOf(svc.create(builder(resource2).interactionModel(LDP.IndirectContainer).container(root) .membershipResource(members).memberRelation(RDFS.label) .insertedContentRelation(SKOS.prefLabel).build(), dataset).toCompletableFuture(), allOf(svc.create(builder(members).interactionModel(LDP.RDFSource).container(root).build(), dataset) .toCompletableFuture(), svc.touch(root).toCompletableFuture()).join(), "Unsuccessful member resource creation operation!"); allOf(svc.create(builder(child).interactionModel(LDP.RDFSource).container(resource).build(), dataset) .toCompletableFuture(), svc.touch(members).toCompletableFuture(), svc.touch(resource).toCompletableFuture()).join(), allOf(svc.create(builder(child2).interactionModel(LDP.RDFSource).container(resource2).build(), dataset) .toCompletableFuture(), svc.touch(members).toCompletableFuture(), svc.touch(resource2).toCompletableFuture()).join(),