From fd7c0e0c5bf73c06c682ff29cbcec6b7fb5f6fcf Mon Sep 17 00:00:00 2001 From: Aristide Niyungeko <2230766+aristide-n@users.noreply.github.com> Date: Sat, 7 Aug 2021 18:51:37 -0700 Subject: [PATCH 1/2] feat: support downloading an emulator from an access controlled URL fixes googleapis/java-datastore#376 used in googleapis/java-datastore#492 --- .../google/cloud/testing/BaseEmulatorHelper.java | 14 +++++++++++++- .../cloud/testing/BaseEmulatorHelperTest.java | 4 +++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/google-cloud-core/src/main/java/com/google/cloud/testing/BaseEmulatorHelper.java b/google-cloud-core/src/main/java/com/google/cloud/testing/BaseEmulatorHelper.java index 9a0898960a..62437e2669 100644 --- a/google-cloud-core/src/main/java/com/google/cloud/testing/BaseEmulatorHelper.java +++ b/google-cloud-core/src/main/java/com/google/cloud/testing/BaseEmulatorHelper.java @@ -38,6 +38,7 @@ import java.net.HttpURLConnection; import java.net.ServerSocket; import java.net.URL; +import java.net.URLConnection; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; import java.nio.file.Files; @@ -316,6 +317,7 @@ protected static class DownloadableEmulatorRunner implements EmulatorRunner { private final String md5CheckSum; private final URL downloadUrl; private final String fileName; + private String accessToken; private Process process; private static final Logger log = Logger.getLogger(DownloadableEmulatorRunner.class.getName()); @@ -328,6 +330,12 @@ public DownloadableEmulatorRunner( this.fileName = splitUrl[splitUrl.length - 1]; } + public DownloadableEmulatorRunner( + List commandText, URL downloadUrl, String md5CheckSum, String accessToken) { + this(commandText, downloadUrl, md5CheckSum); + this.accessToken = accessToken; + } + @Override public boolean isAvailable() { try { @@ -420,7 +428,11 @@ private File downloadZipFile() throws IOException { if (log.isLoggable(Level.FINE)) { log.fine("Fetching emulator"); } - ReadableByteChannel rbc = Channels.newChannel(downloadUrl.openStream()); + URLConnection urlConnection = downloadUrl.openConnection(); + if (accessToken != null) { + urlConnection.setRequestProperty("Authorization", "Bearer " + accessToken); + } + ReadableByteChannel rbc = Channels.newChannel(urlConnection.getInputStream()); try (FileOutputStream fos = new FileOutputStream(zipFile)) { fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); } diff --git a/google-cloud-core/src/test/java/com/google/cloud/testing/BaseEmulatorHelperTest.java b/google-cloud-core/src/test/java/com/google/cloud/testing/BaseEmulatorHelperTest.java index 3a799e2044..b002a6198b 100644 --- a/google-cloud-core/src/test/java/com/google/cloud/testing/BaseEmulatorHelperTest.java +++ b/google-cloud-core/src/test/java/com/google/cloud/testing/BaseEmulatorHelperTest.java @@ -108,6 +108,7 @@ public void testEmulatorHelperDownloadWithRetries() String mockInputStream = "mockInputStream"; String mockProtocol = "mockProtocol"; String mockFile = "mockFile"; + String mockAccessToken = "mockAccessToken"; String mockCommandText = "mockCommandText"; MockURLStreamHandler mockURLStreamHandler = EasyMock.createMock(MockURLStreamHandler.class); @@ -119,6 +120,7 @@ public void testEmulatorHelperDownloadWithRetries() EasyMock.expect(mockURLConnection.getInputStream()) .andReturn(new ByteArrayInputStream(mockInputStream.getBytes())) .anyTimes(); + mockURLConnection.setRequestProperty("Authorization", "Bearer " + mockAccessToken); EasyMock.expect(mockURLStreamHandler.openConnection(EasyMock.anyObject(URL.class))) .andThrow(new EOFException()) .times(1); @@ -130,7 +132,7 @@ public void testEmulatorHelperDownloadWithRetries() URL url = new URL(mockProtocol, null, 0, mockFile, mockURLStreamHandler); BaseEmulatorHelper.DownloadableEmulatorRunner runner = new BaseEmulatorHelper.DownloadableEmulatorRunner( - ImmutableList.of(mockCommandText), url, null); + ImmutableList.of(mockCommandText), url, null, mockAccessToken); File cachedFile = new File(System.getProperty("java.io.tmpdir"), mockExternalForm); cachedFile.delete(); // Clear the cached version so we're always testing the download From 14b0cf3893fe6df2f3504cd4ce38ada9190aa3c5 Mon Sep 17 00:00:00 2001 From: Aristide Niyungeko <2230766+aristide-n@users.noreply.github.com> Date: Sun, 8 Aug 2021 19:19:11 -0700 Subject: [PATCH 2/2] publish local google-cloud-core version --- google-cloud-core/deploy-command.txt | 9 +++++++++ google-cloud-core/pom.xml | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 google-cloud-core/deploy-command.txt diff --git a/google-cloud-core/deploy-command.txt b/google-cloud-core/deploy-command.txt new file mode 100644 index 0000000000..aa1cef6aa9 --- /dev/null +++ b/google-cloud-core/deploy-command.txt @@ -0,0 +1,9 @@ + mvn deploy:deploy-file \ + -Durl=file:///google-cloud-datastore/repo/ \ + -Dfile=target/google-cloud-core-2.0.3-SNAPSHOT-LOCAL.jar \ + -DgroupId=com.google.cloud \ + -DartifactId=google-cloud-core \ + -Dpackaging=jar \ + -Dversion=2.0.3-SNAPSHOT-LOCAL + +(from https://sookocheff.com/post/java/local-maven-repository/) \ No newline at end of file diff --git a/google-cloud-core/pom.xml b/google-cloud-core/pom.xml index 2aa8347fa3..7c01856254 100644 --- a/google-cloud-core/pom.xml +++ b/google-cloud-core/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-core - 2.0.3-SNAPSHOT + 2.0.3-SNAPSHOT-LOCAL jar Google Cloud Core https://github.com/googleapis/java-core