// Path: src/main/java/uk/ac/ic/wlgitbridge/bridge/db/noop/NoopDbStore.java
// public class NoopDbStore implements DBStore {
// 
//     @Override
//     public int getNumProjects() {
//         return 0;
//     }
// 
//     @Override
//     public List<String> getProjectNames() {
//         return null;
//     }
// 
//     @Override
//     public void setLatestVersionForProject(String project, int versionID) {
// 
//     }
// 
//     @Override
//     public int getLatestVersionForProject(String project) {
//         return 0;
//     }
// 
//     @Override
//     public void addURLIndexForProject(String projectName, String url, String path) {
// 
//     }
// 
//     @Override
//     public void deleteFilesForProject(String project, String... files) {
// 
//     }
// 
//     @Override
//     public String getPathForURLInProject(String projectName, String url) {
//         return null;
//     }
// 
//     @Override
//     public String getOldestUnswappedProject() {
//         return null;
//     }
// 
//     @Override
//     public int getNumUnswappedProjects() {
//         return 0;
//     }
// 
//     @Override
//     public ProjectState getProjectState(String projectName) {
//         return null;
//     }
// 
//     @Override
//     public void setLastAccessedTime(String projectName, Timestamp time) {
// 
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/bridge/util/CastUtil.java
// public class CastUtil {
// 
//     public static int assumeInt(long l) {
//         Preconditions.checkArgument(
//                 l <= (long) Integer.MAX_VALUE
//                         && l >= (long) Integer.MIN_VALUE,
//                 l + " cannot fit inside an int");
//         return (int) l;
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/git/exception/SizeLimitExceededException.java
// public class SizeLimitExceededException extends GitUserException {
// 
//     private final Optional<String> path;
// 
//     private final long actualSize;
// 
//     private final long maxSize;
// 
//     public SizeLimitExceededException(
//             Optional<String> path, long actualSize, long maxSize) {
//         this.path = path;
//         this.actualSize = actualSize;
//         this.maxSize = maxSize;
//     }
// 
//     @Override
//     public String getMessage() {
//         return "file too big";
//     }
// 
//     @Override
//     public List<String> getDescriptionLines() {
//         String filename =
//                 path.isPresent() ? "File '" + path + "' is" : "There's a file";
//         return Arrays.asList(
//                 filename + " too large to push to "
//                         + Util.getServiceName() + " via git",
//                         "the recommended maximum file size is 50 MiB"
//         );
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClientFacade.java
// public interface NingHttpClientFacade {
// 
//     /**
//      * Performs a GET request
//      * @param url the target URL
//      * @param handler handler for the response headers. Returning false
//      *                aborts the request.
//      * @return
//      */
//     <E extends Exception> byte[] get(
//             String url,
//             FunctionT<HttpResponseHeaders, Boolean, E> handler
//     ) throws ExecutionException;
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpHeaders.java
// public class NingHttpHeaders extends HttpResponseHeaders {
// 
//     private final FluentCaseInsensitiveStringsMap map;
// 
//     private NingHttpHeaders(FluentCaseInsensitiveStringsMap map) {
//         this.map = map;
//     }
// 
//     public static NingHttpHeadersBuilder builder() {
//         return new NingHttpHeadersBuilder();
//     }
// 
//     @Override
//     public FluentCaseInsensitiveStringsMap getHeaders() {
//         return map;
//     }
// 
//     public static class NingHttpHeadersBuilder {
// 
//         private final Map<String, Collection<String>> map;
// 
//         private NingHttpHeadersBuilder() {
//             map = new HashMap<>();
//         }
// 
//         public NingHttpHeadersBuilder addHeader(String key, String... values) {
//             map.computeIfAbsent(key, __ -> new ArrayList<>())
//                     .addAll(Arrays.asList(values));
//             return this;
//         }
// 
//         public NingHttpHeaders build() {
//             return new NingHttpHeaders(
//                     new FluentCaseInsensitiveStringsMap(map));
//         }
// 
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/util/FunctionT.java
// @FunctionalInterface
// public interface FunctionT<T, R, E extends Throwable> {
// 
//     R apply(T t) throws E;
// 
// }


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;
import static org.mockito.Mockito.when;
package uk.ac.ic.wlgitbridge.bridge.resource;




public class UrlResourceCacheTest {

    private static String PROJ = "proj";

    private static String URL = "http://localhost/file.jpg";

    private static String NEW_PATH = "file1.jpg";

// Path: src/main/java/uk/ac/ic/wlgitbridge/bridge/db/noop/NoopDbStore.java
// public class NoopDbStore implements DBStore {
// 
//     @Override
//     public int getNumProjects() {
//         return 0;
//     }
// 
//     @Override
//     public List<String> getProjectNames() {
//         return null;
//     }
// 
//     @Override
//     public void setLatestVersionForProject(String project, int versionID) {
// 
//     }
// 
//     @Override
//     public int getLatestVersionForProject(String project) {
//         return 0;
//     }
// 
//     @Override
//     public void addURLIndexForProject(String projectName, String url, String path) {
// 
//     }
// 
//     @Override
//     public void deleteFilesForProject(String project, String... files) {
// 
//     }
// 
//     @Override
//     public String getPathForURLInProject(String projectName, String url) {
//         return null;
//     }
// 
//     @Override
//     public String getOldestUnswappedProject() {
//         return null;
//     }
// 
//     @Override
//     public int getNumUnswappedProjects() {
//         return 0;
//     }
// 
//     @Override
//     public ProjectState getProjectState(String projectName) {
//         return null;
//     }
// 
//     @Override
//     public void setLastAccessedTime(String projectName, Timestamp time) {
// 
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/bridge/util/CastUtil.java
// public class CastUtil {
// 
//     public static int assumeInt(long l) {
//         Preconditions.checkArgument(
//                 l <= (long) Integer.MAX_VALUE
//                         && l >= (long) Integer.MIN_VALUE,
//                 l + " cannot fit inside an int");
//         return (int) l;
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/git/exception/SizeLimitExceededException.java
// public class SizeLimitExceededException extends GitUserException {
// 
//     private final Optional<String> path;
// 
//     private final long actualSize;
// 
//     private final long maxSize;
// 
//     public SizeLimitExceededException(
//             Optional<String> path, long actualSize, long maxSize) {
//         this.path = path;
//         this.actualSize = actualSize;
//         this.maxSize = maxSize;
//     }
// 
//     @Override
//     public String getMessage() {
//         return "file too big";
//     }
// 
//     @Override
//     public List<String> getDescriptionLines() {
//         String filename =
//                 path.isPresent() ? "File '" + path + "' is" : "There's a file";
//         return Arrays.asList(
//                 filename + " too large to push to "
//                         + Util.getServiceName() + " via git",
//                         "the recommended maximum file size is 50 MiB"
//         );
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpClientFacade.java
// public interface NingHttpClientFacade {
// 
//     /**
//      * Performs a GET request
//      * @param url the target URL
//      * @param handler handler for the response headers. Returning false
//      *                aborts the request.
//      * @return
//      */
//     <E extends Exception> byte[] get(
//             String url,
//             FunctionT<HttpResponseHeaders, Boolean, E> handler
//     ) throws ExecutionException;
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/io/http/ning/NingHttpHeaders.java
// public class NingHttpHeaders extends HttpResponseHeaders {
// 
//     private final FluentCaseInsensitiveStringsMap map;
// 
//     private NingHttpHeaders(FluentCaseInsensitiveStringsMap map) {
//         this.map = map;
//     }
// 
//     public static NingHttpHeadersBuilder builder() {
//         return new NingHttpHeadersBuilder();
//     }
// 
//     @Override
//     public FluentCaseInsensitiveStringsMap getHeaders() {
//         return map;
//     }
// 
//     public static class NingHttpHeadersBuilder {
// 
//         private final Map<String, Collection<String>> map;
// 
//         private NingHttpHeadersBuilder() {
//             map = new HashMap<>();
//         }
// 
//         public NingHttpHeadersBuilder addHeader(String key, String... values) {
//             map.computeIfAbsent(key, __ -> new ArrayList<>())
//                     .addAll(Arrays.asList(values));
//             return this;
//         }
// 
//         public NingHttpHeaders build() {
//             return new NingHttpHeaders(
//                     new FluentCaseInsensitiveStringsMap(map));
//         }
// 
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/util/FunctionT.java
// @FunctionalInterface
// public interface FunctionT<T, R, E extends Throwable> {
// 
//     R apply(T t) throws E;
// 
// }


// Path: src/test/java/uk/ac/ic/wlgitbridge/bridge/resource/UrlResourceCacheTest.java
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;
import static org.mockito.Mockito.when;

package uk.ac.ic.wlgitbridge.bridge.resource;




public class UrlResourceCacheTest {

    private static String PROJ = "proj";

    private static String URL = "http://localhost/file.jpg";

    private static String NEW_PATH = "file1.jpg";

    private final NingHttpClientFacade http = mock(NingHttpClientFacade.class);