1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef AW_CXX_DISTRIBUTED_DISTRIBUTED_MAJOR_H_ 17 #define AW_CXX_DISTRIBUTED_DISTRIBUTED_MAJOR_H_ 18 19 #include <vector> 20 #include <map> 21 #include <cstdio> 22 #include <iostream> 23 #include <thread> 24 25 #include <sys/socket.h> 26 #include "securec.h" 27 28 #include "distributed.h" 29 #include "distributed_cfg.h" 30 31 #include "gtest/gtest.h" 32 #include "hilog/log.h" 33 34 namespace OHOS { 35 namespace DistributeSystemTest { 36 37 class DistributeTestEnvironment : public testing::Environment { 38 public: 39 DistributeTestEnvironment(); 40 explicit DistributeTestEnvironment(std::string cfgFile); 41 virtual ~DistributeTestEnvironment(); 42 43 bool RunTestCmd(size_t devNo, const std::string &strCommand, int cmdLen, const std::string &strExpectValue, 44 int expectValueLen, std::function<bool(const std::string &, int)> onProcessReturn); 45 46 bool SendMessage(size_t devNo, const std::string &strMsg, int msgLen, 47 std::function<bool(const std::string &, int)> onProcessReturnMsg) ; 48 49 bool Notify(size_t devNo, const std::string &strMsg, int msgLen); 50 51 virtual void SetUp(); 52 virtual void TearDown(); 53 54 void Init(std::string fileName); 55 56 std::vector<DistDeviceInfo> clientList_; 57 58 static constexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, 0xD001690, "DistributeTestEnvironment"}; 59 60 private: 61 DistributedCfg clientCfg_; 62 int serverPort_; 63 64 int AddClient(std::string ipAddr); 65 int ConnectAgent(size_t devNo); 66 int GetSerial(); 67 bool SendToAgent(size_t devNo, int cmdType, void *pstrMsg, int len, 68 std::function<bool(const std::string &, int)> onProcessReturn); 69 70 }; 71 72 extern DistributeTestEnvironment *g_pDistributetestEnv; 73 class DistributeTest : public testing::Test { 74 public: 75 DistributeTest(); 76 virtual ~DistributeTest(); 77 78 protected: 79 bool RunCmdOnAgent(AGENT_NO devNo, const std::string &strCommand, int cmdLen, 80 const std::string &strExpectValue, int expectValueLen); 81 82 bool RunCmdOnAgent(AGENT_NO devNo, const std::string &strCmd, const std::string &strArgs, 83 const std::string &strExpectValue); 84 bool RunCmdOnAgent(AGENT_NO devNo, const std::string &strCmd, const std::string &strArgs, 85 const std::string &strExpectValue, std::function<bool(const std::string &, int)> onReturnCall); 86 87 bool SendMessage(AGENT_NO devNo, const std::string &msg, int len); 88 bool SendMessage(AGENT_NO devNo, const std::string &msg, int len, 89 std::function<bool(const std::string &, int)> onProcessReturnMsg); 90 bool Notify(AGENT_NO devNo, const std::string ¬ifyType, const std::string &msg, int msgLen); 91 bool NotifyTestInfo(AGENT_NO devNo, const std::string &status); 92 93 // monitor the status of Agent 94 int CheckStatus(); 95 int GetReturnVal(); 96 97 private: OnProcessNotify()98 void OnProcessNotify() {} 99 int returnVal_; 100 101 static void SetUpTestCase(void); 102 static void TearDownTestCase(void); 103 104 // init network environment, obtain all the address of agent and connect 105 int InitEnv(std::vector<std::string> clientList); 106 SetUp()107 virtual void SetUp() {} TearDown()108 virtual void TearDown() {} 109 OnNotify()110 virtual void OnNotify() {} 111 virtual bool OnProcessValue(const std::string &szbuf, int len); 112 virtual bool OnMsgProc(const std::string &szbuf, int len); 113 }; 114 } // namespace DistributeSystemTest 115 } // namespace OHOS 116 117 #endif // AW_CXX_DISTRIBUTED_DISTRIBUTED_MAJOR_H_ 118