GCC Code Coverage Report


Directory: ./
File: src/PAbstractConnector.h
Date: 2024-12-09 11:00:39
Exec Total Coverage
Lines: 36 40 90.0%
Branches: 32 58 55.2%

Line Branch Exec Source
1 /***************************************
2 Auteur : Pierre Aubert
3 Mail : pierre.aubert@lapp.in2p3.fr
4 Licence : CeCILL-C
5 ****************************************/
6
7 #ifndef __PABSTRACTCONNECTOR_H__
8 #define __PABSTRACTCONNECTOR_H__
9
10 #include "PAbstractInternalVar.h"
11
12 ///@brief Abstract connector to exchange data/states/method calls with other server/client
13 template<typename _TBackend, typename _TMockBackend>
14 class PAbstractConnector{
15 public:
16 PAbstractConnector(ConnectorMode::ConnectorMode mode, const typename _TMockBackend::Param & param, typename _TBackend::Manager * manager, typename _TMockBackend::Manager * mockManager);
17 virtual ~PAbstractConnector();
18
19 bool createClientConnector(const std::string & address, const typename _TBackend::Param & param);
20 bool createServerConnector(const std::string & address, const typename _TBackend::Param & param);
21
22 bool registerVar(const PComposeVar & composeVar);
23 bool registerCall(const PFunctionPrototype & prototype);
24
25 bool pushMsg(const std::string & varName, const typename _TBackend::Message & msg);
26 template<typename T>
27 72 bool pushData(const std::string & varName, const T & data){
28 72 size_t dataSize(data_size<T>(data));
29 72 bool b(true);
30
2/2
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 20 times.
72 if(p_mode != ConnectorMode::MOCK){
31
1/1
✓ Branch 2 taken 52 times.
52 typename _TBackend::Message msg(dataSize);
32
1/1
✓ Branch 1 taken 52 times.
52 char* iter = _TMockBackend::msgData(msg);
33
2/3
✓ Branch 1 taken 52 times.
✓ Branch 3 taken 52 times.
✗ Branch 4 not taken.
52 if(data_message_save<char*, T>(iter, data)){ //Save the message
34
1/1
✓ Branch 1 taken 52 times.
52 b &= _TBackend::push(p_connector, varName, msg);
35 }
36 52 }
37
3/4
✓ Branch 0 taken 30 times.
✓ Branch 1 taken 42 times.
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
72 if(p_mode != ConnectorMode::NO_MOCK && b){
38 30 typename _TMockBackend::Message vecTmpMsg;
39
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 _TMockBackend::msgResize(vecTmpMsg, dataSize);
40
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 char* iter = _TMockBackend::msgData(vecTmpMsg);
41
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
30 if(data_message_save<char*, T>(iter, data)){ //Save the message
42
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 b &= _TMockBackend::push(p_mockConnector, varName, vecTmpMsg);
43 }
44 30 }
45 72 return b;
46 }
47
48 bool pullMsg(const std::string & varName, typename _TBackend::Message & msg);
49 template<typename T>
50 30 bool pullData(const std::string & varName, T & data){
51 30 bool b(true);
52
1/2
✓ Branch 0 taken 30 times.
✗ Branch 1 not taken.
30 if(p_mode != ConnectorMode::MOCK){ //If we are not in mock mode, we use the backend as usual
53 30 typename _TBackend::Message msg;
54
2/3
✓ Branch 1 taken 30 times.
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
30 if(_TBackend::pull(p_connector, varName, msg)){
55
3/3
✓ Branch 1 taken 30 times.
✓ Branch 3 taken 20 times.
✓ Branch 4 taken 10 times.
30 if(_TBackend::msgSize(msg) != 0lu){ //The message can be empty
56
1/2
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
20 char* iter = _TMockBackend::msgData(msg);
57
1/2
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
20 b &= data_message_load<T>(iter, data); //Load the message
58 }
59 }
60 30 }
61
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 30 times.
30 if(p_mode == ConnectorMode::MOCK){
62 typename _TMockBackend::Message vecTmpMsg;
63 if(_TMockBackend::pull(p_mockConnector, varName, vecTmpMsg)){
64 char* iter = _TMockBackend::msgData(vecTmpMsg);
65 b &= data_message_load<T>(iter, data); //Load the message
66 }
67
2/2
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 20 times.
30 }else if(p_mode == ConnectorMode::MOCK_RECORD){
68
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 size_t dataSize(data_size<T>(data));
69 10 typename _TMockBackend::Message vecTmp;
70
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 _TMockBackend::msgResize(vecTmp, dataSize);
71
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 char* iter = _TMockBackend::msgData(vecTmp);
72
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
10 if(data_message_save<char*, T>(iter, data)){ //Save the message
73
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
10 b &= _TMockBackend::pull(p_mockConnector, varName, vecTmp); //Save converted msg in mock pull
74 }
75 10 }
76 30 return b;
77 }
78
79 bool call(PFunctionCall & methodCall);
80 void setMapInternalVarPtr(std::map<std::string, PGenericInternalVar<_TBackend, _TMockBackend>* > * mapInternalVar);
81
82 private:
83 void initialisationPAbstractConnector(ConnectorMode::ConnectorMode mode, const typename _TMockBackend::Param & mockparam, typename _TBackend::Manager * manager, typename _TMockBackend::Manager * mockManager);
84
85 ///Connector to be used to call other server/client
86 typename _TBackend::Connector p_connector;
87 ///Mode of the Connector (no mock, mock, mock_record)
88 ConnectorMode::ConnectorMode p_mode;
89 ///Parameters of the mock backend
90 typename _TMockBackend::Param p_mockParam;
91 ///TODO : for the future : Limit the number of recorded states to use less memory
92 // size_t p_limitNbState;
93 ///Contains all the mock information
94 typename _TMockBackend::Connector p_mockConnector;
95 ///Map of internal variables (will be allocated by PAbstractConnectorManager)
96 std::map<std::string, PGenericInternalVar<_TBackend, _TMockBackend>* > * p_mapInternalVar;
97
98 ///Data of the manager
99 typename _TBackend::Manager* p_manager;
100 ///Data of the mock manager
101 typename _TMockBackend::Manager* p_mockManager;
102 };
103
104 #include "PAbstractConnector_impl.h"
105
106
107 #endif
108
109