Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions httpclient5-cache/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,6 @@
<artifactId>spymemcached</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@
import org.apache.hc.core5.http.message.BasicHttpRequest;
import org.apache.hc.core5.http.message.BasicHttpResponse;
import org.apache.hc.core5.http.message.HeaderGroup;
import org.hamcrest.MatcherAssert;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -99,10 +98,9 @@ void testFilterHopByHopAndConnectionSpecificHeaders() {
new BasicHeader(HttpHeaders.CONTENT_TYPE, ContentType.TEXT_PLAIN.toString()),
new BasicHeader(HttpHeaders.CONTENT_LENGTH, "111"));
final HeaderGroup filteredHeaders = HttpCacheEntryFactory.filterHopByHopHeaders(response);
MatcherAssert.assertThat(filteredHeaders.getHeaders(), HeadersMatcher.same(
HeadersMatcher.assertSame(filteredHeaders.getHeaders(),
new BasicHeader("X-custom", "my stuff"),
new BasicHeader(HttpHeaders.CONTENT_TYPE, ContentType.TEXT_PLAIN.toString())
));
new BasicHeader(HttpHeaders.CONTENT_TYPE, ContentType.TEXT_PLAIN.toString()));
}

@Test
Expand All @@ -113,8 +111,8 @@ void testHeadersAreMergedCorrectly() {

final HeaderGroup mergedHeaders = impl.mergeHeaders(entry, response);

MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("Date", DateUtils.formatStandardDate(responseDate)));
MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("ETag", "\"etag\""));
ContainsHeaderMatcher.assertContains(mergedHeaders, "Date", DateUtils.formatStandardDate(responseDate));
ContainsHeaderMatcher.assertContains(mergedHeaders, "ETag", "\"etag\"");
}

@Test
Expand All @@ -132,10 +130,10 @@ void testNewerHeadersReplaceExistingHeaders() {

final HeaderGroup mergedHeaders = impl.mergeHeaders(entry, response);

MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("Date", DateUtils.formatStandardDate(requestDate)));
MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("ETag", "\"etag\""));
MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("Last-Modified", DateUtils.formatStandardDate(responseDate)));
MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("Cache-Control", "public"));
ContainsHeaderMatcher.assertContains(mergedHeaders, "Date", DateUtils.formatStandardDate(requestDate));
ContainsHeaderMatcher.assertContains(mergedHeaders, "ETag", "\"etag\"");
ContainsHeaderMatcher.assertContains(mergedHeaders, "Last-Modified", DateUtils.formatStandardDate(responseDate));
ContainsHeaderMatcher.assertContains(mergedHeaders, "Cache-Control", "public");
}

@Test
Expand All @@ -149,10 +147,10 @@ void testNewHeadersAreAddedByMerge() {

final HeaderGroup mergedHeaders = impl.mergeHeaders(entry, response);

MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("Date", DateUtils.formatStandardDate(requestDate)));
MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("ETag", "\"etag\""));
MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("Last-Modified", DateUtils.formatStandardDate(responseDate)));
MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("Cache-Control", "public"));
ContainsHeaderMatcher.assertContains(mergedHeaders, "Date", DateUtils.formatStandardDate(requestDate));
ContainsHeaderMatcher.assertContains(mergedHeaders, "ETag", "\"etag\"");
ContainsHeaderMatcher.assertContains(mergedHeaders, "Last-Modified", DateUtils.formatStandardDate(responseDate));
ContainsHeaderMatcher.assertContains(mergedHeaders, "Cache-Control", "public");
}

@Test
Expand All @@ -165,7 +163,7 @@ void entryWithMalformedDateIsStillUpdated() {

final HeaderGroup mergedHeaders = impl.mergeHeaders(entry, response);

MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("ETag", "\"new\""));
ContainsHeaderMatcher.assertContains(mergedHeaders, "ETag", "\"new\"");
}

@Test
Expand All @@ -178,7 +176,7 @@ void entryIsStillUpdatedByResponseWithMalformedDate() {

final HeaderGroup mergedHeaders = impl.mergeHeaders(entry, response);

MatcherAssert.assertThat(mergedHeaders, ContainsHeaderMatcher.contains("ETag", "\"new\""));
ContainsHeaderMatcher.assertContains(mergedHeaders, "ETag", "\"new\"");
}

@Test
Expand Down Expand Up @@ -215,8 +213,7 @@ void testCreateRootVariantEntry() {

final HttpCacheEntry newRoot = impl.createRoot(newEntry, variants);

MatcherAssert.assertThat(newRoot, HttpCacheEntryMatcher.equivalent(
HttpTestUtils.makeCacheEntry(
HttpCacheEntryMatcher.assertEquivalent(newRoot, HttpTestUtils.makeCacheEntry(
tenSecondsAgo,
oneSecondAgo,
Method.GET,
Expand All @@ -234,7 +231,7 @@ void testCreateRootVariantEntry() {
new BasicHeader("X-custom", "my stuff")
},
variants
)));
));

Assertions.assertTrue(newRoot.hasVariants());
Assertions.assertNull(newRoot.getResource());
Expand All @@ -261,8 +258,7 @@ void testCreateResourceEntry() {
final Resource resource = HttpTestUtils.makeRandomResource(128);
final HttpCacheEntry newEntry = impl.create(tenSecondsAgo, oneSecondAgo, host, request, response, resource);

MatcherAssert.assertThat(newEntry, HttpCacheEntryMatcher.equivalent(
HttpTestUtils.makeCacheEntry(
HttpCacheEntryMatcher.assertEquivalent(newEntry, HttpTestUtils.makeCacheEntry(
tenSecondsAgo,
oneSecondAgo,
Method.GET,
Expand All @@ -279,7 +275,7 @@ void testCreateResourceEntry() {
new BasicHeader("X-custom", "my stuff")
},
resource
)));
));

Assertions.assertFalse(newEntry.hasVariants());
}
Expand Down Expand Up @@ -321,8 +317,7 @@ void testCreateUpdatedResourceEntry() {

final HttpCacheEntry updatedEntry = impl.createUpdated(tenSecondsAgo, oneSecondAgo, host, request, response, entry);

MatcherAssert.assertThat(updatedEntry, HttpCacheEntryMatcher.equivalent(
HttpTestUtils.makeCacheEntry(
HttpCacheEntryMatcher.assertEquivalent(updatedEntry, HttpTestUtils.makeCacheEntry(
tenSecondsAgo,
oneSecondAgo,
Method.GET,
Expand All @@ -341,7 +336,7 @@ void testCreateUpdatedResourceEntry() {
new BasicHeader("Cache-Control", "public")
},
resource
)));
));

Assertions.assertFalse(updatedEntry.hasVariants());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@
*/
package org.apache.hc.client5.http.impl.cache;

import static org.hamcrest.MatcherAssert.assertThat;

import org.apache.hc.client5.http.HeaderMatcher;
import org.apache.hc.client5.http.cache.RequestCacheControl;
import org.junit.jupiter.api.Assertions;
Expand All @@ -39,7 +37,7 @@ class CacheControlGeneratorTest {

@Test
void testGenerateRequestCacheControlHeader() {
assertThat(generator.generate(
HeaderMatcher.assertSame(generator.generate(
RequestCacheControl.builder()
.setMaxAge(12)
.setMaxStale(23)
Expand All @@ -48,10 +46,9 @@ void testGenerateRequestCacheControlHeader() {
.setNoStore(true)
.setOnlyIfCached(true)
.setStaleIfError(56)
.build()),
HeaderMatcher.same("Cache-Control", "max-age=12, max-stale=23, " +
"min-fresh=34, no-cache, no-store, only-if-cached, stale-if-error=56"));
assertThat(generator.generate(
.build()), "Cache-Control", "max-age=12, max-stale=23, " +
"min-fresh=34, no-cache, no-store, only-if-cached, stale-if-error=56");
HeaderMatcher.assertSame(generator.generate(
RequestCacheControl.builder()
.setMaxAge(12)
.setNoCache(true)
Expand All @@ -60,20 +57,17 @@ void testGenerateRequestCacheControlHeader() {
.setNoStore(true)
.setStaleIfError(56)
.setOnlyIfCached(true)
.build()),
HeaderMatcher.same("Cache-Control", "max-age=12, max-stale=23, " +
"min-fresh=34, no-cache, no-store, only-if-cached, stale-if-error=56"));
assertThat(generator.generate(
.build()), "Cache-Control", "max-age=12, max-stale=23, " +
"min-fresh=34, no-cache, no-store, only-if-cached, stale-if-error=56");
HeaderMatcher.assertSame(generator.generate(
RequestCacheControl.builder()
.setMaxAge(0)
.build()),
HeaderMatcher.same("Cache-Control", "max-age=0"));
assertThat(generator.generate(
.build()), "Cache-Control", "max-age=0");
HeaderMatcher.assertSame(generator.generate(
RequestCacheControl.builder()
.setMaxAge(-1)
.setMinFresh(10)
.build()),
HeaderMatcher.same("Cache-Control", "min-fresh=10"));
.build()), "Cache-Control", "min-fresh=10");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,41 +31,20 @@

import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.MessageHeaders;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.junit.jupiter.api.Assertions;

public class ContainsHeaderMatcher extends BaseMatcher<MessageHeaders> {
public class ContainsHeaderMatcher {

private final String headerName;
private final Object headerValue;

public ContainsHeaderMatcher(final String headerName, final Object headerValue) {
this.headerName = headerName;
this.headerValue = headerValue;
}

@Override
public boolean matches(final Object item) {
if (item instanceof MessageHeaders) {
final MessageHeaders messageHeaders = (MessageHeaders) item;
for (final Iterator<Header> it = messageHeaders.headerIterator(); it.hasNext(); ) {
final Header header = it.next();
if (headerName.equalsIgnoreCase(header.getName()) && Objects.equals(headerValue, header.getValue())) {
return true;
}
public static void assertContains(final MessageHeaders messageHeaders,
final String headerName, final Object headerValue) {
Assertions.assertNotNull(messageHeaders, "Expected headers");
for (final Iterator<Header> it = messageHeaders.headerIterator(); it.hasNext(); ) {
final Header header = it.next();
if (headerName.equalsIgnoreCase(header.getName()) && Objects.equals(headerValue, header.getValue())) {
return;
}
}
return false;
}

@Override
public void describeTo(final Description description) {
description.appendText("contains header ").appendValue(headerName).appendText(": ").appendValue(headerValue);
}

public static Matcher<MessageHeaders> contains(final String headerName, final Object headerValue) {
return new ContainsHeaderMatcher(headerName, headerValue);
Assertions.fail("Expected header '" + headerName + "' with value '" + headerValue + "'");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -37,58 +37,55 @@
import org.apache.hc.client5.http.cache.Resource;
import org.apache.hc.client5.http.cache.ResourceIOException;
import org.apache.hc.core5.http.Header;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.junit.jupiter.api.Assertions;

public class HttpCacheEntryMatcher extends BaseMatcher<HttpCacheEntry> {
public class HttpCacheEntryMatcher {

private final HttpCacheEntry expectedValue;

public HttpCacheEntryMatcher(final HttpCacheEntry expectedValue) {
this.expectedValue = expectedValue;
public static void assertEquivalent(final HttpCacheEntry actual, final HttpCacheEntry expected) {
try {
Assertions.assertTrue(equivalent(expected, actual), "Expected equivalent cache entry");
} catch (final ResourceIOException ex) {
Assertions.fail("Failed to read cached resource", ex);
}
}

@Override
public boolean matches(final Object item) {
if (item instanceof HttpCacheEntry) {
try {
final HttpCacheEntry otherValue = (HttpCacheEntry) item;

if (!setEqual(expectedValue.getVariants(), otherValue.getVariants())) {
return false;
}
if (!Objects.equals(expectedValue.getRequestMethod(), otherValue.getRequestMethod())) {
return false;
}
if (!Objects.equals(expectedValue.getRequestURI(), otherValue.getRequestURI())) {
return false;
}
if (!headersEqual(expectedValue.requestHeaderIterator(), otherValue.requestHeaderIterator())) {
return false;
}
if (!instantEqual(expectedValue.getRequestInstant(), otherValue.getRequestInstant())) {
return false;
}
if (expectedValue.getStatus() != otherValue.getStatus()) {
return false;
}
if (!headersEqual(expectedValue.headerIterator(), otherValue.headerIterator())) {
return false;
}
if (!instantEqual(expectedValue.getResponseInstant(), otherValue.getResponseInstant())) {
return false;
}
final Resource expectedResource = expectedValue.getResource();
final byte[] expectedContent = expectedResource != null ? expectedResource.get() : null;
final Resource otherResource = otherValue.getResource();
final byte[] otherContent = otherResource != null ? otherResource.get() : null;
return Arrays.equals(expectedContent, otherContent);
} catch (final ResourceIOException ex) {
throw new RuntimeException(ex);
}
private static boolean equivalent(final HttpCacheEntry expectedValue, final HttpCacheEntry otherValue)
throws ResourceIOException {
if (expectedValue == null && otherValue == null) {
return true;
}
if (expectedValue == null || otherValue == null) {
return false;
}
if (!setEqual(expectedValue.getVariants(), otherValue.getVariants())) {
return false;
}
if (!Objects.equals(expectedValue.getRequestMethod(), otherValue.getRequestMethod())) {
return false;
}
if (!Objects.equals(expectedValue.getRequestURI(), otherValue.getRequestURI())) {
return false;
}
if (!headersEqual(expectedValue.requestHeaderIterator(), otherValue.requestHeaderIterator())) {
return false;
}
if (!instantEqual(expectedValue.getRequestInstant(), otherValue.getRequestInstant())) {
return false;
}
if (expectedValue.getStatus() != otherValue.getStatus()) {
return false;
}
if (!headersEqual(expectedValue.headerIterator(), otherValue.headerIterator())) {
return false;
}
return false;
if (!instantEqual(expectedValue.getResponseInstant(), otherValue.getResponseInstant())) {
return false;
}
final Resource expectedResource = expectedValue.getResource();
final byte[] expectedContent = expectedResource != null ? expectedResource.get() : null;
final Resource otherResource = otherValue.getResource();
final byte[] otherContent = otherResource != null ? otherResource.get() : null;
return Arrays.equals(expectedContent, otherContent);
}

private static boolean instantEqual(final Instant expected, final Instant other) {
Expand Down Expand Up @@ -121,13 +118,4 @@ private static boolean setEqual(final Set<?> expected, final Set<?> actual) {
return actual.containsAll(expected);
}

@Override
public void describeTo(final Description description) {
description.appendValue(expectedValue);
}

public static Matcher<HttpCacheEntry> equivalent(final HttpCacheEntry target) {
return new HttpCacheEntryMatcher(target);
}

}
Loading
Loading