CLStatus CLMsgLoopManagerForSTLqueue::Initialize() { if(m_pMsgReceiver == 0) return CLStatus(-1, 0); CLMessagePoster *pMsgPoster = 0; try { CLExecutiveNameServer *pNameServer = CLExecutiveNameServer::GetInstance(); if(pNameServer == 0) { CLLogger::WriteLogMsg("In CLMsgLoopManagerForSTLqueue::Initialize(), CLExecutiveNameServer::GetInstance error", 0); throw CLStatus(-1, 0); } pMsgPoster = new CLMessagePoster(new CLMsgToPointerSerializer, 0, new CLDataPostChannelBySTLqueueMaintainer(m_pSTLqueue), m_pEvent); CLStatus s2 = pMsgPoster->Initialize(new CLInitialDataPostChannelNotifier(), 0); if(!s2.IsSuccess() && (s2.m_clErrorCode == DATA_POSTER_INITIALIZE_ERROR)) { CLLogger::WriteLogMsg("In CLMsgLoopManagerForSTLqueue::Initialize(), pMsgPoster->Initialize error", 0); throw CLStatus(-1, 0); } CLStatus s = pNameServer->Register(m_strThreadName.c_str(), pMsgPoster, m_pMsgReceiver); if(!s.IsSuccess()) { CLLogger::WriteLogMsg("In CLMsgLoopManagerForSTLqueue::Initialize(), pNameServer->Register error", 0); m_pMsgReceiver = 0; return CLStatus(-1, 0); } return CLStatus(0, 0); } catch(CLStatus& s1) { if(m_pMsgReceiver) { delete m_pMsgReceiver; m_pMsgReceiver = 0; } if(pMsgPoster) delete pMsgPoster; else { delete m_pEvent; delete m_pSTLqueue; } return s1; } }
CLStatus CLMsgLoopManagerForSTLqueue::Uninitialize() { CLExecutiveNameServer *pNameServer = CLExecutiveNameServer::GetInstance(); if(pNameServer == 0) { CLLogger::WriteLogMsg("In CLMsgLoopManagerForMsgQueue::Uninitialize(), CLExecutiveNameServer::GetInstance error", 0); return CLStatus(-1, 0); } return pNameServer->ReleaseCommunicationPtr(m_strThreadName.c_str()); }
TEST(CLExecutiveNameServer, ReleaseCommunicationPtr) { CLExecutiveNameServer *p = CLExecutiveNameServer::GetInstance(); EXPECT_NE(p, (CLExecutiveNameServer *)0); EXPECT_FALSE(p->ReleaseCommunicationPtr(0).IsSuccess()); EXPECT_FALSE(p->ReleaseCommunicationPtr("").IsSuccess()); CLLogger::WriteLogMsg("The Following bug is produced on purpose", 0); EXPECT_FALSE(p->ReleaseCommunicationPtr("1").IsSuccess()); }
TEST(CLExecutiveNameServer, MsgReceiver_Register_Test) { const char *strPipeName = "/tmp/NamedPipe_For_CLExecutiveNameServer_Test"; CLMessageReceiver *mr = new CLMessageReceiver(new CLBufferManager(), new CLDataReceiverByNamedPipe(strPipeName), new CLPointerToMsgDeserializer(), new CLProtocolDecapsulatorBySplitPointer); CLMessagePoster *mp = new CLMessagePoster(new CLMsgToPointerSerializer, 0, new CLDataPostChannelByNamedPipeMaintainer(strPipeName), 0); EXPECT_TRUE(mp->Initialize(new CLInitialDataPostChannelNotifier, 0).IsSuccess()); CLExecutiveNameServer *p = CLExecutiveNameServer::GetInstance(); EXPECT_NE(p, (CLExecutiveNameServer *)0); EXPECT_FALSE(p->Register("", mp, mr).IsSuccess()); }
CLStatus CLMsgLoopManagerForPipeQueue::Uninitialize() { CLPrivateMsgQueuebyNamedPipe *pQueue = dynamic_cast<CLPrivateMsgQueuebyNamedPipe *>(m_pMsgQueue); if(pQueue == 0) return CLStatus(0, 0); CLExecutiveNameServer *pNameServer = CLExecutiveNameServer::GetInstance(); if(pNameServer == 0) { CLLogger::WriteLogMsg("In CLMsgLoopManagerForPipeQueue::Uninitialize(), CLExecutiveNameServer::GetInstance error", 0); return CLStatus(-1, 0); } return pNameServer->ReleaseCommunicationPtr(m_strThreadName.c_str()); }
CLStatus CLMsgLoopManagerForSTLQueue::Initialize(){ CLExecutiveNameServer* pNameServer = CLExecutiveNameServer::GetInstance(); if(pNameServer == NULL){ delete m_pMsgQueue; m_pMsgQueue = NULL; CLLogger::WriteLogMsg("In CLMsgLoopManagerForMsgQueue::Initialize(), CLExecutiveNameServer::GetInstance error", 0); return CLStatus(-1,0); } CLStatus s = pNameServer->Register(m_strThreadName.c_str(),new CLThreadCommunicationBySTLQueue(m_pMsgQueue)); if(!s.IsSuccess()){ delete m_pMsgQueue; m_pMsgQueue = 0; CLLogger::WriteLogMsg("In CLMsgLoopManagerForMsgQueue::Initialize() , pNameServer->Register error", 0); return CLStatus(-1,0); } return CLStatus(0,0); }
CLStatus On_2(CLMessage *pm) { CLMsg2ForCLNonThreadForMsgLoopTest *p = dynamic_cast<CLMsg2ForCLNonThreadForMsgLoopTest*>(pm); EXPECT_TRUE(p != 0); g_for_on2++; if(g_for_on2 == count) { EXPECT_TRUE(CLExecutiveNameServer::PostExecutiveMessage(test1_pipe_name, new CLMsg2ForCLNonThreadForMsgLoopTest, true).IsSuccess()); CLExecutiveNameServer *pNameServer = CLExecutiveNameServer::GetInstance(); EXPECT_TRUE(pNameServer != 0); pNameServer->ReleaseCommunicationPtr(test1_pipe_name); return CLStatus(QUIT_MESSAGE_LOOP, 0); } return CLStatus(0, 0); }
TEST(CLExecutiveNameServer, MsgReceiver_Features_Test) { const char *strPipeName = "/tmp/NamedPipe_For_CLExecutiveNameServer_Test"; CLMessageReceiver *mr = new CLMessageReceiver(new CLBufferManager(), new CLDataReceiverByNamedPipe(strPipeName), new CLPointerToMsgDeserializer(), new CLProtocolDecapsulatorBySplitPointer); CLMessagePoster *mp = new CLMessagePoster(new CLMsgToPointerSerializer, 0, new CLDataPostChannelByNamedPipeMaintainer(strPipeName), 0); EXPECT_TRUE(mp->Initialize(new CLInitialDataPostChannelNotifier, 0).IsSuccess()); CLExecutiveNameServer *p = CLExecutiveNameServer::GetInstance(); EXPECT_NE(p, (CLExecutiveNameServer *)0); EXPECT_TRUE(p->Register("SDFdfd1", mp, mr).IsSuccess()); for(int i = 1; i < 40960 / 8; i++) { EXPECT_TRUE(CLExecutiveNameServer::PostExecutiveMessage("SDFdfd1", new CLMessage(i)).IsSuccess()); } EXPECT_TRUE(p->ReleaseCommunicationPtr("SDFdfd1").IsSuccess()); }
CLStatus CLExecutiveNameServer::PostExecutiveMessage(const char* pstrExecutiveName, CLMessage* pMessage){ if(pMessage == 0) return CLStatus(-1, 0); if((pstrExecutiveName == 0) || (strlen(pstrExecutiveName) == 0)){ delete pMessage; return CLStatus(-1, 0); } CLExecutiveNameServer* pNameServer = CLExecutiveNameServer::GetInstance(); if(pNameServer == NULL){ CLLogger::WriteLogMsg("In CLExecutiveNameServer::PostExecutiveMessage(), CLExecutiveNameServer::GetInstance error", 0); delete pMessage; return CLStatus(-1,0); } CLExecutiveCommunication* pComm = pNameServer->GetCommunicationPtr(pstrExecutiveName); if(pComm == NULL){ CLLogger::WriteLogMsg("In CLExecutiveNameServer::PostExecutiveMessage(), pNameServer->GetCommunicationPtr error", 0); delete pMessage; return CLStatus(-1,0); } CLStatus s = pComm->PostExecutiveMessage(pMessage); if(!s.IsSuccess()){ CLLogger::WriteLogMsg("In CLExecutiveNameServer::PostExecutiveMessage(), pComm->PostExecutiveMessage error", 0); CLStatus s = pNameServer->ReleaseCommunicationPtr(pstrExecutiveName); if(!s.IsSuccess()) CLLogger::WriteLogMsg("In CLExecutiveNameServer::PostExecutiveMessage(), pNameServer->ReleaseCommunicationPtr error", 0); return CLStatus(-1,0); } CLStatus s2 = pNameServer->ReleaseCommunicationPtr(pstrExecutiveName); if(!s2.IsSuccess()) CLLogger::WriteLogMsg("In CLExecutiveNameServer::PostExecutiveMessage(), pNameServer->ReleaseCommunicationPtr error", 0); return CLStatus(0, 0); }
CLStatus CLMsgLoopManagerForPipeQueue::Initialize() { CLPrivateMsgQueuebyNamedPipe *pQueue = dynamic_cast<CLPrivateMsgQueuebyNamedPipe *>(m_pMsgQueue); if(pQueue == 0) return CLStatus(0, 0); CLExecutiveNameServer *pNameServer = CLExecutiveNameServer::GetInstance(); if(pNameServer == 0) { CLLogger::WriteLogMsg("In CLMsgLoopManagerForPipeQueue::Initialize(), CLExecutiveNameServer::GetInstance error", 0); return CLStatus(-1, 0); } CLStatus s = pNameServer->Register(m_strThreadName.c_str(), new CLPrivateExecutiveCommunicationByNamedPipe(m_strThreadName.c_str())); if(!s.IsSuccess()) { CLLogger::WriteLogMsg("In CLMsgLoopManagerForPipeQueue::Initialize(), pNameServer->Register error", 0); return CLStatus(-1, 0); } return CLStatus(0, 0); }
TEST(CLExecutiveNameServer, PostExecutiveMessage_Features_Test) { const char *strPipeName = "/tmp/NamedPipe_For_CLExecutiveNameServer_Test"; CLNamedPipe np(strPipeName, true); CLMessagePoster *mp = new CLMessagePoster(new CLMsgToPointerSerializer, 0, new CLDataPostChannelByNamedPipeMaintainer(strPipeName), 0); CLExecutiveNameServer *p = CLExecutiveNameServer::GetInstance(); EXPECT_NE(p, (CLExecutiveNameServer *)0); EXPECT_TRUE(mp->Initialize(new CLInitialDataPostChannelNotifier, 0).IsSuccess()); EXPECT_TRUE(p->Register("SDFdfd1", mp).IsSuccess()); CLMessage *pmsg1 = new CLMessage(1); EXPECT_TRUE(CLExecutiveNameServer::PostExecutiveMessage("SDFdfd1", pmsg1, true).IsSuccess()); CLIOVectors iov; long j; EXPECT_TRUE(iov.PushBack((char *)(&j), 8).IsSuccess()); EXPECT_TRUE(np.Read(iov).IsSuccess()); EXPECT_EQ(j, (long)pmsg1); EXPECT_TRUE(p->ReleaseCommunicationPtr("SDFdfd1").IsSuccess()); }
CLStatus On_1(CLMessage *pm) { CLMsg1ForCLNonThreadForMsgLoopTest *p = dynamic_cast<CLMsg1ForCLNonThreadForMsgLoopTest*>(pm); EXPECT_TRUE(p != 0); g_for_on1++; CLExecutiveNameServer *pNameServer = CLExecutiveNameServer::GetInstance(); EXPECT_TRUE(pNameServer != 0); CLEvent *m_pEvent = new CLEvent(test1_pipe_name, true); CLMultiMsgSerializer *m_pMsgSerializer = new CLMultiMsgSerializer; EXPECT_TRUE(m_pMsgSerializer->RegisterSerializer(1, new CLMsg1ForCLNonThreadForMsgLoopTest_Serializer).IsSuccess()); EXPECT_TRUE(m_pMsgSerializer->RegisterSerializer(2, new CLMsg2ForCLNonThreadForMsgLoopTest_Serializer).IsSuccess()); CLMessagePoster *pMsgPoster = new CLMessagePoster(m_pMsgSerializer, 0, new CLDataPostChannelByNamedPipeMaintainer(test1_pipe_namepath), m_pEvent); EXPECT_TRUE(pMsgPoster->Initialize(new CLInitialDataPostChannelNotifier(), 0).IsSuccess()); EXPECT_TRUE(pNameServer->Register(test1_pipe_name, pMsgPoster).IsSuccess()); EXPECT_TRUE(CLExecutiveNameServer::PostExecutiveMessage(test1_pipe_name, new CLMsg1ForCLNonThreadForMsgLoopTest, true).IsSuccess()); return CLStatus(0, 0); }
TEST(CLExecutiveNameServer, GetCommunicationPtr) { CLExecutiveNameServer *p = CLExecutiveNameServer::GetInstance(); EXPECT_NE(p, (CLExecutiveNameServer *)0); EXPECT_EQ(p->GetCommunicationPtr(0), (CLMessagePoster *)0); EXPECT_EQ(p->GetCommunicationPtr(""), (CLMessagePoster *)0); CLLogger::WriteLogMsg("The Following bug is produced on purpose", 0); EXPECT_EQ(p->GetCommunicationPtr("3423"), (CLMessagePoster *)0); const char *strPipeName = "/tmp/NamedPipe_For_CLExecutiveNameServer_Test"; CLNamedPipe np(strPipeName, true); CLMessagePoster *mp = new CLMessagePoster(new CLMsgToPointerSerializer, 0, new CLDataPostChannelByNamedPipeMaintainer(strPipeName), 0); EXPECT_TRUE(mp->Initialize(new CLInitialDataPostChannelNotifier, 0).IsSuccess()); EXPECT_TRUE(p->Register("SDFdfd", mp).IsSuccess()); CLMessagePoster *qq = p->GetCommunicationPtr("SDFdfd"); EXPECT_TRUE(qq == mp); EXPECT_TRUE(p->ReleaseCommunicationPtr("SDFdfd").IsSuccess()); EXPECT_TRUE(p->ReleaseCommunicationPtr("SDFdfd").IsSuccess()); }