package hudson.plugins.sctmexecutor;
import static org.junit.Assert.assertTrue;
import hudson.plugins.sctmexecutor.exceptions.SCTMException;
import hudson.plugins.sctmexecutor.service.ISCTMService;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import org.easymock.EasyMock;
import org.junit.Test;
import com.borland.sctm.ws.execution.entities.ExecutionHandle;
import com.borland.sctm.ws.execution.entities.ExecutionResult;
import com.borland.sctm.ws.execution.entities.TestDefinitionResult;
public class TestResultCollector {
private static final int DEFAULT_BUILDNUMBER = -1;
@Test
public void collectingResults() throws SCTMException, FileNotFoundException {
ISCTMService serviceMock = createServiceMock();
ExecutionResult result = createDummyResult();
EasyMock.expect(serviceMock.getExecutionResult((ExecutionHandle)EasyMock.notNull())).andReturn(result);
ITestResultWriter resultWriterMock = EasyMock.createStrictMock(ITestResultWriter.class);
resultWriterMock.write(result);
ExecutionRunnable aut = new ExecutionRunnable(serviceMock, 1, DEFAULT_BUILDNUMBER, resultWriterMock, new PrintStream("test.log"));
aut.setResultCollectingDelay(1);
EasyMock.replay(serviceMock);
EasyMock.replay(resultWriterMock);
aut.run();
EasyMock.verify(serviceMock);
EasyMock.verify(resultWriterMock);
}
@Test
public void runCollectorThread() throws SCTMException, FileNotFoundException {
ISCTMService serviceMock = EasyMock.createStrictMock(ISCTMService.class);
Collection<ExecutionHandle> handles = new ArrayList<ExecutionHandle>();
handles.add(new ExecutionHandle(1, System.currentTimeMillis()));
EasyMock.expect(serviceMock.getExecDefinitionName(EasyMock.anyInt())).andReturn("ExecDefName");
EasyMock.expect(serviceMock.start(EasyMock.eq(1), EasyMock.cmpEq("1234"))).andReturn(handles);
EasyMock.expect(serviceMock.isFinished((ExecutionHandle) EasyMock.notNull())).andReturn(false);
EasyMock.expectLastCall().times(2).andReturn(false);
EasyMock.expectLastCall().andReturn(true);
ExecutionResult result = createDummyResult();
EasyMock.expect(serviceMock.getExecutionResult((ExecutionHandle)EasyMock.notNull())).andReturn(result);
ITestResultWriter resultWriterMock = EasyMock.createStrictMock(ITestResultWriter.class);
resultWriterMock.write(result);
ExecutionRunnable aut = new ExecutionRunnable(serviceMock, 1, 1234, resultWriterMock, new PrintStream("test.log"));
aut.setResultCollectingDelay(1);
EasyMock.replay(serviceMock);
EasyMock.replay(resultWriterMock);
long start = System.currentTimeMillis();
aut.run();
long duration = (System.currentTimeMillis()-start)/1000;
assertTrue(duration > 8 && duration < 16);
EasyMock.verify(serviceMock);
EasyMock.verify(resultWriterMock);
}
@Test(expected=RuntimeException.class)
public void testBadRun() throws Exception {
ISCTMService serviceMock = EasyMock.createStrictMock(ISCTMService.class);
EasyMock.expect(serviceMock.isFinished((ExecutionHandle) EasyMock.notNull())).andThrow(new RemoteException());
ExecutionRunnable aut = new ExecutionRunnable(serviceMock, 1, DEFAULT_BUILDNUMBER, null, new PrintStream("test.log"));
aut.setResultCollectingDelay(1);
EasyMock.replay(serviceMock);
aut.run();
EasyMock.verify(serviceMock);
}
@Test(expected=RuntimeException.class)
public void testBadResult() throws Exception {
ISCTMService serviceMock = createServiceMock();
EasyMock.expect(serviceMock.getExecutionResult((ExecutionHandle)EasyMock.notNull())).andThrow(new RemoteException());
EasyMock.expect(serviceMock.isFinished((ExecutionHandle) EasyMock.notNull())).andReturn(true);
EasyMock.expect(serviceMock.getExecutionResult((ExecutionHandle)EasyMock.notNull())).andThrow(new RemoteException());
EasyMock.expect(serviceMock.isFinished((ExecutionHandle) EasyMock.notNull())).andReturn(true);
EasyMock.expect(serviceMock.getExecutionResult((ExecutionHandle)EasyMock.notNull())).andThrow(new RemoteException());
ExecutionRunnable aut = new ExecutionRunnable(serviceMock, 1, DEFAULT_BUILDNUMBER, null, new PrintStream("test.log"));
aut.setResultCollectingDelay(1);
EasyMock.replay(serviceMock);
aut.run();
EasyMock.verify(serviceMock);
}
private ExecutionResult createDummyResult() {
TestDefinitionResult cleanUp = new TestDefinitionResult(1, 0, 1, "test", "", 1, 1, 1, 1, 0);
TestDefinitionResult setup = new TestDefinitionResult(1, 0, 1, "test", "", 1, 1, 1, 1, 0);
TestDefinitionResult[] results = new TestDefinitionResult[] {
new TestDefinitionResult(1, 0, 1, "test", "", 1, 1, 1, 1, 0),
new TestDefinitionResult(1, 0, 1, "test", "", 1, 1, 1, 1, 0)
};
ExecutionResult result = new ExecutionResult("test", cleanUp, 10, "testExecDef", "unknown", new String[] {"unknown"}, "", setup, results);
return result;
}
private ISCTMService createServiceMock() throws SCTMException {
ISCTMService serviceMock = EasyMock.createStrictMock(ISCTMService.class);
Collection<ExecutionHandle> handles = new ArrayList<ExecutionHandle>();
handles.add(new ExecutionHandle(1, System.currentTimeMillis()));
EasyMock.expect(serviceMock.getExecDefinitionName(EasyMock.anyInt())).andReturn("ExecDef");
// EasyMock.expect(serviceMock.buildNumberExists(EasyMock.eq(DEFAULT_BUILDNUMBER))).andReturn(false);
// serviceMock.addBuildNumber(EasyMock.eq(DEFAULT_BUILDNUMBER));
EasyMock.expect(serviceMock.start(EasyMock.gt(0))).andReturn(handles );
EasyMock.expect(serviceMock.isFinished((ExecutionHandle) EasyMock.notNull())).andReturn(false);
EasyMock.expectLastCall().andReturn(true);
return serviceMock;
}
private ITestResultWriter createTestResultWriterMock(ExecutionResult result) throws SCTMException {
ITestResultWriter resultWriterMock = EasyMock.createStrictMock(ITestResultWriter.class);
resultWriterMock.write(result);
return resultWriterMock;
}
}