// Path: src/main/java/com/sulaco/fuse/akka/actor/FuseEndpointActor.java
// public abstract class FuseEndpointActor extends FuseBaseActor {
//     
//     @Autowired protected MetricsRegistry metrics;
//     
//     public FuseEndpointActor() {
//         super();
//     }
// 
//     // TODO: refactor metrics
//     //            meter = metrics.getRegistry().timer(getClass().getName());
// 
//     @Override
//     public void onReceive(Object message) throws Exception {
//         try {
//             if (message instanceof FuseRequestMessage) {
//                 onRequest((FuseRequestMessage) message);
//                 //proto.error((FuseRequestMessage) message);
//             }
//             else {
//                 super.onReceive(message);
//             }
//         }
//         catch (Exception ex) {
//             log.error("Error handling request !", ex);
//             unhandled(message);
//         }
//         finally {
//             // TODO: context flush
//         }
//     }
//     
//     protected void onRequest(final FuseRequestMessage request) {
//         
//         RouteHandler rhandler = request.getHandler();
//         
//         Optional<String> method = rhandler.getMethodName();
//         
//         if (method.isPresent()) {
//             // Invoke configured method instead of default 'onReceive'. Method needs to have correct
//             // signature, otherwise, fallback to 'onReceive' will occur.
//             //
//             Optional<Method> target = lookupMethod(this, method.get());
//             if (target.isPresent()) {
//                 try {
//                     target.get()
//                           .invoke(this, request);
//                 }
//                 catch (Exception ex) {
//                     log.warn("[fuse] Invocation failure. x_x", ex);
//                 }
//             }       
//         }
//         else {
//             log.warn("[fuse] No handling method specified. Override onReceive. x_x");
//         }
//     }
// 
// 
// 
//     @Override
//     public void unhandled(Object message) {
//         super.unhandled(message);
//         if (message instanceof FuseRequestMessage) {
//             proto.error((FuseRequestMessage) message);
//         }
//     }
// 
//     public void setProto(WireProtocol proto) {
//         this.proto = proto;
//     }
// 
//     protected static final Logger log = LoggerFactory.getLogger(FuseEndpointActor.class);
// }
// 
// Path: src/main/java/com/sulaco/fuse/codec/WireProtocol.java
// public interface WireProtocol {
//     
//     void ok(FuseRequestMessage message);
// 
// 
//     void respond(FuseRequestMessage message, Object object);
//     
//     void respond(FuseRequestMessage message, String content);
//     
//     void respondRaw(FuseRequestMessage message, HttpResponseStatus status, ByteBuffer data, Map<String, String> headers);
// 
//     
//     void error(FuseRequestMessage message);
//     
//     void error(FuseRequestMessage message, Object object);
// 
//     void error(FuseRequestMessage message, String content);
//     
//     void error(FuseRequestMessage message, HttpResponseStatus status, Object object);
// 
//     void error(FuseRequestMessage message, HttpResponseStatus status, String content);
//     
// 
//     <T> Optional<T> read(FuseRequestMessage message, Class<T> clazz);
// 
//     default void stream(FuseRequestMessage message, Path path) {
// 
//         if (!message.flushed()) {
//             ChannelHandlerContext ctx = message.getChannelContext();
//             HttpResponse response = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.OK);
// 
//             long size = WireProtocol.getFileSize(path);
// 
//             response.headers().set(CONTENT_LENGTH, size);
// 
//             ctx.write(response);
// 
//             try {
//                 ctx.write(
//                     new DefaultFileRegion(FileChannel.open(path), 0, size)
//                 );
// 
//                 ChannelFuture cfuture = ctx.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
// 
//                 if (!isKeepAlive(message.getRequest())) {
//                     cfuture.addListener(ChannelFutureListener.CLOSE);
//                 }
//             }
//             catch (Exception ex) {
//                 log.error("Error streaming file !", ex);
//                 ctx.close();
//             }
//         }
//     }
// 
//     static long getFileSize(Path path) {
//         try {
//             return Files.size(path);
//         }
//         catch (Exception ex) {
//             log.warn("Error getting file size ! {}", path, ex);
//             return -1;
//         }
//     }
// 
//     static final Logger log = LoggerFactory.getLogger(WireProtocol.class);
// }


import akka.actor.Actor;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.testkit.TestActorRef;
import com.codahale.metrics.Timer;
import com.sulaco.fuse.akka.actor.FuseEndpointActor;
import com.sulaco.fuse.codec.WireProtocol;
import org.junit.Ignore;
import org.mockito.Mock;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;
import static org.mockito.Mockito.when;
package com.sulaco.fuse;



@Ignore
public class ActorAwareTest {

    ActorSystem system = ActorSystem.create("test");

    @Mock protected ApplicationContext mockAppCtx;

    @Mock protected AutowireCapableBeanFactory mockAutowireFactory;

// Path: src/main/java/com/sulaco/fuse/akka/actor/FuseEndpointActor.java
// public abstract class FuseEndpointActor extends FuseBaseActor {
//     
//     @Autowired protected MetricsRegistry metrics;
//     
//     public FuseEndpointActor() {
//         super();
//     }
// 
//     // TODO: refactor metrics
//     //            meter = metrics.getRegistry().timer(getClass().getName());
// 
//     @Override
//     public void onReceive(Object message) throws Exception {
//         try {
//             if (message instanceof FuseRequestMessage) {
//                 onRequest((FuseRequestMessage) message);
//                 //proto.error((FuseRequestMessage) message);
//             }
//             else {
//                 super.onReceive(message);
//             }
//         }
//         catch (Exception ex) {
//             log.error("Error handling request !", ex);
//             unhandled(message);
//         }
//         finally {
//             // TODO: context flush
//         }
//     }
//     
//     protected void onRequest(final FuseRequestMessage request) {
//         
//         RouteHandler rhandler = request.getHandler();
//         
//         Optional<String> method = rhandler.getMethodName();
//         
//         if (method.isPresent()) {
//             // Invoke configured method instead of default 'onReceive'. Method needs to have correct
//             // signature, otherwise, fallback to 'onReceive' will occur.
//             //
//             Optional<Method> target = lookupMethod(this, method.get());
//             if (target.isPresent()) {
//                 try {
//                     target.get()
//                           .invoke(this, request);
//                 }
//                 catch (Exception ex) {
//                     log.warn("[fuse] Invocation failure. x_x", ex);
//                 }
//             }       
//         }
//         else {
//             log.warn("[fuse] No handling method specified. Override onReceive. x_x");
//         }
//     }
// 
// 
// 
//     @Override
//     public void unhandled(Object message) {
//         super.unhandled(message);
//         if (message instanceof FuseRequestMessage) {
//             proto.error((FuseRequestMessage) message);
//         }
//     }
// 
//     public void setProto(WireProtocol proto) {
//         this.proto = proto;
//     }
// 
//     protected static final Logger log = LoggerFactory.getLogger(FuseEndpointActor.class);
// }
// 
// Path: src/main/java/com/sulaco/fuse/codec/WireProtocol.java
// public interface WireProtocol {
//     
//     void ok(FuseRequestMessage message);
// 
// 
//     void respond(FuseRequestMessage message, Object object);
//     
//     void respond(FuseRequestMessage message, String content);
//     
//     void respondRaw(FuseRequestMessage message, HttpResponseStatus status, ByteBuffer data, Map<String, String> headers);
// 
//     
//     void error(FuseRequestMessage message);
//     
//     void error(FuseRequestMessage message, Object object);
// 
//     void error(FuseRequestMessage message, String content);
//     
//     void error(FuseRequestMessage message, HttpResponseStatus status, Object object);
// 
//     void error(FuseRequestMessage message, HttpResponseStatus status, String content);
//     
// 
//     <T> Optional<T> read(FuseRequestMessage message, Class<T> clazz);
// 
//     default void stream(FuseRequestMessage message, Path path) {
// 
//         if (!message.flushed()) {
//             ChannelHandlerContext ctx = message.getChannelContext();
//             HttpResponse response = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.OK);
// 
//             long size = WireProtocol.getFileSize(path);
// 
//             response.headers().set(CONTENT_LENGTH, size);
// 
//             ctx.write(response);
// 
//             try {
//                 ctx.write(
//                     new DefaultFileRegion(FileChannel.open(path), 0, size)
//                 );
// 
//                 ChannelFuture cfuture = ctx.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
// 
//                 if (!isKeepAlive(message.getRequest())) {
//                     cfuture.addListener(ChannelFutureListener.CLOSE);
//                 }
//             }
//             catch (Exception ex) {
//                 log.error("Error streaming file !", ex);
//                 ctx.close();
//             }
//         }
//     }
// 
//     static long getFileSize(Path path) {
//         try {
//             return Files.size(path);
//         }
//         catch (Exception ex) {
//             log.warn("Error getting file size ! {}", path, ex);
//             return -1;
//         }
//     }
// 
//     static final Logger log = LoggerFactory.getLogger(WireProtocol.class);
// }


// Path: src/test/java/com/sulaco/fuse/ActorAwareTest.java
import akka.actor.Actor;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.testkit.TestActorRef;
import com.codahale.metrics.Timer;
import com.sulaco.fuse.akka.actor.FuseEndpointActor;
import com.sulaco.fuse.codec.WireProtocol;
import org.junit.Ignore;
import org.mockito.Mock;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;
import static org.mockito.Mockito.when;

package com.sulaco.fuse;



@Ignore
public class ActorAwareTest {

    ActorSystem system = ActorSystem.create("test");

    @Mock protected ApplicationContext mockAppCtx;

    @Mock protected AutowireCapableBeanFactory mockAutowireFactory;

    @Mock protected WireProtocol mockProto;