/* * RJobTest.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; import com.revo.deployr.DeployrUtil; import com.revo.deployr.client.about.RJobDetails; import com.revo.deployr.client.auth.basic.RBasicAuthentication; import com.revo.deployr.client.factory.RClientFactory; import org.junit.*; import java.util.Arrays; import java.util.HashSet; import static org.junit.Assert.*; public class RJobTest { RClient rClient = null; RUser rUser = null; public RJobTest() { } @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 query method, of class RJob. */ @Test public void testJobQuery() { // Test variables. String jobName = DeployrUtil.getUniqueJobName(); String jobDescr = "testQuery-junit test job"; String code = "x<-5"; String actualProjectName = null; String expProjectName = jobName + " (Job)"; RJob job = null; RJobDetails jobDetails = null; String projId = null; RProject project = null; // Test error handling. Exception exception = null; String exceptionMsg = ""; Exception cleanupException = null; String cleanupExceptionMsg = ""; // Test. try { job = rUser.submitJobCode(jobName, jobDescr, code); } catch (Exception ex) { exception = ex; exceptionMsg = "rUser.submitJobCode failed: "; } if (exception == null) { // 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 = job.query(); } catch (Exception ex) { exception = ex; exceptionMsg = "job.query failed: "; break; } if (jobDetails.status.equalsIgnoreCase(RJob.COMPLETED)) { break; } } } // test for created project if (job != null) { try { jobDetails = job.query(); } catch (Exception ex) { exception = ex; exceptionMsg = "job.query failed: "; } projId = jobDetails.project; if (projId != null) { try { // get project project = rUser.getProject(projId); actualProjectName = project.about().name; } catch (Exception ex) { exception = ex; exceptionMsg = "rUser.getProject failed: "; } } } // Test cleanup. if (job != null) { try { job.delete(); } catch (Exception ex) { cleanupException = ex; cleanupExceptionMsg = "job.delete failed: "; } } if (project != null) { try { project.delete(); } catch (Exception ex) { cleanupException = ex; cleanupExceptionMsg = "project.delete failed: "; } } // Test asserts. if (exception == null) { assertNotNull(jobDetails); assertEquals(RJob.COMPLETED, jobDetails.status); assertNotNull(actualProjectName); assertEquals(expProjectName, actualProjectName); } else { fail(exceptionMsg + exception.getMessage()); } // Test cleanup errors. if (cleanupException != null) { fail(cleanupExceptionMsg + cleanupException.getMessage()); } } /** * Test of cancel method, of class RJob. */ @Test public void testJobCancelImmediate() { // Test variables. String jobName = DeployrUtil.getUniqueJobName(); String jobDescr = "testCancel-junit test job"; String code = "Sys.sleep(30)"; RJob job = null; String projId = null; RProject project = null; RJobDetails jobDetails = null; RJobDetails cancelJobDetails = null; HashSet<String> expectedEndStates = new HashSet(Arrays.asList(RJob.INTERRUPTED, RJob.CANCELLED, RJob.COMPLETED)); // Test error handling. Exception exception = null; String exceptionMsg = ""; Exception cleanupException = null; String cleanupExceptionMsg = ""; // Test. try { job = rUser.submitJobCode(jobName, jobDescr, code); } catch (Exception ex) { exception = ex; exceptionMsg = "rUser.submitJobCode failed: "; } if (exception == null) { try { cancelJobDetails = job.cancel(); } catch (Exception ex) { exception = ex; exceptionMsg = "job.cancel failed: "; } } if (exception == null) { // 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 = job.query(); } catch (Exception ex) { exception = ex; exceptionMsg = "job.query failed: "; break; } if (expectedEndStates.contains(jobDetails.status)) { break; } } } // test for created project if (job != null) { try { jobDetails = job.query(); } catch (Exception ex) { exception = ex; exceptionMsg = "job.query failed: "; } projId = jobDetails.project; if (projId != null) { try { // get project project = rUser.getProject(projId); } catch (Exception ex) { exception = ex; exceptionMsg = "rUser.getProject failed: "; } } } // Test cleanup. if (job != null) { // Cancel to ensure job can be deleted. try { job.cancel(); } catch (Exception cex) { } try { job.delete(); } catch (Exception ex) { cleanupException = ex; cleanupExceptionMsg = "job.delete failed: "; } } if (project != null) { try { project.delete(); } catch (Exception ex) { cleanupException = ex; cleanupExceptionMsg = "project.delete failed: "; } } // Test asserts. if (exception == null) { assertNotNull(jobDetails); assert (expectedEndStates.contains(jobDetails.status)); } else { fail(exceptionMsg + exception.getMessage()); } // Test cleanup errors. if (cleanupException != null) { fail(cleanupExceptionMsg + cleanupException.getMessage()); } } /** * Test of cancel method, of class RJob. */ @Test public void testJobCancelRunning() { // Test variables. String jobName = DeployrUtil.getUniqueJobName(); String jobDescr = "testCancel-junit test job"; String code = "Sys.sleep(60)"; RJob job = null; String projId = null; RProject project = null; RJobDetails jobDetails = null; RJobDetails cancelJobDetails = null; HashSet<String> expectedEndStates = new HashSet(Arrays.asList(RJob.INTERRUPTED, RJob.COMPLETED)); // Test error handling. Exception exception = null; String exceptionMsg = ""; Exception cleanupException = null; String cleanupExceptionMsg = ""; // Test. try { job = rUser.submitJobCode(jobName, jobDescr, code); } catch (Exception ex) { exception = ex; exceptionMsg = "rUser.submitJobCode failed: "; } // make sure job is running before cancelling if (exception == null) { // 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 = job.query(); } catch (Exception ex) { exception = ex; exceptionMsg = "job.query failed: "; break; } if (jobDetails.status.equalsIgnoreCase(RJob.RUNNING) || jobDetails.status.equalsIgnoreCase(RJob.COMPLETED)) { break; } } } if (exception == null) { try { cancelJobDetails = job.cancel(); } catch (Exception ex) { exception = ex; exceptionMsg = "job.cancel failed: "; } } if (exception == null) { if (!jobDetails.status.equalsIgnoreCase(RJob.COMPLETED)) { // 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 = job.query(); } catch (Exception ex) { exception = ex; exceptionMsg = "job.query failed: "; break; } if (expectedEndStates.contains(jobDetails.status)) { break; } } } } // test for created project if (job != null) { try { jobDetails = job.query(); } catch (Exception ex) { exception = ex; exceptionMsg = "job.query failed: "; } projId = jobDetails.project; if (projId != null) { try { // get project project = rUser.getProject(projId); } catch (Exception ex) { exception = ex; exceptionMsg = "rUser.getProject failed: "; } } } // Test cleanup. if (job != null) { // Cancel to ensure job can be deleted. try { job.cancel(); } catch (Exception cex) { } try { job.delete(); } catch (Exception ex) { cleanupException = ex; cleanupExceptionMsg = "job.delete failed: "; } } if (project != null) { try { project.delete(); } catch (Exception ex) { cleanupException = ex; cleanupExceptionMsg = "project.delete failed: "; } } // Test asserts. if (exception == null) { assertNotNull(jobDetails); assert (expectedEndStates.contains(jobDetails.status)); } else { fail(exceptionMsg + exception.getMessage()); } // Test cleanup errors. if (cleanupException != null) { fail(cleanupExceptionMsg + cleanupException.getMessage()); } } }