/*
* RUserJobStandardExecutionModelCallsTest.java
*
* Copyright (C) 2010-2016, Microsoft Corporation
*
* This program is licensed to you under the terms of Version 2.0 of the
* Apache License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0) for more details.
*
*/
package com.revo.deployr.client.api;
import com.revo.deployr.DeployrUtil;
import com.revo.deployr.client.*;
import com.revo.deployr.client.about.RJobDetails;
import com.revo.deployr.client.auth.basic.RBasicAuthentication;
import com.revo.deployr.client.factory.RClientFactory;
import com.revo.deployr.client.params.JobExecutionOptions;
import org.junit.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import static org.junit.Assert.fail;
import static org.junit.matchers.JUnitMatchers.*;
public class RUserJobStandardExecutionModelCallsTest {
RClient rClient = null;
RUser rUser = null;
RProject rProject = null;
List<RRepositoryFile> rProjectPreloadArtifacts = new ArrayList<RRepositoryFile>();
JobExecutionOptions jobExecutionOptions = null;
RJobDetails jobDetails = null;
String url;
// Test Data Depth (TDD)
// The higher the number set for TDD the greater the complexity,
// call count and data movement when executing the test.
int TESTDATADEPTH = Integer.getInteger("test.data.depth", 1);
// DEPTH * (.txt + .rData) + Workspace.rData
int TESTREPOARTIFACTSIZE = TESTDATADEPTH * 2 + 1;
int EXECUTIONRESULTSIZE = 11;
int EXECUTIONARTIFACTSIZE = 1;
public RUserJobStandardExecutionModelCallsTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
try {
String url = System.getProperty("connection.protocol") +
System.getProperty("connection.endpoint");
if (url == null) {
fail("setUp: connection.[protocol|endpoint] null.");
}
boolean allowSelfSigned =
Boolean.valueOf(System.getProperty("allow.SelfSignedSSLCert"));
rClient =RClientFactory.createClient(url, allowSelfSigned);
RBasicAuthentication rAuthentication = new RBasicAuthentication("testuser", System.getProperty("password.testuser"));
rUser = rClient.login(rAuthentication);
} catch (Exception ex) {
if (rClient != null) {
rClient.release();
}
fail("setUp: " + ex);
}
}
@After
public void tearDown() {
if (rClient != null) {
rClient.release();
}
}
/**
* Test of RUser.submitJobCode.
*/
@Test
public void testRUserSubmitJobCode() {
// Test variables.
RJob rJob = null;
RProject projectOnJob = null;
String jobName = "testRUserSubmitJobCode";
String jobDescr = "testRUserSubmitJobCode description";
// Test error handling.
Exception exception = null;
String exceptionMsg = "";
Exception cleanupException = null;
String cleanupExceptionMsg = "";
// Test prep.
Map<String, Object> map = DeployrUtil.createExecutionOptionsProject(rUser, TESTDATADEPTH);
rProject = (RProject) map.get("rProject");
rProjectPreloadArtifacts = (List<RRepositoryFile>) map.get("rProjectPreloadArtifacts");
assertNotNull(rProject);
jobExecutionOptions = DeployrUtil.createJobExecutionOptions(rProject,
JobExecutionOptions.LOW_PRIORITY, false, TESTDATADEPTH);
// Test.
try {
rJob = rUser.submitJobCode(jobName, jobDescr, DeployrUtil.SAMPLE_CODE, jobExecutionOptions);
// wait for job to complete
int t = 240; // 8 minutes
while (t-- != 0) {
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
exception = ex;
exceptionMsg = "Thread.sleep failed: ";
break;
}
try {
jobDetails = rJob.query();
} catch (Exception ex) {
exception = ex;
exceptionMsg = "job.query failed: ";
break;
}
if (jobDetails.status.equalsIgnoreCase(RJob.COMPLETED)) {
break;
}
}
if (jobDetails == null || jobDetails.project == null) {
if (jobDetails == null)
exception = new Exception("job.query failed to return jobDetails.");
else if (jobDetails.project == null)
exception = new Exception("no project found on jobDetails, status=" + jobDetails.status);
exceptionMsg = "Job failed: ";
}
if (exception == null) {
try {
projectOnJob = rUser.getProject(jobDetails.project);
} catch (Exception ex) {
exception = ex;
exceptionMsg = "rUser.getProject(jobDetails.project) failed: ";
}
}
} catch (Exception ex) {
exception = ex;
exceptionMsg = "rUser.submitJobCode failed: ";
}
// Test cleanup.
try {
DeployrUtil.releaseRepositoryArtifacts(rProjectPreloadArtifacts);
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "releaseRepositoryArtifacts.rProjectPreloadArtifacts failed: ";
}
if (projectOnJob != null) {
try {
projectOnJob.close();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "projectOnJob.close failed: ";
}
try {
projectOnJob.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "projectOnJob.delete failed: ";
}
}
if (rJob != null) {
try {
rJob.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "rJob.delete failed: ";
}
}
if (rProject != null) {
try {
rProject.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "rProject.delete failed: ";
}
}
// Test asserts.
if (exception == null) {
assertNotNull(jobDetails);
assertEquals(RJob.COMPLETED, jobDetails.status);
assertThat(jobDetails.timeStart, is(not(0L)));
assertThat(jobDetails.timeCode, is(not(0L)));
assertThat(jobDetails.timeTotal, is(not(0L)));
assertNotNull(jobDetails.project);
assertNotNull(projectOnJob);
} else {
fail(exceptionMsg + exception.getMessage());
}
// Test cleanup errors.
if (cleanupException != null) {
fail(cleanupExceptionMsg + cleanupException.getMessage());
}
}
/**
* Test of RUser.submitJobScript.
*/
@Test
public void testRUserSubmitJobScript() {
// Test variables.
RJob rJob = null;
RProject projectOnJob = null;
RRepositoryFile repositoryFile = null;
String jobName = "testRUserSubmitJobScript";
String jobDescr = "testRUserSubmitJobScript description";
// Test error handling.
Exception exception = null;
String exceptionMsg = "";
Exception cleanupException = null;
String cleanupExceptionMsg = "";
// Test prep.
Map<String, Object> map = DeployrUtil.createExecutionOptionsProject(rUser, TESTDATADEPTH);
rProject = (RProject) map.get("rProject");
rProjectPreloadArtifacts = (List<RRepositoryFile>) map.get("rProjectPreloadArtifacts");
assertNotNull(rProject);
jobExecutionOptions = DeployrUtil.createJobExecutionOptions(rProject,
JobExecutionOptions.LOW_PRIORITY, false, TESTDATADEPTH);
// Test.
try {
repositoryFile = DeployrUtil.createTemporaryRScript(rUser, false);
rJob = rUser.submitJobScript(jobName, jobDescr,
repositoryFile.about().filename,
repositoryFile.about().directory,
repositoryFile.about().author,
null,
jobExecutionOptions);
// wait for job to complete
int t = 240; // 8 minutes
while (t-- != 0) {
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
exception = ex;
exceptionMsg = "Thread.sleep failed: ";
break;
}
try {
jobDetails = rJob.query();
} catch (Exception ex) {
exception = ex;
exceptionMsg = "job.query failed: ";
break;
}
if (jobDetails.status.equalsIgnoreCase(RJob.COMPLETED)) {
break;
}
}
if (jobDetails == null || jobDetails.project == null) {
if (jobDetails == null)
exception = new Exception("job.query failed to return jobDetails.");
else if (jobDetails.project == null)
exception = new Exception("no project found on jobDetails, status=" + jobDetails.status);
exceptionMsg = "Job failed: ";
}
if (exception == null) {
try {
projectOnJob = rUser.getProject(jobDetails.project);
} catch (Exception ex) {
exception = ex;
exceptionMsg = "rUser.getProject(jobDetails.project) failed: ";
}
}
} catch (Exception ex) {
exception = ex;
exceptionMsg = "rUser.submitJobCode failed: ";
}
// Test cleanup.
try {
DeployrUtil.releaseRepositoryArtifacts(rProjectPreloadArtifacts);
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "releaseRepositoryArtifacts.rProjectPreloadArtifacts failed: ";
}
if (repositoryFile != null) {
try {
repositoryFile.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "repositoryFile.delete failed: ";
}
}
if (projectOnJob != null) {
try {
projectOnJob.close();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "projectOnJob.close failed: ";
}
try {
projectOnJob.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "projectOnJob.delete failed: ";
}
}
if (rJob != null) {
try {
rJob.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "rJob.delete failed: ";
}
}
if (rProject != null) {
try {
rProject.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "rProject.delete failed: ";
}
}
// Test asserts.
if (exception == null) {
assertNotNull(jobDetails);
assertEquals(RJob.COMPLETED, jobDetails.status);
assertThat(jobDetails.timeStart, is(not(0L)));
assertThat(jobDetails.timeCode, is(not(0L)));
assertThat(jobDetails.timeTotal, is(not(0L)));
assertNotNull(jobDetails.project);
assertNotNull(projectOnJob);
} else {
fail(exceptionMsg + exception.getMessage());
}
// Test cleanup errors.
if (cleanupException != null) {
fail(cleanupExceptionMsg + cleanupException.getMessage());
}
}
/**
* Test of RUser.submitJobExternal.
*/
@Test
public void testRUserSubmitJobExternal() {
// Test variables.
RJob rJob = null;
RProject projectOnJob = null;
RRepositoryFile repositoryFile = null;
String jobName = "testRUserSubmitJobExternal";
String jobDescr = "testRUserSubmitJobExternal description";
// Test error handling.
Exception exception = null;
String exceptionMsg = "";
Exception cleanupException = null;
String cleanupExceptionMsg = "";
// Test prep.
Map<String, Object> map = DeployrUtil.createExecutionOptionsProject(rUser, TESTDATADEPTH);
rProject = (RProject) map.get("rProject");
rProjectPreloadArtifacts = (List<RRepositoryFile>) map.get("rProjectPreloadArtifacts");
assertNotNull(rProject);
jobExecutionOptions = DeployrUtil.createJobExecutionOptions(rProject,
JobExecutionOptions.LOW_PRIORITY, false, TESTDATADEPTH);
// Test.
try {
repositoryFile = DeployrUtil.createTemporaryRScript(rUser, true);
rJob = rUser.submitJobExternal(jobName, jobDescr,
repositoryFile.about().url.toString(),
jobExecutionOptions);
// wait for job to complete
int t = 240; // 8 minutes
while (t-- != 0) {
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
exception = ex;
exceptionMsg = "Thread.sleep failed: ";
break;
}
try {
jobDetails = rJob.query();
} catch (Exception ex) {
exception = ex;
exceptionMsg = "job.query failed: ";
break;
}
if (jobDetails.status.equalsIgnoreCase(RJob.COMPLETED)) {
break;
}
}
if (jobDetails == null || jobDetails.project == null) {
if (jobDetails == null)
exception = new Exception("job.query failed to return jobDetails.");
else if (jobDetails.project == null)
exception = new Exception("no project found on jobDetails, status=" + jobDetails.status);
exceptionMsg = "Job failed: ";
}
if (exception == null) {
try {
projectOnJob = rUser.getProject(jobDetails.project);
} catch (Exception ex) {
exception = ex;
exceptionMsg = "rUser.getProject(jobDetails.project) failed: ";
}
}
} catch (Exception ex) {
exception = ex;
exceptionMsg = "rUser.submitJobCode failed: ";
}
// Test cleanup.
try {
DeployrUtil.releaseRepositoryArtifacts(rProjectPreloadArtifacts);
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "releaseRepositoryArtifacts.rProjectPreloadArtifacts failed: ";
}
if (repositoryFile != null) {
try {
repositoryFile.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "repositoryFile.delete failed: ";
}
}
if (projectOnJob != null) {
try {
projectOnJob.close();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "projectOnJob.close failed: ";
}
try {
projectOnJob.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "projectOnJob.delete failed: ";
}
}
if (rJob != null) {
try {
rJob.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "rJob.delete failed: ";
}
}
if (rProject != null) {
try {
rProject.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "rProject.delete failed: ";
}
}
// Test asserts.
if (exception == null) {
assertNotNull(jobDetails);
assertEquals(RJob.COMPLETED, jobDetails.status);
assertThat(jobDetails.timeStart, is(not(0L)));
assertThat(jobDetails.timeCode, is(not(0L)));
assertThat(jobDetails.timeTotal, is(not(0L)));
assertNotNull(jobDetails.project);
assertNotNull(projectOnJob);
} else {
fail(exceptionMsg + exception.getMessage());
}
// Test cleanup errors.
if (cleanupException != null) {
fail(cleanupExceptionMsg + cleanupException.getMessage());
}
}
/**
* Test of RUser.submitJobStoreNoProject.
*/
@Test
public void testRUserSubmitJobStoreNoProject() {
// Test variables.
RJob rJob = null;
RRepositoryFile repositoryFile = null;
String jobName = "testRUserSubmitJobStoreNoProject";
String jobDescr = "testRUserSubmitJobStoreNoProject description";
// Test error handling.
Exception exception = null;
String exceptionMsg = "";
Exception cleanupException = null;
String cleanupExceptionMsg = "";
// Test prep.
Map<String, Object> map = DeployrUtil.createExecutionOptionsProject(rUser, TESTDATADEPTH);
rProject = (RProject) map.get("rProject");
rProjectPreloadArtifacts = (List<RRepositoryFile>) map.get("rProjectPreloadArtifacts");
assertNotNull(rProject);
jobExecutionOptions = DeployrUtil.createJobExecutionOptions(rProject,
JobExecutionOptions.LOW_PRIORITY, true, TESTDATADEPTH);
// Test.
try {
repositoryFile = DeployrUtil.createTemporaryRScript(rUser, true);
rJob = rUser.submitJobExternal(jobName, jobDescr,
repositoryFile.about().url.toString(),
jobExecutionOptions);
// wait for job to complete
int t = 240; // 8 minutes
while (t-- != 0) {
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
exception = ex;
exceptionMsg = "Thread.sleep failed: ";
break;
}
try {
jobDetails = rJob.query();
} catch (Exception ex) {
exception = ex;
exceptionMsg = "job.query failed: ";
break;
}
if (jobDetails.status.equalsIgnoreCase(RJob.COMPLETED)) {
break;
}
}
if (jobDetails == null) {
exception = new Exception("job.query failed to return jobDetails.");
exceptionMsg = "Job failed: ";
}
} catch (Exception ex) {
exception = ex;
exceptionMsg = "rUser.submitJobCode failed: ";
}
// Test cleanup.
try {
DeployrUtil.releaseRepositoryArtifacts(rProjectPreloadArtifacts);
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "releaseRepositoryArtifacts.rProjectPreloadArtifacts failed: ";
}
if (repositoryFile != null) {
try {
repositoryFile.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "repositoryFile.delete failed: ";
}
}
if (rJob != null) {
try {
rJob.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "rJob.delete failed: ";
}
}
if (rProject != null) {
try {
rProject.delete();
} catch (Exception ex) {
cleanupException = ex;
cleanupExceptionMsg = "rProject.delete failed: ";
}
}
// Test asserts.
if (exception == null) {
assertNotNull(jobDetails);
assertEquals(RJob.COMPLETED, jobDetails.status);
assertThat(jobDetails.timeStart, is(not(0L)));
assertThat(jobDetails.timeCode, is(not(0L)));
assertThat(jobDetails.timeTotal, is(not(0L)));
assertNull(jobDetails.project);
} else {
fail(exceptionMsg + exception.getMessage());
}
// Test cleanup errors.
if (cleanupException != null) {
fail(cleanupExceptionMsg + cleanupException.getMessage());
}
}
}