summaryrefslogtreecommitdiffstats
path: root/config-proxy/src/test
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2017-11-02 14:46:55 +0100
committerHarald Musum <musum@oath.com>2017-11-02 14:46:55 +0100
commit0ade8429cc03ee3bee7800f6b709374c1be0929c (patch)
tree32277bb9005f7d521993c24b42e071bd9353f44d /config-proxy/src/test
parent648a78cd05b269b74cbb819e8d8ed9c7110e8b50 (diff)
Add file distribution skeleton to config proxy
Diffstat (limited to 'config-proxy/src/test')
-rw-r--r--config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MockConfigSource.java3
-rw-r--r--config-proxy/src/test/java/com/yahoo/vespa/config/proxy/filedistribution/FileDownloaderTest.java79
2 files changed, 81 insertions, 1 deletions
diff --git a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MockConfigSource.java b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MockConfigSource.java
index 52de4d1942a..dc9a3408510 100644
--- a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MockConfigSource.java
+++ b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/MockConfigSource.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.config.proxy;
import com.yahoo.config.subscription.ConfigSource;
+import com.yahoo.config.subscription.ConfigSourceSet;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.RawConfig;
@@ -14,7 +15,7 @@ import java.util.HashMap;
* @author hmusum
* @since 5.1.10
*/
-class MockConfigSource implements ConfigSource {
+class MockConfigSource extends ConfigSourceSet {
private final HashMap<ConfigKey<?>, RawConfig> backing = new HashMap<>();
private final ClientUpdater clientUpdater;
diff --git a/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/filedistribution/FileDownloaderTest.java b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/filedistribution/FileDownloaderTest.java
new file mode 100644
index 00000000000..ea880e451b6
--- /dev/null
+++ b/config-proxy/src/test/java/com/yahoo/vespa/config/proxy/filedistribution/FileDownloaderTest.java
@@ -0,0 +1,79 @@
+package com.yahoo.vespa.config.proxy.filedistribution;
+
+import com.yahoo.config.FileReference;
+import com.yahoo.config.subscription.ConfigSourceSet;
+import com.yahoo.io.IOUtils;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.time.Duration;
+import java.util.*;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class FileDownloaderTest {
+ private static final ConfigSourceSet configSourceSet = new ConfigSourceSet();
+
+ @Test
+ public void download() throws IOException {
+ File downloadDir = Files.createTempDirectory("filedistribution").toFile();
+ FileDownloader fileDownloader = new FileDownloader(configSourceSet, downloadDir.getAbsolutePath(), Duration.ofMillis(200));
+
+ // Write a file to download directory to simulate download going OK
+ String fileReferenceString = "somehash";
+ String fileName = "foo.jar";
+ File fileReferenceFullPath = fileReferenceFullPath(downloadDir, fileReferenceString);
+ FileReference fileReference = writeFileReference(downloadDir, fileReferenceString, fileName);
+
+ // Check that we get correct path and content when asking for file reference
+ Optional<File> pathToFile = fileDownloader.getFile(fileReference);
+ assertTrue(pathToFile.isPresent());
+ String downloadedFile = new File(fileReferenceFullPath, fileName).getAbsolutePath();
+ assertEquals(new File(fileReferenceFullPath, fileName).getAbsolutePath(), downloadedFile);
+ assertEquals("content", IOUtils.readFile(pathToFile.get()));
+
+ // Verify download status
+ Map<FileReference, Double> downloadStatus = fileDownloader.downloadStatus();
+ assertEquals(1, downloadStatus.size());
+ assertDownloadStatus(Collections.singletonList(fileReference), downloadStatus.entrySet().iterator().next(), 100.0);
+
+ // Non-existing file
+ assertFalse(fileReferenceFullPath.getAbsolutePath(), fileDownloader.getFile(new FileReference("doesnotexist")).isPresent());
+ }
+
+ @Test
+ public void setFilesToDownload() throws IOException {
+ File downloadDir = Files.createTempDirectory("filedistribution").toFile();
+ FileDownloader fileDownloader = new FileDownloader(configSourceSet, downloadDir.getAbsolutePath(), Duration.ofMillis(200));
+ List<FileReference> fileReferences = Arrays.asList(new FileReference("foo"), new FileReference("bar"));
+ fileDownloader.queueForDownload(fileReferences);
+
+ assertEquals(fileReferences, fileDownloader.queuedForDownload().asList());
+
+ // Verify download status
+ Map<FileReference, Double> downloadStatus = fileDownloader.downloadStatus();
+ assertEquals(2, downloadStatus.size());
+
+ assertDownloadStatus(fileReferences, downloadStatus.entrySet().iterator().next(), 0.0);
+ assertDownloadStatus(fileReferences, downloadStatus.entrySet().iterator().next(), 0.0);
+ }
+
+ private FileReference writeFileReference(File dir, String fileReferenceString, String fileName) throws IOException {
+ File file = new File(new File(dir, fileReferenceString), fileName);
+ IOUtils.writeFile(file, "content", false);
+ return new FileReference(fileReferenceString);
+ }
+
+ private File fileReferenceFullPath(File dir, String fileReferenceString) {
+ return new File(dir, fileReferenceString);
+ }
+
+ private void assertDownloadStatus(List<FileReference> fileReferences, Map.Entry<FileReference, Double> entry, double expectedDownloadStatus) {
+ assertTrue(fileReferences.contains(new FileReference(entry.getKey().value())));
+ assertEquals(expectedDownloadStatus, entry.getValue(), 0.0001);
+ }
+}