Răsfoiți Sursa

Add tests for UrlResourceCache content lengths

Winston Li 9 ani în urmă
părinte
comite
90e3417aec

+ 63 - 8
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 com.ning.http.client.HttpResponseHeaders;
 import org.junit.Test;
 import org.junit.Test;
 import uk.ac.ic.wlgitbridge.bridge.db.noop.NoopDbStore;
 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.git.exception.SizeLimitExceededException;
 import uk.ac.ic.wlgitbridge.io.http.ning.NingHttpClientFacade;
 import uk.ac.ic.wlgitbridge.io.http.ning.NingHttpClientFacade;
 import uk.ac.ic.wlgitbridge.io.http.ning.NingHttpHeaders;
 import uk.ac.ic.wlgitbridge.io.http.ning.NingHttpHeaders;
 import uk.ac.ic.wlgitbridge.util.FunctionT;
 import uk.ac.ic.wlgitbridge.util.FunctionT;
 
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.Optional;
 import java.util.Optional;
+import java.util.concurrent.ExecutionException;
 
 
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.mock;
@@ -35,21 +38,73 @@ public class UrlResourceCacheTest {
                 .build();
                 .build();
     }
     }
 
 
-    @Test
-    public void getThrowsSizeLimitWhenContentLengthTooBig() throws Exception {
+    private void respondWithContentLength(long cl, long actual)
+            throws ExecutionException {
         when(http.get(any(), any())).thenAnswer(invoc -> {
         when(http.get(any(), any())).thenAnswer(invoc -> {
             Object[] args = invoc.getArguments();
             Object[] args = invoc.getArguments();
             //noinspection unchecked
             //noinspection unchecked
             ((FunctionT<
             ((FunctionT<
                     HttpResponseHeaders, Boolean, SizeLimitExceededException
                     HttpResponseHeaders, Boolean, SizeLimitExceededException
-            >) args[1]).apply(withContentLength(2));
-            return new byte[0];
+            >) args[1]).apply(withContentLength(cl));
+            return new byte[CastUtil.assumeInt(actual)];
         });
         });
+    }
+
+    private void respondWithContentLength(long cl) throws ExecutionException {
+        respondWithContentLength(cl, cl);
+    }
 
 
+    private void getWithMaxLength(Optional<Long> max)
+        throws IOException, SizeLimitExceededException {
         cache.get(
         cache.get(
-                PROJ, URL, NEW_PATH,
-                new HashMap<>(), new HashMap<>(),
-                Optional.of(2L)
-        );
+                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);
+    }
+
 }
 }