merged develop branch
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/e10955ec Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/e10955ec Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/e10955ec Branch: refs/heads/ldp Commit: e10955ec8ca92d408c63dfbd119159bbf586c688 Parents: b61ebf8 4a188e6 Author: Sergio Fernández <[email protected]> Authored: Fri Jun 13 11:01:59 2014 +0200 Committer: Sergio Fernández <[email protected]> Committed: Fri Jun 13 11:01:59 2014 +0200 ---------------------------------------------------------------------- .../commons/sesame/test/SesameMatchers.java | 295 +++++++- .../AbstractRepositoryConnectionMatcher.java | 1 - .../sesame/test/base/RdfStringMatcher.java | 50 +- .../sesame/test/base/RepositoryMatcher.java | 50 +- .../commons/sesame/test/base/SesameMatcher.java | 1 - .../test/connection/HasStatementMatcher.java | 42 +- .../sesame/test/sparql/SparqlAskMatcher.java | 16 + .../test/sparql/SparqlGraphQueryMatcher.java | 51 +- .../test/sparql/SparqlTupleQueryMatcher.java | 1 - .../optimizer/DistinctLimitOptimizer.java | 8 + .../kiwi/test/junit/KiWiDatabaseRunner.java | 9 +- .../ldpath-backend-linkeddata/assembly.xml | 56 -- .../ldpath/ldpath-backend-linkeddata/pom.xml | 265 +------ .../src/main/doc/LICENSE.txt | 754 ------------------ .../src/main/doc/NOTICE.txt | 18 - .../src/main/doc/README.txt | 99 --- .../ldpath/backend/linkeddata/LDQuery.java | 173 ----- libraries/ldpath/ldpath-core-bundle/pom.xml | 10 +- libraries/ldpath/ldpath-functions-json/pom.xml | 107 +++ .../model/functions/json/JsonPathFunction.java | 84 +++ ...rmotta.ldpath.api.functions.SelectorFunction | 1 + .../functions/json/JsonPathFunctionTest.java | 61 ++ .../src/test/resources/logback.xml | 27 + .../ldpath/model/functions/json/data.n3 | 31 + .../ldpath/ldpath-ldquery-cli/assembly.xml | 56 ++ libraries/ldpath/ldpath-ldquery-cli/pom.xml | 338 +++++++++ .../ldpath-ldquery-cli/src/main/doc/LICENSE.txt | 755 +++++++++++++++++++ .../ldpath-ldquery-cli/src/main/doc/NOTICE.txt | 18 + .../ldpath-ldquery-cli/src/main/doc/README.txt | 99 +++ .../apache/marmotta/ldpath/ldquery/LDQuery.java | 196 +++++ .../ldpath/ldpath-template-linkeddata/pom.xml | 134 ++++ .../marmotta/ldpath/template/LDTemplate.java | 2 +- libraries/ldpath/pom.xml | 2 + parent/pom.xml | 77 +- .../marmotta/platform/ldp/api/LdpService.java | 9 +- .../IncompatibleResourceTypeException.java | 59 ++ .../InvalidInteractionModelException.java | 2 +- .../InvalidModificationException.java | 2 +- .../platform/ldp/exceptions/LDPException.java | 56 ++ .../platform/ldp/services/LdpServiceImpl.java | 79 +- .../platform/ldp/util/EntityTagUtils.java | 19 + .../platform/ldp/webservices/LdpWebService.java | 33 +- .../ldp/webservices/LdpWebServiceTest.java | 115 ++- .../ldp/webservices/util/HeaderMatchers.java | 13 +- .../src/test/resources/test_update.ttl | 27 + .../src/test/resources/test_update_invalid.ttl | 25 + pom.xml | 30 +- 47 files changed, 2910 insertions(+), 1446 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/e10955ec/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/services/LdpServiceImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/e10955ec/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpWebService.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/e10955ec/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java ---------------------------------------------------------------------- diff --cc platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java index 3446649,214926e..8053e46 --- a/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java +++ b/platform/marmotta-ldp/src/test/java/org/apache/marmotta/platform/ldp/webservices/LdpWebServiceTest.java @@@ -309,4 -314,113 +314,108 @@@ public class LdpWebServiceTest .post(container); } + @Test + public void testPUT() throws Exception { + final String container = baseUrl+LdpWebService.PATH + "/test"; + + final String put_valid = IOUtils.toString(LdpWebServiceTest.class.getResourceAsStream("/test_update.ttl"), "utf8"); + final String put_invalid = IOUtils.toString(LdpWebServiceTest.class.getResourceAsStream("/test_update_invalid.ttl"), "utf8"); + + + // Create a resource + final String resource = RestAssured + .given() + .header("Slug", "PUT") + .contentType(RDFFormat.TURTLE.getDefaultMIMEType()) + .body(testResourceTTL.getBytes()) + .expect() + .statusCode(201) + .post(container) + .getHeader("Location"); + final URI uri = new URIImpl(resource); + + // Check the data is there + EntityTag etag = EntityTagUtils.parseEntityTag(RestAssured + .given() + .header("Accept", RDFFormat.RDFXML.getDefaultMIMEType()) + .expect() + .contentType(RDFFormat.RDFXML.getDefaultMIMEType()) + .body(SesameMatchers.rdfStringMatches(RDFFormat.RDFXML, resource, + SesameMatchers.hasStatement(uri, RDF.TYPE, new URIImpl("http://example.com/Example")), + CoreMatchers.not(SesameMatchers.hasStatement(uri, RDFS.LABEL, null)), + CoreMatchers.not(SesameMatchers.hasStatement(uri, LDP.contains, uri)) + )) + .get(resource) + .getHeader("ETag")); + log.debug("ETag for <{}>: {}", resource, etag); + + // Try a Put without if-match header + RestAssured + .given() + .contentType(RDFFormat.TURTLE.getDefaultMIMEType()) + .body(put_valid.getBytes()) + .expect() + .statusCode(428) + .put(resource); + + // Try a Put with wrong if-match header + RestAssured + .given() + .header("If-Match", new EntityTag("invalid").toString()) + .contentType(RDFFormat.TURTLE.getDefaultMIMEType()) + .body(put_valid.getBytes()) + .expect() + .statusCode(412) + .put(resource); + + // Try a Put + RestAssured + .given() + .header("If-Match", etag.toString()) + .contentType(RDFFormat.TURTLE.getDefaultMIMEType()) + .body(put_valid.getBytes()) + .expect() + .statusCode(200) + .put(resource); + + // Check the new data is there + etag = EntityTagUtils.parseEntityTag(RestAssured + .given() + .header("Accept", RDFFormat.RDFXML.getDefaultMIMEType()) + .expect() + .contentType(RDFFormat.RDFXML.getDefaultMIMEType()) + .body(SesameMatchers.rdfStringMatches(RDFFormat.RDFXML, resource, + SesameMatchers.hasStatement(uri, RDF.TYPE, new URIImpl("http://example.com/Example")), + SesameMatchers.hasStatement(uri, RDFS.LABEL, null), + CoreMatchers.not(SesameMatchers.hasStatement(uri, LDP.contains, uri)) + )) + .get(resource) + .header("ETag")); + + // Try an invalid PUT (server-controlled property) + // Try a Put + RestAssured + .given() + .header("If-Match", etag.toString()) + .contentType(RDFFormat.TURTLE.getDefaultMIMEType()) + .body(put_invalid.getBytes()) + .expect() + .statusCode(409) + .put(resource); + + // Check the data is still there + RestAssured + .given() + .header("Accept", RDFFormat.RDFXML.getDefaultMIMEType()) + .expect() + .contentType(RDFFormat.RDFXML.getDefaultMIMEType()) + .header("ETag", HeaderMatchers.hasEntityTag(etag)) + .body(SesameMatchers.rdfStringMatches(RDFFormat.RDFXML, resource, + SesameMatchers.hasStatement(uri, RDF.TYPE, new URIImpl("http://example.com/Example")), + SesameMatchers.hasStatement(uri, RDFS.LABEL, null), + CoreMatchers.not(SesameMatchers.hasStatement(uri, LDP.contains, uri)) + )) + .get(resource); + } + - @AfterClass - public static void tearDown() { - marmotta.shutdown(); - } - }
