Skip to content

Commit

Permalink
JCLOUDS-457: Long live tests
Browse files Browse the repository at this point in the history
The long live tests have been added. These tests takes several
hours and will leave traces in your AWS account.
  • Loading branch information
Roman Coedo authored and gaul committed Jul 24, 2014
1 parent 244f50e commit 6a8586a
Show file tree
Hide file tree
Showing 3 changed files with 156 additions and 8 deletions.
44 changes: 42 additions & 2 deletions glacier/pom.xml
Expand Up @@ -142,7 +142,7 @@
</build>
</profile>
<profile>
<id>long</id>
<id>livelong</id>
<build>
<plugins>
<plugin>
Expand All @@ -160,7 +160,47 @@
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
<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>
<jclouds.blobstore.httpstream.url>
${jclouds.blobstore.httpstream.url}
Expand Down
Expand Up @@ -70,7 +70,7 @@ public JobMetadata(String action, @Nullable String archiveId, @Nullable Long arc
@Nullable String archiveSHA256TreeHash, boolean completed, @Nullable Date completionDate, Date creationDate,
@Nullable Long inventorySizeInBytes, @Nullable String jobDescription, String jobId,
@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) {
super();
this.action = checkNotNull(action, "action");
Expand All @@ -87,7 +87,7 @@ public JobMetadata(String action, @Nullable String archiveId, @Nullable Long arc
this.sha256TreeHash = sha256TreeHash;
this.snsTopic = snsTopic;
this.statusCode = JobStatus.fromString(checkNotNull(statusCode, "statusCode"));
this.statusMessage = checkNotNull(statusMessage, "statusMessage");
this.statusMessage = statusMessage;
this.vaultArn = checkNotNull(vaultArn, "vaultArn");
this.parameters = parameters;
}
Expand Down
Expand Up @@ -17,22 +17,130 @@
package org.jclouds.glacier;

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.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 com.google.common.collect.ImmutableMap;
import com.google.common.hash.HashCode;
import com.google.common.io.Closer;

/**
* Long live test for Glacier.
*/
@Test(groups = {"live", "livelong"})
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() {
this.provider = "glacier";
}

@Test
public void testApi() throws Exception {
assertThat(api).isNotNull();
@Test(groups = {"live", "livelong", "setup"})
public void testSetVault() throws Exception {
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();
}
}

0 comments on commit 6a8586a

Please sign in to comment.