package org.ourgrid.system; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import org.junit.Test; import org.ourgrid.broker.status.GridProcessStatusInfo; import org.ourgrid.broker.status.JobStatusInfo; import org.ourgrid.broker.status.TaskStatusInfo; import org.ourgrid.broker.status.WorkerStatusInfo; import org.ourgrid.common.interfaces.status.ConsumerInfo; import org.ourgrid.common.interfaces.status.LocalConsumerInfo; import org.ourgrid.common.interfaces.to.GridProcessState; import org.ourgrid.common.interfaces.to.LocalWorkerState; import org.ourgrid.common.interfaces.to.WorkerInfo; import org.ourgrid.common.interfaces.to.WorkerStatus; import org.ourgrid.common.specification.job.JobSpecification; import org.ourgrid.common.specification.main.DescriptionFileCompile; import org.ourgrid.peer.PeerConstants; import org.ourgrid.system.condition.BrokerAllJobsFinishedCondition; import org.ourgrid.system.condition.BrokerJobFinishedCondition; import org.ourgrid.system.condition.BrokerJobRunningCondition; import org.ourgrid.system.condition.BrokerJobStateCondition; import org.ourgrid.system.condition.BrokerNumberOfWorkersCondition; import org.ourgrid.system.condition.BrokerSetPeersCondition; import org.ourgrid.system.condition.PeerHasTheWorkerInStateCondition; import org.ourgrid.system.condition.WorkerSetPeerCondition; 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; import br.edu.ufcg.lsd.commune.identification.DeploymentID; import br.edu.ufcg.lsd.commune.identification.ServiceID; public class SimpleExecutionSystemTest extends AbstractSystemTest { @Test public void testStartUnits() throws Exception { PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class ); WorkerUnit workerUnit = unitManager.buildNewUnit( WorkerUnit.class ); // // peerUnit.setWorkers( workerUnit ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit, LocalWorkerState.IDLE ) ); } @Test public void testSimpleCaseAfterTheJobFinished() throws Exception { PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class ); BrokerUnit brokerUnit = unitManager.buildNewUnit( BrokerUnit.class ); WorkerUnit workerUnit = unitManager.buildNewUnit( WorkerUnit.class ); System.out.println( "===> Remote Entities Started (1 Workers, 1 Peer, 1 Broker) <===" ); // peerUnit.setWorkers( workerUnit ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit, LocalWorkerState.IDLE ) ); System.out.println( "===> Peers has the worker in IDLE status <===" ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit ) ); System.out.println( "===> Worker has the master peer set <===" ); DeploymentID masterPeer = workerUnit.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); assertEquals( WorkerStatus.IDLE, workerUnit.getStatus().getStatus() ); System.out.println( "===> The master peer has been set correctly <===" ); peerUnit.addUser(brokerUnit.getLogin()); conditionExpecter.waitUntilConditionIsMet( new BrokerSetPeersCondition( brokerUnit, 1, true ) ); // assertEquals( State.UP, brokerUnit.getPeers().iterator().next().getState() ); assertTrue(brokerUnit.getPeers().iterator().next().isLogged()); System.out.println( "===> Broker knows the peer <===" ); brokerUnit.showStatus(); Collection<LocalConsumerInfo> localConsumerStatus = peerUnit.getLocalConsumerStatus(); Collection<ConsumerInfo> remoteConsumerStatus = peerUnit.getRemoteConsumerStatus(); Collection<WorkerInfo> localWorkerStatus = peerUnit.getLocalWorkerStatus(); assertNull( localWorkerStatus.iterator().next().getConsumerID() ); assertTrue( localConsumerStatus.isEmpty() ); assertTrue( remoteConsumerStatus.isEmpty() ); int jobid = brokerUnit.addJob( UnitUtil.buildAnEchoJob( "ok" ) ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobFinishedCondition( brokerUnit, jobid ) ); assertEquals( GridProcessState.FINISHED, brokerUnit.getJob( jobid ).getState() ); System.out.println( "===> Job finished <===" ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition(workerUnit, WorkerStatus.IDLE) ); assertEquals( WorkerStatus.IDLE, workerUnit.getStatus().getStatus() ); System.out.println( "===> Worker is idle <===" ); conditionExpecter.waitUntilConditionIsMet( new BrokerNumberOfWorkersCondition( brokerUnit, 0 ) ); System.out.println( "===> Broker has no workers <===" ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit, LocalWorkerState.IDLE ) ); System.out.println( "===> Peers has the worker in IDLE status <===" ); System.out.println( "===> Testing consumer information <===" ); localConsumerStatus = peerUnit.getLocalConsumerStatus(); remoteConsumerStatus = peerUnit.getRemoteConsumerStatus(); localWorkerStatus = peerUnit.getLocalWorkerStatus(); assertNull( localWorkerStatus.iterator().next().getConsumerID() ); assertTrue( localConsumerStatus.isEmpty() ); assertTrue( remoteConsumerStatus.isEmpty() ); } @Test public void testSimpleCaseDuringTheJobExecution() throws Exception { PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class ); BrokerUnit brokerUnit = unitManager.buildNewUnit( BrokerUnit.class ); WorkerUnit workerUnit = unitManager.buildNewUnit( WorkerUnit.class ); // peerUnit.setWorkers( workerUnit ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit ) ); DeploymentID masterPeer = workerUnit.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); peerUnit.addUser(brokerUnit.getLogin()); conditionExpecter.waitUntilConditionIsMet( new BrokerSetPeersCondition( brokerUnit, 1, true ) ); Collection<LocalConsumerInfo> localConsumerStatus = peerUnit.getLocalConsumerStatus(); Collection<ConsumerInfo> remoteConsumerStatus = peerUnit.getRemoteConsumerStatus(); Collection<WorkerInfo> localWorkerStatus = peerUnit.getLocalWorkerStatus(); assertNull( localWorkerStatus.iterator().next().getConsumerID() ); assertTrue( localConsumerStatus.isEmpty() ); assertTrue( remoteConsumerStatus.isEmpty() ); int jobid = brokerUnit.addJob( UnitUtil.buildASleepJob( Integer.MAX_VALUE ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit, LocalWorkerState.IN_USE ) ); localWorkerStatus = peerUnit.getLocalWorkerStatus(); assertTrue( localWorkerStatus.size() == 1 ); assertTrue( peerUnit.getLocalConsumerStatus().size() == 1 ); assertEquals( LocalWorkerState.IN_USE, localWorkerStatus.iterator().next().getStatus() ); System.out.println( "===> Worker is IN_USE for Peer <===" ); conditionExpecter.waitUntilConditionIsMet( new BrokerNumberOfWorkersCondition( brokerUnit, 1, jobid ) ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit,jobid ) ); Set<WorkerStatusInfo> workers = brokerUnit.getWorkersByJob().get( jobid ); assertTrue( workers.size() == 1 ); WorkerStatusInfo workerEntry = workers.iterator().next(); assertEquals( GridProcessState.RUNNING.toString(), workerEntry.getProcessState() ); System.out.println( "===> The replica is running for Broker <===" ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit, WorkerStatus.ALLOCATED_FOR_BROKER ) ); localWorkerStatus = peerUnit.getLocalWorkerStatus(); assertEquals( WorkerStatus.ALLOCATED_FOR_BROKER, workerUnit.getStatus().getStatus() ); System.out.println( "===> Worker is in Allocated state<===" ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, jobid ) ); System.out.println( "===> Job is running <===" ); System.out.println( "===> Testing consumer information <===" ); localConsumerStatus = peerUnit.getLocalConsumerStatus(); remoteConsumerStatus = peerUnit.getRemoteConsumerStatus(); assertTrue( remoteConsumerStatus.isEmpty() ); assertTrue( 1 == localConsumerStatus.size() ); String brokerURL = brokerUnit.getJabberUserName() + "@" + brokerUnit.getJabberServerHostname(); assertEquals( brokerURL, localConsumerStatus.iterator().next().getConsumerIdentification() ); assertEquals( brokerURL, localWorkerStatus.iterator().next().getConsumerID() ); System.out.println( "===> Test finished <===" ); } @Test public void testSimpleCaseAfterTheJobFinishedWithReplicationOneWorker() throws Exception { PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class ); BrokerUnit brokerUnit = new BrokerUnit(BrokerUnit.BROKER_PROPERTIES_FILENAME, 3); WorkerUnit workerUnit = unitManager.buildNewUnit( WorkerUnit.class ); // peerUnit.setWorkers( workerUnit ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit ) ); DeploymentID masterPeer = workerUnit.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); assertEquals( WorkerStatus.IDLE, workerUnit.getStatus().getStatus() ); peerUnit.addUser(brokerUnit.getLogin()); conditionExpecter.waitUntilConditionIsMet( new BrokerSetPeersCondition( brokerUnit, 1, true ) ); // assertEquals( State.UP, brokerUnit.getPeers().iterator().next().getState() ); assertTrue(brokerUnit.getPeers().iterator().next().isLogged()); int jobid = brokerUnit.addJob( UnitUtil.buildAnEchoJob( "ok" ) ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobFinishedCondition( brokerUnit, jobid ) ); JobStatusInfo job = brokerUnit.getJob( jobid ); assertEquals( GridProcessState.FINISHED, job.getState() ); for ( GridProcessStatusInfo gridProcess : job.getTasks().iterator().next().getGridProcesses() ) { System.out.println( gridProcess + " => " + gridProcess.getState() ); } // Only one replica because only one worker assertTrue( job.getTasks().iterator().next().getGridProcesses().size() == 1 ); verifyOnlyOneReplicaFinishedOthersAborted( job.getTasks().iterator().next() ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit, WorkerStatus.IDLE ) ); assertEquals( WorkerStatus.IDLE, workerUnit.getStatus().getStatus() ); } @Test public void testSimpleCaseAfterTheJobFinishedWithReplicationThreeWorkers() throws Exception { PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class ); BrokerUnit brokerUnit = new BrokerUnit(BrokerUnit.BROKER_PROPERTIES_FILENAME, 3); unitManager.addUnit(brokerUnit); WorkerUnit workerUnit1 = unitManager.buildNewUnit( WorkerUnit.class ); WorkerUnit workerUnit2 = unitManager.buildNewUnit( WORKER2_PROPERTIES_FILENAME, WorkerUnit.class ); WorkerUnit workerUnit3 = unitManager.buildNewUnit( WORKER3_PROPERTIES_FILENAME, WorkerUnit.class ); // // peerUnit.setWorkers( workerUnit1, workerUnit2, workerUnit3 ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit1, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit1 ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit2, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit2 ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit3, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit3 ) ); DeploymentID masterPeer = workerUnit1.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); assertEquals( WorkerStatus.IDLE, workerUnit1.getStatus().getStatus() ); masterPeer = workerUnit2.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); assertEquals( WorkerStatus.IDLE, workerUnit2.getStatus().getStatus() ); masterPeer = workerUnit3.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); assertEquals( WorkerStatus.IDLE, workerUnit3.getStatus().getStatus() ); peerUnit.addUser(brokerUnit.getLogin()); conditionExpecter.waitUntilConditionIsMet( new BrokerSetPeersCondition( brokerUnit, 1, true ) ); // assertEquals( State.UP, brokerUnit.getPeers().iterator().next().getState() ); assertTrue(brokerUnit.getPeers().iterator().next().isLogged()); int jobid = brokerUnit.addJob( UnitUtil.buildAnEchoJob( "ok" ) ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobFinishedCondition( brokerUnit, jobid ) ); JobStatusInfo job = brokerUnit.getJob( jobid ); assertEquals( GridProcessState.FINISHED, job.getState() ); assertTrue( job.getTasks().iterator().next().getGridProcesses().size() == 3 ); verifyOnlyOneReplicaFinishedOthersAborted( job.getTasks().iterator().next() ); verifyDifferentWorkers( job.getTasks().iterator().next() ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit1, WorkerStatus.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit2, WorkerStatus.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit3, WorkerStatus.IDLE ) ); } @Test public void testSimpleCaseAfterTheJobFinishedWithReplicationThreeWorkersWithManyTasks() throws Exception { PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class ); BrokerUnit brokerUnit = new BrokerUnit(BrokerUnit.BROKER_PROPERTIES_FILENAME, 5); List<WorkerUnit> workerUnits = new ArrayList<WorkerUnit>(); WorkerUnit workerUnit1 = unitManager.buildNewUnit( WorkerUnit.class ); WorkerUnit workerUnit2 = unitManager.buildNewUnit( WORKER2_PROPERTIES_FILENAME, WorkerUnit.class ); WorkerUnit workerUnit3 = unitManager.buildNewUnit( WORKER3_PROPERTIES_FILENAME, WorkerUnit.class ); // List<WorkerUnit> workerUnits = unitManager.buildAndStartManyUnits( WorkerUnit.class, 3 ); workerUnits.add(workerUnit1); workerUnits.add(workerUnit2); workerUnits.add(workerUnit3); peerUnit.initKeys(); brokerUnit.initKeys(); // peerUnit.setWorkers( workerUnits ); peerUnit.addUser(brokerUnit.getLogin()); int jobid = brokerUnit.addJob( UnitUtil.buildAnEchoJob( 10, "ok" ) ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobFinishedCondition( brokerUnit, jobid ) ); JobStatusInfo job = brokerUnit.getJob( jobid ); assertEquals( GridProcessState.FINISHED, job.getState() ); verifyOnlyOneReplicaFinishedOthersAborted( job.getTasks().iterator().next() ); verifyDifferentWorkers( job.getTasks().iterator().next() ); for ( Iterator<WorkerUnit> iter = workerUnits.iterator(); iter.hasNext(); ) { WorkerUnit workerUnit = iter.next(); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit, WorkerStatus.IDLE ) ); assertEquals( WorkerStatus.IDLE, workerUnit.getStatus().getStatus() ); } } @Test public void testSimpleCaseAfterTheJobFinishedNoReplicationThreeJobs() throws Exception { PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class ); BrokerUnit brokerUnit = unitManager.buildNewUnit( BrokerUnit.class ); WorkerUnit workerUnit1 = unitManager.buildNewUnit( WorkerUnit.class ); WorkerUnit workerUnit2 = unitManager.buildNewUnit( WORKER2_PROPERTIES_FILENAME, WorkerUnit.class ); WorkerUnit workerUnit3 = unitManager.buildNewUnit( WORKER3_PROPERTIES_FILENAME, WorkerUnit.class ); workerUnit1.initKeys(); workerUnit2.initKeys(); workerUnit3.initKeys(); peerUnit.initKeys(); brokerUnit.initKeys(); // // peerUnit.setWorkers( workerUnit1, workerUnit2, workerUnit3 ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit1, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit1 ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit2, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit2 ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit3, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit3 ) ); DeploymentID masterPeer = workerUnit1.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); assertEquals( WorkerStatus.IDLE, workerUnit1.getStatus().getStatus() ); masterPeer = workerUnit2.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); assertEquals( WorkerStatus.IDLE, workerUnit2.getStatus().getStatus() ); masterPeer = workerUnit3.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); assertEquals( WorkerStatus.IDLE, workerUnit3.getStatus().getStatus() ); peerUnit.addUser(brokerUnit.getLogin()); conditionExpecter.waitUntilConditionIsMet( new BrokerSetPeersCondition( brokerUnit, 1, true ) ); int jobid = brokerUnit.addJob( UnitUtil.buildAnEchoJob( "ok" ) ); int jobid2 = brokerUnit.addJob( UnitUtil.buildAnEchoJob( "ok" ) ); int jobid3 = brokerUnit.addJob( UnitUtil.buildAnEchoJob( "ok" ) ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobFinishedCondition( brokerUnit, jobid ) ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobFinishedCondition( brokerUnit, jobid2 ) ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobFinishedCondition( brokerUnit, jobid3 ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit1, WorkerStatus.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit2, WorkerStatus.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit3, WorkerStatus.IDLE ) ); } @Test public void testSimpleCaseDuringJobsNoReplicationThreeJobs() throws Exception { PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class ); BrokerUnit brokerUnit = unitManager.buildNewUnit( BrokerUnit.class ); WorkerUnit workerUnit1 = unitManager.buildNewUnit( WorkerUnit.class ); WorkerUnit workerUnit2 = unitManager.buildNewUnit( WORKER2_PROPERTIES_FILENAME, WorkerUnit.class ); WorkerUnit workerUnit3 = unitManager.buildNewUnit( WORKER3_PROPERTIES_FILENAME, WorkerUnit.class ); // // peerUnit.setWorkers( workerUnit1, workerUnit2, workerUnit3 ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit1, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit1 ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit2, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit2 ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit, workerUnit3, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerSetPeerCondition( workerUnit3 ) ); DeploymentID masterPeer = workerUnit1.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); assertEquals( WorkerStatus.IDLE, workerUnit1.getStatus().getStatus() ); masterPeer = workerUnit2.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); assertEquals( WorkerStatus.IDLE, workerUnit2.getStatus().getStatus() ); masterPeer = workerUnit3.getMasterPeer(); assertEquals( peerUnit.getLocation(), masterPeer.getContainerLocation() ); assertEquals( PeerConstants.MODULE_NAME, masterPeer.getContainerName() ); assertEquals( WorkerStatus.IDLE, workerUnit3.getStatus().getStatus() ); peerUnit.addUser(brokerUnit.getLogin()); conditionExpecter.waitUntilConditionIsMet( new BrokerSetPeersCondition( brokerUnit, 1, true ) ); // assertEquals( State.UP, brokerUnit.getPeers().iterator().next().getState() ); assertTrue(brokerUnit.getPeers().iterator().next().isLogged()); int jobid = brokerUnit.addJob( UnitUtil.buildASleepJob( Integer.MAX_VALUE ) ); int jobid2 = brokerUnit.addJob( UnitUtil.buildASleepJob( Integer.MAX_VALUE ) ); int jobid3 = brokerUnit.addJob( UnitUtil.buildASleepJob( Integer.MAX_VALUE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit1, WorkerStatus.ALLOCATED_FOR_BROKER ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit2, WorkerStatus.ALLOCATED_FOR_BROKER ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit3, WorkerStatus.ALLOCATED_FOR_BROKER ) ); assertTrue( peerUnit.getLocalWorkerStatus().size() == 3 ); for ( WorkerInfo workerInfo : peerUnit.getLocalWorkerStatus() ) { assertEquals( LocalWorkerState.IN_USE, workerInfo.getStatus() ); } conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, jobid ) ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, jobid2 ) ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobRunningCondition( brokerUnit, jobid3 ) ); JobStatusInfo job = brokerUnit.getJob( jobid ); JobStatusInfo job2 = brokerUnit.getJob( jobid2 ); JobStatusInfo job3 = brokerUnit.getJob( jobid3 ); assertTrue( job.getTasks().size() == 1 ); assertTrue( job2.getTasks().size() == 1 ); assertTrue( job3.getTasks().size() == 1 ); TaskStatusInfo task = job.getTasks().iterator().next(); TaskStatusInfo task2 = job2.getTasks().iterator().next(); TaskStatusInfo task3 = job3.getTasks().iterator().next(); assertTrue( task.getGridProcesses().size() == 1 ); assertTrue( task2.getGridProcesses().size() == 1 ); assertTrue( task3.getGridProcesses().size() == 1 ); GridProcessStatusInfo gridProcess = task.getGridProcesses().iterator().next(); GridProcessStatusInfo gridProcess2 = task2.getGridProcesses().iterator().next(); GridProcessStatusInfo gridProcess3 = task3.getGridProcesses().iterator().next(); brokerUnit.stop(); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit1, WorkerStatus.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit2, WorkerStatus.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new WorkerStatusCondition( workerUnit3, WorkerStatus.IDLE ) ); verifyDifferentWorkers( gridProcess, gridProcess2, gridProcess3 ); } @Test //TODO falta passar public void testSimpleCaseTwoWorkersManyShortJobs() throws Exception { final int JOBTOADD = 15; PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class ); BrokerUnit brokerUnit = new BrokerUnit(BrokerUnit.BROKER_PROPERTIES_FILENAME, 3, 1, 10, 2); WorkerUnit workerUnit1 = unitManager.buildNewUnit( WorkerUnit.class ); WorkerUnit workerUnit2 = unitManager.buildNewUnit(WORKER2_PROPERTIES_FILENAME, WorkerUnit.class ); // peerUnit.setWorkers( workerUnit1, workerUnit2 ); peerUnit.addUser(brokerUnit.getLogin()); for ( int i = 1; i <= JOBTOADD; i++ ) { brokerUnit.addJob( UnitUtil.buildASleepJob( 2, 2 ) ); } conditionExpecter.waitUntilConditionIsMet( new BrokerAllJobsFinishedCondition( brokerUnit ) ); brokerUnit.showStatus(); for ( int i = 1; i <= JOBTOADD; i++ ) { AbstractSystemTest.assertAllReplicasFinished( brokerUnit.getJob( i ).getTaskByID( 1 ).getGridProcesses() ); } } /** * Scenario: 1 Broker 4 Peers each one with one worker Broker connected with * this four peers 1 Job with 4 tasks Result: The 4 peers must put their * respective worker in IN_USE state */ @Test public void testFourTasks_FourPeers_EachOneWithOneWorker_AJobWith4Tasks() throws Exception { final int numberOfTaks = 4; final int numberOfReplicas = 1; PeerUnit peerUnit1 = unitManager.buildNewUnit( PeerUnit.class ); WorkerUnit workerUnit1 = unitManager.buildNewUnit( WorkerUnit.class ); PeerUnit peerUnit2 = unitManager.buildNewUnit( PEER2_PROPERTIES_FILENAME, PeerUnit.class ); WorkerUnit workerUnit2 = unitManager.buildNewUnit( WORKER2_PROPERTIES_FILENAME, WorkerUnit.class ); PeerUnit peerUnit3 = unitManager.buildNewUnit( PEER3_PROPERTIES_FILENAME, PeerUnit.class ); WorkerUnit workerUnit3 = unitManager.buildNewUnit( WORKER3_PROPERTIES_FILENAME, WorkerUnit.class ); PeerUnit peerUnit4 = unitManager.buildNewUnit( PEER4_PROPERTIES_FILENAME, PeerUnit.class ); WorkerUnit workerUnit4 = unitManager.buildNewUnit( WORKER4_PROPERTIES_FILENAME, WorkerUnit.class ); BrokerUnit brokerUnit = new BrokerUnit(BrokerUnit.BROKER_PROPERTIES_FILENAME, numberOfReplicas); System.out.println( "===> Remote entities started (4 peers, 4 workers, 1 Broker) <===" ); // peerUnit1.setWorkers( workerUnit1 ); // peerUnit2.setWorkers( workerUnit2 ); // peerUnit3.setWorkers( workerUnit3 ); // peerUnit4.setWorkers( workerUnit4 ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit1, workerUnit1, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit2, workerUnit2, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit3, workerUnit3, LocalWorkerState.IDLE ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit4, workerUnit4, LocalWorkerState.IDLE ) ); System.out.println( "===> Each peer has one worker set <===" ); peerUnit1.addUser(brokerUnit.getLogin()); peerUnit2.addUser(brokerUnit.getLogin()); peerUnit3.addUser(brokerUnit.getLogin()); peerUnit4.addUser(brokerUnit.getLogin()); conditionExpecter.waitUntilConditionIsMet( new BrokerSetPeersCondition( brokerUnit, 4, true ) ); System.out.println( "===> Broker knows 4 peers <===" ); int jobid = brokerUnit.addJob( UnitUtil.buildASleepJob( numberOfTaks, Integer.MAX_VALUE ) ); System.out.println( "===> Job added <===" ); conditionExpecter.waitUntilConditionIsMet( new BrokerNumberOfWorkersCondition( brokerUnit, 4, jobid ) ); System.out.println( "===> Broker is using 4 workers <===" ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit1, workerUnit1, LocalWorkerState.IN_USE ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit2, workerUnit2, LocalWorkerState.IN_USE ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit3, workerUnit3, LocalWorkerState.IN_USE ) ); conditionExpecter.waitUntilConditionIsMet( new PeerHasTheWorkerInStateCondition( peerUnit4, workerUnit4, LocalWorkerState.IN_USE ) ); System.out.println( "===> The 4 workers is in IN_USE state for each peer <===" ); } @Test public void testRunSimpleJob() throws Exception { final String simpleJob = RESOURCE_DIR + File.separator + "SimpleJob2.jdf"; JobSpecification spec = DescriptionFileCompile.compileJDF( simpleJob ); BrokerUnit brokerUnit = unitManager.buildNewUnit( BrokerUnit.class ); PeerUnit peerUnit = unitManager.buildNewUnit( PeerUnit.class ); WorkerUnit workerUnit = unitManager.buildNewUnit( WorkerUnit.class ); // peerUnit.setWorkers( workerUnit ); peerUnit.addUser(brokerUnit.getLogin()); int job1 = brokerUnit.addJob( spec ); conditionExpecter.waitUntilConditionIsMet( new BrokerJobStateCondition( brokerUnit, job1, GridProcessState.FINISHED ) ); } private void verifyDifferentWorkers( TaskStatusInfo task ) throws Exception { HashSet<ServiceID> serviceIDs = new LinkedHashSet<ServiceID>(); for ( GridProcessStatusInfo gridProcess : task.getGridProcesses() ) { serviceIDs.add( gridProcess.getWorkerInfo().getWorkerSpec().getServiceID() ); } if ( serviceIDs.size() != task.getGridProcesses().size() ) throw new Exception( "One worker executed more than one replica" ); } private void verifyDifferentWorkers( GridProcessStatusInfo... gridProcesses ) throws Exception { HashSet<ServiceID> serviceIDs = new LinkedHashSet<ServiceID>(); for ( GridProcessStatusInfo gridProcess : gridProcesses ) { serviceIDs.add( gridProcess.getWorkerInfo().getWorkerSpec().getServiceID() ); } System.out.println( serviceIDs ); System.out.println( Arrays.toString( gridProcesses ) ); if ( serviceIDs.size() != gridProcesses.length ) throw new Exception( "One worker executed more than one replica" ); } private void verifyOnlyOneReplicaFinishedOthersAborted( TaskStatusInfo task ) throws Exception { int numFinished = 0; int numAborted = 0; for ( GridProcessStatusInfo gridProcess : task.getGridProcesses() ) { if ( gridProcess.getState().equals(GridProcessState.FINISHED.toString()) ) { ++numFinished; } if ( gridProcess.getState().equals(GridProcessState.ABORTED.toString()) ) { ++numAborted; } } if ( numFinished == 0 ) throw new Exception( "Task Is Not Finished!" ); if ( numFinished > 1 ) throw new Exception( "More Than One Replica Finished, IMPOSSIBLE!" ); if ( numFinished + numAborted != task.getGridProcesses().size() ) throw new Exception( "Not All Replicas Were Aborted" ); } }