From 83dcf40bc12ea56d92424e8a72cdebf540df5cdb Mon Sep 17 00:00:00 2001
From: Claudio Bisegni <Claudio.Bisegni@lnf.infn.it>
Date: Mon, 13 Nov 2017 14:27:50 +0100
Subject: [PATCH] fixed microunit tk

---
 chaos/common/data/CDataWrapper.cpp            | 19 +++++++++++++++----
 chaos/common/data/CDataWrapper.h              |  3 +++
 .../http_adapter/HTTPBaseAdapter.h            |  4 ++--
 .../http_adapter/HTTPServerAdapter.cpp        |  2 +-
 .../ExternalBSONExtJsonSerialization.cpp      |  2 +-
 .../unit_proxy/UnitProxyHandlerWrapper.cpp    |  1 +
 .../raw_driver/RawDriverUnitProxy.cpp         | 14 +++++++-------
 7 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/chaos/common/data/CDataWrapper.cpp b/chaos/common/data/CDataWrapper.cpp
index 0fa52e787..ed9aff2ba 100644
--- a/chaos/common/data/CDataWrapper.cpp
+++ b/chaos/common/data/CDataWrapper.cpp
@@ -456,7 +456,7 @@ uint32_t CDataWrapper::getValueSize(const std::string& key) const{
             return array_len;
         }
         case BSON_TYPE_DOCUMENT:{
-        	   return v->value.v_doc.data_len;
+            return v->value.v_doc.data_len;
         }
         default:
             return 0;
@@ -491,7 +491,7 @@ const char * CDataWrapper::getRawValuePtr(const std::string& key) const{
             return reinterpret_cast<const char*>(array);
         }
         case BSON_TYPE_DOCUMENT:{
-        	   return reinterpret_cast<const char*>(v->value.v_doc.data);
+            return reinterpret_cast<const char*>(v->value.v_doc.data);
         }
         default:
             return NULL;
@@ -548,6 +548,17 @@ string CDataWrapper::getJSONString()  const{
     bson_free(str_c);
     return result;
 }
+
+//return the json data
+string CDataWrapper::getCompliantJSONString()  const{
+    size_t str_size = 0;
+    char * str_c = bson_as_json(ACCESS_BSON(bson),
+                                &str_size);
+    std::string result(str_c);
+    bson_free(str_c);
+    return result;
+}
+
 //reinitialize the object with bson data
 void CDataWrapper::setSerializedData(const char* bson_data) {
     bson_iter_t it;
@@ -569,8 +580,8 @@ void CDataWrapper::setSerializedJsonData(const char* json_data) {
     bson_error_t err;
     size_t len = (size_t)strlen(json_data);
     bson =ALLOCATE_BSONT(bson_new_from_json((const uint8_t*)json_data,
-                                      len,
-                                      &err));
+                                            len,
+                                            &err));
     CHAOS_ASSERT(bson);
 }
 
diff --git a/chaos/common/data/CDataWrapper.h b/chaos/common/data/CDataWrapper.h
index a0f67f026..29fe0b972 100644
--- a/chaos/common/data/CDataWrapper.h
+++ b/chaos/common/data/CDataWrapper.h
@@ -267,6 +267,9 @@ namespace chaos {
                 //return the json representation for this data wrapper
                 string getJSONString() const;
                 
+                //return a compliatn json serialization
+                string getCompliantJSONString() const;
+                
                 //reinitialize the object with bson data
                 void setSerializedData(const char* bsonData);
                 
diff --git a/chaos/common/external_unit/http_adapter/HTTPBaseAdapter.h b/chaos/common/external_unit/http_adapter/HTTPBaseAdapter.h
index 533ba7f23..7b3868dd5 100644
--- a/chaos/common/external_unit/http_adapter/HTTPBaseAdapter.h
+++ b/chaos/common/external_unit/http_adapter/HTTPBaseAdapter.h
@@ -55,7 +55,7 @@ namespace chaos {
                         chaos::common::data::CDataWrapper err_data_pack;
                         err_data_pack.addInt32Value("error_code", error_code);
                         err_data_pack.addStringValue("error_message", error_message);
-                        const std::string json_error = err_data_pack.getJSONString();
+                        const std::string json_error = err_data_pack.getCompliantJSONString();
                         mg_send_head(nc, 400, 0, "Content-Type: application/json");
                         mg_printf(nc, "%s", json_error.c_str());
                     }
@@ -67,7 +67,7 @@ namespace chaos {
                         chaos::common::data::CDataWrapper err_data_pack;
                         err_data_pack.addInt32Value("error_code", error_code);
                         err_data_pack.addStringValue("error_message", error_message);
-                        const std::string json_error = err_data_pack.getJSONString();
+                        const std::string json_error = err_data_pack.getCompliantJSONString();
                         mg_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, json_error.c_str(), json_error.size());
                         if(close_connection){mg_send_websocket_frame(nc, WEBSOCKET_OP_CLOSE, NULL, 0);}
                     }
diff --git a/chaos/common/external_unit/http_adapter/HTTPServerAdapter.cpp b/chaos/common/external_unit/http_adapter/HTTPServerAdapter.cpp
index 932be7973..cab2cef1a 100644
--- a/chaos/common/external_unit/http_adapter/HTTPServerAdapter.cpp
+++ b/chaos/common/external_unit/http_adapter/HTTPServerAdapter.cpp
@@ -265,7 +265,7 @@ void HTTPServerAdapter::sendWSJSONAcceptedConnection(mg_connection *nc,
                                                      bool close_connection) {
     chaos::common::data::CDataWrapper err_data_pack;
     err_data_pack.addInt32Value("accepted_connection", accepted);
-    const std::string accepted_json = err_data_pack.getJSONString();
+    const std::string accepted_json = err_data_pack.getCompliantJSONString();
     mg_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, accepted_json.c_str(), accepted_json.size());
     if(close_connection){mg_send_websocket_frame(nc, WEBSOCKET_OP_CLOSE, NULL, 0);}
 }
diff --git a/chaos/common/external_unit/serialization/ExternalBSONExtJsonSerialization.cpp b/chaos/common/external_unit/serialization/ExternalBSONExtJsonSerialization.cpp
index e54f0c5f9..d498a521a 100644
--- a/chaos/common/external_unit/serialization/ExternalBSONExtJsonSerialization.cpp
+++ b/chaos/common/external_unit/serialization/ExternalBSONExtJsonSerialization.cpp
@@ -32,7 +32,7 @@ ExternalBSONExtJsonSerialization::ExternalBSONExtJsonSerialization(){}
 ExternalBSONExtJsonSerialization::~ExternalBSONExtJsonSerialization(){}
 
 ChaosUniquePtr<CDataBuffer> ExternalBSONExtJsonSerialization::serialize(const CDataWrapper& cdw_in) {
-    const std::string json_result = cdw_in.getJSONString();
+    const std::string json_result = cdw_in.getCompliantJSONString();
     return ChaosUniquePtr<CDataBuffer>(new CDataBuffer(json_result.c_str(), (uint32_t)json_result.size(), true));
 }
 
diff --git a/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.cpp b/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.cpp
index c1f5bdb5a..3e48eb62e 100644
--- a/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.cpp
+++ b/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.cpp
@@ -111,6 +111,7 @@ int UnitProxyHandlerWrapper::eventLoop(int32_t milliseconds_wait) {
     
     while ( base_unit->hasMoreMessage()) {
         RemoteMessageUniquePtr msg =  base_unit->getNextMessage();
+        std::cout << msg->message->toString();
         if(msg->isError()) {
             UPError err_msg = {msg->getErrorCode(),
                 msg->getErrorMessage(),
diff --git a/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/RawDriverUnitProxy.cpp b/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/RawDriverUnitProxy.cpp
index ce1eaaa65..79b12d549 100644
--- a/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/RawDriverUnitProxy.cpp
+++ b/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/RawDriverUnitProxy.cpp
@@ -26,10 +26,10 @@ using namespace chaos::micro_unit_toolkit::connection;
 using namespace chaos::micro_unit_toolkit::connection::unit_proxy;
 using namespace chaos::micro_unit_toolkit::connection::unit_proxy::raw_driver;
 
-#define AUTHORIZATION_KEY        "authorization_key"
-#define AUTHORIZATION_STATE      "authorization_state"
-#define MESSAGE                 "message"
-#define REQUEST_IDENTIFICATION  "request_id"
+#define AUTHORIZATION_KEY           "authorization_key"
+#define AUTHORIZATION_STATE         "authorization_state"
+#define MESSAGE                     "msg"
+#define REQUEST_IDENTIFICATION      "req_id"
 
 const ProxyType RawDriverUnitProxy::proxy_type = ProxyTypeRawDriver;
 
@@ -60,7 +60,7 @@ bool RawDriverUnitProxy::manageAutorizationPhase() {
 
 int RawDriverUnitProxy::sendMessage(DataPackUniquePtr& message_data) {
     DataPackUniquePtr message(new DataPack());
-    message->addDataPack("message", *message_data);
+    message->addDataPack(MESSAGE, *message_data);
     return AbstractUnitProxy::sendMessage(message);
 }
 
@@ -68,7 +68,7 @@ int RawDriverUnitProxy::sendAnswer(RemoteMessageUniquePtr& message,
                                   DataPackUniquePtr& message_data) {
     if(message->is_request == false) return - 1;
     DataPackUniquePtr answer(new DataPack());
-    answer->addInt32("request_id", message->message_id);
-    answer->addDataPack("message", *message_data);
+    answer->addInt32(REQUEST_IDENTIFICATION, message->message_id);
+    answer->addDataPack(MESSAGE, *message_data);
     return AbstractUnitProxy::sendMessage(answer);
 }
-- 
GitLab