From 0ade8429cc03ee3bee7800f6b709374c1be0929c Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Thu, 2 Nov 2017 14:46:55 +0100 Subject: Add file distribution skeleton to config proxy --- .../yahoo/vespa/config/proxy/MockConfigSource.java | 3 +- .../proxy/filedistribution/FileDownloaderTest.java | 79 ++++++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 config-proxy/src/test/java/com/yahoo/vespa/config/proxy/filedistribution/FileDownloaderTest.java (limited to 'config-proxy/src/test') 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, 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 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 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 fileReferences = Arrays.asList(new FileReference("foo"), new FileReference("bar")); + fileDownloader.queueForDownload(fileReferences); + + assertEquals(fileReferences, fileDownloader.queuedForDownload().asList()); + + // Verify download status + Map 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 fileReferences, Map.Entry entry, double expectedDownloadStatus) { + assertTrue(fileReferences.contains(new FileReference(entry.getKey().value()))); + assertEquals(expectedDownloadStatus, entry.getValue(), 0.0001); + } +} -- cgit v1.2.3