Stop casting to HTTPSUrlConnection in MavenArtifactFetcher
The REPOSITORY_URL may be overrided with an HTTP (or other) URL. Also, switch
tests to use file URLs to add test coverage to FetchToFileTask.
diff --git a/plugins/maven-dependency-resolver/src/main/java/org/robolectric/internal/dependency/MavenArtifactFetcher.java b/plugins/maven-dependency-resolver/src/main/java/org/robolectric/internal/dependency/MavenArtifactFetcher.java
index fcc3045..5bf6bfb 100644
--- a/plugins/maven-dependency-resolver/src/main/java/org/robolectric/internal/dependency/MavenArtifactFetcher.java
+++ b/plugins/maven-dependency-resolver/src/main/java/org/robolectric/internal/dependency/MavenArtifactFetcher.java
@@ -18,10 +18,10 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.net.URLConnection;
import java.util.Base64;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
-import javax.net.ssl.HttpsURLConnection;
import org.robolectric.util.Logger;
/**
@@ -159,7 +159,7 @@
Files.move(source, destination);
}
- private static class FetchToFileTask implements AsyncCallable<Void> {
+ static class FetchToFileTask implements AsyncCallable<Void> {
private final URL remoteURL;
private final File localFile;
@@ -176,7 +176,7 @@
@Override
public ListenableFuture<Void> call() throws Exception {
- HttpsURLConnection connection = (HttpsURLConnection) remoteURL.openConnection();
+ URLConnection connection = remoteURL.openConnection();
// Add authorization header if applicable.
if (!Strings.isNullOrEmpty(this.repositoryUserName)) {
String encoded =
diff --git a/plugins/maven-dependency-resolver/src/test/java/org/robolectric/internal/dependency/MavenDependencyResolverTest.java b/plugins/maven-dependency-resolver/src/test/java/org/robolectric/internal/dependency/MavenDependencyResolverTest.java
index 6baf738..5fb0d57 100755
--- a/plugins/maven-dependency-resolver/src/test/java/org/robolectric/internal/dependency/MavenDependencyResolverTest.java
+++ b/plugins/maven-dependency-resolver/src/test/java/org/robolectric/internal/dependency/MavenDependencyResolverTest.java
@@ -13,8 +13,6 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
import java.util.concurrent.ExecutorService;
import org.junit.Before;
import org.junit.Test;
@@ -24,7 +22,8 @@
@RunWith(JUnit4.class)
@SuppressWarnings("UnstableApiUsage")
public class MavenDependencyResolverTest {
- private static final String REPOSITORY_URL = "https://default-repo/";
+ private static final File REPOSITORY_DIR;
+ private static final String REPOSITORY_URL;
private static final String REPOSITORY_USERNAME = "username";
private static final String REPOSITORY_PASSWORD = "password";
private static final HashFunction SHA1 = Hashing.sha1();
@@ -36,11 +35,17 @@
new DependencyJar("org.robolectric", "android-all", "10-robolectric-5803371"),
};
- private static Map<URL, String> urlContents = new HashMap<>();
-
static {
- for (DependencyJar dependencyJar : successCases) {
- addTestArtifact(dependencyJar);
+ try {
+ REPOSITORY_DIR = Files.createTempDir();
+ REPOSITORY_DIR.deleteOnExit();
+ REPOSITORY_URL = REPOSITORY_DIR.toURI().toURL().toString();
+
+ for (DependencyJar dependencyJar : successCases) {
+ addTestArtifact(dependencyJar);
+ }
+ } catch (Exception e) {
+ throw new AssertionError(e);
}
}
@@ -196,13 +201,12 @@
@Override
protected ListenableFuture<Void> createFetchToFileTask(URL remoteUrl, File tempFile) {
return Futures.submitAsync(
- () -> {
- numRequests += 1;
- if (!urlContents.containsKey(remoteUrl)) {
- throw new IOException("Resource not found " + remoteUrl);
+ new FetchToFileTask(remoteUrl, tempFile, null, null) {
+ @Override
+ public ListenableFuture<Void> call() throws Exception {
+ numRequests += 1;
+ return super.call();
}
- Files.write(urlContents.get(remoteUrl).getBytes(), tempFile);
- return Futures.immediateFuture(null);
},
executorService);
}
@@ -212,32 +216,37 @@
}
}
- static void addTestArtifact(DependencyJar dependencyJar) {
+ static void addTestArtifact(DependencyJar dependencyJar) throws IOException {
MavenJarArtifact mavenJarArtifact = new MavenJarArtifact(dependencyJar);
try {
+ Files.createParentDirs(new File(REPOSITORY_DIR, mavenJarArtifact.jarPath()));
String jarContents = mavenJarArtifact.toString() + " jar contents";
- urlContents.put(new URL(REPOSITORY_URL + mavenJarArtifact.jarPath()), jarContents);
- urlContents.put(new URL(REPOSITORY_URL + mavenJarArtifact.jarSha1Path()), sha1(jarContents));
+ Files.write(jarContents.getBytes(), new File(REPOSITORY_DIR, mavenJarArtifact.jarPath()));
+ Files.write(
+ sha1(jarContents).getBytes(), new File(REPOSITORY_DIR, mavenJarArtifact.jarSha1Path()));
String pomContents = mavenJarArtifact.toString() + " pom contents";
- urlContents.put(new URL(REPOSITORY_URL + mavenJarArtifact.pomPath()), pomContents);
- urlContents.put(new URL(REPOSITORY_URL + mavenJarArtifact.pomSha1Path()), sha1(pomContents));
+ Files.write(pomContents.getBytes(), new File(REPOSITORY_DIR, mavenJarArtifact.pomPath()));
+ Files.write(
+ sha1(pomContents).getBytes(), new File(REPOSITORY_DIR, mavenJarArtifact.pomSha1Path()));
} catch (MalformedURLException e) {
throw new AssertionError(e);
}
}
- static void addTestArtifactInvalidSha1(DependencyJar dependencyJar) {
+ static void addTestArtifactInvalidSha1(DependencyJar dependencyJar) throws IOException {
MavenJarArtifact mavenJarArtifact = new MavenJarArtifact(dependencyJar);
try {
+ Files.createParentDirs(new File(REPOSITORY_DIR, mavenJarArtifact.jarPath()));
String jarContents = mavenJarArtifact.toString() + " jar contents";
- urlContents.put(new URL(REPOSITORY_URL + mavenJarArtifact.jarPath()), jarContents);
- urlContents.put(
- new URL(REPOSITORY_URL + mavenJarArtifact.jarSha1Path()), sha1("No the same content"));
+ Files.write(jarContents.getBytes(), new File(REPOSITORY_DIR, mavenJarArtifact.jarPath()));
+ Files.write(
+ sha1("No the same content").getBytes(),
+ new File(REPOSITORY_DIR, mavenJarArtifact.jarSha1Path()));
String pomContents = mavenJarArtifact.toString() + " pom contents";
- urlContents.put(new URL(REPOSITORY_URL + mavenJarArtifact.pomPath()), pomContents);
- urlContents.put(
- new URL(REPOSITORY_URL + mavenJarArtifact.pomSha1Path()),
- sha1("Really not the same content"));
+ Files.write(pomContents.getBytes(), new File(REPOSITORY_DIR, mavenJarArtifact.pomPath()));
+ Files.write(
+ sha1("Really not the same content").getBytes(),
+ new File(REPOSITORY_DIR, mavenJarArtifact.pomSha1Path()));
} catch (MalformedURLException e) {
throw new AssertionError(e);
}