package org.ourgrid.system;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.junit.Before;
import org.junit.Test;
import org.ourgrid.common.interfaces.to.GridProcessState;
import org.ourgrid.common.interfaces.to.LocalWorkerState;
import org.ourgrid.common.interfaces.to.WorkerStatus;
import org.ourgrid.system.condition.BrokerJobRunningCondition;
import org.ourgrid.system.condition.BrokerJobStateCondition;
import org.ourgrid.system.condition.PeerHasTheWorkerInStateCondition;
import org.ourgrid.system.condition.WorkerStatusCondition;
import org.ourgrid.system.units.BrokerUnit;
import org.ourgrid.system.units.PeerUnit;
import org.ourgrid.system.units.UnitUtil;
import org.ourgrid.system.units.WorkerUnit;
public class BrokerBasicActionsTest extends AbstractSystemTest {
private BrokerUnit brokerUnit;
private PeerUnit peerUnit;
private WorkerUnit workerUnit;
private WorkerUnit workerUnit2;
@Before
public void setUp() throws Exception {
super.setUp();
brokerUnit = new BrokerUnit(BrokerUnit.BROKER_PROPERTIES_FILENAME, 1);
unitManager.addUnit(brokerUnit);
System.out.println( "==> Broker start" );
peerUnit = unitManager.buildNewUnit( PeerUnit.class );
System.out.println( "==> Peer start" );
workerUnit = unitManager.buildNewUnit( WorkerUnit.class );
System.out.println( "==> Worker 1 start" );
workerUnit2 = unitManager.buildNewUnit( WORKER2_PROPERTIES_FILENAME, WorkerUnit.class );
System.out.println( "==> Worker 2 start" );
peerUnit.addUser(brokerUnit.getLogin());
}
/**
* Add 2 jobs, cancel both
*
* @throws Exception
*/
@Test
public void testAddJobAndCancelJob() throws Exception {
int job1 = brokerUnit.addJob( UnitUtil.buildASleepJob( 1, Integer.MAX_VALUE ) );
int job2 = brokerUnit.addJob( UnitUtil.buildASleepJob( 1, Integer.MAX_VALUE ) );
conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, job1 ) );
conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, job2 ) );
brokerUnit.cancelJob( job1 );
assertEquals( GridProcessState.CANCELLED, brokerUnit.getJob( job1 ).getState() );
brokerUnit.cancelJob( job2 );
assertEquals( GridProcessState.CANCELLED, brokerUnit.getJob( job2 ).getState() );
conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit, WorkerStatus.IDLE ) );
conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit,
LocalWorkerState.IDLE ) );
}
/**
* Add and cancel 4 jobs
*
* @throws Exception
*/
@Test
public void testAddJobAndCancelJob2() throws Exception {
final int jobsToRunAndCancel = 4;
for ( int i = 0; i < jobsToRunAndCancel; i++ ) {
int jobID = brokerUnit.addJob( UnitUtil.buildASleepJob( 1, Integer.MAX_VALUE ) );
conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, jobID ) );
brokerUnit.cancelJob( jobID );
assertEquals( GridProcessState.CANCELLED, brokerUnit.getJob( jobID ).getState() );
conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit, WorkerStatus.IDLE ) );
conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit,
LocalWorkerState.IDLE ) );
}
}
/*@Test
public void testWaitForJob() throws Exception {
int jobID = brokerUnit.addJob( UnitUtil.buildASleepJob( 1, 30 ) );
conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, jobID ) );
brokerUnit.waitForJob( jobID );
assertEquals( GridProcessState.FINISHED, brokerUnit.getJob( jobID ).getState() );
try {
brokerUnit.waitForJob( 129624 );
fail();
} catch ( Exception e ) {}
}*/
@Test
public void testCleanJob1() throws Exception {
// Test cleaning canceled job
int job1 = brokerUnit.addJob( UnitUtil.buildASleepJob( 2, Integer.MAX_VALUE ) );
conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, job1 ) );
brokerUnit.cancelJob( job1 );
assertEquals( GridProcessState.CANCELLED, brokerUnit.getJob( job1 ).getState() );
conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit, WorkerStatus.IDLE ) );
conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit,
LocalWorkerState.IDLE ) );
brokerUnit.cleanJob( job1 );
assertNull( brokerUnit.getJob( job1 ) );
// Test cleaning of finished job
int job2 = brokerUnit.addJob( UnitUtil.buildAnEchoJob( "OK" ) );
System.out.println( "job 2 added" );
conditionExpecter.waitUntilConditionIsMet( new BrokerJobStateCondition( brokerUnit, job2,
GridProcessState.FINISHED ) );
System.out.println( brokerUnit.getJob( job2 ).getState() );
conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit, WorkerStatus.IDLE ) );
conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit, WorkerStatus.IDLE ) );
brokerUnit.cleanJob( job2 );
assertNull( brokerUnit.getJob( job2 ) );
}
@Test
public void testCleanJob2() throws Exception {
// Try to clean a running job
int job3 = brokerUnit.addJob( UnitUtil.buildASleepJob( 1, Integer.MAX_VALUE ) );
conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, job3 ) );
brokerUnit.cleanJob( job3 );
assertEquals(GridProcessState.RUNNING, brokerUnit.getJob(job3).getState());
assertNotNull( brokerUnit.getJob( job3 ) );
}
}