RVCCommTest.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. //
  2. // Created by tmd67 on 2020/3/24.
  3. //
  4. //real environment: use rvccomm to connect installservice
  5. #include "gmock/gmock.h"
  6. #include "gtest/gtest.h"
  7. #include "RVCComm.h"
  8. #include <winpr/winsock.h>
  9. #include <winpr/wtypes.h>
  10. #include <memory>
  11. #include <iostream>
  12. #include <winpr/string.h>
  13. #pragma pack(1)
  14. typedef struct _DevInfoReq
  15. {
  16. char TerminalNo[16];
  17. }TerminalRegistReq;
  18. typedef struct _DevInfoRcv
  19. {
  20. char TerminalNo[16];
  21. char DeviceNo[16];
  22. char OutletNo[6];
  23. char Initializer[32];
  24. BYTE InitIP[4];
  25. BYTE CreateTime[4];
  26. char PadDeviceID[32];
  27. char MachineType[16];
  28. BYTE MachineVersion[4];
  29. char Sites[16];
  30. BYTE EnrolGPS[8];
  31. char EnrolAddr[512];
  32. BYTE AuthorizedTime[4];
  33. BYTE BusinessStructID[8];
  34. BYTE StructID[8];
  35. char Editor[32];
  36. BYTE EditTime[4];
  37. char State;
  38. char PublicKey[512];
  39. char FingerPrint[512];
  40. }TerminalRegistRet;
  41. #pragma pack()
  42. class QueryTerminalInfo : public CSecureClientBase
  43. { //main function
  44. public:
  45. QueryTerminalInfo()
  46. {
  47. WORD wVersionRequested;
  48. WSADATA wsaData;
  49. int err;
  50. wVersionRequested = MAKEWORD(1, 1);
  51. err = WSAStartup(wVersionRequested, &wsaData);
  52. if (err != 0)
  53. return;
  54. }
  55. virtual ~QueryTerminalInfo(){
  56. WSADATA wsaData;
  57. if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
  58. {
  59. WSACleanup();
  60. return;
  61. }
  62. }
  63. bool Connect(const char *pServerAddr, int nPort)
  64. {
  65. return GetFunction()->Connect(pServerAddr, nPort, 3);
  66. }
  67. bool IsConnectionOK()
  68. {
  69. return GetFunction()->IsConnectionOK();
  70. }
  71. void CloseConnection(){
  72. if (GetFunction()->IsConnectionOK())
  73. GetFunction()->Close();
  74. }
  75. std::pair<bool, std::string> SendSayHelloReq(char *tempNo)
  76. {
  77. TerminalRegistReq terminalNo;
  78. memset(&terminalNo, 0, sizeof(TerminalRegistReq));
  79. sprintf_s(terminalNo.TerminalNo, strlen(tempNo) + 1, "%s", tempNo);
  80. CSmartPointer<IPackage> package = GetFunction()->CreateNewPackage("SayHello");
  81. package->AddStruct("TerminalRegistReq", false, false, (BYTE*)&terminalNo, sizeof(terminalNo));
  82. string strPackageID = GetFunction()->SendPackage(package);
  83. auto ret = GetFunction()->ReceivePackage(10000);
  84. return DealSayHelloRet(ret);
  85. }
  86. virtual void OnReceivePackage(CSmartPointer<IPackage>& pRecvPkg) {};
  87. TerminalRegistRet terminalPara;
  88. private:
  89. virtual void OnClose(){
  90. cout << "connection closed" << endl;
  91. }
  92. virtual void OnError(DWORD dwSysCode, DWORD dwUserCode, const char *pErrMsg)
  93. {
  94. cout << "OnError SysCode= " << dwSysCode << ", UserCode = " << dwUserCode << ", ErrMsg = " << pErrMsg << endl;
  95. }
  96. virtual void OnAuthPass(){
  97. cout << "OnAuthPass" << endl;
  98. }
  99. std::pair<bool, std::string> DealSayHelloRet(const CSmartPointer<IPackage> &pRecvPkg){
  100. DWORD dwSysCode, dwUserCode;
  101. string strErrMsg;
  102. if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
  103. return std::make_pair(false, "error in package: " + strErrMsg);
  104. else
  105. {
  106. int nLen = pRecvPkg->GetStructLen("TerminalRegistRet");
  107. if (nLen <= 0)
  108. return std::make_pair(false, "not find struct [TerminalRegistRet] in package");
  109. else
  110. {
  111. std::unique_ptr<BYTE[]> pBuf(new BYTE[nLen]);
  112. memset(pBuf.get(), 0, nLen);
  113. int nArrayNum = 0;
  114. if (!pRecvPkg->GetStructData("TerminalRegistRet", pBuf.get(), &nLen, &nArrayNum))
  115. {
  116. delete[] pBuf.get();
  117. return std::make_pair(false, "get struct [TerminalRegistRet] data fail");
  118. }
  119. else
  120. {
  121. TerminalRegistRet *pReq = (TerminalRegistRet*)pBuf.get();
  122. memcpy(&terminalPara, pReq, sizeof(TerminalRegistRet));
  123. }
  124. }
  125. }
  126. return std::make_pair(true, "");
  127. }
  128. };
  129. #define TEST_IP "99.12.98.156"
  130. #define TEST_PORT 1050
  131. #define TEST_TERMINAL "7715015056"
  132. #define TEST_MachineType "RVC.Stand2S"
  133. #define TEST_EnrolAddr "广东省深圳市南山区科技园北区科技中一路3号"
  134. TEST(RvccommTest, InstallServiceTest)
  135. {
  136. std::shared_ptr<QueryTerminalInfo> tmpConnect(new QueryTerminalInfo(), [](QueryTerminalInfo *p){
  137. p->CloseConnection();
  138. });
  139. ASSERT_TRUE(tmpConnect->Connect(TEST_IP, TEST_PORT));
  140. ASSERT_TRUE(tmpConnect->IsConnectionOK());
  141. auto ret = tmpConnect->SendSayHelloReq(TEST_TERMINAL);
  142. ASSERT_TRUE(ret.first == true);
  143. ASSERT_TRUE(tmpConnect->terminalPara.TerminalNo == std::string(TEST_TERMINAL));
  144. ASSERT_TRUE(tmpConnect->terminalPara.MachineType == std::string(TEST_MachineType));
  145. ASSERT_TRUE(tmpConnect->terminalPara.EnrolAddr == std::string(TEST_EnrolAddr));
  146. }