hce-node application  1.4.3
HCE Hierarchical Cluster Engine node application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
DRCERequestLocalShellTest.cpp
Go to the documentation of this file.
1 #include <gtest/gtest.h>
2 #include <fstream>
3 #include <utility>
4 #include <Poco/File.h>
5 
6 #include "DRCEError.hpp"
7 #include "DRCESessionOptions.hpp"
11 #include "DRCEFunctionalObject.hpp"
13 #include "DRCEResultData.hpp"
15 
17 #include "DRCEPrintStatus.hpp"
19 #include "DRCECleanupTest.hpp"
20 
21 namespace HCE
22 {
23 namespace drce
24 {
25 namespace tests
26 {
27 //-----------------------------------------------------------------------------
29 {
31  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
32  fObj.setNodeHost("NODE_HOST");
33  fObj.setNodePort("NODE_PORT");
34  fObj.setNodeName("NODE_NAME");
35 
36  std::stringstream sourceJson;
37  DRCETaskRequestSetExecute sourceMessage;
38 
39  sourceJson << sourceMessage;
40 
41 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
42 
43  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
44  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
45  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
46  printSuccess("DRCETaskRequestSetExecute serialize");
47 
48  DRCEInputJsonMessage inputJsonMessage;
49  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
50  inputJsonMessage.setRequestData(sourceJson.str());
51  inputJsonMessage.setRequestId(2345);
52 
53  sourceJson.str("");
54  sourceJson << inputJsonMessage;
55 
56  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
57  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
58  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
59  printSuccess("DRCEInputJsonMessage serialize");
60 
61  std::string resultJson = fObj.Process(sourceJson.str());
62 
63 // std::cout << "resultJson = " << resultJson << std::endl;
64 
65  ASSERT_FALSE(fObj.isError()) << printError(fObj);
66  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
67  ASSERT_TRUE(fObj.getErrorMsg().empty());
68  printSuccess("DRCEFunctionalObject Process");
69 
70  DRCEOutputJsonMessage resultJsonMessage(resultJson);
71 
72  ASSERT_FALSE(resultJsonMessage.isError()) << printError(resultJsonMessage);
73  ASSERT_EQ(resultJsonMessage.getErrorCode(), NO_ERROR);
74  ASSERT_TRUE(resultJsonMessage.getErrorMsg().empty());
75  printSuccess("DRCEOutputJsonMessage unserialize");
76 
77  ASSERT_EQ(resultJsonMessage.getResultData().getItemsCount(), 1);
78  ASSERT_TRUE(resultJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
79  ASSERT_TRUE(resultJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
80  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
81  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
82  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
83 
85  printSuccess("Test Empty Command");
86 }
87 //-----------------------------------------------------------------------------
89 {
91  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
92  fObj.setNodeHost("NODE_HOST");
93  fObj.setNodePort("NODE_PORT");
94  fObj.setNodeName("NODE_NAME");
95 
96  std::stringstream sourceJson;
97  DRCETaskRequestSetExecute sourceMessage;
98  sourceMessage.setCommandLine("sort");
99  sourceMessage.setInputStream("def\nabc\n123\n");
100 
101  sourceJson << sourceMessage;
102 
103 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
104 
105  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
106  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
107  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
108  printSuccess("DRCETaskRequestSetExecute serialize");
109 
110  DRCEInputJsonMessage inputJsonMessage;
111  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
112  inputJsonMessage.setRequestData(sourceJson.str());
113  inputJsonMessage.setRequestId(2345);
114 
115  sourceJson.str("");
116  sourceJson << inputJsonMessage;
117 
118  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
119  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
120  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
121  printSuccess("DRCEInputJsonMessage serialize");
122 
123  std::string resultJson = fObj.Process(sourceJson.str());
124 
125 // std::cout << "resultJson = " << resultJson << std::endl;
126 
127  ASSERT_FALSE(fObj.isError()) << printError(fObj);
128  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
129  ASSERT_TRUE(fObj.getErrorMsg().empty());
130  printSuccess("DRCEFunctionalObject Process");
131 
132  DRCEOutputJsonMessage resultJsonMessage(resultJson);
133 
134  ASSERT_FALSE(resultJsonMessage.isError()) << printError(resultJsonMessage);
135  ASSERT_EQ(resultJsonMessage.getErrorCode(), NO_ERROR);
136  ASSERT_TRUE(resultJsonMessage.getErrorMsg().empty());
137  printSuccess("DRCEOutputJsonMessage unserialize");
138 
139  ASSERT_EQ(resultJsonMessage.getResultData().getItemsCount(), 1);
140  ASSERT_TRUE(resultJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
141  ASSERT_FALSE(resultJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
142  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
143  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
144  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
145 
147  printSuccess("Test InputStream with Command");
148 }
149 //-----------------------------------------------------------------------------
151 {
153  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
154  fObj.setNodeHost("NODE_HOST");
155  fObj.setNodePort("NODE_PORT");
156  fObj.setNodeName("NODE_NAME");
157 
158  std::stringstream sourceJson;
159  DRCETaskRequestSetExecute sourceMessage;
160  sourceMessage.setInputStream("def\nabc\n123\n");
161 
162  sourceJson << sourceMessage;
163 
164 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
165 
166  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
167  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
168  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
169  printSuccess("DRCETaskRequestSetExecute serialize");
170 
171  DRCEInputJsonMessage inputJsonMessage;
172  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
173  inputJsonMessage.setRequestData(sourceJson.str());
174  inputJsonMessage.setRequestId(2345);
175 
176  sourceJson.str("");
177  sourceJson << inputJsonMessage;
178 
179  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
180  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
181  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
182  printSuccess("DRCEInputJsonMessage serialize");
183 
184  std::string resultJson = fObj.Process(sourceJson.str());
185 
186 // std::cout << "resultJson = " << resultJson << std::endl;
187 
188  ASSERT_FALSE(fObj.isError()) << printError(fObj);
189  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
190  ASSERT_TRUE(fObj.getErrorMsg().empty());
191  printSuccess("DRCEFunctionalObject Process");
192 
193  DRCEOutputJsonMessage resultJsonMessage(resultJson);
194 
195  ASSERT_FALSE(resultJsonMessage.isError()) << printError(resultJsonMessage);
196  ASSERT_TRUE(resultJsonMessage.getErrorMsg().empty());
197  ASSERT_EQ(resultJsonMessage.getErrorCode(), NO_ERROR);
198  printSuccess("DRCEOutputJsonMessage unserialize");
199 
200  ASSERT_EQ(resultJsonMessage.getResultData().getItemsCount(), 1);
201  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getErrorCode(), ERROR_BAD_COMMAND_PARAMS);
202  ASSERT_FALSE(resultJsonMessage.getResultData().getDataItem(0).getErrorMessage().empty());
203  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
204  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
205  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
206 
208  printSuccess("Test InputStream without Command");
209 }
210 //-----------------------------------------------------------------------------
211 //-----------------------------------------------------------------------------
213 {
214  const std::string requestData = "def\nabc\n123\n";
215  const std::string responseData = "123\nabc\ndef\n";
216 
218  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
219  fObj.setNodeHost("NODE_HOST");
220  fObj.setNodePort("NODE_PORT");
221  fObj.setNodeName("NODE_NAME");
222 
223  std::stringstream sourceJson;
224  DRCETaskRequestSetExecute sourceMessage;
225 
226  sourceMessage.setCommandLine("sort");
227  sourceMessage.setInputStream(requestData);
228 
229  sourceJson << sourceMessage;
230 
231 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
232 
233  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
234  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
235  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
236  printSuccess("DRCETaskRequestSetExecute serialize");
237 
238  DRCEInputJsonMessage inputJsonMessage;
239  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
240  inputJsonMessage.setRequestData(sourceJson.str());
241  inputJsonMessage.setRequestId(2345);
242 
243  sourceJson.str("");
244  sourceJson << inputJsonMessage;
245 
246  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
247  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
248  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
249  printSuccess("DRCEInputJsonMessage serialize");
250 
251  std::string resultJson = fObj.Process(sourceJson.str());
252 
253 // std::cout << "resultJson = " << resultJson << std::endl;
254 
255  ASSERT_FALSE(fObj.isError()) << printError(fObj);
256  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
257  ASSERT_TRUE(fObj.getErrorMsg().empty());
258  printSuccess("DRCEFunctionalObject Process");
259 
260  DRCEOutputJsonMessage resultJsonMessage(resultJson);
261 
262  ASSERT_FALSE(resultJsonMessage.isError()) << printError(resultJsonMessage);
263  ASSERT_EQ(resultJsonMessage.getErrorCode(), NO_ERROR);
264  ASSERT_TRUE(resultJsonMessage.getErrorMsg().empty());
265  printSuccess("DRCEOutputJsonMessage unserialize");
266 
267  ASSERT_EQ(resultJsonMessage.getResultData().getItemsCount(), 1);
268  ASSERT_TRUE(resultJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
269  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getStdoutStream(), responseData);
270  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
271  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
272  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
273 
275  printSuccess("Test Command Sort");
276 }
277 //-----------------------------------------------------------------------------
279 {
280  std::string sourceJson("{\"type\":0,\"data\":\"{\\\"session\\\":{\\\"type\\\":0,\\\"port\\\":0,\\\"user\\\":\\\"\\\",\\\"password\\\":\\\"\\\",\\\"shell\\\":\\\"\\\",\\\"environment\\\":[],\\\"home_dir\\\":\\\"\\\",\\\"timeout\\\":0,\\\"tmode\\\":1,\\\"time_max\\\":60000},\\\"command\\\":\\\"ls -la\\\",\\\"input\\\":\\\"\\\",\\\"files\\\":[],\\\"limits\\\":{\\\"proc_max\\\":0,\\\"threads_max\\\":0,\\\"cpu\\\":0,\\\"vram_free\\\":0,\\\"vram_free_min\\\":0,\\\"rram_free\\\":0,\\\"rram_free_min\\\":0,\\\"disk_free\\\":0,\\\"disk_free_min\\\":0}}\",\"id\":12345}");
281 
282 // std::cout << "sourceJson = " << sourceJson << std::endl;
283 
285  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
286  fObj.setNodeHost("NODE_HOST");
287  fObj.setNodePort("NODE_PORT");
288  fObj.setNodeName("NODE_NAME");
289 
290  DRCEInputJsonMessage inputJsonMessage(sourceJson);
291 
292  ASSERT_TRUE(inputJsonMessage.isError()) << printError(inputJsonMessage);
293  ASSERT_EQ(inputJsonMessage.getErrorCode(), ERROR_BAD_JSON_FORMAT);
294  ASSERT_FALSE(inputJsonMessage.getErrorMsg().empty());
295  printSuccess("DRCEInputJsonMessage serialize");
296 
297  std::string resultJson = fObj.Process(sourceJson);
298 
299 // std::cout << "resultJson = " << resultJson << std::endl;
300 
301  ASSERT_TRUE(fObj.isError()) << printError(fObj);
302  ASSERT_EQ(fObj.getErrorCode(), PARSE_ERROR);
303  ASSERT_FALSE(fObj.getErrorMsg().empty());
304 
305  DRCEOutputJsonMessage outputJsonMessage(resultJson);
306 
307  ASSERT_EQ(outputJsonMessage.getResultData().getItemsCount(), 1);
308  ASSERT_TRUE(outputJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
309  ASSERT_FALSE(outputJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
310 
311 // std::cout << "StdoutStream: " << outputJsonMessage.getResultData().getDataItem(0).getStdoutStream() << std::endl;
312 
313  ASSERT_EQ(outputJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
314  ASSERT_EQ(outputJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
315  ASSERT_EQ(outputJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
316 
318  printSuccess("Test Bad Command Ls");
319 }
320 //-----------------------------------------------------------------------------
322 {
323  std::string sourceJson("{\"type\":0,\"data\":\"eyJzZXNzaW9uIjp7InR5cGUiOjAsInBvcnQiOjAsInVzZXIiOiIiLCJwYXNzd29yZCI6IiIsInNoZWxsIjoiIiwiZW52aXJvbm1lbnQiOltdLCJob21lX2RpciI6IiIsInRpbWVvdXQiOjAsInRtb2RlIjoxLCJ0aW1lX21heCI6NjAwMDB9LCJjb21tYW5kIjoibHMgLWxhIiwiaW5wdXQiOiIiLCJmaWxlcyI6W10sImxpbWl0cyI6eyJwcm9jX21heCI6MCwidGhyZWFkc19tYXgiOjAsImNwdSI6MCwidnJhbV9mcmVlIjowLCJ2cmFtX2ZyZWVfbWluIjowLCJycmFtX2ZyZWUiOjAsInJyYW1fZnJlZV9taW4iOjAsImRpc2tfZnJlZSI6MCwiZGlza19mcmVlX21pbiI6MH19\",\"id\":12345}");
324 
325 // std::cout << "sourceJson = " << sourceJson << std::endl;
326 
328  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
329  fObj.setNodeHost("NODE_HOST");
330  fObj.setNodePort("NODE_PORT");
331  fObj.setNodeName("NODE_NAME");
332 
333  DRCEInputJsonMessage inputJsonMessage(sourceJson);
334 
335  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
336  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
337  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
338  printSuccess("DRCEInputJsonMessage serialize");
339 
340  std::string resultJson = fObj.Process(sourceJson);
341 
342 // std::cout << "resultJson = " << resultJson << std::endl;
343 
344  ASSERT_FALSE(fObj.isError()) << printError(fObj);
345  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
346  ASSERT_TRUE(fObj.getErrorMsg().empty());
347 
349  printSuccess("Test Command Ls");
350 }
351 //-----------------------------------------------------------------------------
353 {
355  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
356  fObj.setNodeHost("NODE_HOST");
357  fObj.setNodePort("NODE_PORT");
358  fObj.setNodeName("NODE_NAME");;
359 
360  std::stringstream sourceJson;
361  DRCETaskRequestSetExecute sourceMessage;
362 
363  sourceMessage.setCommandLine("ps");
364 
365  sourceJson << sourceMessage;
366 
367 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
368 
369  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
370  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
371  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
372  printSuccess("DRCETaskRequestSetExecute serialize");
373 
374  DRCEInputJsonMessage inputJsonMessage;
375  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
376  inputJsonMessage.setRequestData(sourceJson.str());
377  inputJsonMessage.setRequestId(2345);
378 
379  sourceJson.str("");
380  sourceJson << inputJsonMessage;
381 
382  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
383  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
384  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
385  printSuccess("DRCEInputJsonMessage serialize");
386 
387  std::string resultJson = fObj.Process(sourceJson.str());
388 
389 // std::cout << "resultJson = " << resultJson << std::endl;
390 
391  ASSERT_FALSE(fObj.isError()) << printError(fObj);
392  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
393  ASSERT_TRUE(fObj.getErrorMsg().empty());
394  printSuccess("DRCEFunctionalObject Process");
395 
396  DRCEOutputJsonMessage resultJsonMessage(resultJson);
397 
398  ASSERT_FALSE(resultJsonMessage.isError()) << printError(resultJsonMessage);
399  ASSERT_EQ(resultJsonMessage.getErrorCode(), NO_ERROR);
400  ASSERT_TRUE(resultJsonMessage.getErrorMsg().empty());
401  printSuccess("DRCEOutputJsonMessage unserialize");
402 
403  ASSERT_EQ(resultJsonMessage.getResultData().getItemsCount(), 1);
404  ASSERT_TRUE(resultJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
405  ASSERT_FALSE(resultJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
406  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
407  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
408  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
409 // std::cout << resultJsonMessage.getResultData().getDataItem(0).getStdoutStream() << std::endl;
411  printSuccess("Test Command Ps");
412 }
413 //-----------------------------------------------------------------------------
415 {
417  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
418  fObj.setNodeHost("NODE_HOST");
419  fObj.setNodePort("NODE_PORT");
420  fObj.setNodeName("NODE_NAME");
421 
422  std::stringstream sourceJson;
423  DRCETaskRequestSetExecute sourceMessage;
424 
425  fObj.setLogStream(std::cout);
426 
427  sourceMessage.setCommandLine("php test.php > result.txt");
428  sourceMessage.addFileItem("test.php", "<?php\necho 'Hello, world!';\n?>\n", 9);
429  sourceMessage.addFileItem("result.txt", "", 12);
430 
431  sourceJson << sourceMessage;
432 
433 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
434 
435  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
436  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
437  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
438  printSuccess("DRCETaskRequestSetExecute serialize");
439 
440  DRCEInputJsonMessage inputJsonMessage;
441  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
442  inputJsonMessage.setRequestData(sourceJson.str());
443  inputJsonMessage.setRequestId(2345);
444 
445  sourceJson.str("");
446  sourceJson << inputJsonMessage;
447 
448  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
449  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
450  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
451  printSuccess("DRCEInputJsonMessage serialize");
452 
453  std::string resultJson = fObj.Process(sourceJson.str());
454 
455 // std::cout << "resultJson = " << resultJson << std::endl;
456 
457  ASSERT_FALSE(fObj.isError()) << printError(fObj);
458  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
459  ASSERT_TRUE(fObj.getErrorMsg().empty());
460  printSuccess("DRCEFunctionalObject Process");
461 
462  DRCEOutputJsonMessage resultJsonMessage(resultJson);
463 
464  ASSERT_FALSE(resultJsonMessage.isError()) << printError(resultJsonMessage);
465  ASSERT_EQ(resultJsonMessage.getErrorCode(), NO_ERROR);
466  ASSERT_TRUE(resultJsonMessage.getErrorMsg().empty());
467  printSuccess("DRCEOutputJsonMessage unserialize");
468 
469  ASSERT_EQ(resultJsonMessage.getResultData().getItemsCount(), 1);
470 
471 // std::cout << "StderrStream: " << resultJsonMessage.getResultData().getDataItem(0).getStderrStream() << std::endl;
472 
473  ASSERT_TRUE(resultJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
474  ASSERT_TRUE(resultJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
475  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
476  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
477  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
478  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFilesCount(), 1);
479 
480  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFileItem(0).name, "result.txt");
481  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFileItem(0).data, "Hello, world!");
482  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFileItem(0).actionType, 12);
483 
485  printSuccess("Test Command 'php test.php > result.txt'");
486 }
487 //-----------------------------------------------------------------------------
489 {
491  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
492  fObj.setNodeHost("NODE_HOST");
493  fObj.setNodePort("NODE_PORT");
494  fObj.setNodeName("NODE_NAME");
495 
496  std::stringstream sourceJson;
497  DRCETaskRequestSetExecute sourceMessage;
498 
499  sourceMessage.setCommandLine("perl test.pl > result.txt");
500  sourceMessage.addFileItem("test.pl", "#!/usr/bin/perl\nprint \"Hello, world!\";", 9);
501  sourceMessage.addFileItem("result.txt", "", 12);
502 
503  sourceJson << sourceMessage;
504 
505 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
506 
507  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
508  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
509  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
510  printSuccess("DRCETaskRequestSetExecute serialize");
511 
512  DRCEInputJsonMessage inputJsonMessage;
513  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
514  inputJsonMessage.setRequestData(sourceJson.str());
515  inputJsonMessage.setRequestId(2345);
516 
517  sourceJson.str("");
518  sourceJson << inputJsonMessage;
519 
520  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
521  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
522  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
523  printSuccess("DRCEInputJsonMessage serialize");
524 
525  std::string resultJson = fObj.Process(sourceJson.str());
526 
527 // std::cout << "resultJson = " << resultJson << std::endl;
528 
529  ASSERT_FALSE(fObj.isError()) << printError(fObj);
530  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
531  ASSERT_TRUE(fObj.getErrorMsg().empty());
532  printSuccess("DRCEFunctionalObject Process");
533 
534  DRCEOutputJsonMessage resultJsonMessage(resultJson);
535 
536  ASSERT_FALSE(resultJsonMessage.isError()) << printError(resultJsonMessage);
537  ASSERT_EQ(resultJsonMessage.getErrorCode(), NO_ERROR);
538  ASSERT_TRUE(resultJsonMessage.getErrorMsg().empty());
539  printSuccess("DRCEOutputJsonMessage unserialize");
540 
541  ASSERT_EQ(resultJsonMessage.getResultData().getItemsCount(), 1);
542  ASSERT_TRUE(resultJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
543  ASSERT_TRUE(resultJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
544  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
545  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
546  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
547  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFilesCount(), 1);
548 
549  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFileItem(0).name, "result.txt");
550  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFileItem(0).data, "Hello, world!");
551  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFileItem(0).actionType, 12);
552 
554  printSuccess("Test Command 'perl test.pl > result.txt'");
555 }
556 //-----------------------------------------------------------------------------
558 {
560  DRCEFunctionalObject fObj(nodeOptions.getNodeName(), nodeOptions.getHomeDir(), nodeOptions.getTasksDataDir(), nodeOptions.getTasksStatusDir());
561  fObj.setNodeHost("NODE_HOST");
562  fObj.setNodePort("NODE_PORT");
563  fObj.setNodeName("NODE_NAME");
564 
565  std::stringstream sourceJson;
566  DRCETaskRequestSetExecute sourceMessage;
567 
568  const std::string javaClassName = "test";
569  const std::string javaClassFile = javaClassName+".class";
570  const std::string javaSourceFile = javaClassName+".java";
571 
572  sourceMessage.setCommandLine("javac "+javaSourceFile);
573  sourceMessage.addFileItem(javaSourceFile, "public class test {\npublic static void main(String[] args) {\nSystem.out.println(\"Hello, world!\");\n}\n}", 9);
574 
575  sourceJson << sourceMessage;
576 
577 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
578 
579  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
580  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
581  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
582  printSuccess("DRCETaskRequestSetExecute serialize");
583 
584  DRCEInputJsonMessage inputJsonMessage;
585  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
586  inputJsonMessage.setRequestData(sourceJson.str());
587  inputJsonMessage.setRequestId(2345);
588 
589  sourceJson.str("");
590  sourceJson << inputJsonMessage;
591 
592  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
593  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
594  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
595  printSuccess("DRCEInputJsonMessage serialize");
596 
597  std::string resultJson = fObj.Process(sourceJson.str());
598 
599 // std::cout << "resultJson = " << resultJson << std::endl;
600 
601  ASSERT_FALSE(fObj.isError()) << printError(fObj);
602  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
603  ASSERT_TRUE(fObj.getErrorMsg().empty());
604  printSuccess("DRCEFunctionalObject Process");
605 
606  DRCEOutputJsonMessage resultJsonMsg(resultJson);
607  ASSERT_FALSE(resultJsonMsg.isError()) << printError(resultJsonMsg);
608  ASSERT_EQ(resultJsonMsg.getResultData().getItemsCount(), 1);
609 // std::cout << "Stderr: " << resultJsonMsg.getResultData().getDataItem(0).getStderrStream() << std::endl;
610 
611 
612  sourceJson.str("");
613  sourceMessage.clear();
614  sourceMessage.setCommandLine("java "+javaClassName+" > result.txt");
615  sourceMessage.addFileItem("result.txt", "", 12);
616 
617  sourceJson << sourceMessage;
618 
619 // std::cout << "sourceJson = " << sourceJson.str() << std::endl;
620 
621  ASSERT_FALSE(sourceMessage.isError()) << printError(sourceMessage);
622  ASSERT_EQ(sourceMessage.getErrorCode(), NO_ERROR);
623  ASSERT_TRUE(sourceMessage.getErrorMsg().empty());
624  printSuccess("DRCETaskRequestSetExecute serialize");
625 
626  inputJsonMessage.clear();
627  inputJsonMessage.setRequestType(DRCETaskRequest::RequestType::rtSetTaskExecute);
628  inputJsonMessage.setRequestData(sourceJson.str());
629  inputJsonMessage.setRequestId(2345);
630 
631  sourceJson.str("");
632  sourceJson << inputJsonMessage;
633 
634  ASSERT_FALSE(inputJsonMessage.isError()) << printError(inputJsonMessage);
635  ASSERT_EQ(inputJsonMessage.getErrorCode(), NO_ERROR);
636  ASSERT_TRUE(inputJsonMessage.getErrorMsg().empty());
637  printSuccess("DRCEInputJsonMessage serialize");
638 
639  resultJson = fObj.Process(sourceJson.str());
640 
641 // std::cout << "resultJson = " << resultJson << std::endl;
642 
643  ASSERT_FALSE(fObj.isError()) << printError(fObj);
644  ASSERT_EQ(fObj.getErrorCode(), NO_ERROR);
645  ASSERT_TRUE(fObj.getErrorMsg().empty());
646  printSuccess("DRCEFunctionalObject Process");
647 
648  DRCEOutputJsonMessage resultJsonMessage(resultJson);
649 
650  ASSERT_FALSE(resultJsonMessage.isError()) << printError(resultJsonMessage);
651  ASSERT_EQ(resultJsonMessage.getErrorCode(), NO_ERROR);
652  ASSERT_TRUE(resultJsonMessage.getErrorMsg().empty());
653  printSuccess("DRCEOutputJsonMessage unserialize");
654 
655  ASSERT_EQ(resultJsonMessage.getResultData().getItemsCount(), 1);
656 
657 // std::cout << "StderrStream: " << resultJsonMessage.getResultData().getDataItem(0).getStderrStream() << std::endl;
658 
659  ASSERT_TRUE(resultJsonMessage.getResultData().getDataItem(0).getStderrStream().empty());
660  ASSERT_TRUE(resultJsonMessage.getResultData().getDataItem(0).getStdoutStream().empty());
661  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeName(), "NODE_NAME");
662  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodeHost(), "NODE_HOST");
663  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getNodePort(), "NODE_PORT");
664  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFilesCount(), 1);
665 
666  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFileItem(0).name, "result.txt");
667  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFileItem(0).data, "Hello, world!\n");
668  ASSERT_EQ(resultJsonMessage.getResultData().getDataItem(0).getFileItem(0).actionType, 12);
669 
670  Poco::File testFile(javaClassFile);
671  if (testFile.exists())
672  testFile.remove();
673 
675  printSuccess("Test Command 'java test > result.txt'");
676 }
677 //-----------------------------------------------------------------------------
678 //-----------------------------------------------------------------------------
679 } // namespace tests
680 } // namespace drce
681 } // namespace HCE