SATExecutor.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #ifndef __SAT_EXECUTOR__
  2. #define __SAT_EXECUTOR__
  3. #pragma once
  4. #include "CritSection.h"
  5. #include "SATDevices.h"
  6. class CSATExecutor
  7. {
  8. CSATExecutor(void);
  9. public:
  10. // 单例对象模式;
  11. static CSATExecutor* GetInstance()
  12. {
  13. static CSATExecutor* pInstance = NULL;
  14. if ( pInstance == NULL )
  15. {
  16. pInstance = new CSATExecutor;
  17. }
  18. return pInstance;
  19. }
  20. ~CSATExecutor(void);
  21. // 用例xml;
  22. typedef struct __ST_CASEITEM__ {
  23. bool result;
  24. std::string name;
  25. std::string data;
  26. std::vector<std::string> imgs;
  27. std::string log;
  28. std::string remark;
  29. }STCaseItem, *pSTCaseItem;
  30. protected:
  31. // 线程控制句柄;
  32. HANDLE m_hEventHearbeat;
  33. // 心跳线程句柄;
  34. HANDLE m_hThreadHearbeat;
  35. // 线程控制句柄;
  36. HANDLE m_hEventExcuteScript;
  37. // 执行线程句柄;
  38. HANDLE m_hThreadExcuteScript;
  39. // 冒烟任务;
  40. HANDLE m_hEventSomkingScript;
  41. HANDLE m_hThreadSomkingScript;
  42. // 是否登录成功;
  43. BOOL m_bLogin;
  44. // 是否结束TV串口监听;
  45. BOOL m_bStopWathTV;
  46. ThreadSection m_csTask;
  47. ThreadSection m_csSomkingTask;
  48. std::list<SATHTTP::STTask> m_vtTask;
  49. std::list<SATHTTP::STTask> m_vtSmokingTask;
  50. std::vector<SATHTTP::STDevice> m_vtDevice;
  51. SATHTTP::STLoginReq m_stLoginReq;
  52. SATHTTP::STLoginResp m_stLoginResp;
  53. // 执行器名称;
  54. std::string m_strActuatorName;
  55. // 任务是否存在;
  56. bool IsTaskExist(SATHTTP::STTask &task);
  57. // 下载任务脚本,并将任务加入队列;
  58. void DownloadTask(SATHTTP::STTask &task);
  59. // 是否有任务在执行;
  60. SATHTTP::STTask* IsThereATaskInProcess();
  61. // 提取未执行的任务;
  62. SATHTTP::STTask* GetFreeTask();
  63. // 移除已完成的任务;
  64. void DelFinishedTask();
  65. // 是否有用例脚本在执行;
  66. SATHTTP::STCase* IsCaseScriptProcess(std::vector<SATHTTP::STCase> &vtCases);
  67. // 提取未执行的用例;
  68. SATHTTP::STCase* GetFreeCaseScript(SATHTTP::STTask* pTask);
  69. // 执行空闲新用例;
  70. SATHTTP::STCase* ExecuteFreeCaseScript(SATHTTP::STTask* pTask);
  71. // 新任务Round配置;
  72. void TaskRoundSetting(SATHTTP::STTask* pTask);
  73. public:
  74. // 添加设备;
  75. void AddDevices(const SATDEV::STDevice &stDevice);
  76. // 删除设备;
  77. void DelDevices(const SATDEV::STDevice &stDevice);
  78. // 设置设备为状态;
  79. void SetDeviceStatus(std::string strDevName, SATDEV::DEVICE_USAGE_STATUS status);
  80. // 设备是否存在;
  81. bool IsDeviceExist(std::string strDevName);
  82. public:
  83. // 登录;
  84. bool Login(bool bLogin = true);
  85. bool Login(std::string user, std::string password, std::string actuator, bool bLogin = true);
  86. // 登出;
  87. bool Logout(std::string user, std::string password);
  88. const SATHTTP::STLoginResp *GetLoginResp() const{ return &m_stLoginResp;};
  89. // 设置执行器名称;
  90. void SetActuatorName(const char *pszActuator){ if (pszActuator) m_strActuatorName = pszActuator;};
  91. // 更新设备信息;
  92. bool UpdateDevice();
  93. // 通知SAT任务开始;
  94. bool NotifyTaskStart(SATHTTP::STTask* pTask);
  95. // 上传用例图片;
  96. bool UploadCaseImg(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, std::string img);
  97. // 上传用例结果;
  98. bool UploadCaseLog(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase);
  99. // 上报用例测试项完成;
  100. bool ReportCaseItemFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, STCaseItem &caseItem);
  101. // 上报用例完成;
  102. bool ReportCaseFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, std::string strRunnedActionNameList);
  103. // 上报用例结果;
  104. bool ReportCaseResult(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase);
  105. // 上传任务结果;
  106. bool UploadTaskLog(SATHTTP::STTask* pTask);
  107. // 上报任务开始;
  108. bool ReportTaskStart(SATHTTP::STTask* pTask);
  109. // 上报任务完成;
  110. bool ReportTaskFinish(SATHTTP::STTask* pTask);
  111. // 获取用例xml结果;
  112. bool GetCaseXMLResult(std::string xmlpath, std::vector<STCaseItem> &vtCaseItem);
  113. // 将任务列表附加到缓存中;
  114. int AttachTaskInfo2Buffer(SATPROTO::TaskInfo (&pbuff)[SATPROTO::MAX_TASKS]);
  115. // 冒烟测试任务处理(如果任务是冒烟测试类型,进行预处理);
  116. void SmokeTaskPretreated(std::list<SATHTTP::STTask>::iterator &it);
  117. public:
  118. // 指定服务器是否有升级包, 并返回镜像路径;
  119. bool IsUpgradeImageExist(SATHTTP::STBuildServerInfo &buildSerInfo, SATHTTP::STUpgradeImgInfo &softWareInfo, std::string &imagePath);
  120. // 其他接口;
  121. public:
  122. // 工作开始函数;
  123. void StartWork();
  124. // 工作结束函数;
  125. void EndofWork();
  126. // 从db中加载任务;
  127. void LoadTaskInfo();
  128. // 心跳线程;
  129. static DWORD WINAPI HearbeatThread(LPVOID lpVoid);
  130. // 执行线程;
  131. static DWORD WINAPI ExecuteScriptThread(LPVOID lpVoid);
  132. // 监听异常关机重启;
  133. static DWORD WINAPI WathTVPortThread(LPVOID lpVoid);
  134. // 冒烟任务;
  135. static DWORD WINAPI SomkingScriptThread(LPVOID lpVoid);
  136. };
  137. #endif //__SAT_EXECUTOR__