package org.ourgrid.system; import static java.io.File.separator; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.util.List; import java.util.UUID; import org.apache.log4j.BasicConfigurator; import org.junit.After; import org.junit.Before; import org.ourgrid.TestUtils; import org.ourgrid.broker.status.GridProcessStatusInfo; import org.ourgrid.common.config.Configuration; import org.ourgrid.common.interfaces.to.GridProcessState; import org.ourgrid.common.util.JavaFileUtil; import org.ourgrid.system.condition.ConditionExpecter; import org.ourgrid.system.config.FakeConfiguration; import org.ourgrid.system.units.UnitManager; public abstract class AbstractSystemTest { protected UnitManager unitManager; protected ConditionExpecter conditionExpecter; private TestUtils testUtils; public static final String ROOT_DIR = "."; public static final String RESOURCE_DIR = "test" + separator + "resources"; public static final String TEST_PROPERTIES = RESOURCE_DIR + separator + "test.properties"; public static final String TEMP_TEST_DIR = RESOURCE_DIR + separator + "tmp"; public static final File tempFileDir = new File( TEMP_TEST_DIR ); public static final File NONWRITABLE_DIR = new File( TEMP_TEST_DIR + separator + UUID.randomUUID().toString() ); public static final String ATT_REM_EXEC = "ssh -o StrictHostKeyChecking=no -x $machine $command"; public static final String ATT_COPY_FROM = "scp -o StrictHostKeyChecking=no $machine:$remotefile $localfile"; public static final String ATT_COPY_TO = "scp -o StrictHostKeyChecking=no $localfile $machine:$remotefile"; protected static final String WORKER2_PROPERTIES_FILENAME = "test" + separator + "system" + separator + "worker2.properties"; protected static final String WORKER3_PROPERTIES_FILENAME = "test" + separator + "system" + separator + "worker3.properties"; protected static final String WORKER4_PROPERTIES_FILENAME = "test" + separator + "system" + separator + "worker4.properties"; protected static final String PEER2_PROPERTIES_FILENAME = "test" + separator + "system" + separator + "peer2.properties"; protected static final String PEER3_PROPERTIES_FILENAME = "test" + separator + "system" + separator + "peer3.properties"; protected static final String PEER4_PROPERTIES_FILENAME = "test" + separator + "system" + separator + "peer4.properties"; @Before public void setUp() throws Exception { cleanDB(); BasicConfigurator.resetConfiguration(); BasicConfigurator.configure(); /*JICConfiguration.getInstance( RESOURCE_DIR + File.separator + "jic.properties" ); JICConfiguration.getInstance().setProperty( JICConfiguration.PROP_WAN_HEARTBEAT_DELAY, "5" ); JICConfiguration.getInstance().setProperty( JICConfiguration.PROP_WAN_DETECTION_TIME, "20" ); JICConfiguration.getInstance().setProperty( JICConfiguration.PROP_LAN_HEARTBEAT_DELAY, "5" ); JICConfiguration.getInstance().setProperty( JICConfiguration.PROP_LAN_DETECTION_TIME, "20" ); JICConfiguration.getInstance().setProperty( JICConfiguration.PROP_LOCAL_DETECTION_TIME, "6" ); JICConfiguration.getInstance().setProperty( JICConfiguration.PROP_LOCAL_HEARTBEAT_DELAY, "2" );*/ createTempDirectory(); Configuration.getInstance( FakeConfiguration.FAKE ); //JICModuleFactory.destroy(); //JICModuleFactory.buildInstance( JICModuleFactory.ModuleType.ACCESSPOINT ); // JICModuleFactory.buildInstance( JICModuleFactory.ModuleType.SINGLEJVM // ); UnitManager.destroy(); this.conditionExpecter = new ConditionExpecter(); this.unitManager = UnitManager.getInstance(); testUtils = new TestUtils(); testUtils.load(); // FileTransferNegotiator.IBB_ONLY = true; // System.setOut(new PrintStream(new NullStream())); } private void cleanDB() { try { Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); String database = "jdbc:derby:db/peer"; Connection con = DriverManager.getConnection( database ,"",""); Statement s = con.createStatement(); s.execute("DELETE FROM ATTRIBUTE"); s.execute("DELETE FROM BALANCE_VALUE"); s.execute("DELETE FROM BALANCE"); s.execute("DELETE FROM COMMAND"); s.execute("DELETE FROM EXECUTION"); s.execute("DELETE FROM WORKER_STATUS_CHANGE"); s.execute("DELETE FROM PEER_STATUS_CHANGE"); s.execute("DELETE FROM TASK"); s.execute("DELETE FROM JOB"); s.execute("DELETE FROM LOGIN"); s.execute("DELETE FROM T_USERS"); s.execute("DELETE FROM WORKER"); s.execute("DELETE FROM PEER"); s.close(); con.close(); } catch (Exception e) { System.out.println("Error: " + e); } } protected String[ ] getAvailableWorkerMachines() { return testUtils.getProperty( "workers.list" ).split( "," ); } @After public void tearDown() throws Exception { unitManager.destroyAllLivingUnits(); UnitManager.destroy(); //JICModuleFactory.destroy(); //JICConfiguration.reset(); destroyTempDirectory(); this.unitManager = null; this.conditionExpecter = null; this.testUtils.reset(); this.testUtils = null; System.gc(); BasicConfigurator.resetConfiguration(); } private void createTempDirectory() { destroyTempDirectory(); tempFileDir.mkdir(); NONWRITABLE_DIR.mkdir(); NONWRITABLE_DIR.setReadOnly(); } private void destroyTempDirectory() { if ( NONWRITABLE_DIR != null ) { JavaFileUtil.deleteDir( NONWRITABLE_DIR ); } if ( tempFileDir != null && tempFileDir.exists() ) { JavaFileUtil.deleteDir( tempFileDir ); } } protected static void assertAllReplicasFinished( List<GridProcessStatusInfo> replicas ) { for ( GridProcessStatusInfo replica : replicas ) { if ( !replica.getState().equals(GridProcessState.FINISHED) && !replica.getState().equals(GridProcessState.ABORTED) ) { throw new AssertionError( "Replica " + replica.getHandle() + " should have finished or aborted" ); } } } private class NullStream extends OutputStream { @Override public void write( int b ) throws IOException { } } }