JCLOUDS-457: Long live tests

The long live tests have been added. These tests takes several
hours and will leave traces in your AWS account.
This commit is contained in:
Roman Coedo 2014-07-12 14:08:06 +02:00 committed by Andrew Gaul
parent cdbb845ae7
commit 1851d684b2
3 changed files with 156 additions and 8 deletions

View File

@ -142,7 +142,7 @@
</build> </build>
</profile> </profile>
<profile> <profile>
<id>long</id> <id>livelong</id>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
@ -160,7 +160,47 @@
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile> <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles> </suiteXmlFiles>
<groups>live</groups> <groups>live</groups>
<excludedGroups>liveshort</excludedGroups> <excludedGroups>liveshort, setup</excludedGroups>
<systemPropertyVariables>
<jclouds.blobstore.httpstream.url>
${jclouds.blobstore.httpstream.url}
</jclouds.blobstore.httpstream.url>
<jclouds.blobstore.httpstream.md5>
${jclouds.blobstore.httpstream.md5}
</jclouds.blobstore.httpstream.md5>
<test.glacier.endpoint>${test.glacier.endpoint}</test.glacier.endpoint>
<test.glacier.api-version>${test.glacier.api-version}</test.glacier.api-version>
<test.glacier.build-version>${test.glacier.build-version}</test.glacier.build-version>
<test.glacier.identity>${test.glacier.identity}</test.glacier.identity>
<test.glacier.credential>${test.glacier.credential}</test.glacier.credential>
</systemPropertyVariables>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>livelongsetup</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>integration</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
<groups>live</groups>
<excludedGroups>liveshort, longtest</excludedGroups>
<systemPropertyVariables> <systemPropertyVariables>
<jclouds.blobstore.httpstream.url> <jclouds.blobstore.httpstream.url>
${jclouds.blobstore.httpstream.url} ${jclouds.blobstore.httpstream.url}

View File

@ -70,7 +70,7 @@ public class JobMetadata {
@Nullable String archiveSHA256TreeHash, boolean completed, @Nullable Date completionDate, Date creationDate, @Nullable String archiveSHA256TreeHash, boolean completed, @Nullable Date completionDate, Date creationDate,
@Nullable Long inventorySizeInBytes, @Nullable String jobDescription, String jobId, @Nullable Long inventorySizeInBytes, @Nullable String jobDescription, String jobId,
@Nullable String retrievalByteRange, @Nullable String sha256TreeHash, @Nullable String snsTopic, @Nullable String retrievalByteRange, @Nullable String sha256TreeHash, @Nullable String snsTopic,
String statusCode, String statusMessage, String vaultArn, String statusCode, @Nullable String statusMessage, String vaultArn,
@Nullable InventoryRetrievalParameters parameters) { @Nullable InventoryRetrievalParameters parameters) {
super(); super();
this.action = checkNotNull(action, "action"); this.action = checkNotNull(action, "action");
@ -87,7 +87,7 @@ public class JobMetadata {
this.sha256TreeHash = sha256TreeHash; this.sha256TreeHash = sha256TreeHash;
this.snsTopic = snsTopic; this.snsTopic = snsTopic;
this.statusCode = JobStatus.fromString(checkNotNull(statusCode, "statusCode")); this.statusCode = JobStatus.fromString(checkNotNull(statusCode, "statusCode"));
this.statusMessage = checkNotNull(statusMessage, "statusMessage"); this.statusMessage = statusMessage;
this.vaultArn = checkNotNull(vaultArn, "vaultArn"); this.vaultArn = checkNotNull(vaultArn, "vaultArn");
this.parameters = parameters; this.parameters = parameters;
} }

View File

@ -17,22 +17,130 @@
package org.jclouds.glacier; package org.jclouds.glacier;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.jclouds.glacier.util.TestUtils.MiB;
import static org.jclouds.glacier.util.TestUtils.buildData;
import static org.jclouds.glacier.util.TestUtils.buildPayload;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.TimeUnit;
import org.jclouds.apis.BaseApiLiveTest; import org.jclouds.apis.BaseApiLiveTest;
import org.jclouds.glacier.domain.ArchiveRetrievalJobRequest;
import org.jclouds.glacier.domain.InventoryRetrievalJobRequest;
import org.jclouds.glacier.domain.JobMetadata;
import org.jclouds.glacier.domain.JobStatus;
import org.jclouds.glacier.domain.VaultMetadata;
import org.jclouds.glacier.util.ContentRange;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.common.hash.HashCode;
import com.google.common.io.Closer;
/** /**
* Long live test for Glacier. * Long live test for Glacier.
*/ */
@Test(groups = {"live", "livelong"})
public class GlacierClientLongLiveTest extends BaseApiLiveTest<GlacierClient>{ public class GlacierClientLongLiveTest extends BaseApiLiveTest<GlacierClient>{
private static final long PART_SIZE = 1;
private static final long INITIAL_WAIT = TimeUnit.HOURS.toMillis(3);
private static final long TIME_BETWEEN_POLLS = TimeUnit.MINUTES.toMillis(15);
private static final String VAULT_NAME = "JCLOUDS_LIVE_TESTS";
private static final String ARCHIVE_DESCRIPTION = "test archive";
private String archiveId = null;
private String archiveRetrievalJob = null;
private String inventoryRetrievalJob = null;
public GlacierClientLongLiveTest() { public GlacierClientLongLiveTest() {
this.provider = "glacier"; this.provider = "glacier";
} }
@Test @Test(groups = {"live", "livelong", "setup"})
public void testApi() throws Exception { public void testSetVault() throws Exception {
assertThat(api).isNotNull(); api.createVault(VAULT_NAME);
api.uploadArchive(VAULT_NAME, buildPayload(1 * MiB), ARCHIVE_DESCRIPTION);
}
@Test(groups = {"live", "livelong", "longtest"})
public void testUploadArchive() {
String archiveId = api.uploadArchive(VAULT_NAME, buildPayload(1 * MiB));
assertThat(api.deleteArchive(VAULT_NAME, archiveId)).isTrue();
}
@Test(groups = {"live", "livelong", "longtest"})
public void testCompleteMultipartUpload() {
String uploadId = api.initiateMultipartUpload(VAULT_NAME, PART_SIZE);
ImmutableMap.Builder<Integer, HashCode> hashes = ImmutableMap.builder();
hashes.put(0, api.uploadPart(VAULT_NAME, uploadId, ContentRange.fromPartNumber(0, PART_SIZE),
buildPayload(PART_SIZE * MiB)));
hashes.put(1, api.uploadPart(VAULT_NAME, uploadId, ContentRange.fromPartNumber(1, PART_SIZE),
buildPayload(PART_SIZE * MiB)));
archiveId = api.completeMultipartUpload(VAULT_NAME, uploadId, hashes.build(), PART_SIZE * 2 * MiB);
assertThat(archiveId).isNotNull();
}
@Test(groups = {"live", "livelong", "longtest"}, dependsOnMethods = {"testUploadArchive", "testCompleteMultipartUpload"})
public void testInitiateJob() {
ArchiveRetrievalJobRequest archiveRetrieval = ArchiveRetrievalJobRequest.builder().archiveId(archiveId).build();
InventoryRetrievalJobRequest inventoryRetrieval = InventoryRetrievalJobRequest.builder().build();
archiveRetrievalJob = api.initiateJob(VAULT_NAME, archiveRetrieval);
inventoryRetrievalJob = api.initiateJob(VAULT_NAME, inventoryRetrieval);
assertThat(archiveRetrievalJob).isNotNull();
assertThat(inventoryRetrievalJob).isNotNull();
}
@Test(groups = {"live", "livelong", "longtest"}, dependsOnMethods = {"testInitiateJob"})
public void testDescribeJob() {
VaultMetadata vaultMetadata = api.describeVault(VAULT_NAME);
JobMetadata archiveRetrievalMetadata = api.describeJob(VAULT_NAME, archiveRetrievalJob);
assertThat(archiveRetrievalMetadata.getArchiveId()).isEqualTo(archiveId);
assertThat(archiveRetrievalMetadata.getJobId()).isEqualTo(archiveRetrievalJob);
assertThat(archiveRetrievalMetadata.getVaultArn()).isEqualTo(vaultMetadata.getVaultARN());
JobMetadata inventoryRetrievalMetadata = api.describeJob(VAULT_NAME, inventoryRetrievalJob);
assertThat(inventoryRetrievalMetadata.getJobId()).isEqualTo(inventoryRetrievalJob);
assertThat(inventoryRetrievalMetadata.getVaultArn()).isEqualTo(vaultMetadata.getVaultARN());
}
@Test(groups = {"live", "livelong", "longtest"}, dependsOnMethods = {"testInitiateJob"})
public void testListJobs() {
assertThat(api.listJobs(VAULT_NAME)).extracting("jobId").contains(inventoryRetrievalJob, archiveRetrievalJob);
}
@Test(groups = {"live", "livelong", "longtest"}, dependsOnMethods = {"testInitiateJob", "testDescribeJob", "testListJobs"})
public void testWaitForSucceed() throws InterruptedException {
Thread.sleep(INITIAL_WAIT);
while (api.describeJob(VAULT_NAME, archiveRetrievalJob).getStatusCode() == JobStatus.IN_PROGRESS ||
api.describeJob(VAULT_NAME, inventoryRetrievalJob).getStatusCode() == JobStatus.IN_PROGRESS) {
Thread.sleep(TIME_BETWEEN_POLLS);
}
assertThat(api.describeJob(VAULT_NAME, archiveRetrievalJob).getStatusCode()).isEqualTo(JobStatus.SUCCEEDED);
assertThat(api.describeJob(VAULT_NAME, inventoryRetrievalJob).getStatusCode()).isEqualTo(JobStatus.SUCCEEDED);
}
@Test(groups = {"live", "livelong", "longtest"}, dependsOnMethods = {"testWaitForSucceed"})
public void testGetJobOutput() throws IOException {
Closer closer = Closer.create();
try {
InputStream inputStream = closer.register(api.getJobOutput(VAULT_NAME, archiveRetrievalJob).openStream());
InputStream expectedInputStream = closer.register(buildData(PART_SIZE * 2 * MiB).openStream());
assertThat(inputStream).hasContentEqualTo(expectedInputStream);
} finally {
closer.close();
}
}
@Test(groups = {"live", "livelong", "longtest"}, dependsOnMethods = {"testWaitForSucceed"})
public void testGetInventoryRetrievalOutput() throws InterruptedException {
assertThat(api.getInventoryRetrievalOutput(VAULT_NAME, inventoryRetrievalJob))
.extracting("description").contains(ARCHIVE_DESCRIPTION);
}
@Test(groups = {"live", "livelong", "longtest"}, dependsOnMethods = {"testGetJobOutput"})
public void testDeleteArchive() throws Exception {
assertThat(api.deleteArchive(VAULT_NAME, archiveId)).isTrue();
} }
} }