/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.utils.cluster.torque.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.junit.Before;
import org.junit.Test;
import de.rcenvironment.core.utils.cluster.ClusterJobInformation;
import de.rcenvironment.core.utils.cluster.ClusterJobInformation.ClusterJobState;
import de.rcenvironment.core.utils.cluster.internal.ClusterJobSourceServiceImpl;
import de.rcenvironment.core.utils.cluster.internal.ClusterJobTimesInformation;
import de.rcenvironment.core.utils.cluster.internal.ClusterJobSourceServiceImplTest;
import de.rcenvironment.core.utils.cluster.internal.ClusterJobInformationImpl;
import de.rcenvironment.core.utils.ssh.jsch.SshSessionConfiguration;
import de.rcenvironment.core.utils.ssh.jsch.SshSessionConfigurationFactory;
/**
* Test cases for {@link TorqueClusterService}.
* @author Doreen Seider
*/
public class TorqueClusterServiceTest {
private TorqueClusterService clusterService;
private ClusterJobSourceServiceImplTest helperTestClass
= new ClusterJobSourceServiceImplTest();
/** Set up. */
@Before
public void setUp() {
String randomString = RandomStringUtils.random(5);
SshSessionConfiguration sshConfiguration = SshSessionConfigurationFactory
.createSshSessionConfigurationWithAuthPhrase(helperTestClass.localHost, helperTestClass.port, randomString, randomString);
clusterService = new TorqueClusterService(sshConfiguration, new HashMap<String, String>());
clusterService.bindClusterJobSourceService(new ClusterJobSourceServiceImpl());
}
/**
* Test.
* @throws IOException if an error occurs
**/
@Test
public void testParseStdoutForClusterJobInformation() throws IOException {
final String stdout = IOUtils.toString(getClass().getResourceAsStream("/torque_qstat"));
Map<String, ClusterJobInformation> jobInformation = clusterService.parseStdoutForClusterJobInformation(stdout);
assertEquals(4, jobInformation.size());
ClusterJobInformation information = jobInformation.get("506.bssc075dl");
assertEquals("job", information.getJobName());
assertEquals(ClusterJobState.Running, information.getJobState());
assertEquals("qtest", information.getQueue());
assertEquals("seid_do", information.getUser());
information = jobInformation.get("507.bssc075dl");
assertEquals("jib", information.getJobName());
assertEquals(ClusterJobState.Queued, information.getJobState());
assertEquals("mem", information.getQueue());
assertEquals("litz_ma", information.getUser());
information = jobInformation.get("508.bssc075dl");
assertEquals("job", information.getJobName());
assertEquals(ClusterJobState.Completed, information.getJobState());
assertEquals("qtest", information.getQueue());
assertEquals("seid_do", information.getUser());
information = jobInformation.get("509.bssc075dl");
assertEquals("jab", information.getJobName());
assertEquals(ClusterJobState.Queued, information.getJobState());
assertEquals("fast", information.getQueue());
assertEquals("sipp_ja", information.getUser());
}
/**
* Test.
* @throws IOException if an error occurs
**/
@Test
public void testParseStdoutForClusterJobTimesInformation() throws IOException {
final String stdout = IOUtils.toString(getClass().getResourceAsStream("/torque_showq"));
Map<String, ClusterJobTimesInformation> jobTimesInformation = clusterService.parseStdoutForClusterJobTimesInformation(stdout);
assertEquals(3, jobTimesInformation.size());
ClusterJobTimesInformation information = jobTimesInformation.get("606");
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getQueueTime());
assertEquals("Tue Aug 28 16:54:22", information.getStartTime());
assertEquals("00:30:02", information.getRemainingTime());
information = jobTimesInformation.get("569");
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getQueueTime());
assertEquals("Thu Aug 23 14:15:11", information.getStartTime());
assertEquals("94:20:20:45", information.getRemainingTime());
information = jobTimesInformation.get("607");
assertEquals("Tue Aug 28 17:54:24", information.getQueueTime());
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getStartTime());
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getRemainingTime());
}
/**
* Test.
**/
@Test
public void testEnhanceClusterJobInformation() {
String jobId0 = RandomStringUtils.random(5);
String jobId1 = RandomStringUtils.random(5);
String jobId2 = helperTestClass.localJobId;
String jobId3 = helperTestClass.remoteJobId;
String jobId4 = RandomStringUtils.random(5);
String[] jobIds = new String[] { jobId0, jobId1, jobId2, jobId3 };
Map<String, ClusterJobInformation> jobInformation = new HashMap<String, ClusterJobInformation>();
Map<String, ClusterJobTimesInformation> jobTimesInformation = new HashMap<String, ClusterJobTimesInformation>();
for (String jobId : jobIds) {
ClusterJobInformationImpl information = new ClusterJobInformationImpl();
information.setJobId(jobId);
jobInformation.put(jobId, information);
if (jobId.equals(jobId1) || jobId.equals(jobId3)) {
ClusterJobTimesInformation timesInformation = new ClusterJobTimesInformation();
timesInformation.setJobId(jobId);
jobTimesInformation.put(jobId, timesInformation);
}
}
String queueTime1 = RandomStringUtils.random(5);
jobTimesInformation.get(jobId1).setQueueTime(queueTime1);
String remainingTime3 = RandomStringUtils.random(5);
String startTime3 = RandomStringUtils.random(5);
jobTimesInformation.get(jobId3).setRemainingTime(remainingTime3);
jobTimesInformation.get(jobId3).setStartTime(startTime3);
Set<ClusterJobInformation> resultJobInformation = clusterService
.enhanceClusterJobInformation(jobInformation, jobTimesInformation);
assertEquals(jobInformation.size(), resultJobInformation.size());
for (ClusterJobInformation information : resultJobInformation) {
if (information.getJobId().equals(jobId0)) {
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getQueueTime());
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getRemainingTime());
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getStartTime());
} else if (information.getJobId().equals(jobId1)) {
assertEquals(queueTime1, information.getQueueTime());
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getRemainingTime());
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getStartTime());
} else if (information.getJobId().equals(jobId2)) {
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getQueueTime());
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getRemainingTime());
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getStartTime());
} else if (information.getJobId().equals(jobId3)) {
assertEquals(ClusterJobInformationImpl.NO_VALUE_SET, information.getQueueTime());
assertEquals(remainingTime3, information.getRemainingTime());
assertEquals(startTime3, information.getStartTime());
}
}
assertFalse(resultJobInformation.contains(jobId4));
}
}