/** * Enqueue download of file with valid MD5 */ private void enqueueDownload(FileAndMd5 file) throws IOException { enqueueDownload(file.file, file.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_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); }
@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_md5_header_is_missing_from_response() throws IOException { File tempJar = temp.newFile(); enqueueDownload(tempJar, null); InstalledPlugin plugin = newInstalledPlugin("foo", "abc"); expectISE("foo", "did not return header Sonar-MD5"); underTest.get(plugin); }
@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); }