package io.airlift.airship.coordinator; import com.google.common.collect.ImmutableList; import com.google.common.io.Files; import java.io.File; import java.io.FileOutputStream; import java.net.URI; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import static com.google.common.base.Charsets.UTF_8; import static io.airlift.airship.shared.ArchiveHelper.createArchive; import static io.airlift.airship.shared.FileUtils.createTempDir; import static io.airlift.airship.shared.FileUtils.deleteRecursively; import static io.airlift.airship.shared.FileUtils.newFile; public class TestingHttpRepository extends HttpRepository { private static final String VERSION_PATTERN = "([0-9][0-9.]*[0-9](?:-SNAPSHOT)?)[^\\/]*$"; private final File targetRepo; public TestingHttpRepository() throws Exception { this(createRepoDir()); } public TestingHttpRepository(File targetRepo) { super(ImmutableList.<URI>of(targetRepo.toURI()), "^(.*)-[0-9][0-9.]*[0-9](?:-SNAPSHOT)?[^\\/]*$", VERSION_PATTERN, VERSION_PATTERN); this.targetRepo = targetRepo; } public File getTargetRepo() { return targetRepo; } public void destroy() { deleteRecursively(targetRepo); } public static File createRepoDir() throws Exception { File targetRepo = null; try { targetRepo = createTempDir("repo"); // tar up the archive and add them to the repository File appleArchiveV1 = new File(targetRepo, "apple-1.0.tar.gz"); File appleArchiveV2 = new File(targetRepo, "apple-2.0.tar.gz"); File bananaArchive = new File(targetRepo, "banana-2.0-SNAPSHOT.tar.gz"); createArchive(appleArchiveV1); appleArchiveV2.getParentFile().mkdirs(); Files.copy(appleArchiveV1, appleArchiveV2); bananaArchive.getParentFile().mkdirs(); Files.copy(appleArchiveV1, bananaArchive); // add prod configurations createConfig(targetRepo, "apple", "1.0"); createConfig(targetRepo, "apple", "2.0"); createConfig(targetRepo, "banana", "2.0-SNAPSHOT"); return targetRepo; } catch (Exception e) { if (targetRepo != null) { deleteRecursively(targetRepo); } throw e; } } public static void createConfig(File dir, String artifactId, String version) throws Exception { File configFile = newFile(dir, artifactId + "-" + version + ".config"); configFile.getParentFile().mkdirs(); ZipOutputStream out = new ZipOutputStream(new FileOutputStream(configFile)); // text file out.putNextEntry(new ZipEntry(artifactId + ".txt")); out.write(artifactId.getBytes(UTF_8)); // config.properties out.putNextEntry(new ZipEntry("config.properties")); String properties = "http-server.http.port=0\n" + "config=" + artifactId; out.write(properties.getBytes(UTF_8)); // jvm.config out.putNextEntry(new ZipEntry("jvm.config")); // config.properties String resources; if ("apple".equals(artifactId)) { resources = "memory=512\n" + "cpu=1"; } else { resources = "memory=1024\n" + "cpu=2"; } out.putNextEntry(new ZipEntry("airship-resources.properties")); out.write(resources.getBytes(UTF_8)); out.close(); } }