package org.ourgrid.system;
import org.junit.Test;
import org.ourgrid.common.interfaces.to.GridProcessState;
import org.ourgrid.common.interfaces.to.LocalWorkerState;
import org.ourgrid.system.condition.BrokerHasAPeerInTheState;
import org.ourgrid.system.condition.BrokerJobFinishedCondition;
import org.ourgrid.system.condition.BrokerJobRunningCondition;
import org.ourgrid.system.condition.BrokerJobStateCondition;
import org.ourgrid.system.condition.PeerHasTheWorkerInStateCondition;
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 StartOutOfOrderSystemTest extends AbstractSystemTest {
/**
* create 1 Peer create 1 Workers start peer set worker start worker worker
* must be idle for peer
*/
@Test
public void testStart_Worker_Peer() throws Exception {
PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class );
WorkerUnit workerUnit = unitManager.buildNewUnit( WorkerUnit.class );
peerUnit.initKeys();
System.out.println( "===> Peer is running <===" );
// peerUnit.setWorkers( workerUnit );
System.out.println( "===> Set worker <===" );
workerUnit.initKeys();
System.out.println( "===> Worker is running <===" );
conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit,
LocalWorkerState.IDLE ) );
System.out.println( "===> Peer knows the worker <===" );
}
/**
* create Broker create 2 peers start Broker setPeers start peers Broker must know 2
* peers alive
*/
@Test
public void testStart_Broker_2Peers() throws Exception {
PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class );
PeerUnit otherPeerUnit = unitManager.buildNewUnit( PEER2_PROPERTIES_FILENAME, PeerUnit.class );
BrokerUnit brokerUnit = unitManager.buildNewUnit( BrokerUnit.class );
brokerUnit.initKeys();
System.out.println( "===> Broker is running <===" );
peerUnit.addUser(brokerUnit.getLogin());
otherPeerUnit.addUser(brokerUnit.getLogin());
System.out.println( "===> Set peers <===" );
peerUnit.initKeys();
System.out.println( "===> One peer is running <===" );
otherPeerUnit.initKeys();
System.out.println( "===> Other peer is running <===" );
conditionExpecter.waitUntilConditionIsMet( new BrokerHasAPeerInTheState( brokerUnit, peerUnit, PeerTestState.UP ) );
conditionExpecter.waitUntilConditionIsMet( new BrokerHasAPeerInTheState( brokerUnit, otherPeerUnit, PeerTestState.UP ) );
System.out.println( "===> Broker knows that two peers are running <===" );
}
/**
* create 1 Broker create 1 Peer create 2 Workers start Broker Broker.setPeer( peer )
* Broker.addJob( echoJob ) start peer peer.setWorker start workers job is
* running
*/
@Test
public void testStart_Broker_Peers_2Workers() throws Exception {
PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class );
WorkerUnit workerUnit = unitManager.buildNewUnit( WorkerUnit.class );
WorkerUnit otherWorkerUnit = unitManager.buildNewUnit( WORKER2_PROPERTIES_FILENAME, WorkerUnit.class );
BrokerUnit brokerUnit = new BrokerUnit(BrokerUnit.BROKER_PROPERTIES_FILENAME, 1, 1, 10, 2);
unitManager.addUnit(brokerUnit);
brokerUnit.initKeys();
System.out.println( "===> Broker is running <===" );
peerUnit.addUser(brokerUnit.getLogin());
System.out.println( "===> Set peers <===" );
int jobid = brokerUnit.addJob( UnitUtil.buildASleepJob( 2, Integer.MAX_VALUE ) );
conditionExpecter
.waitUntilConditionIsMet( new BrokerJobStateCondition( brokerUnit, jobid, GridProcessState.UNSTARTED ) );
peerUnit.initKeys();
System.out.println( "===> Peer is running <===" );
// peerUnit.setWorkers( workerUnit, otherWorkerUnit );
System.out.println( "===> Set workers <===" );
workerUnit.initKeys();
otherWorkerUnit.initKeys();
System.out.println( "===> Workers are running <===" );
conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, jobid ) );
System.out.println( "===> Job is running <===" );
}
/**
* Similar to previous, but adds a job before setting the peer. create 1 Broker
* create 1 Peer create 2 Workers start Broker Broker.addJob( echoJob ) Broker.setPeer(
* peer ) start peer peer.setWorker start workers job is running
*/
@Test
public void testStart_Broker_Peers_2Workers_case2() throws Exception {
PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class );
WorkerUnit workerUnit = unitManager.buildNewUnit( WorkerUnit.class );
WorkerUnit otherWorkerUnit = unitManager.buildNewUnit( WorkerUnit.class );
BrokerUnit brokerUnit = new BrokerUnit(BrokerUnit.BROKER_PROPERTIES_FILENAME, 1, 1, 10, 2);
unitManager.addUnit(brokerUnit);
brokerUnit.initKeys();
System.out.println( "===> Broker is running <===" );
int jobid = brokerUnit.addJob( UnitUtil.buildASleepJob( 2, Integer.MAX_VALUE ) );
conditionExpecter
.waitUntilConditionIsMet( new BrokerJobStateCondition( brokerUnit, jobid, GridProcessState.UNSTARTED ) );
peerUnit.addUser(brokerUnit.getLogin());
System.out.println( "===> Set peers <===" );
peerUnit.initKeys();
System.out.println( "===> Peer is running <===" );
// peerUnit.setWorkers( workerUnit, otherWorkerUnit );
System.out.println( "===> Set workers <===" );
workerUnit.initKeys();
otherWorkerUnit.initKeys();
System.out.println( "===> Workers are running <===" );
conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, jobid ) );
System.out.println( "===> Job is running <===" );
}
/**
* create 1 Broker create 1 Peer create 1 Workers start Broker Broker.setPeer( peer )
* Broker.addJob( echoJob ) start peer peer.setWorker start workers job finished
*/
@Test
public void testStart_Broker_Peers_Workers() throws Exception {
PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class );
WorkerUnit workerUnit = unitManager.buildNewUnit( WorkerUnit.class );
BrokerUnit brokerUnit = new BrokerUnit(BrokerUnit.BROKER_PROPERTIES_FILENAME, 1, 1, 10, 2);
unitManager.addUnit(brokerUnit);
brokerUnit.initKeys();
System.out.println( "===> Broker is running <===" );
peerUnit.addUser(brokerUnit.getLogin());
System.out.println( "===> Set peers <===" );
int jobid = brokerUnit.addJob( UnitUtil.buildAnEchoJob( "ok" ) );
conditionExpecter
.waitUntilConditionIsMet( new BrokerJobStateCondition( brokerUnit, jobid, GridProcessState.UNSTARTED ) );
peerUnit.initKeys();
System.out.println( "===> Peer is running <===" );
// peerUnit.setWorkers( workerUnit );
System.out.println( "===> Set workers <===" );
workerUnit.initKeys();
System.out.println( "===> Workers are running <===" );
conditionExpecter.waitUntilConditionIsMet( new BrokerJobFinishedCondition( brokerUnit, jobid ) );
System.out.println( "===> Job is running <===" );
}
}