123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #ifndef __SAT_EXECUTOR__
- #define __SAT_EXECUTOR__
- #pragma once
- #include "CritSection.h"
- #include "SATDevices.h"
- class CSATExecutor
- {
- CSATExecutor(void);
- public:
- // 单例对象模式;
- static CSATExecutor* GetInstance()
- {
- static CSATExecutor* pInstance = NULL;
- if ( pInstance == NULL )
- {
- pInstance = new CSATExecutor;
- }
- return pInstance;
- }
- ~CSATExecutor(void);
- // 用例xml;
- typedef struct __ST_CASEITEM__ {
- bool result;
- std::string name;
- std::string data;
- std::vector<std::string> imgs;
- std::string log;
- std::string remark;
- }STCaseItem, *pSTCaseItem;
- protected:
- // 线程控制句柄;
- HANDLE m_hEventHearbeat;
- // 心跳线程句柄;
- HANDLE m_hThreadHearbeat;
- // 线程控制句柄;
- HANDLE m_hEventExcuteScript;
- // 执行线程句柄;
- HANDLE m_hThreadExcuteScript;
- // 冒烟任务;
- HANDLE m_hEventSomkingScript;
- HANDLE m_hThreadSomkingScript;
- // 是否登录成功;
- BOOL m_bLogin;
- // 是否结束TV串口监听;
- BOOL m_bStopWathTV;
- ThreadSection m_csTask;
- ThreadSection m_csSomkingTask;
- std::list<SATHTTP::STTask> m_vtTask;
- std::list<SATHTTP::STTask> m_vtSmokingTask;
- std::vector<SATHTTP::STDevice> m_vtDevice;
- SATHTTP::STLoginReq m_stLoginReq;
- SATHTTP::STLoginResp m_stLoginResp;
- // 执行器名称;
- std::string m_strActuatorName;
- // 任务是否存在;
- bool IsTaskExist(SATHTTP::STTask &task);
- // 下载任务脚本,并将任务加入队列;
- void DownloadTask(SATHTTP::STTask &task);
- // 是否有任务在执行;
- SATHTTP::STTask* IsThereATaskInProcess();
- // 提取未执行的任务;
- SATHTTP::STTask* GetFreeTask();
- // 移除已完成的任务;
- void DelFinishedTask();
- // 是否有用例脚本在执行;
- SATHTTP::STCase* IsCaseScriptProcess(std::vector<SATHTTP::STCase> &vtCases);
- // 提取未执行的用例;
- SATHTTP::STCase* GetFreeCaseScript(SATHTTP::STTask* pTask);
- // 执行空闲新用例;
- SATHTTP::STCase* ExecuteFreeCaseScript(SATHTTP::STTask* pTask);
- // 新任务Round配置;
- void TaskRoundSetting(SATHTTP::STTask* pTask);
-
- public:
- // 添加设备;
- void AddDevices(const SATDEV::STDevice &stDevice);
- // 删除设备;
- void DelDevices(const SATDEV::STDevice &stDevice);
- // 设置设备为状态;
- void SetDeviceStatus(std::string strDevName, SATDEV::DEVICE_USAGE_STATUS status);
- // 设备是否存在;
- bool IsDeviceExist(std::string strDevName);
- public:
- // 登录;
- bool Login(bool bLogin = true);
- bool Login(std::string user, std::string password, std::string actuator, bool bLogin = true);
- // 登出;
- bool Logout(std::string user, std::string password);
- const SATHTTP::STLoginResp *GetLoginResp() const{ return &m_stLoginResp;};
- // 设置执行器名称;
- void SetActuatorName(const char *pszActuator){ if (pszActuator) m_strActuatorName = pszActuator;};
- // 更新设备信息;
- bool UpdateDevice();
- // 通知SAT任务开始;
- bool NotifyTaskStart(SATHTTP::STTask* pTask);
- // 上传用例图片;
- bool UploadCaseImg(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, std::string img);
- // 上传用例结果;
- bool UploadCaseLog(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase);
- // 上报用例测试项完成;
- bool ReportCaseItemFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, STCaseItem &caseItem);
- // 上报用例完成;
- bool ReportCaseFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, std::string strRunnedActionNameList);
- // 上报用例结果;
- bool ReportCaseResult(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase);
- // 上传任务结果;
- bool UploadTaskLog(SATHTTP::STTask* pTask);
- // 上报任务开始;
- bool ReportTaskStart(SATHTTP::STTask* pTask);
- // 上报任务完成;
- bool ReportTaskFinish(SATHTTP::STTask* pTask);
- // 获取用例xml结果;
- bool GetCaseXMLResult(std::string xmlpath, std::vector<STCaseItem> &vtCaseItem);
- // 将任务列表附加到缓存中;
- int AttachTaskInfo2Buffer(SATPROTO::TaskInfo (&pbuff)[SATPROTO::MAX_TASKS]);
- // 冒烟测试任务处理(如果任务是冒烟测试类型,进行预处理);
- void SmokeTaskPretreated(std::list<SATHTTP::STTask>::iterator &it);
- public:
- // 指定服务器是否有升级包, 并返回镜像路径;
- bool IsUpgradeImageExist(SATHTTP::STBuildServerInfo &buildSerInfo, SATHTTP::STUpgradeImgInfo &softWareInfo, std::string &imagePath);
- // 其他接口;
- public:
- // 工作开始函数;
- void StartWork();
- // 工作结束函数;
- void EndofWork();
- // 从db中加载任务;
- void LoadTaskInfo();
- // 心跳线程;
- static DWORD WINAPI HearbeatThread(LPVOID lpVoid);
- // 执行线程;
- static DWORD WINAPI ExecuteScriptThread(LPVOID lpVoid);
- // 监听异常关机重启;
- static DWORD WINAPI WathTVPortThread(LPVOID lpVoid);
- // 冒烟任务;
- static DWORD WINAPI SomkingScriptThread(LPVOID lpVoid);
- };
- #endif //__SAT_EXECUTOR__
|