package uk.ac.imperial.lsds.seep.comm.serialization.kryoserializers;
import static org.junit.Assert.assertTrue;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.ByteBufferInputStream;
import com.esotericsoftware.kryo.io.ByteBufferOutputStream;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import uk.ac.imperial.lsds.seep.api.DataReference;
import uk.ac.imperial.lsds.seep.comm.protocol.MasterWorkerCommand;
import uk.ac.imperial.lsds.seep.comm.protocol.MaterializeTaskCommand;
import uk.ac.imperial.lsds.seep.comm.protocol.ProtocolCommandFactory;
import uk.ac.imperial.lsds.seep.comm.serialization.KryoFactory;
import uk.ac.imperial.lsds.seep.infrastructure.ControlEndPoint;
import uk.ac.imperial.lsds.seep.infrastructure.DataEndPoint;
import uk.ac.imperial.lsds.seep.infrastructure.SeepEndPoint;
public class MaterializeTaskCommandSerializerTest {
public MasterWorkerCommand get() {
Map<Integer, ControlEndPoint> mapping = new HashMap<>();
InetAddress ip = null;
try {
ip = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mapping.put(1, new ControlEndPoint(2000, ip.getHostAddress(), 3000));
Set<DataReference> r = new HashSet<>();
// r.add(DataReference.makeExternalDataReference(null, new EndPoint(1000, ip, 1000)));
r.add(DataReference.makeExternalDataReference(null));
Map<Integer, Set<DataReference>> refs = new HashMap<>();
refs.put(3, r);
Map<Integer, Map<Integer, Set<DataReference>>> inputs = new HashMap<>();
inputs.put(666, refs);
Map<Integer, Map<Integer, Set<DataReference>>> outputs = new HashMap<>();
outputs.put(777, refs);
return (MasterWorkerCommand) ProtocolCommandFactory.buildMaterializeTaskCommand(mapping, inputs, outputs);
}
@Test
public void test() {
// MasterWorkerCommand mtc = get();
//
// // Serialise object
// Kryo k = KryoFactory.buildKryoForMasterWorkerProtocol();
// ByteBufferOutputStream o = new ByteBufferOutputStream(20000);
// Output output = new Output(o);
// k.writeObject(output, mtc, new MaterializeTaskCommandSerializer());
// output.flush();
//
// //copy output to input
// byte[] data = o.getByteBuffer().array();
//
// ByteBufferInputStream i = new ByteBufferInputStream();
// i.setByteBuffer(ByteBuffer.wrap(data));
//
// // Deserialise object
//
// Input input = new Input(i);
// MasterWorkerCommand d = k.readObject(input, mtc.getClass(), new MaterializeTaskCommandSerializer());
// MaterializeTaskCommand de = d.getMaterializeTaskCommand();
//
// assertTrue(de.getMapping() != null);
//// assertTrue(de.getInputs() != null);
// assertTrue(de.getOutputs() != null);
}
@Test
public void test2() {
// MasterWorkerCommand mtc = get();
//
// // Serialise object
// Kryo k = KryoFactory.buildKryoForMasterWorkerProtocol();
// ByteBufferOutputStream o = new ByteBufferOutputStream(20000);
// Output output = new Output(o);
// k.writeObject(output, mtc, new com.esotericsoftware.kryo.serializers.JavaSerializer());
// output.flush();
//
// //copy output to input
// byte[] tx = o.getByteBuffer().array();
//
// ByteBufferInputStream i = new ByteBufferInputStream();
// i.setByteBuffer(ByteBuffer.wrap(tx));
//
// // Deserialise object
// Input input = new Input(i);
// MasterWorkerCommand d = k.readObject(input, mtc.getClass(), new MaterializeTaskCommandSerializer());
// MaterializeTaskCommand de = d.getMaterializeTaskCommand();
//
// assertTrue(de.getMapping() != null);
//// assertTrue(de.getInputs() != null);
// assertTrue(de.getOutputs() != null);
}
@Test
public void test3(){
MasterWorkerCommand mtc = get();
// Serialise object
Kryo k = KryoFactory.buildKryoForProtocolCommands(this.getClass().getClassLoader());
ByteBufferOutputStream o = new ByteBufferOutputStream(20000);
Output output = new Output(o);
k.writeObject(output, mtc);
output.flush();
//copy output to input
byte[] tx = o.getByteBuffer().array();
ByteBufferInputStream i = new ByteBufferInputStream();
i.setByteBuffer(ByteBuffer.wrap(tx));
// Deserialise object
Input input = new Input(i);
MasterWorkerCommand d = k.readObject(input, mtc.getClass());
MaterializeTaskCommand de = d.getMaterializeTaskCommand();
assertTrue(de.getMapping() != null);
assertTrue(de.getInputs() != null);
assertTrue(de.getOutputs() != null);
}
}