@Override public Date getLastModified() { return delegate.getLastModified(); }
@Override public Date getLastModified() { return rawResponse.getLastModified(); }
public Date getLastModified() { return r.getLastModified(); }
StoreFileResult(final Response response) { directories = null; files = null; if (response != null) { type = Type.valueOf(response.getHeaderString(QWAZR_TYPE)); size = getHeaderIfPresent(response, QWAZR_SIZE); last_modified = response.getLastModified(); } else { type = Type.UNKNOWN; size = null; last_modified = null; } }
private Stream<Executable> checkBinaryDescription(final Response res) { return Stream.of( () -> assertEquals(OK, res.getStatusInfo(), "Incorrect response code!"), () -> assertEquals(-1, res.getLength(), "Incorrect response size!"), () -> assertEquals(from(time), res.getLastModified(), "Incorrect modified date!"), () -> assertTrue(res.getMediaType().isCompatible(TEXT_TURTLE_TYPE), "Incompatible content-type!"), () -> assertTrue(res.getLinks().stream() .anyMatch(link -> link.getRel().equals("describes") && !link.getUri().toString().endsWith("?ext=description")), "MIssing rel=describes header!"), () -> assertTrue(res.getLinks().stream() .anyMatch(link -> link.getRel().equals("canonical") && link.getUri().toString().endsWith("?ext=description")), "Missing rel=canonical header!"), () -> assertAll("Check LDP type link headers", checkLdpType(res, LDP.RDFSource))); }
@Test public void testGetTimeMapLink() throws IOException { when(mockResource.getInteractionModel()).thenReturn(LDP.Container); when(mockMementoService.mementos(eq(identifier))).thenReturn(completedFuture(new TreeSet<>(asList( ofEpochSecond(timestamp - 2000), ofEpochSecond(timestamp - 1000), time)))); final Response res = target(RESOURCE_PATH).queryParam("ext", "timemap").request() .accept(APPLICATION_LINK_FORMAT).get(); assertEquals(SC_OK, res.getStatus(), "Unexpected response code!"); assertEquals(MediaType.valueOf(APPLICATION_LINK_FORMAT), res.getMediaType(), "Incorrect content-type!"); assertNull(res.getLastModified(), "Unexpected last-modified header!"); assertAll("Check Memento headers", checkMementoHeaders(res, RESOURCE_PATH)); assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.RDFSource)); assertAll("Check allowed methods", checkAllowedMethods(res, asList(GET, HEAD, OPTIONS))); assertAll("Check null headers", checkNullHeaders(res, asList(ACCEPT_POST, ACCEPT_PATCH, ACCEPT_RANGES, MEMENTO_DATETIME))); final String entity = IOUtils.toString((InputStream) res.getEntity(), UTF_8); final List<Link> entityLinks = stream(entity.split(",\n")).map(Link::valueOf).collect(toList()); assertEquals(4L, entityLinks.size(), "Incorrect number of Link headers!"); final List<Link> links = getLinks(res); assertAll("Check link headers", entityLinks.stream().map(l -> () -> assertTrue(links.contains(l), "Link not in response: " + l))); }
@Test public void testGetTrailingSlash() { final Response res = target(RESOURCE_PATH + "/").request().get(); assertEquals(SC_OK, res.getStatus(), "Unexpected response code!"); assertEquals(from(time), res.getLastModified(), "Incorrect modified date!"); assertTrue(hasTimeGateLink(res, RESOURCE_PATH), "Missing rel=timegate link!"); assertTrue(hasOriginalLink(res, RESOURCE_PATH), "Missing rel=original link!"); }
assertNull(res.getLastModified(), "Incorrect last modified date!"); assertAll("Check Simple JSON-LD", checkSimpleJsonLdResponse(res, LDP.RDFSource)); assertAll("Check Memento headers", checkMementoHeaders(res, RESOURCE_PATH));
assertNull(res.getLastModified(), "Incorrect last-modified header!"); assertAll("Check Simple JSON-LD", checkSimpleJsonLdResponse(res, LDP.RDFSource)); assertAll("Check Memento headers", checkMementoHeaders(res, RESOURCE_PATH));
@Test public void testGetVersionContainerJson() { when(mockVersionedResource.getInteractionModel()).thenReturn(LDP.Container); final Response res = target(RESOURCE_PATH).queryParam("version", timestamp).request() .accept("application/ld+json; profile=\"http://www.w3.org/ns/json-ld#compacted\"").get(); assertEquals(SC_OK, res.getStatus(), "Unexpected response code!"); assertEquals(from(time), res.getLastModified(), "Incorrect last-modified header!"); assertEquals(time, parse(res.getHeaderString(MEMENTO_DATETIME), RFC_1123_DATE_TIME).toInstant(), "Incorrect Memento-Datetime header!"); assertAll("Check Simple JSON-LD", checkSimpleJsonLdResponse(res, LDP.Container)); assertAll("Check Memento headers", checkMementoHeaders(res, RESOURCE_PATH)); assertAll("Check allowed methods", checkAllowedMethods(res, asList(GET, HEAD, OPTIONS))); assertAll("Check null headers", checkNullHeaders(res, asList(ACCEPT_POST, ACCEPT_PATCH, ACCEPT_RANGES))); }
@Test public void testGetVersionJson() { final Response res = target(RESOURCE_PATH).queryParam("version", timestamp).request() .accept("application/ld+json; profile=\"http://www.w3.org/ns/json-ld#compacted\"").get(); assertEquals(SC_OK, res.getStatus(), "Unexpected response code!"); assertEquals(from(time), res.getLastModified(), "Incorrect last-modified header!"); assertEquals(time, parse(res.getHeaderString(MEMENTO_DATETIME), RFC_1123_DATE_TIME).toInstant(), "Incorrect Memento-Datetime header!"); assertAll("Check Simple JSON-LD", checkSimpleJsonLdResponse(res, LDP.RDFSource)); assertAll("Check Memento headers", checkMementoHeaders(res, RESOURCE_PATH)); assertAll("Check allowed methods", checkAllowedMethods(res, asList(GET, HEAD, OPTIONS))); assertAll("Check null headers", checkNullHeaders(res, asList(ACCEPT_POST, ACCEPT_PATCH, ACCEPT_RANGES))); }
@Test public void testGetBinary() throws IOException { when(mockResource.getBinaryMetadata()).thenReturn(of(testBinary)); when(mockResource.getInteractionModel()).thenReturn(LDP.NonRDFSource); when(mockTrellisRequest.getAcceptableMediaTypes()).thenReturn(singletonList(WILDCARD_TYPE)); final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, baseUrl); final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource))) .toCompletableFuture().join().build(); assertEquals(OK, res.getStatusInfo(), "Incorrect response code!"); assertEquals(-1, res.getLength(), "Incorrect response length!"); assertEquals(from(time), res.getLastModified(), "Incorrect content-type header!"); assertTrue(res.getMediaType().isCompatible(TEXT_PLAIN_TYPE), "Incorrect content-type header!"); assertTrue(res.getLinks().stream() .anyMatch(link -> link.getRel().equals("describedby") && link.getUri().toString().endsWith("?ext=description")), "Missing rel=describedby header!"); assertTrue(res.getLinks().stream() .anyMatch(link -> link.getRel().equals("canonical") && !link.getUri().toString().endsWith("?ext=description")), "Missing rel=canonical header!"); assertAll("Check LDP type link headers", checkLdpType(res, LDP.NonRDFSource)); }
private Stream<Executable> checkLdfResponse(final Response res) { return Stream.of( () -> assertEquals(from(time), res.getLastModified(), "Incorrect modification date!"), () -> assertTrue(hasTimeGateLink(res, RESOURCE_PATH), "Missing rel=timegate link!"), () -> assertTrue(hasOriginalLink(res, RESOURCE_PATH), "Missing rel=original link!"), () -> assertAll("Check allowed methods", checkAllowedMethods(res, asList(PATCH, PUT, DELETE, GET, HEAD, OPTIONS))), () -> assertAll("Check Vary header", checkVary(res, asList(ACCEPT_DATETIME, PREFER))), () -> assertAll("Check null headers", checkNullHeaders(res, asList(ACCEPT_POST, ACCEPT_RANGES))), () -> assertAll("Check json-ld response", checkJsonLdResponse(res)), () -> assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.RDFSource))); }
@Test public void testGetJsonCompactLDF3() throws IOException { when(mockResource.stream()).thenAnswer(inv -> getLdfQuads()); final Response res = target(RESOURCE_PATH).queryParam("subject", getBaseUrl() + RESOURCE_PATH) .queryParam("object", "A title").queryParam("predicate", DC.title.getIRIString()).request() .accept("application/ld+json; profile=\"http://www.w3.org/ns/json-ld#compacted\"").get(); assertEquals(SC_OK, res.getStatus(), "Unexpected response code!"); assertEquals(from(time), res.getLastModified(), "Incorrect modified date!"); assertTrue(hasTimeGateLink(res, RESOURCE_PATH), "Missing rel=timegate link!"); assertTrue(hasOriginalLink(res, RESOURCE_PATH), "Missing rel=original link!"); assertAll("Check allowed methods", checkAllowedMethods(res, asList(PATCH, PUT, DELETE, GET, HEAD, OPTIONS))); assertAll("Check Vary headers", checkVary(res, asList(ACCEPT_DATETIME, PREFER))); assertAll("Check null headers", checkNullHeaders(res, asList(ACCEPT_POST, ACCEPT_RANGES))); assertAll("Check JSON-LD Response", checkJsonLdResponse(res)); assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.RDFSource)); final String entity = IOUtils.toString((InputStream) res.getEntity(), UTF_8); final Map<String, Object> obj = MAPPER.readValue(entity, new TypeReference<Map<String, Object>>(){}); assertEquals("A title", obj.get("title"), "Incorrect title property!"); assertEquals(getBaseUrl() + RESOURCE_PATH, obj.get("@id"), "Incorrect @id value!"); assertAll("Check JSON-LD structure", checkJsonStructure(obj, asList("@context", "title"), asList("@type", "creator", "mode", "created"))); }
@Test public void testGetAclJsonCompact() throws IOException { when(mockResource.hasAcl()).thenReturn(true); final Response res = target(RESOURCE_PATH).queryParam("ext", "acl").request() .accept("application/ld+json; profile=\"http://www.w3.org/ns/json-ld#compacted\"").get(); assertEquals(SC_OK, res.getStatus(), "Unexpected response code!"); assertEquals(APPLICATION_SPARQL_UPDATE, res.getHeaderString(ACCEPT_PATCH), "Incorrect Accept-Patch header"); assertEquals(from(time), res.getLastModified(), "Incorrect last-modified header!"); assertFalse(hasTimeGateLink(res, RESOURCE_PATH), "Unexpected rel=timegate link"); assertFalse(hasOriginalLink(res, RESOURCE_PATH), "Unexpected rel=original link"); assertTrue(res.hasEntity(), "Missing entity!"); final String entity = IOUtils.toString((InputStream) res.getEntity(), UTF_8); final Map<String, Object> obj = MAPPER.readValue(entity, new TypeReference<Map<String, Object>>(){}); assertEquals(ACL.Control.getIRIString(), (String) obj.get("mode"), "Incorrect ACL mode property!"); assertAll("Check Simple JSON-LD", checkSimpleJsonLdResponse(res, LDP.RDFSource)); assertAll("Check allowed methods", checkAllowedMethods(res, asList(PATCH, GET, HEAD, OPTIONS))); assertAll("Check Vary headers", checkVary(res, asList(ACCEPT_DATETIME))); assertAll("Check null headers", checkNullHeaders(res, asList(ACCEPT_POST, ACCEPT_RANGES))); assertAll("Check JSON-LD structure", checkJsonStructure(obj, asList("@context", "mode"), asList("title"))); }
@Test public void testGetPreferLdprs() { when(mockIoService.supportedUpdateSyntaxes()).thenReturn(singletonList(LD_PATCH)); when(mockTrellisRequest.getPrefer()) .thenReturn(Prefer.valueOf("return=representation; include=\"http://www.w3.org/ns/ldp#PreferContainment")); final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, null); final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource))) .toCompletableFuture().join().build(); assertEquals(OK, res.getStatusInfo(), "Incorrect response status!"); assertEquals("text/ldpatch", res.getHeaderString(ACCEPT_PATCH), "Incorrect Accept-Patch header!"); assertEquals("return=representation", res.getHeaderString(PREFERENCE_APPLIED), "Incorrect Preference-Applied!"); assertEquals(from(time), res.getLastModified(), "Incorrect modified header!"); assertTrue(TEXT_TURTLE_TYPE.isCompatible(res.getMediaType()), "Incompatible content-type header!"); assertTrue(res.getMediaType().isCompatible(TEXT_TURTLE_TYPE), "Incompatible content-type header!"); assertNull(res.getHeaderString(ACCEPT_RANGES), "Unexpected Accept-Ranges header!"); assertNull(res.getHeaderString(ACCEPT_POST), "Unexpected Accept-Post header!"); assertAll("Check LDP type headers", checkLdpType(res, LDP.RDFSource)); }
@Test public void testMinimalLdprs() { when(mockTrellisRequest.getAcceptableMediaTypes()).thenReturn(singletonList(APPLICATION_LD_JSON_TYPE)); when(mockTrellisRequest.getPrefer()).thenReturn(Prefer.valueOf("return=minimal")); final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, baseUrl); final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource))) .toCompletableFuture().join().build(); assertEquals(NO_CONTENT, res.getStatusInfo(), "Incorrect response code!"); assertEquals(from(time), res.getLastModified(), "Incorrect modified date!"); assertEquals(APPLICATION_SPARQL_UPDATE, res.getHeaderString(ACCEPT_PATCH), "Incorrect Accept-Patch header!"); assertEquals("return=minimal", res.getHeaderString(PREFERENCE_APPLIED), "Incorrect Preference-Applied header!"); assertTrue(APPLICATION_LD_JSON_TYPE.isCompatible(res.getMediaType()), "Incompatible media type!"); assertTrue(res.getMediaType().isCompatible(APPLICATION_LD_JSON_TYPE), "Incompatible media type!"); assertNull(res.getHeaderString(ACCEPT_POST), "Unexpected Accept-Post header!"); assertNull(res.getHeaderString(ACCEPT_RANGES), "Unexpected Accept-Ranges header!"); assertAll("Check LDP type headers", checkLdpType(res, LDP.RDFSource)); assertAll("Check Allow headers", checkAllowHeader(res, asList(GET, HEAD, OPTIONS, PUT, DELETE, PATCH))); final EntityTag etag = res.getEntityTag(); assertTrue(etag.isWeak(), "ETag header isn't weak for LDP-RS!"); final String preferHash = new ArrayList().hashCode() + "." + new ArrayList().hashCode(); assertEquals(md5Hex(time.toEpochMilli() + "." + time.getNano() + "." + preferHash + "." + baseUrl), etag.getValue(), "Unexpected ETag value!"); final List<Object> varies = res.getHeaders().get(VARY); assertTrue(varies.contains(ACCEPT_DATETIME), "Missing Vary: accept-datetime header!"); assertTrue(varies.contains(PREFER), "Missing Vary: prefer header!"); assertFalse(varies.contains(RANGE), "Unexpected Vary: range header!"); assertFalse(varies.contains(WANT_DIGEST), "Unexpected Vary: want-digest header!"); }
assertEquals(OK, res.getStatusInfo(), "Incorrect response code"); assertEquals(APPLICATION_SPARQL_UPDATE, res.getHeaderString(ACCEPT_PATCH), "Incorrect Accept-Patch header!"); assertEquals(from(time), res.getLastModified(), "Incorrect modified date!"); assertTrue(APPLICATION_LD_JSON_TYPE.isCompatible(res.getMediaType()), "Incompatible content-type header!"); assertTrue(res.getMediaType().isCompatible(APPLICATION_LD_JSON_TYPE), "Incompatible content-type header!");
@Test public void testGetLdprs() { when(mockTrellisRequest.getBaseUrl()).thenReturn("http://example.org"); final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, null); final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource))) .toCompletableFuture().join().build(); assertEquals(OK, res.getStatusInfo(), "Incorrect response type!"); assertEquals(APPLICATION_SPARQL_UPDATE, res.getHeaderString(ACCEPT_PATCH), "Incorrect Accept-Patch header!"); assertEquals(from(time), res.getLastModified(), "Incorrect modified date!"); assertTrue(TEXT_TURTLE_TYPE.isCompatible(res.getMediaType()), "Incompatible media type!"); assertTrue(res.getMediaType().isCompatible(TEXT_TURTLE_TYPE), "Incompatible media type!"); assertNull(res.getHeaderString(PREFERENCE_APPLIED), "Unexpected Preference-Applied header!"); assertNull(res.getHeaderString(ACCEPT_RANGES), "Unexpected Accept-Ranges header!"); assertNull(res.getHeaderString(ACCEPT_POST), "Unexpected Accept-Post header!"); assertAll("Check LDP type Link headers", checkLdpType(res, LDP.RDFSource)); assertAll("Check Allow headers", checkAllowHeader(res, asList(GET, HEAD, OPTIONS, PUT, DELETE, PATCH))); final EntityTag etag = res.getEntityTag(); assertTrue(etag.isWeak(), "ETag isn't weak for an RDF document!"); assertEquals(md5Hex(time.toEpochMilli() + "." + time.getNano() + ".." + baseUrl), etag.getValue(), "Unexpected ETag value!"); final List<Object> varies = res.getHeaders().get(VARY); assertFalse(varies.contains(RANGE), "Unexpected Vary: range header!"); assertFalse(varies.contains(WANT_DIGEST), "Unexpected Vary: want-digest header!"); assertTrue(varies.contains(ACCEPT_DATETIME), "Unexpected Vary: accept-datetime header!"); assertTrue(varies.contains(PREFER), "Unexpected Vary: prefer header!"); }
@Test public void testGetVersionedLdprs() { final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, true, true, true, null, null); final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource))) .toCompletableFuture().join().build(); assertEquals(OK, res.getStatusInfo(), "Incorrect response code!"); assertEquals(from(time), res.getLastModified(), "Incorrect modified date!"); assertEquals(ofInstant(time, UTC).format(RFC_1123_DATE_TIME), res.getHeaderString(MEMENTO_DATETIME), "Incorrect Memento-Datetime header!"); assertTrue(TEXT_TURTLE_TYPE.isCompatible(res.getMediaType()), "Incompatible Content-Type header!"); assertTrue(res.getMediaType().isCompatible(TEXT_TURTLE_TYPE), "Incompatible Content-Type header!"); assertNull(res.getHeaderString(ACCEPT_POST), "Unexpected Accept-Post header!"); assertNull(res.getHeaderString(ACCEPT_PATCH), "Unexpected Accept-Patch header!"); assertNull(res.getHeaderString(PREFERENCE_APPLIED), "Unexpected Preference-Applied header!"); assertNull(res.getHeaderString(ACCEPT_RANGES), "Unexpected Accept-Ranges header!"); assertAll("Check LDP type headers", checkLdpType(res, LDP.RDFSource)); assertAll("Check Allow headers", checkAllowHeader(res, asList(GET, HEAD, OPTIONS))); final EntityTag etag = res.getEntityTag(); assertTrue(etag.isWeak(), "ETag header is not weak for an RDF resource!"); assertEquals(md5Hex(time.toEpochMilli() + "." + time.getNano() + ".." + baseUrl), etag.getValue(), "Unexpected ETag value!"); final List<Object> varies = res.getHeaders().get(VARY); assertTrue(varies.contains(PREFER), "Missing Vary: prefer header!"); assertFalse(varies.contains(RANGE), "Unexpected Vary: range header!"); assertFalse(varies.contains(WANT_DIGEST), "Unexpected Vary: want-digest header!"); assertFalse(varies.contains(ACCEPT_DATETIME), "Unexpected Vary: accept-datetime header!"); }