hce-node application  1.4.3
HCE Hierarchical Cluster Engine node application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
DRCEActionTypesTest.cpp
Go to the documentation of this file.
1 #include <gtest/gtest.h>
2 #include <fstream>
3 #include <iostream>
4 #include <utility>
5 #include <iomanip>
6 #include <Poco/File.h>
7 #include <Poco/Path.h>
8 
9 #include "DRCEError.hpp"
10 #include "DRCESessionOptions.hpp"
11 #include "DRCETaskRequest.hpp"
14 #include "DRCEFunctionalObject.hpp"
16 #include "DRCEResultData.hpp"
17 
18 #include "DRCEPrintStatus.hpp"
19 #include "DRCEActionTypesTest.hpp"
23 
24 namespace HCE
25 {
26 namespace drce
27 {
28 namespace tests
29 {
30 //-----------------------------------------------------------------------------
32 {
33  const std::string fileName = "file1";
34  const std::string fileData = "data1";
35 
37  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
38  fObj.setNodeHost("NODE_HOST");
39  fObj.setNodePort("NODE_PORT");
40  fObj.setNodeName("NODE_NAME");
41 
42  std::stringstream sourceJson;
43  DRCETaskRequestSetExecute sourceMessage;
44 
45  sourceMessage.addFileItem(fileName, fileData, FileItem::CREATE_BEFORE_EXEC_AND_WRITE_DATA);
46 
47  sourceJson << sourceMessage;
48 
49 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
50 
51  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
52  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
53  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
54  printSuccess("DRCETaskRequestSetExecute serialize");
55 
56  DRCEInputJsonMessage inputJsonMessage;
57  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
58  inputJsonMessage.setRequestData(sourceJson.str());
59  inputJsonMessage.setRequestId(2345);
60 
61  sourceJson.str("");
62  sourceJson << inputJsonMessage;
63 
64  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
65  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
66  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
67  printSuccess("DRCETaskRequest serialize");
68 
69  std::string resultJson = fObj.Process(sourceJson.str());
70 
71 // std::cout << "resultJson = " << resultJson << std::endl;
72 
73  ASSERT_FALSE(fObj.isError()) << printError(fObj);
74  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
75  ASSERT_TRUE(fObj.getErrorMsg().empty());
76  printSuccess("DRCEFunctionalObject Process");
77 
78  DRCEOutputJsonMessage responseJsonMessage(resultJson);
79 
80  ASSERT_FALSE(responseJsonMessage.isError()) << printError(responseJsonMessage);
81  ASSERT_EQ(responseJsonMessage.getErrorCode(), NO_ERROR);
82  ASSERT_TRUE(responseJsonMessage.getErrorMsg().empty());
83  printSuccess("DRCEOutputJsonMessage unserialize");
84 
85  ASSERT_EQ(responseJsonMessage.getResultData().getItemsCount(), 1);
86 
87  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
88  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
89  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
90  ASSERT_TRUE(responseJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
91  ASSERT_TRUE(responseJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
92  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getFilesCount(), 0);
93 
94  std::ifstream ifs(fileName.c_str());
95  ASSERT_TRUE(ifs.is_open());
96 
97  std::string content;
98  ifs.seekg(0, std::ios::end);
99  content.resize(ifs.tellg());
100  ifs.seekg(0, std::ios::beg);
101  ifs.read(const_cast<char*>(content.c_str()), content.size());
102  ifs.close();
103  ASSERT_EQ(content, fileData);
104 
105  Poco::File testFile(fileName);
106  if (testFile.exists())
107  testFile.remove();
108  printSuccess("Test actionType CREATE_BEFORE_EXEC_AND_WRITE_DATA");
109 }
110 //-----------------------------------------------------------------------------
112 {
113  const std::string fileName = "file1";
114  const std::string fileData = "data1";
115 
117  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
118  fObj.setNodeHost("NODE_HOST");
119  fObj.setNodePort("NODE_PORT");
120  fObj.setNodeName("NODE_NAME");
121 
122  std::ofstream ofs(fileName.c_str(), std::fstream::trunc);
123  ofs << fileData;
124  ofs.close();
125 
126  std::stringstream sourceJson;
127  DRCETaskRequestSetExecute sourceMessage;
128 
129  sourceMessage.addFileItem(fileName, "", FileItem::DELETE_BEFORE_EXEC);
130 
131  sourceJson << sourceMessage;
132 
133 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
134 
135  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
136  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
137  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
138  printSuccess("DRCETaskRequestSetExecute serialize");
139 
140  DRCEInputJsonMessage inputJsonMessage;
141  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
142  inputJsonMessage.setRequestData(sourceJson.str());
143  inputJsonMessage.setRequestId(2345);
144 
145  sourceJson.str("");
146  sourceJson << inputJsonMessage;
147 
148  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
149  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
150  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
151  printSuccess("DRCETaskRequest serialize");
152 
153  std::string resultJson = fObj.Process(sourceJson.str());
154 
155 // std::cout << "resultJson = " << resultJson << std::endl;
156 
157  ASSERT_FALSE(fObj.isError()) << printError(fObj);
158  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
159  ASSERT_TRUE(fObj.getErrorMsg().empty());
160  printSuccess("DRCEFunctionalObject Process");
161 
162  DRCEOutputJsonMessage responseJsonMessage(resultJson);
163 
164  ASSERT_FALSE(responseJsonMessage.isError()) << printError(responseJsonMessage);
165  ASSERT_EQ(responseJsonMessage.getErrorCode(), NO_ERROR);
166  ASSERT_TRUE(responseJsonMessage.getErrorMsg().empty());
167  printSuccess("DRCEOutputJsonMessage unserialize");
168 
169  ASSERT_EQ(responseJsonMessage.getResultData().getItemsCount(), 1);
170 
171  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
172  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
173  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
174  ASSERT_TRUE(responseJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
175  ASSERT_TRUE(responseJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
176  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getFilesCount(), 0);
177 
178  Poco::File testFile(fileName);
179  ASSERT_FALSE(testFile.exists());
180  printSuccess("Test actionType DELETE_BEFORE_EXEC");
181 }
182 //-----------------------------------------------------------------------------
184 {
185  const std::string fileName = "file1";
186  const std::string fileData = "data1";
187 
189  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
190  fObj.setNodeHost("NODE_HOST");
191  fObj.setNodePort("NODE_PORT");
192  fObj.setNodeName("NODE_NAME");
193 
194  Poco::Path testPath(fileName);
195  Poco::File testFile(testPath.absolute().toString());
196 
197  std::ofstream ofs(testFile.path().c_str(), std::fstream::trunc);
198  ofs << fileData << std::flush;
199  ofs.close();
200 
201  Poco::Thread::sleep(2000);
202 
203  std::stringstream sourceJson;
204  DRCETaskRequestSetExecute sourceMessage;
205 
206  sourceMessage.addFileItem(testFile.path(), "", FileItem::READ_AFTER_EXEC_AND_RETURN_RESULT);
207 
208  sourceJson << sourceMessage;
209 
210 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
211 
212  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
213  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
214  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
215  printSuccess("DRCETaskRequestSetExecute serialize");
216 
217  DRCEInputJsonMessage inputJsonMessage;
218  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
219  inputJsonMessage.setRequestData(sourceJson.str());
220  inputJsonMessage.setRequestId(234567);
221 
222  sourceJson.str("");
223  sourceJson << inputJsonMessage;
224 
225  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
226  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
227  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
228  printSuccess("DRCETaskRequest serialize");
229 
230  std::string resultJson = fObj.Process(sourceJson.str());
231 
232  std::cout << "resultJson = " << resultJson << std::endl;
233 
234  ASSERT_FALSE(fObj.isError()) << printError(fObj);
235  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
236  ASSERT_TRUE(fObj.getErrorMsg().empty());
237  printSuccess("DRCEFunctionalObject Process");
238 
239  DRCEOutputJsonMessage responseJsonMessage(resultJson);
240 
241  ASSERT_FALSE(responseJsonMessage.isError()) << printError(responseJsonMessage);
242  ASSERT_EQ(responseJsonMessage.getErrorCode(), NO_ERROR);
243  ASSERT_TRUE(responseJsonMessage.getErrorMsg().empty());
244  printSuccess("DRCEOutputJsonMessage unserialize");
245 
246  ASSERT_EQ(responseJsonMessage.getResultData().getItemsCount(), 1);
247 
248  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
249  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
250  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
251  ASSERT_TRUE(responseJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
252  ASSERT_TRUE(responseJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
253  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getFilesCount(), 1);
254 
256  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getFileItem(0).name, testFile.path());
257  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getFileItem(0).data, fileData);
258 
259  if (testFile.exists())
260  testFile.remove();
261  printSuccess("Test actionType READ_AFTER_EXEC_AND_RETURN_RESULT");
262 }
263 //-----------------------------------------------------------------------------
265 {
266  const std::string fileName = "file1";
267  const std::string fileData = "data1";
268 
270  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
271  fObj.setNodeHost("NODE_HOST");
272  fObj.setNodePort("NODE_PORT");
273  fObj.setNodeName("NODE_NAME");
274 
275  std::ofstream ofs(fileName.c_str());
276  ofs << fileData;
277  ofs.close();
278 
279  std::stringstream sourceJson;
280  DRCETaskRequestSetExecute sourceMessage;
281 
282  sourceMessage.addFileItem(fileName, "", FileItem::DELETE_AFTER_EXEC);
283 
284  sourceJson << sourceMessage;
285 
286 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
287 
288  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
289  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
290  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
291  printSuccess("DRCETaskRequestSetExecute serialize");
292 
293  DRCEInputJsonMessage inputJsonMessage;
294  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
295  inputJsonMessage.setRequestData(sourceJson.str());
296  inputJsonMessage.setRequestId(2345);
297 
298  sourceJson.str("");
299  sourceJson << inputJsonMessage;
300 
301  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
302  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
303  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
304  printSuccess("DRCETaskRequest serialize");
305 
306  std::string resultJson = fObj.Process(sourceJson.str());
307 
308 // std::cout << "resultJson = " << resultJson << std::endl;
309 
310  ASSERT_FALSE(fObj.isError()) << printError(fObj);
311  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
312  ASSERT_TRUE(fObj.getErrorMsg().empty());
313  printSuccess("DRCEFunctionalObject Process");
314 
315  DRCEOutputJsonMessage responseJsonMessage(resultJson);
316 
317  ASSERT_FALSE(responseJsonMessage.isError()) << printError(responseJsonMessage);
318  ASSERT_EQ(responseJsonMessage.getErrorCode(), NO_ERROR);
319  ASSERT_TRUE(responseJsonMessage.getErrorMsg().empty());
320  printSuccess("DRCEOutputJsonMessage unserialize");
321 
322  ASSERT_EQ(responseJsonMessage.getResultData().getItemsCount(), 1);
323 
324  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
325  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
326  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
327  ASSERT_TRUE(responseJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
328  ASSERT_TRUE(responseJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
329  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getFilesCount(), 0);
330 
331  Poco::File testFile(fileName);
332  ASSERT_FALSE(testFile.exists());
333  printSuccess("Test actionType DELETE_AFTER_EXEC");
334 }
335 //-----------------------------------------------------------------------------
337 {
338  const std::string fileName = "file1";
339  const std::string fileData = "data1";
340 
342  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
343  fObj.setNodeHost("NODE_HOST");
344  fObj.setNodePort("NODE_PORT");
345  fObj.setNodeName("NODE_NAME");
346 
347  std::stringstream sourceJson;
348  DRCETaskRequestSetExecute sourceMessage;
349 
350  sourceMessage.addFileItem(fileName, DRCEEncodeBase64(fileData),
353 
354  sourceJson << sourceMessage;
355 
356 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
357 
358  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
359  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
360  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
361  printSuccess("DRCETaskRequestSetExecute serialize");
362 
363  DRCEInputJsonMessage inputJsonMessage;
364  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
365  inputJsonMessage.setRequestData(sourceJson.str());
366  inputJsonMessage.setRequestId(2345);
367 
368  sourceJson.str("");
369  sourceJson << inputJsonMessage;
370 
371  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
372  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
373  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
374  printSuccess("DRCETaskRequest serialize");
375 
376  std::string resultJson = fObj.Process(sourceJson.str());
377 
378 // std::cout << "resultJson = " << resultJson << std::endl;
379 
380  ASSERT_FALSE(fObj.isError()) << printError(fObj);
381  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
382  ASSERT_TRUE(fObj.getErrorMsg().empty());
383  printSuccess("DRCEFunctionalObject Process");
384 
385  DRCEOutputJsonMessage responseJsonMessage(resultJson);
386 
387  ASSERT_FALSE(responseJsonMessage.isError()) << printError(responseJsonMessage);
388  ASSERT_EQ(responseJsonMessage.getErrorCode(), NO_ERROR);
389  ASSERT_TRUE(responseJsonMessage.getErrorMsg().empty());
390  printSuccess("DRCEOutputJsonMessage unserialize");
391 
392  ASSERT_EQ(responseJsonMessage.getResultData().getItemsCount(), 1);
393 
394  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
395  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
396  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
397  ASSERT_TRUE(responseJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
398  ASSERT_TRUE(responseJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
399  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getFilesCount(), 1);
400 
401  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getFileItem(0).actionType,
406 
407  ASSERT_EQ(responseJsonMessage.getResultData().getDataItem(0).getFileItem(0).name, fileName);
408  ASSERT_EQ(DRCEDecodeBase64(responseJsonMessage.getResultData().getDataItem(0).getFileItem(0).data), fileData);
409 
410  Poco::File testFile(fileName);
411  ASSERT_FALSE(testFile.exists());
412  printSuccess("Test actionType ENCODE_DECODE_CONTENT_BASE64");}
413 //-----------------------------------------------------------------------------
414 //-----------------------------------------------------------------------------
415 } // namespace tests
416 } // namespace drce
417 } // namespace HCE