package manualTests;
import com.google.gson.Gson;
import net.tomp2p.peers.PeerAddress;
import se.chalmers.gdcn.communicationToUI.ClientInterface;
import se.chalmers.gdcn.control.PeerOwner;
import se.chalmers.gdcn.control.TaskManager;
import se.chalmers.gdcn.files.TaskMeta;
import se.chalmers.gdcn.files.TaskMetaDataException;
import se.chalmers.gdcn.network.StringHolder;
import se.chalmers.gdcn.taskbuilder.communicationToClient.TaskListener;
import se.chalmers.gdcn.taskbuilder.fileManagement.Install;
import se.chalmers.gdcn.taskbuilder.fileManagement.PathManager;
import java.io.*;
import java.util.concurrent.Semaphore;
/**
* Created by Leif on 2014-04-01.
*
* Not really Unit testing but manual testing...
*
* @deprecated Does not read tasks from file anymore but sends in messages
*/
public class TaskManagerManual {
public static void main(String[] args){
final Semaphore semaphore = new Semaphore(0);
final TaskListener firstTaskListener = new TaskListener() {
@Override
public void taskFinished(String taskName) {
System.out.println("Task finished "+taskName);
semaphore.release();
}
@Override
public void taskFailed(String taskName, String reason) {
System.out.println("Task failed "+taskName);
System.out.println("because of: "+reason);
semaphore.release();
}
};
final ClientInterface client = new PeerOwner();
client.start(11789);
/*
try {
TaskManager manager = new TaskManager(firstTaskListener, client);
manager.uploadJob("Job1", new ReplicaManager(1));
System.out.println("Await task response");
semaphore.acquireUninterruptibly();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("\n-- ENTER Second part! --");
try {
executeTaskTest(client, "PrimeTask_01");
System.out.println("\n-- ENTER Third part: next generation tasks! --");
executeTaskTest(client, "PrimeTask_02");
executeTaskTest(client, "PrimeTask_03");
} catch (Exception e) {
e.printStackTrace();
} finally {
client.stop();
}
*/
}
public static void main2(String[] args){
ClientInterface client = new PeerOwner();
client.start(8056);
try {
executeTaskTest(client, "PrimeTask_02");
} catch (Exception e) {
e.printStackTrace();
} finally {
client.stop();
}
}
private static void executeTaskTest(ClientInterface client, String taskName) throws Exception{
final Semaphore semaphore = new Semaphore(0);
final TaskListener mainTaskListener = new TaskListener() {
@Override
public void taskFinished(String taskName) {
System.out.println("Task finished "+taskName);
semaphore.release();
}
@Override
public void taskFailed(String taskName, String reason) {
System.out.println("Task failed "+taskName);
System.out.println("because of: "+reason);
semaphore.release();
}
};
Install.install();
//Might want to copy "dGDCN/" to "~/.gdcn/"
PathManager pathManager = PathManager.worker("Primes");
pathManager.deleteBinaries();
TaskManager manager = new TaskManager(mainTaskListener, client);
TaskMeta taskMeta = resolveMetaFile(taskName, pathManager);
manager.startTask("Primes", taskMeta, new StringHolder(), new PeerAddress(client.getID()), null);
System.out.println("Await task response");
semaphore.acquireUninterruptibly();
}
/**
*
* @param taskName Name of task, ie without ".json"
* @param pathManager Pathmanager to correct directory
* @return TaskMeta of this task (replica)
* @throws TaskMetaDataException
*/
public static TaskMeta resolveMetaFile(String taskName, PathManager pathManager) throws TaskMetaDataException {
final File file = new File(pathManager.taskMetaDir() + taskName + ".json");
if(file.exists()){
System.out.println("Downloader: YAY file exist!");
try {
return readMetaFile(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
throw new TaskMetaDataException("Error reading file: "+file.getAbsolutePath());
}
/**
* Parses file for MetaData of Task
*
* @param file Path to meta data file
* @return Representation of meta data content
* @throws FileNotFoundException if file isn't found
*/
private static TaskMeta readMetaFile(File file) throws FileNotFoundException {
Reader reader = null;
try {
reader = new InputStreamReader(new BufferedInputStream(new FileInputStream(file)));
Gson gson = new Gson();
return gson.fromJson(reader, TaskMeta.class);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}