Skip to content

Commit

Permalink
Merge pull request #16 from jcookems/test467
Browse files Browse the repository at this point in the history
Update Job tests for #467
  • Loading branch information
jcookems committed Dec 12, 2012
2 parents dc5f270 + e00f3f8 commit 009c74d
Show file tree
Hide file tree
Showing 2 changed files with 141 additions and 82 deletions.
Expand Up @@ -21,6 +21,8 @@
import com.microsoft.windowsazure.services.media.models.AssetInfo; import com.microsoft.windowsazure.services.media.models.AssetInfo;
import com.microsoft.windowsazure.services.media.models.ContentKey; import com.microsoft.windowsazure.services.media.models.ContentKey;
import com.microsoft.windowsazure.services.media.models.ContentKeyInfo; import com.microsoft.windowsazure.services.media.models.ContentKeyInfo;
import com.microsoft.windowsazure.services.media.models.Job;
import com.microsoft.windowsazure.services.media.models.JobInfo;
import com.microsoft.windowsazure.services.media.models.ListResult; import com.microsoft.windowsazure.services.media.models.ListResult;
import com.microsoft.windowsazure.services.media.models.Locator; import com.microsoft.windowsazure.services.media.models.Locator;
import com.microsoft.windowsazure.services.media.models.LocatorInfo; import com.microsoft.windowsazure.services.media.models.LocatorInfo;
Expand All @@ -33,6 +35,7 @@ public abstract class IntegrationTestBase {
protected static final String testAssetPrefix = "testAsset"; protected static final String testAssetPrefix = "testAsset";
protected static final String testPolicyPrefix = "testPolicy"; protected static final String testPolicyPrefix = "testPolicy";
protected static final String testContentKeyPrefix = "testContentKey"; protected static final String testContentKeyPrefix = "testContentKey";
protected static final String testJobPrefix = "testJobPrefix";


protected static final String validButNonexistAssetId = "nb:cid:UUID:0239f11f-2d36-4e5f-aa35-44d58ccc0973"; protected static final String validButNonexistAssetId = "nb:cid:UUID:0239f11f-2d36-4e5f-aa35-44d58ccc0973";
protected static final String validButNonexistAccessPolicyId = "nb:pid:UUID:38dcb3a0-ef64-4ad0-bbb5-67a14c6df2f7"; protected static final String validButNonexistAccessPolicyId = "nb:pid:UUID:38dcb3a0-ef64-4ad0-bbb5-67a14c6df2f7";
Expand All @@ -52,7 +55,6 @@ public static void setup() throws Exception {
overrideWithEnv(config, MediaConfiguration.OAUTH_CLIENT_SECRET); overrideWithEnv(config, MediaConfiguration.OAUTH_CLIENT_SECRET);
overrideWithEnv(config, MediaConfiguration.OAUTH_SCOPE); overrideWithEnv(config, MediaConfiguration.OAUTH_SCOPE);


// TODO: Replace with call to MediaService.create once that's updated
service = MediaService.create(config); service = MediaService.create(config);


cleanupEnvironment(); cleanupEnvironment();
Expand All @@ -79,6 +81,7 @@ private static void cleanupEnvironment() {
removeAllTestAssets(); removeAllTestAssets();
removeAllTestAccessPolicies(); removeAllTestAccessPolicies();
removeAllTestContentKeys(); removeAllTestContentKeys();
removeAllTestJobs();
} }


private static void removeAllTestContentKeys() { private static void removeAllTestContentKeys() {
Expand Down Expand Up @@ -138,6 +141,20 @@ private static void removeAllTestLocators() {
} }
} }


private static void removeAllTestJobs() {
try {
ListResult<JobInfo> jobs = service.list(Job.list());
for (JobInfo job : jobs) {
if (job.getName().startsWith(testAssetPrefix)) {
service.delete(Job.delete(job.getId()));
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}

interface ComponentDelegate { interface ComponentDelegate {
void verifyEquals(String message, Object expected, Object actual); void verifyEquals(String message, Object expected, Object actual);
} }
Expand Down
Expand Up @@ -21,15 +21,17 @@
import java.io.InputStream; import java.io.InputStream;
import java.net.URI; import java.net.URI;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.List; import java.util.List;
import java.util.UUID;


import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.MultivaluedMap;


import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;


import com.microsoft.windowsazure.services.core.ServiceException; import com.microsoft.windowsazure.services.core.ServiceException;
import com.microsoft.windowsazure.services.media.implementation.content.JobType;
import com.microsoft.windowsazure.services.media.models.AccessPolicy; import com.microsoft.windowsazure.services.media.models.AccessPolicy;
import com.microsoft.windowsazure.services.media.models.AccessPolicyInfo; import com.microsoft.windowsazure.services.media.models.AccessPolicyInfo;
import com.microsoft.windowsazure.services.media.models.AccessPolicyPermission; import com.microsoft.windowsazure.services.media.models.AccessPolicyPermission;
Expand All @@ -42,124 +44,166 @@
import com.microsoft.windowsazure.services.media.models.ListResult; import com.microsoft.windowsazure.services.media.models.ListResult;
import com.microsoft.windowsazure.services.media.models.LocatorInfo; import com.microsoft.windowsazure.services.media.models.LocatorInfo;
import com.microsoft.windowsazure.services.media.models.Task; import com.microsoft.windowsazure.services.media.models.Task;
import com.microsoft.windowsazure.services.media.models.Task.CreateBatchOperation;
import com.sun.jersey.core.util.MultivaluedMapImpl; import com.sun.jersey.core.util.MultivaluedMapImpl;


public class JobIntegrationTest extends IntegrationTestBase { public class JobIntegrationTest extends IntegrationTestBase {


private final String testJobPrefix = "testJobPrefix"; private static AssetInfo assetInfo;
private final byte[] testBlobData = new byte[] { 0, 1, 2 }; private static final byte[] testBlobData = new byte[] { 4, 8, 15, 16, 23, 42 };
private final String taskBody = "<?xml version=\"1.0\" encoding=\"utf-8\"?><taskBody>"
+ "<inputAsset>JobInputAsset(0)</inputAsset><outputAsset>JobOutputAsset(0)</outputAsset>" + "</taskBody>";


private void verifyJobInfoEqual(String message, JobInfo expected, JobInfo actual) { private void verifyJobInfoEqual(String message, JobInfo expected, JobInfo actual) {
verifyJobProperties(message, expected.getName(), expected.getPriority(), expected.getRunningDuration(), verifyJobProperties(message, expected.getName(), expected.getPriority(), expected.getRunningDuration(),
expected.getState(), expected.getTemplateId(), expected.getInputMediaAssets(), expected.getState(), expected.getTemplateId(), expected.getCreated(), expected.getLastModified(),
expected.getStartTime(), expected.getEndTime(), expected.getInputMediaAssets(),
expected.getOutputMediaAssets(), actual); expected.getOutputMediaAssets(), actual);
} }


private AccessPolicyInfo createWritableAccessPolicy(String name, int durationInMinutes) throws ServiceException {
return service.create(AccessPolicy.create(testPolicyPrefix + name, durationInMinutes,
EnumSet.of(AccessPolicyPermission.WRITE)));
}

private void createAndUploadBlob(WritableBlobContainerContract blobWriter, String blobName, byte[] blobData)
throws ServiceException {
InputStream blobContent = new ByteArrayInputStream(blobData);
blobWriter.createBlockBlob(blobName, blobContent);
}

private String createFileAsset(String name) throws ServiceException {
String testBlobName = "test" + name + ".bin";
AssetInfo assetInfo = service.create(Asset.create().setName(name));
AccessPolicyInfo accessPolicyInfo = createWritableAccessPolicy(name, 10);
LocatorInfo locator = createLocator(accessPolicyInfo, assetInfo, 5, 10);
WritableBlobContainerContract blobWriter = service.createBlobWriter(locator);
createAndUploadBlob(blobWriter, testBlobName, testBlobData);

service.create(AssetFile.create(assetInfo.getId(), testBlobName).setIsPrimary(true).setIsEncrypted(false)
.setContentFileSize(new Long(testBlobData.length)));

service.action(AssetFile.createFileInfos(assetInfo.getId()));
return assetInfo.getId();
}

private void verifyJobProperties(String message, String testName, Integer priority, Double runningDuration, private void verifyJobProperties(String message, String testName, Integer priority, Double runningDuration,
JobState state, String templateId, List<String> inputMediaAssets, List<String> outputMediaAssets, JobState state, String templateId, Date created, Date lastModified, Date startTime, Date endTime,
JobInfo actualJob) { List<String> inputMediaAssets, List<String> outputMediaAssets, JobInfo actualJob) {
assertNotNull(message, actualJob); assertNotNull(message, actualJob);

assertNotNull(message + "Id", actualJob.getId());

assertEquals(message + " Name", testName, actualJob.getName()); assertEquals(message + " Name", testName, actualJob.getName());
// comment out due to issue 464 // comment out due to issue 464
// assertEquals(message + " Priority", priority, actualJob.getPriority()); // assertEquals(message + " Priority", priority, actualJob.getPriority());
assertEquals(message + " RunningDuration", runningDuration, actualJob.getRunningDuration()); assertEquals(message + " RunningDuration", runningDuration, actualJob.getRunningDuration());
assertEquals(message + " State", state, actualJob.getState()); assertEquals(message + " State", state, actualJob.getState());
// commented out due to issue 463 assertEqualsNullEmpty(message + " TemplateId", templateId, actualJob.getTemplateId());
// assertEquals(message + " TemplateId", templateId, actualJob.getTemplateId());
assertDateApproxEquals(message + " Created", created, actualJob.getCreated());
assertDateApproxEquals(message + " LastModified", lastModified, actualJob.getLastModified());
assertDateApproxEquals(message + " StartTime", startTime, actualJob.getStartTime());
assertDateApproxEquals(message + " EndTime", endTime, actualJob.getEndTime());

// TODO: Add test for accessing the input and output media assets when fixed:
// https://github.com/WindowsAzure/azure-sdk-for-java-pr/issues/508
assertEquals(message + " InputMediaAssets", inputMediaAssets, actualJob.getInputMediaAssets()); assertEquals(message + " InputMediaAssets", inputMediaAssets, actualJob.getInputMediaAssets());
assertEquals(message + " OutputMediaAssets", outputMediaAssets, actualJob.getOutputMediaAssets()); assertEquals(message + " OutputMediaAssets", outputMediaAssets, actualJob.getOutputMediaAssets());

// TODO: Add test for accessing the tasks when fixed:
// https://github.com/WindowsAzure/azure-sdk-for-java-pr/issues/531
}

private void assertEqualsNullEmpty(String message, String expected, String actual) {
if ((expected == null || expected.length() == 0) && (actual == null || actual.length() == 0)) {
// both nullOrEmpty, so match.
}
else {
assertEquals(message, expected, actual);
}
} }


private JobInfo createJob(String name) throws ServiceException { private JobInfo createJob(String name) throws ServiceException {
String assetId = createFileAsset(name);
URI serviceUri = service.getRestServiceUri(); URI serviceUri = service.getRestServiceUri();
return service.create(Job return service.create(Job.create(serviceUri).setName(name).setPriority(3).addInputMediaAsset(assetInfo.getId())
.create(serviceUri) .addTaskCreator(getTaskCreator(0)));
.setName("My Encoding Job")
.setPriority(3)
.addInputMediaAsset(assetId)
.addTaskCreator(
Task.create().setConfiguration("H.264 256k DSL CBR")
.setMediaProcessorId("nb:mpid:UUID:2f381738-c504-4e4a-a38e-d199e207fcd5")
.setName("My encoding Task").setTaskBody(taskBody)));
} }


@Test private CreateBatchOperation getTaskCreator(int outputAssetPosition) {
public void createJobSuccess() throws Exception { return Task
// Arrange .create()
AssetInfo assetInfo = service.create(Asset.create()); .setConfiguration("H.264 256k DSL CBR")
.setMediaProcessorId("nb:mpid:UUID:2f381738-c504-4e4a-a38e-d199e207fcd5")
.setName("My encoding Task")
.setTaskBody(
"<taskBody>" + "<inputAsset>JobInputAsset(0)</inputAsset>" + "<outputAsset>JobOutputAsset("
+ outputAssetPosition + ")</outputAsset>" + "</taskBody>");
}

@BeforeClass
public static void setup() throws Exception {
IntegrationTestBase.setup();


JobInfo expectedJob = new JobInfo(null, new JobType().setName("My Encoding Job").setPriority(3) String name = UUID.randomUUID().toString();
.setRunningDuration(0.0).setState(JobState.Queued.getCode())); String testBlobName = "test" + name + ".bin";
assetInfo = service.create(Asset.create().setName(testAssetPrefix + name));


AccessPolicyInfo accessPolicyInfo = createWritableAccessPolicy("createJobSuccess", 10); AccessPolicyInfo accessPolicyInfo = service.create(AccessPolicy.create(testPolicyPrefix + name, 10,
EnumSet.of(AccessPolicyPermission.WRITE)));
LocatorInfo locator = createLocator(accessPolicyInfo, assetInfo, 5, 10); LocatorInfo locator = createLocator(accessPolicyInfo, assetInfo, 5, 10);
WritableBlobContainerContract blobWriter = service.createBlobWriter(locator); WritableBlobContainerContract blobWriter = service.createBlobWriter(locator);
createAndUploadBlob(blobWriter, "blob1.bin", testBlobData); InputStream blobContent = new ByteArrayInputStream(testBlobData);

blobWriter.createBlockBlob(testBlobName, blobContent);
service.create(AssetFile.create(assetInfo.getId(), "blob1.bin").setIsPrimary(true).setIsEncrypted(false)
.setContentFileSize(new Long(testBlobData.length)));


service.action(AssetFile.createFileInfos(assetInfo.getId())); service.action(AssetFile.createFileInfos(assetInfo.getId()));
}


URI serviceURI = service.getRestServiceUri(); @Test
public void createJobSuccess() throws Exception {
// Arrange
String name = testJobPrefix + "createJobSuccess";
int priority = 3;
double duration = 0.0;
JobState state = JobState.Queued;
String templateId = null;
List<String> inputMediaAssets = null;
List<String> outputMediaAssets = null;
Date created = new Date();
Date lastModified = new Date();
Date stateTime = null;
Date endTime = null;


// Act // Act
JobInfo actualJob = service.create(Job JobInfo actualJob = service.create(Job.create(service.getRestServiceUri()).setName(name).setPriority(priority)
.create(serviceURI) .addInputMediaAsset(assetInfo.getId()).addTaskCreator(getTaskCreator(0)));
.setName("My Encoding Job")
.setPriority(3)
.addInputMediaAsset(assetInfo.getId())
.addTaskCreator(
Task.create().setConfiguration("H.264 256k DSL CBR")
.setMediaProcessorId("nb:mpid:UUID:2f381738-c504-4e4a-a38e-d199e207fcd5")
.setName("My encoding Task").setTaskBody(taskBody)));


// Assert // Assert
verifyJobInfoEqual("actualJob", expectedJob, actualJob); verifyJobProperties("actualJob", name, priority, duration, state, templateId, created, lastModified, stateTime,
endTime, inputMediaAssets, outputMediaAssets, actualJob);
} }


@Test @Test
public void getJobSuccess() throws Exception { public void createJobTwoTasksSuccess() throws Exception {
// Arrange // Arrange
JobInfo expectedJob = new JobInfo(null, new JobType().setName("My Encoding Job").setPriority(3) String name = testJobPrefix + "createJobSuccess";
.setRunningDuration(0.0).setState(JobState.Queued.getCode())); int priority = 3;
double duration = 0.0;
JobState state = JobState.Queued;
String templateId = null;
List<String> inputMediaAssets = null;
List<String> outputMediaAssets = null;
Date created = new Date();
Date lastModified = new Date();
Date stateTime = null;
Date endTime = null;
List<CreateBatchOperation> tasks = new ArrayList<CreateBatchOperation>();
tasks.add(getTaskCreator(0));
tasks.add(getTaskCreator(1));

// Act
JobInfo actualJob = service.create(Job.create(service.getRestServiceUri()).setName(name).setPriority(priority)
.addInputMediaAsset(assetInfo.getId()).addTaskCreator(tasks.get(0)).addTaskCreator(tasks.get(1)));

// Assert
verifyJobProperties("actualJob", name, priority, duration, state, templateId, created, lastModified, stateTime,
endTime, inputMediaAssets, outputMediaAssets, actualJob);
}


String jobId = createJob("getJobSuccess").getId(); @Test
public void getJobSuccess() throws Exception {
// Arrange
String name = testJobPrefix + "getJobSuccess";
int priority = 3;
double duration = 0.0;
JobState state = JobState.Queued;
String templateId = null;
List<String> inputMediaAssets = null;
List<String> outputMediaAssets = null;
String jobId = createJob(name).getId();
Date created = new Date();
Date lastModified = new Date();
Date stateTime = null;
Date endTime = null;


// Act // Act
JobInfo actualJob = service.get(Job.get(jobId)); JobInfo actualJob = service.get(Job.get(jobId));


// Assert // Assert
verifyJobInfoEqual("actualJob", expectedJob, actualJob); verifyJobProperties("actualJob", name, priority, duration, state, templateId, created, lastModified, stateTime,
endTime, inputMediaAssets, outputMediaAssets, actualJob);
} }


@Test @Test
Expand All @@ -172,7 +216,7 @@ public void getJobInvalidIdFailed() throws ServiceException {
@Test @Test
public void listJobSuccess() throws ServiceException { public void listJobSuccess() throws ServiceException {
// Arrange // Arrange
JobInfo jobInfo = createJob("listJobSuccess"); JobInfo jobInfo = createJob(testJobPrefix + "listJobSuccess");
List<JobInfo> jobInfos = new ArrayList<JobInfo>(); List<JobInfo> jobInfos = new ArrayList<JobInfo>();
jobInfos.add(jobInfo); jobInfos.add(jobInfo);
ListResult<JobInfo> expectedListJobsResult = new ListResult<JobInfo>(jobInfos); ListResult<JobInfo> expectedListJobsResult = new ListResult<JobInfo>(jobInfos);
Expand All @@ -191,12 +235,10 @@ public void verifyEquals(String message, Object expected, Object actual) {


@Test @Test
public void canListJobsWithOptions() throws ServiceException { public void canListJobsWithOptions() throws ServiceException {
String[] assetNames = new String[] { testJobPrefix + "assetListOptionsA", testJobPrefix + "assetListOptionsB", String[] assetNameSuffixes = new String[] { "A", "B", "C", "D" };
testJobPrefix + "assetListOptionsC", testJobPrefix + "assetListOptionsD" };
List<JobInfo> expectedJobs = new ArrayList<JobInfo>(); List<JobInfo> expectedJobs = new ArrayList<JobInfo>();
for (int i = 0; i < assetNames.length; i++) { for (String suffix : assetNameSuffixes) {
String name = assetNames[i]; JobInfo jobInfo = createJob(testJobPrefix + "assetListOptions" + suffix);
JobInfo jobInfo = createJob(name);
expectedJobs.add(jobInfo); expectedJobs.add(jobInfo);
} }


Expand All @@ -211,7 +253,7 @@ public void canListJobsWithOptions() throws ServiceException {
@Test @Test
public void cancelJobSuccess() throws Exception { public void cancelJobSuccess() throws Exception {
// Arrange // Arrange
JobInfo jobInfo = createJob("cancelJobSuccess"); JobInfo jobInfo = createJob(testJobPrefix + "cancelJobSuccess");


// Act // Act
service.action(Job.cancel(jobInfo.getId())); service.action(Job.cancel(jobInfo.getId()));
Expand All @@ -237,7 +279,7 @@ public void cancelJobFailedWithInvalidId() throws ServiceException {
@Test @Test
public void deleteJobSuccess() throws ServiceException { public void deleteJobSuccess() throws ServiceException {
// Arrange // Arrange
JobInfo jobInfo = createJob("deleteJobSuccess"); JobInfo jobInfo = createJob(testJobPrefix + "deleteJobSuccess");
service.action(Job.cancel(jobInfo.getId())); service.action(Job.cancel(jobInfo.getId()));
JobInfo cancellingJobInfo = service.get(Job.get(jobInfo.getId())); JobInfo cancellingJobInfo = service.get(Job.get(jobInfo.getId()));
while (cancellingJobInfo.getState() == JobState.Canceling) { while (cancellingJobInfo.getState() == JobState.Canceling) {
Expand Down

0 comments on commit 009c74d

Please sign in to comment.