Pārlūkot izejas kodu

Z991239-1128 #comment fix: Linux从分行服务下载指纹数据正常

翟俊伟80258120 4 gadi atpakaļ
vecāks
revīzija
46a4ee1991

+ 17 - 0
Module/include/CommEntityUtil.hpp

@@ -10,6 +10,10 @@
 #define streq strcasecmp
 #endif //RVC_OS_WIN
 
+typedef unsigned long long ULLINT;
+
+#define SLEEP(interval) std::this_thread::sleep_for(std::chrono::milliseconds(interval))
+
 namespace SP
 {
 namespace Module
@@ -158,6 +162,19 @@ TerminalMachineInfo GetTerminalMachineInfo(CEntityBase* pEntity)
 	return termInfo;
 }
 
+inline ULLINT RVCGetTickCount()
+{
+#ifdef RVC_OS_WIN
+	return GetTickCount64();
+#else
+	struct timespec ts;
+	clock_gettime(CLOCK_MONOTONIC, &ts);
+
+	return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
+#endif // RVC_OS_WIN
+
+}
+
 } // comm
 } // mod
 } // sp

+ 44 - 44
Module/mod_CustMngrAuth/CustMngrAuthFSM.cpp

@@ -1,7 +1,7 @@
 #include "CustMngrAuthFSM.h"
 #include "CustMngrAuth_UserErrorCode.h"
 #include "SpHelper.h"
-#include "path.h"
+#include "fileutil.h"
 
 #include <fstream>
 #include <map>
@@ -330,8 +330,7 @@ ErrorCodeEnum CCustMngrAuthFSM::WaitForUkey(ErrorCodeEnum eErr)
 	BroadcastGetFinger(status);
 	while (1) 
 	{
-		std::this_thread::sleep_for(std::chrono::milliseconds(300));
-		//Sleep(300);
+		SLEEP(300);
 		if (m_bCancelAuthorize)
 		{
 			m_bCancelAuthorize = false;
@@ -414,15 +413,9 @@ ErrorCodeEnum CCustMngrAuthFSM::OnInit()
 
 int CCustMngrAuthFSM::Initial()
 {
-	ErrorCodeEnum eErr = GetEntityBase()->GetFunction()->GetPath("RunInfo", m_RunInfoPath);
-	if (eErr != Error_Succeed)
-	{
-		Dbg("get runinfo path failed.");
-		LogError(Severity_High, Error_DevLoadFileFailed
-			, LOG_ERR_CUSTMNGRAUTH_GET_RUNINFO_PATH_FAILED_Init
-			, "get runinfo path failed while init");
+	ErrorCodeEnum errCode = OpenRunInfoFile();
+	if (errCode != Error_Succeed)
 		return 1;
-	}
 
 	FeatureUpdateTask* pTask = new FeatureUpdateTask(this);
 	GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
@@ -430,6 +423,22 @@ int CCustMngrAuthFSM::Initial()
 	return 0;
 }
 
+ErrorCodeEnum CCustMngrAuthFSM::OpenRunInfoFile()
+{
+	ErrorCodeEnum errCode;
+	errCode = GetEntityBase()->GetFunction()->GetPath("RunInfo", m_RunInfoPath);
+	if (errCode != Error_Succeed)
+	{
+		LogError(Severity_High, Error_DevLoadFileFailed
+			, LOG_ERR_CUSTMNGRAUTH_GET_RUNINFO_PATH_FAILED_Init
+			, "get runinfo path failed while init");
+		errCode =  Error_Unexpect;
+	}
+	Dbg("runinfo path: %s", m_RunInfoPath.GetData());
+	
+	return errCode;
+}
+
 #pragma endregion
 
 #pragma region entity exit
@@ -500,7 +509,7 @@ void CCustMngrAuthFSM::FeatureUpdate()
 				}
 				waitInternal = CONNECT_INTERNAL;
 			}
-		} while (0);
+		} while (false);
 
 		if (m_pConnection)
 		{
@@ -543,15 +552,15 @@ bool CCustMngrAuthFSM::ReadDataIntoMemory(bool& bHasData)
 {
 	LOG_FUNCTION();
 
-	CSimpleStringA runInfoFile = "";
+	CSimpleStringA runInfoFile(true);
 	runInfoFile = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR RUNINFOFILE
 		, m_RunInfoPath.GetData());
 	std::ifstream inFile(runInfoFile.GetData());
 	string line;
 	int customerNum = 0;
 
-	clock_t startReadFile = clock();
-	clock_t endReadFile = clock();
+	ULLINT startReadFile = RVCGetTickCount();
+	ULLINT endReadFile = RVCGetTickCount();
 
 	while (getline(inFile, line))
 	{
@@ -607,8 +616,8 @@ bool CCustMngrAuthFSM::ReadDataIntoMemory(bool& bHasData)
 
 	Dbg("Total CustomerNum:%d in local file.", customerNum);
 
-	endReadFile = clock();
-	DWORD duration = (endReadFile - startReadFile) * 1000 / CLOCKS_PER_SEC;
+	endReadFile = RVCGetTickCount();
+	ULLINT duration = endReadFile - startReadFile;
 	LogWarn(Severity_High, Error_Debug
 		, LOG_ERR_CUSTMNGRAUTH_READ_INTO_MEMORY_TIME
 		, GenerateAlarmJson("CustMngrAuth", duration).GetData());
@@ -759,9 +768,10 @@ ErrorCodeEnum CCustMngrAuthFSM::ReceiveDataFromServer(CAutoArray<CSimpleStringA>
 		if (runInfoParam.IsFirstTimeQueryData)
 			m_pConnection->SendFeatReq(currAgent, branchID);
 		else
-			m_pConnection->SendFeatReq(currAgent, branchID, (const char*)runInfoParam.LatestTime);
-
+			m_pConnection->SendFeatReq(currAgent, branchID, runInfoParam.LatestTime.GetData());
+			
 		ResetEvent(m_pConnection->m_hPkgAnswer);
+		
 		DWORD dw = WaitForSingleObject(m_pConnection->m_hPkgAnswer, 20000); //10->20  20200430@liuwentao
 		switch (dw)
 		{
@@ -822,12 +832,13 @@ ErrorCodeEnum CCustMngrAuthFSM::ReceiveDataFromServer(CAutoArray<CSimpleStringA>
 /// <returns></returns>
 ErrorCodeEnum CCustMngrAuthFSM::BackupBeforeWriteData(RunInfoParams& runInfoParam, CSmartPointer<IConfigInfo>& spConfig)
 {
+	LOG_FUNCTION();
 	ErrorCodeEnum errCode = Error_Succeed;
 
 	runInfoParam.SrcFile = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR RUNINFOFILE
-		, (const char*)m_RunInfoPath);
+		, m_RunInfoPath.GetData());
 	runInfoParam.BackupFile = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR RUNINFOFILE_BAK
-		, (const char*)m_RunInfoPath);
+		, m_RunInfoPath.GetData());
 
 	EnterCriticalSection(&m_cs);
 	if (!BackupFile(runInfoParam.SrcFile, runInfoParam.BackupFile))
@@ -847,9 +858,9 @@ ErrorCodeEnum CCustMngrAuthFSM::BackupBeforeWriteData(RunInfoParams& runInfoPara
 		RecoverFile(runInfoParam.SrcFile, runInfoParam.BackupFile); // if backup fail, recover
 		LeaveCriticalSection(&m_cs);
 	}
-
-	spConfig->WriteConfigValue("UpdateTime", "UpdateTime", (const char*)runInfoParam.CurrentTime);
-	if (runInfoParam.IsFirstTimeQueryData)
+	
+	spConfig->WriteConfigValue("UpdateTime", "UpdateTime", runInfoParam.CurrentTime.GetData());
+	if (runInfoParam.IsFirstTimeQueryData)	
 	{
 		spConfig->WriteConfigValue("LatestTime", "LatestTime", "");
 	}
@@ -859,17 +870,12 @@ ErrorCodeEnum CCustMngrAuthFSM::BackupBeforeWriteData(RunInfoParams& runInfoPara
 bool CCustMngrAuthFSM::BackupFile(CSimpleStringA srcFile, CSimpleStringA dstFile)
 {
 	bool backupResult = true;
-	fstream fileExist;
 	ifstream inFile;
 	ofstream outFile;
-	fileExist.open((const char*)srcFile, ios::in);
 
-	if (!fileExist)
-	{
-		fileExist.close();
+	if (!ExistsFile(srcFile.GetData()))
 		return true;
-	}
-	fileExist.close();
+
 	inFile.open((const char*)srcFile);
 	if (inFile.fail())
 	{
@@ -923,7 +929,6 @@ ErrorCodeEnum CCustMngrAuthFSM::WriteData(RunInfoParams& runInfoParam
 	bool bExitLoop = false;
 
 	TempFeatureData tmpFeatureData;
-	ZeroMemory(&tmpFeatureData, sizeof(tmpFeatureData));
 	tmpFeatureData.MaxUpdateTime = runInfoParam.LatestTime;
 
 	for (int transTime = 0; transTime < dataArray.GetCount(); ++transTime)
@@ -933,8 +938,7 @@ ErrorCodeEnum CCustMngrAuthFSM::WriteData(RunInfoParams& runInfoParam
 
 		//only 3-4 data, cause the limit of transfer amount
 		CSimpleStringA transBuffer = dataArray[transTime];
-
-		if (reader.parse((const char*)transBuffer, root))
+		if (reader.parse(transBuffer.GetData(), root))
 		{
 			for (int i = 0; i < (int)root.size(); ++i)
 			{
@@ -1021,7 +1025,6 @@ ErrorCodeEnum CCustMngrAuthFSM::ProcessFeatureData(JsonParams& jsonParam, TempFe
 			tempFD = NULL;
 		}
 	}
-
 	CSimpleStringA tempMaxUpdateTime = CSimpleStringA(jsonParam.Root[jsonParam.Index]["updateTime"].asCString());
 	tmpFeatureData.MaxUpdateTime = GetMaxTime(tmpFeatureData.MaxUpdateTime, tempMaxUpdateTime);
 
@@ -1035,7 +1038,7 @@ ErrorCodeEnum CCustMngrAuthFSM::ProcessFeatureData(JsonParams& jsonParam, TempFe
 		memcpy(jstr, jsonFingerStr.GetData(), jlen);
 		jstr[jlen] = '\0'; //in case no \n in the end
 
-		errCode = spConfig->WriteConfigValue((const char*)m_FingerSection, customerID.GetData(), jstr);
+		errCode = spConfig->WriteConfigValue(m_FingerSection.GetData(), customerID.GetData(), jstr);
 		delete[] jstr;
 		if (errCode != Error_Succeed)
 		{
@@ -1164,8 +1167,7 @@ ErrorCodeEnum CCustMngrAuthFSM::CollectProcess(SpReqAnsContext<CustMngrAuthServi
 
 	for (int i = 0; i < COLLECT_TIMES; ++i)
 	{
-		if (i)
-			std::this_thread::sleep_for(std::chrono::milliseconds(2000));
+		if (i) SLEEP(2000);
 
 		if (m_pFingerPrint == NULL || m_pFingerPrint->QuerySessionClosed())
 		{
@@ -1186,7 +1188,7 @@ ErrorCodeEnum CCustMngrAuthFSM::CollectProcess(SpReqAnsContext<CustMngrAuthServi
 			getImgNum += 1;
 			CBlob data;
 			imgFullPaths[i] = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "%s"
-				, (const char*)depPath, (const char*)collecetAns.imageName);
+				, depPath.GetData(), collecetAns.imageName.GetData());
 			errCode = GetImgBlob(data, imgFullPaths[i]);
 
 			if (errCode != Error_Succeed)
@@ -1224,10 +1226,8 @@ ErrorCodeEnum CCustMngrAuthFSM::CollectProcess(SpReqAnsContext<CustMngrAuthServi
 	//delete bmp files in dep
 	for (int j = 0; j < getImgNum; ++j)
 	{
-		if (remove(imgFullPaths[j].GetData()) == 0)
-			Dbg("finger image %s deleted!", imgFullPaths[j].GetData());
-		else
-			Dbg("fail to delete image %s!", imgFullPaths[j].GetData());
+		if (ExistsFileA(imgFullPaths[j]))
+			RemoveFileA(imgFullPaths[j]);
 	}
 
 	return errCode;
@@ -1269,7 +1269,7 @@ ErrorCodeEnum CCustMngrAuthFSM::GetImgBlob(CBlob& data, CSimpleStringA imgPath)
 		return Error_Succeed;
 	}
 	else {
-		Dbg("fopen %s failed!", (const char*)imgPath);
+		Dbg("fopen %s failed!", imgPath.GetData());
 		return Error_IO;
 	}
 }

+ 15 - 10
Module/mod_CustMngrAuth/CustMngrAuthFSM.h

@@ -13,6 +13,7 @@
 #include "MaintainWatcher_client_g.h"
 #include "MaintainWatcher_msg_g.h"
 #include "DeviceControl_client_g.h"
+#include "CommEntityUtil.hpp"
 
 #include "json/json.h"
 
@@ -21,6 +22,8 @@ using namespace MaintainWatcher;
 using namespace DeviceControl;
 using namespace FingerPrint;
 
+using namespace SP::Module::Comm;
+
 struct FeatReq
 {
 	char TerminalID[16];
@@ -348,13 +351,13 @@ public:
 	unsigned int s5_on_event(FSMEvent* event);
 
 	HANDLE hStopUpdate;
-	int Initial();
-
 	AuthContext m_authCtx;
 	CSimpleStringA m_TerminalID;
 	CSimpleStringA m_csMachineType;
 	SpReqAnsContext<CustMngrAuthService_StartAuthorize_Req, CustMngrAuthService_StartAuthorize_Ans>::Pointer m_ctx;
 
+	int Initial();
+	ErrorCodeEnum OpenRunInfoFile();
 	ErrorCodeEnum MatchFingerPrint(SpReqAnsContext<CustMngrAuthService_StartAuthorize_Req, CustMngrAuthService_StartAuthorize_Ans>::Pointer ctx, bool& bStopAuthorize);
 	ErrorCodeEnum WaitForUkey(ErrorCodeEnum eErr);
 	void CancelAuthorize();
@@ -426,11 +429,13 @@ public:
 
 	void SendFeatReq(const char* currAgent, const char* branchID, const char* lastTime = NULL)
 	{
+		LOG_FUNCTION();
 		m_reply = NULL;
 		m_jsonLen = 0;
 		FeatReq req = { 0 };
 		memcpy(req.BranchID, branchID, 16);
 		memcpy(req.CurrentAgent, currAgent, 16);//续传标志(代表已查到的最后一个客户经理
+
 		if (lastTime != NULL)
 		{
 			memcpy(req.UpdateTime, lastTime, 20);//本地指纹数据最新时间
@@ -438,11 +443,11 @@ public:
 		}
 
 #ifdef RVC_OS_WIN
-		strncpy_s(req.TerminalID, sizeof(req.TerminalID), m_pFSM->m_TerminalID, _TRUNCATE);
+		Dbg("req.TerminalID = %s, m_pFSM->m_TerminalID = %s", req.TerminalID, m_pFSM->m_TerminalID.GetData());
+		strncpy_s(req.TerminalID, sizeof(req.TerminalID), m_pFSM->m_TerminalID, m_pFSM->m_TerminalID.GetLength());
 #else
-		strncpy(req.TerminalID, m_pFSM->m_TerminalID, _TRUNCATE);
+		strncpy(req.TerminalID, m_pFSM->m_TerminalID, m_pFSM->m_TerminalID.GetLength());
 #endif // RVC_OS_WIN
-
 		CSmartPointer<IPackage> pkt = CreateNewPackage("FETQYREQ");
 		pkt->AddStruct("FETQYREQ", false, false, (LPBYTE)&req, sizeof(FeatReq));
 		SendPackage(pkt);
@@ -469,14 +474,14 @@ public:
 				if (dataLen > 0 )
 				{
 					Dbg("GetStructData structlen: %d", dataLen);
-					BYTE *pBuf = new BYTE[dataLen];
-					memset(pBuf, 0, dataLen);
+					BYTE *pBuffer = new BYTE[dataLen];
+					memset(pBuffer, 0, dataLen);
 
 					int arrayNum = 0;
-					if (pRecvPkg->GetStructData("FETQYANS", pBuf, &dataLen, &arrayNum))
+					if (pRecvPkg->GetStructData("FETQYANS", pBuffer, &dataLen, &arrayNum))
 					{
 						LPBYTE pData = new BYTE[dataLen +1];
-						memcpy(pData, pBuf, dataLen);
+						memcpy(pData, pBuffer, dataLen);
 						m_reply = (FeatReply*)pData;
 						if (m_reply != NULL)
 						{
@@ -486,7 +491,7 @@ public:
 							Dbg("ERROR: m_reply is null!");
 					}else
 						Dbg("ERROR: getstructdata(FETQYANS) failed!");
-					delete pBuf;
+					delete pBuffer;
 				}else
 					Dbg("ERROR: getstructlen(FETQYANS) = 0!");
 

+ 0 - 5
Module/mod_CustMngrAuth/mod_CustMngrAuth.cpp

@@ -8,11 +8,6 @@ CCustMngrAuthEntity::CCustMngrAuthEntity()
 
 }
 
-const char* CCustMngrAuthEntity::GetEntityName() const
-{
-	return "CustMngrAuth";
-}
-
 void CCustMngrAuthEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<ITransactionContext> pTransactionContext)
 {
 	LOG_FUNCTION();

+ 4 - 10
Module/mod_CustMngrAuth/mod_CustMngrAuth.h

@@ -5,6 +5,7 @@
 
 #include "SpBase.h"
 #include "SpTest.h"
+#include "modVer.h"
 
 #include "CustMngrAuth_server_g.h"
 #include "CustMngrAuth_def_g.h"
@@ -35,7 +36,8 @@ public:
 	CCustMngrAuthEntity();
 	virtual ~CCustMngrAuthEntity(){}
 	
-	virtual const char *GetEntityName() const;
+	virtual const char* GetEntityName() const { return "CustMngrAuth"; }
+	virtual const char* GetEntityVersion() const { return MODULE_VERSION_FULL; }
 
 	ON_ENTITYT_TEST();
 
@@ -50,8 +52,8 @@ public:
 
 	//ʵÏÖʵÌå·þÎñ
 	virtual CServerSessionBase* OnNewSession(const char*,const char*);
-	virtual void OnTimeout(DWORD dwTimerID);
 	virtual bool IsService() const { return true; }
+	virtual void OnTimeout(DWORD dwTimerID);
 	void StartAuthorize(SpReqAnsContext<CustMngrAuthService_StartAuthorize_Req, CustMngrAuthService_StartAuthorize_Ans>::Pointer ctx);
 	void StopAuthorize(SpReqAnsContext<CustMngrAuthService_StopAuthorize_Req, CustMngrAuthService_StopAuthorize_Ans>::Pointer ctx);
 	void CollectFingerPrint(SpReqAnsContext<CustMngrAuthService_CollectFingerPrint_Req, CustMngrAuthService_CollectFingerPrint_Ans>::Pointer ctx);
@@ -60,20 +62,12 @@ public:
 	void CheckUkey(SpReqAnsContext<CustMngrAuthService_CheckUkey_Req, CustMngrAuthService_CheckUkey_Ans>::Pointer ctx);
 	void HoldOn(SpReqAnsContext<CustMngrAuthService_HoldOn_Req, CustMngrAuthService_HoldOn_Ans>::Pointer ctx);
 
-	void FeatureDownloadStressTest();
-	void testFingerPrint();
-
 	virtual void OnBroadcastEvent(CUUID SubID, const char *pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, CAutoBuffer Buffer);
 protected:
 private:
 	CCustMngrAuthFSM m_fsm;
 	CUUID m_uuidFRMsg, m_uuidUkMsg;
 	bool m_bNewSessionInit;
-
-
-
-
 };
 
-
 #endif

+ 13 - 1
Module/mod_CustMngrAuth/test/TestCustMngrAuthEntity.cpp

@@ -1,2 +1,14 @@
 #include "mod_CustMngrAuth.h"
-#include "CommEntityUtil.hpp"
+#include "CommEntityUtil.hpp"
+
+TEST_CASE_ENTITY_CLASS(CCustMngrAuthEntity, "OpenRunInfoFile")
+{
+	LOG_FUNCTION();
+	Dbg("EntityName:%s, EntityVersion:%s", GetEntityName(), GetEntityVersion());
+	return Error_Succeed;
+}
+
+TEST_CASE_FSM_CLASS(CCustMngrAuthFSM, "ReadDataIntoMemory")
+{
+	return Error_Succeed;
+}

+ 0 - 14
Module/mod_FingerPrint/FingerPrintFSM.cpp

@@ -15,7 +15,6 @@
 
 using namespace SP::Module::Comm;
 
-#define SLEEP(interval) std::this_thread::sleep_for(std::chrono::milliseconds(interval))
 #define FINGERPRINT_SCAN_TIMEOUT 15000
 #define FINGERPRINT_SCAN_INTERNAL 100
 #define FINGERPRINT_MATCH_TIMEOUT 15000
@@ -1107,17 +1106,4 @@ ErrorCodeEnum CFingerPrintFSM::DeleteFileIfExisted(const char* fileName)
 	}
 }
 
-ULLINT CFingerPrintFSM::RVCGetTickCount()
-{
-#ifdef RVC_OS_WIN
-	return GetTickCount64();
-#else
-	struct timespec ts;
-	clock_gettime(CLOCK_MONOTONIC, &ts);
-
-	return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
-#endif // RVC_OS_WIN
-
-}
-
 #pragma endregion

+ 0 - 3
Module/mod_FingerPrint/FingerPrintFSM.h

@@ -10,8 +10,6 @@
 
 using namespace CardSwiper;
 
-typedef unsigned long long ULLINT;
-
 struct ScanParam
 {
 	CSimpleStringA m_DepPath;
@@ -206,7 +204,6 @@ public:
 	void ScanBeforeMatch(ScanParam* initParam);
 	ErrorCodeEnum MatchProcess(ScanParam* initParam, SpReqAnsContext<FingerPrintService_Match_Req, FingerPrintService_Match_Ans>::Pointer& ctx);
 	ErrorCodeEnum ExtractVendorLib(CSimpleStringA& strLibFullPath);
-	ULLINT RVCGetTickCount();
 
 	void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
 

+ 44 - 5
Module/mod_FingerPrint/test/testFingerPrintEntity.cpp

@@ -1,14 +1,12 @@
 #include "mod_FingerPrint.h"
-#include "TestCommFunc.hpp"
 #include "CommEntityUtil.hpp"
 
+using namespace SP::Module::Comm;
 
 TEST_CASE_ENTITY_CLASS(CFingerPrintEntity, "GetEntityInfo")
 {
 	LOG_FUNCTION();
-
 	Dbg("EntityName:%s, EntityVersion:%s", GetEntityName(), GetEntityVersion());
-
 	return Error_Succeed;
 }
 
@@ -42,8 +40,49 @@ TEST_CASE_FSM_CLASS(CFingerPrintFSM, "DeleteBmpFile")
 	return Error_Succeed;
 }
 
-//TEST_CASE_FSM_CLASS(CFingerPrintFSM, "InitParam")
+//TEST_CASE_FSM_CLASS(CFingerPrintFSM, "InitCommParam")
 //{
 //	ScanParam* pScanParam = new ScanParam();
 //	ErrorCodeEnum errCode = InitCommParam(pScanParam, RegisterType, 1);
-//}
+//}
+
+TEST_CASE_FSM_CLASS(CFingerPrintFSM, "GetDevCatInfo")
+{
+	DevCategoryInfo devInfo;
+	memset(&devInfo, 0, sizeof(DevCategoryInfo));
+	
+#ifdef RVC_OS_WIN
+	strncpy_s(devInfo.szModel, MAX_DEV_MODEL_LEN, "strModel", strlen("strModel"));
+	strncpy_s(devInfo.szType, MAX_DEV_TYPE_LEN, "strType", strlen("strType"));
+	strncpy_s(devInfo.szVendor, MAX_DEV_VENDOR_LEN, "strVendor", strlen("strVendor"));
+#else
+	strncpy(devInfo.szModel, "strModel", (MAX_DEV_MODEL_LEN > strlen("strModel")) ? strlen("strModel") : MAX_DEV_MODEL_LEN);
+	strncpy(devInfo.szType, "strType", (MAX_DEV_TYPE_LEN > strlen("strType")) ? strlen("strType") : MAX_DEV_TYPE_LEN);
+	strncpy(devInfo.szVendor, "strVendor", (MAX_DEV_VENDOR_LEN > strlen("strVendor")) ? strlen("strVendor") : MAX_DEV_VENDOR_LEN);
+#endif // RVC_OS_WIN
+
+	Dbg("m_devCatInfo.szModel:%s, len:%d", devInfo.szModel, strlen(devInfo.szModel));
+	Dbg("m_devCatInfo.szType:%s, len:%d", devInfo.szType, strlen(devInfo.szType));
+	Dbg("m_devCatInfo.szVendor:%s, len:%d", devInfo.szVendor, strlen(devInfo.szVendor));
+
+	return Error_Succeed;
+}
+
+TEST_CASE_FSM_CLASS(CFingerPrintFSM, "GenerateAlarmJson")
+{
+	CSimpleStringA result = GenerateAlarmJson("FingerPrint", 100);
+
+	Dbg("alarm result = %s", result.GetData());
+	return Error_Succeed;
+}
+
+TEST_CASE_METHOD("TestForRVCGetTickCount")
+{
+	ULLINT startTag = RVCGetTickCount();
+	SLEEP(100);
+	long long endTag = RVCGetTickCount();
+
+	Dbg("time internal = %dms", endTag - startTag);
+
+	return Error_Succeed;
+}

+ 1 - 1
addin/cfg/shell.ini.in

@@ -8,7 +8,7 @@ SoftwareVersion=@RVC_FRAMEWORK_VERSION@
 ;AgentInterpreter=0,@LIB_PREFIX@mod_agentip@LIB_SUFFIX@,0x906
 
 CenterSetting=0,@LIB_PREFIX@mod_CenterSetting@LIB_SUFFIX@,0x101
-;CustMngrAuth=0,@LIB_PREFIX@mod_CustMngrAuth@LIB_SUFFIX@,0x102
+CustMngrAuth=0,@LIB_PREFIX@mod_CustMngrAuth@LIB_SUFFIX@,0x102
 ;EventConverter=0,@LIB_PREFIX@mod_evtconverter@LIB_SUFFIX@,0x103
 Upload=0,@LIB_PREFIX@mod_Upload@LIB_SUFFIX@,0x104
 ;Download=0,@LIB_PREFIX@mod_download@LIB_SUFFIX@,0x105