From 90e3417aec271a1c0cd396fa20a6d525f01fcd30 Mon Sep 17 00:00:00 2001 From: Winston Li Date: Sun, 13 Aug 2017 17:23:45 +0100 Subject: [PATCH] Add tests for UrlResourceCache content lengths --- .../bridge/resource/UrlResourceCacheTest.java | 75 ++++++++++++++++--- 1 file changed, 65 insertions(+), 10 deletions(-) diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java index 77c38f8996..c58165c3ea 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java @@ -3,13 +3,16 @@ package uk.ac.ic.wlgitbridge.bridge.resource; import com.ning.http.client.HttpResponseHeaders; import org.junit.Test; import uk.ac.ic.wlgitbridge.bridge.db.noop.NoopDbStore; +import uk.ac.ic.wlgitbridge.bridge.util.CastUtil; import uk.ac.ic.wlgitbridge.git.exception.SizeLimitExceededException; import uk.ac.ic.wlgitbridge.io.http.ning.NingHttpClientFacade; import uk.ac.ic.wlgitbridge.io.http.ning.NingHttpHeaders; import uk.ac.ic.wlgitbridge.util.FunctionT; +import java.io.IOException; import java.util.HashMap; import java.util.Optional; +import java.util.concurrent.ExecutionException; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; @@ -35,21 +38,73 @@ public class UrlResourceCacheTest { .build(); } - @Test - public void getThrowsSizeLimitWhenContentLengthTooBig() throws Exception { + private void respondWithContentLength(long cl, long actual) + throws ExecutionException { when(http.get(any(), any())).thenAnswer(invoc -> { Object[] args = invoc.getArguments(); //noinspection unchecked ((FunctionT< HttpResponseHeaders, Boolean, SizeLimitExceededException - >) args[1]).apply(withContentLength(2)); - return new byte[0]; + >) args[1]).apply(withContentLength(cl)); + return new byte[CastUtil.assumeInt(actual)]; }); - - cache.get( - PROJ, URL, NEW_PATH, - new HashMap<>(), new HashMap<>(), - Optional.of(2L) - ); } + + private void respondWithContentLength(long cl) throws ExecutionException { + respondWithContentLength(cl, cl); + } + + private void getWithMaxLength(Optional max) + throws IOException, SizeLimitExceededException { + cache.get( + PROJ, URL, NEW_PATH, new HashMap<>(), new HashMap<>(), max); + } + + private void getWithMaxLength(long max) + throws IOException, SizeLimitExceededException { + getWithMaxLength(Optional.of(max)); + } + + private void getWithoutLimit() + throws IOException, SizeLimitExceededException { + getWithMaxLength(Optional.empty()); + } + + @Test + public void getDoesNotThrowWhenContentLengthLT() throws Exception { + respondWithContentLength(1); + getWithMaxLength(2); + } + + @Test + public void getDoesNotThrowWhenContentLengthEQ() throws Exception { + respondWithContentLength(2); + getWithMaxLength(2); + } + + @Test (expected = SizeLimitExceededException.class) + public void getThrowsSizeLimitExceededWhenContentLengthGT() + throws Exception { + respondWithContentLength(3); + getWithMaxLength(2); + } + + @Test + public void getWithEmptyContentIsValid() throws Exception { + respondWithContentLength(0); + getWithMaxLength(0); + } + + @Test + public void getWithoutLimitDoesNotThrow() throws Exception { + respondWithContentLength(Integer.MAX_VALUE, 0); + getWithoutLimit(); + } + + @Test (expected = SizeLimitExceededException.class) + public void getThrowsIfActualContentTooBig() throws Exception { + respondWithContentLength(0, 10); + getWithMaxLength(5); + } + }