private FileAndMd5 moveToCache(String pluginKey, FileAndMd5 jar) throws IOException { File jarInCache = new File(userHome, "cache/" + jar.md5 + "/sonar-" + pluginKey + "-plugin.jar"); moveFile(jar.file, jarInCache); return new FileAndMd5(jarInCache, jar.md5); }
@Test public void download_and_add_jar_to_cache_if_missing() throws Exception { FileAndMd5 tempJar = new FileAndMd5(); enqueueDownload(tempJar); InstalledPlugin plugin = newInstalledPlugin("foo", tempJar.md5); File result = underTest.get(plugin).get(); verifySameContent(result, tempJar); HttpUrl requestedUrl = server.takeRequest().getRequestUrl(); assertThat(requestedUrl.encodedPath()).isEqualTo("/api/plugins/download"); assertThat(requestedUrl.encodedQuery()).isEqualTo("plugin=foo&acceptCompressions=pack200"); // get from cache on second call result = underTest.get(plugin).get(); verifySameContent(result, tempJar); assertThat(server.getRequestCount()).isEqualTo(1); }
@Test public void download_compressed_and_add_uncompressed_to_cache_if_missing() throws Exception { FileAndMd5 jar = new FileAndMd5(); enqueueCompressedDownload(jar, true); InstalledPlugin plugin = newInstalledPlugin("foo", jar.md5); File result = underTest.get(plugin).get(); verifySameContentAfterCompression(jar.file, result); RecordedRequest recordedRequest = server.takeRequest(); assertThat(recordedRequest.getRequestUrl().queryParameter("acceptCompressions")).isEqualTo("pack200"); // get from cache on second call result = underTest.get(plugin).get(); verifySameContentAfterCompression(jar.file, result); assertThat(server.getRequestCount()).isEqualTo(1); }
@Test public void download_a_new_version_of_plugin_during_blue_green_switch() throws IOException { FileAndMd5 tempJar = new FileAndMd5(); enqueueDownload(tempJar); // expecting to download plugin foo with checksum "abc" InstalledPlugin pluginV1 = newInstalledPlugin("foo", "abc"); File result = underTest.get(pluginV1).get(); verifySameContent(result, tempJar); // new version of downloaded jar is put in cache with the new md5 InstalledPlugin pluginV2 = newInstalledPlugin("foo", tempJar.md5); result = underTest.get(pluginV2).get(); verifySameContent(result, tempJar); assertThat(server.getRequestCount()).isEqualTo(1); // v1 still requests server and downloads v2 enqueueDownload(tempJar); result = underTest.get(pluginV1).get(); verifySameContent(result, tempJar); assertThat(server.getRequestCount()).isEqualTo(2); }
private FileAndMd5 createFileInCache(String pluginKey) throws IOException { FileAndMd5 tempFile = new FileAndMd5(); return moveToCache(pluginKey, tempFile); }
@Test public void fail_if_integrity_of_download_is_not_valid() throws IOException { FileAndMd5 tempJar = new FileAndMd5(); enqueueDownload(tempJar.file, "invalid_hash"); InstalledPlugin plugin = newInstalledPlugin("foo", "abc"); expectISE("foo", "was expected to have checksum invalid_hash but had " + tempJar.md5); underTest.get(plugin); }
@Test public void fail_if_integrity_of_compressed_download_is_not_valid() throws Exception { FileAndMd5 jar = new FileAndMd5(); enqueueCompressedDownload(jar, false); expectISE("foo", "was expected to have checksum invalid_hash but had "); InstalledPlugin plugin = newInstalledPlugin("foo", jar.md5); underTest.get(plugin).get(); }
@Test public void fail_if_cached_file_is_outside_cache_dir() throws IOException { FileAndMd5 tempJar = new FileAndMd5(); enqueueDownload(tempJar); InstalledPlugin plugin = newInstalledPlugin("foo/bar", "abc"); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Fail to download plugin [foo/bar]. Key is not valid."); underTest.get(plugin); }