//package hl7;
//
//import ca.uhn.hl7v2.DefaultHapiContext;
//import ca.uhn.hl7v2.HL7Exception;
//import ca.uhn.hl7v2.HapiContext;
//import ca.uhn.hl7v2.app.Connection;
//import ca.uhn.hl7v2.app.Initiator;
//import ca.uhn.hl7v2.app.SimpleServer;
//import ca.uhn.hl7v2.model.Message;
//import ca.uhn.hl7v2.model.v26.message.ADT_A01;
//import org.apache.synapse.transport.passthru.util.BufferFactory;
//import org.junit.After;
//import org.junit.Before;
//import org.junit.Test;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.wso2.carbon.inbound.endpoint.protocol.hl7.codec.HL7Codec;
//import org.wso2.carbon.inbound.endpoint.protocol.hl7.context.MLLPContext;
//import org.wso2.carbon.inbound.endpoint.protocol.hl7.core.HL7Processor;
//import org.wso2.carbon.inbound.endpoint.protocol.hl7.core.InboundHL7IOReactor;
//import org.wso2.carbon.inbound.endpoint.protocol.hl7.core.MLLProtocolException;
//
//import java.io.IOException;
//import java.nio.ByteBuffer;
//import java.nio.charset.Charset;
//import java.nio.charset.CharsetDecoder;
//
//import static org.junit.Assert.*;
//
//public class MinLowerLayerProtocolTest {
// private static final Logger log = LoggerFactory.getLogger(MinLowerLayerProtocolTest.class);
//
//
// private MLLPContext context;
// private HL7Codec codec;
// private String message;
// private byte [] llpEncodedMessage;
// private ByteBuffer req;
// private BufferFactory bufferFactory;
// private CharsetDecoder charsetDecoder = Charset.forName("UTF-8").newDecoder();
//
// @Before
// public void config() throws Exception {
// System.setProperty("ca.uhn.hl7v2.llp.logBytesRead", "FALSE");
// System.setProperty("ca.uhn.hl7v2.util.status.out", "");
// context = new MLLPContext(null, charsetDecoder, true, true,null, bufferFactory);
// codec = context.getCodec();
// message = "MSH|^~\\&|||||20150403091225.929+0530||ADT^A01^ADT_A01|208601|T|2.6";
// llpEncodedMessage = (MllpTestConstants.START_BYTE + message + MllpTestConstants.END_BYTE1 + MllpTestConstants.END_BYTE1 + MllpTestConstants.END_BYTE2).getBytes();
// req = ByteBuffer.allocate(llpEncodedMessage.length);
// req.put(llpEncodedMessage);
// }
//
// @After
// public void cleanup() throws Exception {
// context = null;
// codec = null;
// message = null;
// llpEncodedMessage = null;
// }
//
//
// /**
// * Testing constructor
// */
// @Test
// public void testConstructor() {
// assertNotNull("Codec object present", codec);
// }
//
// /**
// * Testing decode
// */
// @Test
// public void testDecode() throws HL7Exception, IOException, MLLProtocolException {
// assertNull(context.getHl7Message());
// codec.decode(req, context);
// req.flip();
// assertNotNull("Should have encoded HL7 message", context.getHl7Message());
// }
//
// /**
// * Testing encode
// */
// @Test
// public void testEncode() throws HL7Exception, IOException, MLLProtocolException {
// assertNull(context.getHl7Message());
// codec.decode(req, context);
// req.flip();
// assertNotNull(context.getHl7Message());
// ByteBuffer outBuff = ByteBuffer.allocate(1024);
// codec.encode(outBuff, context);
//
// byte[] ack = new byte[outBuff.remaining()];
// outBuff.get(ack);
// String v = new String( ack, Charset.forName("UTF-8"));
// log.info("ACK: " + v);
// assertTrue(v.contains("ACK^A01^ACK"));
// }
//
// @Test
// public void testReceiveWithDelayInBetween() throws Exception {
//
// int port = 20000;
//
// InboundHL7IOReactor.start();
//
// HL7Processor hl7Processor = new HL7Processor(null);
//
// InboundHL7IOReactor.bind(port, hl7Processor);
//
// Thread.sleep(2000);
//
// HapiContext context = new DefaultHapiContext();
// Connection c = context.newClient("127.0.0.1", port, false);
// Initiator initiator = c.getInitiator();
//
// ADT_A01 msg = new ADT_A01();
// msg.initQuickstart("ADT", "A01", "T");
// Message resp1 = initiator.sendAndReceive(msg);
// log.info(resp1.encode());
// assertNotNull(resp1);
//
// Thread.sleep(SimpleServer.SO_TIMEOUT + 500);
//
// msg.initQuickstart("ADT", "A01", "T");
// Message resp2 = initiator.sendAndReceive(msg);
// log.info(resp2.encode());
// assertNotNull(resp2);
//
// c.close();
// Thread.sleep(SimpleServer.SO_TIMEOUT + 500);
//
// InboundHL7IOReactor.stop();
// }
//
//}
//
//