package bftsmart;
import java.io.IOException;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import bftsmart.reconfiguration.StatusReply;
import bftsmart.reconfiguration.TTP;
public class TestFixture {
private static Process replica0;
private static Process replica1;
private static Process replica2;
private static Process replica3;
private static ConsoleLogger log0;
private static ConsoleLogger log1;
private static ConsoleLogger log2;
private static ConsoleLogger log3;
private static String[] command = new String[5];
private static TTP ttp;
@BeforeClass
public static void startServers() {
try {
System.out.println("Starting the servers");
command[0] = "java";
command[1] = "-cp";
command[2] = "bin/BFT-SMaRt.jar:lib/slf4j-api-1.5.8.jar:lib/slf4j-jdk14-1.5.8.jar:lib/netty-3.1.1.GA.jar:lib/commons-codec-1.5.jar";
command[3] = "bftsmart.demo.bftmap.BFTMapServer";
command[4] = "0";
startServer(0);
Thread.sleep(2000);
startServer(1);
Thread.sleep(2000);
startServer(2);
Thread.sleep(2000);
startServer(3);
} catch(InterruptedException ie) {
System.out.println("Exception during Thread sleep: " + ie.getMessage());
}
}
@AfterClass
public static void stopServers() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, IOException {
System.out.println("Stopping servers");
stopServer(0);
stopServer(1);
stopServer(2);
stopServer(3);
System.out.println("Servers stopped");
}
public static void stopServer(int id) {
switch(id) {
case 0:
replica0.destroy();
break;
case 1:
replica1.destroy();
break;
case 2:
replica2.destroy();
break;
case 3:
replica3.destroy();
break;
default:
System.out.println("### Couldn't stop server. Server not found ###");
break;
}
}
public static void startServer(int id) {
command[4] = String.valueOf(id);
try {
switch(id) {
case 0:
replica0 = new ProcessBuilder(command).redirectErrorStream(true).start();
log0 = new ConsoleLogger();
log0.setIn(replica0.getInputStream());
log0.setOut(System.out);
log0.setIndex(String.valueOf(id));
log0.start();
break;
case 1:
replica1 = new ProcessBuilder(command).redirectErrorStream(true).start();
log1 = new ConsoleLogger();
log1.setIn(replica1.getInputStream());
log1.setOut(System.out);
log1.setIndex(String.valueOf(id));
log1.start();
break;
case 2:
replica2 = new ProcessBuilder(command).redirectErrorStream(true).start();
log2 = new ConsoleLogger();
log2.setIn(replica2.getInputStream());
log2.setOut(System.out);
log2.setIndex(String.valueOf(id));
log2.start();
break;
case 3:
replica3 = new ProcessBuilder(command).redirectErrorStream(true).start();
log3 = new ConsoleLogger();
log3.setIn(replica3.getInputStream());
log3.setOut(System.out);
log3.setIndex(String.valueOf(id));
log3.start();
break;
default:
System.out.println("Id not supported");
break;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static StatusReply askStatus(int replicaId) {
if(ttp == null)
ttp = new TTP();
StatusReply reply = ttp.askStatus(replicaId);
System.out.println("---- Status atual: " + reply);
return reply;
}
}