diff --git a/CHAOSFrameworkTests/CHAOSFrameworkTests.xcodeproj/project.pbxproj b/CHAOSFrameworkTests/CHAOSFrameworkTests.xcodeproj/project.pbxproj
index 709e302817fa5b2ffd5616d4fcd874a8ec316d91..2926c078aae755e53094e706d531ec4d2793c7e5 100644
--- a/CHAOSFrameworkTests/CHAOSFrameworkTests.xcodeproj/project.pbxproj
+++ b/CHAOSFrameworkTests/CHAOSFrameworkTests.xcodeproj/project.pbxproj
@@ -27,6 +27,7 @@
 		328CFCA41F7D4167002FEB25 /* QueuePriorityTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 328CFCA21F7D4167002FEB25 /* QueuePriorityTest.cpp */; };
 		329BF99A20AAFF1B0068F8EB /* DirectIOTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 329BF99820AAFF1B0068F8EB /* DirectIOTest.cpp */; };
 		32A735331F6C399E00008145 /* PropertyTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32A735311F6C399E00008145 /* PropertyTest.cpp */; };
+		32B8223420F6776E002BBCBA /* RPCTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32B8223220F6776E002BBCBA /* RPCTest.cpp */; };
 		32C180EF1FAB33CD00AFCC15 /* TestPlugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32C180EE1FAB33CD00AFCC15 /* TestPlugin.cpp */; };
 		32CBCB29205ECF11002FB95F /* ExternalUnitMulticlientTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32CBCB28205ECF11002FB95F /* ExternalUnitMulticlientTest.cpp */; };
 		32DA77741F94AD6D00497349 /* TestVariant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32DA77731F94AD6D00497349 /* TestVariant.cpp */; };
@@ -124,6 +125,8 @@
 		329BF99920AAFF1B0068F8EB /* DirectIOTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DirectIOTest.h; sourceTree = "<group>"; };
 		32A735311F6C399E00008145 /* PropertyTest.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PropertyTest.cpp; sourceTree = "<group>"; };
 		32A735321F6C399E00008145 /* PropertyTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PropertyTest.h; sourceTree = "<group>"; };
+		32B8223220F6776E002BBCBA /* RPCTest.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RPCTest.cpp; sourceTree = "<group>"; };
+		32B8223320F6776E002BBCBA /* RPCTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RPCTest.h; sourceTree = "<group>"; };
 		32C180EE1FAB33CD00AFCC15 /* TestPlugin.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TestPlugin.cpp; sourceTree = "<group>"; };
 		32C180F01FAB439300AFCC15 /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
 		32CBCB28205ECF11002FB95F /* ExternalUnitMulticlientTest.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ExternalUnitMulticlientTest.cpp; sourceTree = "<group>"; };
@@ -218,6 +221,7 @@
 			children = (
 				32C180F01FAB439300AFCC15 /* CMakeLists.txt */,
 				32639FE81F6AAD990049089C /* main.cpp */,
+				32B8223120F6774D002BBCBA /* rpc */,
 				329BF99720AAFF020068F8EB /* direct_io */,
 				32F8425B20162B32004D582D /* utility */,
 				32C180EC1FAB33A800AFCC15 /* plugin */,
@@ -324,6 +328,15 @@
 			path = direct_io;
 			sourceTree = "<group>";
 		};
+		32B8223120F6774D002BBCBA /* rpc */ = {
+			isa = PBXGroup;
+			children = (
+				32B8223220F6776E002BBCBA /* RPCTest.cpp */,
+				32B8223320F6776E002BBCBA /* RPCTest.h */,
+			);
+			path = rpc;
+			sourceTree = "<group>";
+		};
 		32C180EC1FAB33A800AFCC15 /* plugin */ = {
 			isa = PBXGroup;
 			children = (
@@ -591,6 +604,7 @@
 				32818B451F828FDB004A409E /* TestBatchCommand.cpp in Sources */,
 				327A4D241F90CB3200DA800C /* ExternalUnitTest.cpp in Sources */,
 				32818B431F828FDB004A409E /* TestCommandExecutor.cpp in Sources */,
+				32B8223420F6776E002BBCBA /* RPCTest.cpp in Sources */,
 				32DA77781F94B0D300497349 /* ScriptTest.cpp in Sources */,
 				328CFCA41F7D4167002FEB25 /* QueuePriorityTest.cpp in Sources */,
 				32CBCB29205ECF11002FB95F /* ExternalUnitMulticlientTest.cpp in Sources */,
diff --git a/CHAOSFrameworkTests/FrameworkTest/rpc/RPCTest.cpp b/CHAOSFrameworkTests/FrameworkTest/rpc/RPCTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7e7a1e0c8d6ed7c1e7c6356170d1b66940c7c990
--- /dev/null
+++ b/CHAOSFrameworkTests/FrameworkTest/rpc/RPCTest.cpp
@@ -0,0 +1,80 @@
+//
+//  RPCTest.cpp
+//  FrameworkTest
+//
+//  Created by Claudio Bisegni on 11/07/2018.
+//  Copyright © 2018 bisegni. All rights reserved.
+//
+
+#include "RPCTest.h"
+
+#include<chaos/common/global.h>
+#include<chaos/common/chaos_constants.h>
+#include<chaos/common/message/NodeMessageChannel.h>
+
+using namespace chaos::common::data;
+using namespace chaos::common::network;
+using namespace chaos::common::message;
+
+RpcHandler::RpcHandler() {
+    //register the action for the response
+    DeclareAction::addActionDescritionInstance<RpcHandler>(this,
+                                                           &RpcHandler::actionWithResult,
+                                                           "test_rpc",
+                                                           "actionWithResult",
+                                                           "actionWithResult");
+    DeclareAction::addActionDescritionInstance<RpcHandler>(this,
+                                                           &RpcHandler::actionWithNoResult,
+                                                           "test_rpc",
+                                                           "actionWithNoResult",
+                                                           "actionWithNoResult");
+}
+
+CDataWrapper *RpcHandler::actionWithResult(CDataWrapper *action_data, bool& detach) {
+    detach = true;
+    return action_data;
+}
+
+CDataWrapper *RpcHandler::actionWithNoResult(CDataWrapper *action_data, bool& detach) {
+    return NULL;
+}
+
+
+TEST_F(RPCTest, SendEcho) {
+    CDWUniquePtr pack(new CDataWrapper());
+    pack->addStringValue("echo", "value");
+    MessageChannel *msg_chnl = NetworkBroker::getInstance()->getRawMessageChannel();
+    ChaosUniquePtr<MessageRequestFuture> future = msg_chnl->sendRequestWithFuture("localhost:8888",
+                                                                                  chaos::NodeDomainAndActionRPC::RPC_DOMAIN,
+                                                                                  chaos::NodeDomainAndActionRPC::ACTION_ECHO_TEST,
+                                                                                  pack.get());
+    ASSERT_TRUE(future->wait(1000000));
+    
+    ASSERT_TRUE(future->getResult());
+    ASSERT_EQ(future->getResult()->getStringValue("echo").compare("value"), 0);
+}
+
+TEST_F(RPCTest, ActionResult) {
+    RpcHandler rpc_handler;
+    CDWUniquePtr pack(new CDataWrapper());
+    pack->addStringValue("echo", "value");
+    
+    NetworkBroker::getInstance()->registerAction(&rpc_handler);
+    MessageChannel *msg_chnl = NetworkBroker::getInstance()->getRawMessageChannel();
+    ChaosUniquePtr<MessageRequestFuture> future = msg_chnl->sendRequestWithFuture("localhost:8888",
+                                                                                  "test_rpc",
+                                                                                  "actionWithResult",
+                                                                                  pack.get());
+    ASSERT_TRUE(future->wait(1000000));
+    
+    ASSERT_TRUE(future->getResult());
+    ASSERT_EQ(future->getResult()->getStringValue("echo").compare("value"), 0);
+    future = msg_chnl->sendRequestWithFuture("localhost:8888",
+                                             "test_rpc",
+                                             "actionWithNoResult",
+                                             pack.get());
+    ASSERT_TRUE(future->wait(1000000));
+    
+    ASSERT_FALSE(future->getResult());
+    NetworkBroker::getInstance()->deregisterAction(&rpc_handler);
+}
diff --git a/CHAOSFrameworkTests/FrameworkTest/rpc/RPCTest.h b/CHAOSFrameworkTests/FrameworkTest/rpc/RPCTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..6e9ffd1328c499becc3c62e5fef616a8d9f3c4f6
--- /dev/null
+++ b/CHAOSFrameworkTests/FrameworkTest/rpc/RPCTest.h
@@ -0,0 +1,48 @@
+//
+//  RPCTest.hpp
+//  FrameworkTest
+//
+//  Created by Claudio Bisegni on 11/07/2018.
+//  Copyright © 2018 bisegni. All rights reserved.
+//
+
+#ifndef RPCTest_hpp
+#define RPCTest_hpp
+
+#include <gtest/gtest.h>
+#include <chaos/common/direct_io/DirectIO.h>
+#include <chaos/common/network/NetworkBroker.h>
+#include <chaos/common/configuration/GlobalConfiguration.h>
+#include <chaos/common/utility/InetUtility.h>
+#include <chaos/common/action/DeclareAction.h>
+class RpcHandler:
+public chaos::DeclareAction {
+public:
+    RpcHandler();
+protected:
+    chaos::common::data::CDataWrapper *actionWithResult(chaos::common::data::CDataWrapper *action_data, bool& detach);
+    chaos::common::data::CDataWrapper *actionWithNoResult(chaos::common::data::CDataWrapper *action_data, bool& detach);
+};
+
+class RPCTest:
+public testing::Test {
+public:
+    RPCTest(){}
+    
+    ~RPCTest(){}
+    
+    void SetUp() {
+        chaos::GlobalConfiguration::getInstance()->preParseStartupParameters();
+        chaos::GlobalConfiguration::getInstance()->parseStartupParameters(0, NULL);
+        std::string local_ip = chaos::common::utility::InetUtility::scanForLocalNetworkAddress();
+        chaos::GlobalConfiguration::getInstance()->addLocalServerAddress(local_ip);
+        ASSERT_NO_THROW(chaos::common::utility::StartableService::initImplementation(chaos::common::network::NetworkBroker::getInstance(), NULL, "NetworkBroker", __PRETTY_FUNCTION__););
+        ASSERT_NO_THROW(chaos::common::utility::StartableService::startImplementation(chaos::common::network::NetworkBroker::getInstance(),  "NetworkBroker", __PRETTY_FUNCTION__););
+    }
+    void TearDown() {
+        ASSERT_NO_THROW(chaos::common::utility::StartableService::stopImplementation(chaos::common::network::NetworkBroker::getInstance(),  "NetworkBroker", __PRETTY_FUNCTION__););
+        ASSERT_NO_THROW(chaos::common::utility::StartableService::deinitImplementation(chaos::common::network::NetworkBroker::getInstance(), "NetworkBroker", __PRETTY_FUNCTION__););
+    }
+};
+
+#endif /* RPCTest_hpp */