diff options
author | Christian Linke <Christian.Linke@bmw.de> | 2016-06-17 02:58:38 -0700 |
---|---|---|
committer | Christian Linke <Christian.Linke@bmw.de> | 2016-06-17 02:59:34 -0700 |
commit | 8f5563bd07f6d71b8358c9e9e84ea6551b60a734 (patch) | |
tree | 7c570a66fa6964a8f8ac2ff139ef385c165f6e92 /AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp | |
parent | 7918c698441c216e461f9995b16540ee5a8f1756 (diff) | |
download | audiomanager-8f5563bd07f6d71b8358c9e9e84ea6551b60a734.tar.gz |
cleanup routing interface to add clean abort and resend possibilities7.5
Signed-off-by: Christian Linke <Christian.Linke@bmw.de>
Diffstat (limited to 'AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp')
-rw-r--r-- | AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp | 137 |
1 files changed, 128 insertions, 9 deletions
diff --git a/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp b/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp index 69cf90a..cea44ef 100644 --- a/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp +++ b/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp @@ -42,11 +42,13 @@ CAmRoutingInterfaceTest::CAmRoutingInterfaceTest() : pRoutingInterfaceBackdoor(), // pCommandInterfaceBackdoor(), // pControlReceiver(&pDatabaseHandler, &pRoutingSender, &pCommandSender, &pSocketHandler, &pRouter), // - pObserver(&pCommandSender, &pRoutingSender, &pSocketHandler) + pObserver(&pCommandSender, &pRoutingSender, &pSocketHandler), // + pRoutingReceiver(&pDatabaseHandler, &pRoutingSender, &pControlSender, &pSocketHandler) { pDatabaseHandler.registerObserver(&pObserver); pRoutingInterfaceBackdoor.unloadPlugins(&pRoutingSender); pRoutingInterfaceBackdoor.injectInterface(&pRoutingSender, &pMockInterface, "mock"); + pControlInterfaceBackdoor.replaceController(&pControlSender, &pMockControlInterface); pCommandInterfaceBackdoor.unloadPlugins(&pCommandSender); } @@ -82,7 +84,8 @@ void CAmRoutingInterfaceTest::TearDown() { } -TEST_F(CAmRoutingInterfaceTest,abort) + +TEST_F(CAmRoutingInterfaceTest,connectRace) { am_Sink_s sink; am_sinkID_t sinkID; @@ -97,7 +100,69 @@ TEST_F(CAmRoutingInterfaceTest,abort) source.domainID=DYNAMIC_ID_BOUNDARY; source.name="sds"; + pCF.createSink(sink); + pCF.createDomain(domain); + domain.name = "mock"; + domain.busname = "mock"; + domain.domainID=0; + sink.sinkID = 2; + sink.domainID = DYNAMIC_ID_BOUNDARY; + //prepare the stage + ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain,domainID)); + ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID)); + ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,source.sourceID)); + + //start a connect, expect a call on the routingInterface + EXPECT_CALL(pMockInterface,asyncConnect(_,_,1,sinkID,CF_GENIVI_ANALOG)).WillOnce(Return(E_OK)); + ASSERT_EQ(E_OK, pControlReceiver.connect(handle,connectionID,CF_GENIVI_ANALOG,1,2)); + + //check the correctness of the handle + ASSERT_NE(handle.handle, 0); + ASSERT_EQ(handle.handleType, H_CONNECT); + + //the handle must be inside the handlelist + ASSERT_EQ(E_OK, pControlReceiver.getListHandles(listHandles)); + ASSERT_TRUE(listHandles[0].handle==handle.handle); + ASSERT_TRUE(listHandles[0].handleType==handle.handleType); + + //send an abort expect a call on the routing interface + EXPECT_CALL(pMockInterface,asyncAbort(_)).WillOnce(Return(E_OK)); + ASSERT_EQ(E_OK, pControlReceiver.abortAction(handle)); + + //so we aborted but there was a race. We get the correct answer now. + EXPECT_CALL(pMockControlInterface,cbAckConnect(_,E_OK)); + pRoutingReceiver.ackConnect(handle,connectionID,E_OK); + + //the abort can be ignored or anwered with error by the routingadaper, should not matter + + EXPECT_CALL(pMockControlInterface,cbAckConnect(_,E_NON_EXISTENT)); + pRoutingReceiver.ackConnect(handle,connectionID,E_NON_EXISTENT); + + std::vector<am_Connection_s> listconnections; + //In the end, the database must be correct: + pDatabaseHandler.getListConnections(listconnections); + ASSERT_EQ(listconnections[0].connectionID,connectionID); + + //In the end, the database must be correct: + pDatabaseHandler.getListConnectionsReserved(listconnections); + ASSERT_EQ(listconnections[0].connectionID,connectionID); +} + +TEST_F(CAmRoutingInterfaceTest,abort) +{ + am_Sink_s sink; + am_sinkID_t sinkID; + am_Domain_s domain; + am_domainID_t domainID; + am_Handle_s handle; + am_connectionID_t connectionID; + std::vector<am_Handle_s> listHandles; + am_Source_s source; + pCF.createSource(source); + source.sourceID=1; + source.domainID=DYNAMIC_ID_BOUNDARY; + source.name="sds"; pCF.createSink(sink); pCF.createDomain(domain); @@ -129,6 +194,9 @@ TEST_F(CAmRoutingInterfaceTest,abort) EXPECT_CALL(pMockInterface,asyncAbort(_)).WillOnce(Return(E_OK)); ASSERT_EQ(E_OK, pControlReceiver.abortAction(handle)); + EXPECT_CALL(pMockControlInterface,cbAckConnect(_,E_ABORTED)); + pRoutingReceiver.ackConnect(handle,connectionID,E_ABORTED); + //the reaction on the abort is specific for every function //now we try to abort a handle that does not exist @@ -380,7 +448,7 @@ TEST_F(CAmRoutingInterfaceTest,connect) ASSERT_TRUE(listHandles[0].handleType==handle.handleType); } -TEST_F(CAmRoutingInterfaceTest,disconnect) +TEST_F(CAmRoutingInterfaceTest,connectError) { am_Sink_s sink; am_sinkID_t sinkID; @@ -397,6 +465,56 @@ TEST_F(CAmRoutingInterfaceTest,disconnect) sink.domainID = DYNAMIC_ID_BOUNDARY; am_Source_s source; + pCF.createSource(source); + source.sourceID=1; + source.domainID=DYNAMIC_ID_BOUNDARY; + + ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain,domainID)); + ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID)); + ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,source.sourceID)); + EXPECT_CALL(pMockInterface,asyncConnect(_,_,1,sinkID,CF_GENIVI_ANALOG)).WillOnce(Return(E_OK)); + ASSERT_EQ(E_OK, pControlReceiver.connect(handle,connectionID,CF_GENIVI_ANALOG,1,2)); + ASSERT_NE(handle.handle, 0); + ASSERT_EQ(handle.handleType, H_CONNECT); + ASSERT_EQ(E_OK, pControlReceiver.getListHandles(listHandles)); + ASSERT_TRUE(listHandles[0].handle==handle.handle); + ASSERT_TRUE(listHandles[0].handleType==handle.handleType); + + //so we aborted but there was a race. We get the correct answer now. + EXPECT_CALL(pMockControlInterface,cbAckConnect(_,E_UNKNOWN)); + pRoutingReceiver.ackConnect(handle,connectionID,E_UNKNOWN); + + std::vector<am_Connection_s> listconnections; + //In the end, the database must be correct: + pDatabaseHandler.getListConnections(listconnections); + ASSERT_EQ(listconnections.size(),0); + + //No more reservations + pDatabaseHandler.getListConnectionsReserved(listconnections); + ASSERT_EQ(listconnections.size(),0); + + ASSERT_EQ(E_OK, pControlReceiver.getListHandles(listHandles)); + ASSERT_EQ(listHandles.size(),0); + +} + +TEST_F(CAmRoutingInterfaceTest,disconnect) +{ + am_Sink_s sink; + am_sinkID_t sinkID; + am_Domain_s domain; + am_domainID_t domainID; + am_Handle_s handle,handle2; + am_connectionID_t connectionID; + std::vector<am_Handle_s> listHandles; + pCF.createSink(sink); + pCF.createDomain(domain); + domain.name = "mock"; + domain.busname = "mock"; + sink.sinkID = 2; + sink.domainID = DYNAMIC_ID_BOUNDARY; + + am_Source_s source; pCF.createSource(source); source.sourceID=1; source.domainID=DYNAMIC_ID_BOUNDARY; @@ -409,12 +527,12 @@ TEST_F(CAmRoutingInterfaceTest,disconnect) ASSERT_EQ(E_OK, pControlReceiver.connect(handle,connectionID,CF_GENIVI_ANALOG,1,2)); ASSERT_EQ(E_OK, pDatabaseHandler.changeConnectionFinal(connectionID)); EXPECT_CALL(pMockInterface,asyncDisconnect(_,connectionID)).WillOnce(Return(E_OK)); - ASSERT_EQ(E_OK, pControlReceiver.disconnect(handle,connectionID)); - ASSERT_NE(handle.handle, 0); - ASSERT_EQ(handle.handleType, H_DISCONNECT); + ASSERT_EQ(E_OK, pControlReceiver.disconnect(handle2,connectionID)); + ASSERT_NE(handle2.handle, 0); + ASSERT_EQ(handle2.handleType, H_DISCONNECT); ASSERT_EQ(E_OK, pControlReceiver.getListHandles(listHandles)); - ASSERT_TRUE(listHandles[1].handle==handle.handle); - ASSERT_TRUE(listHandles[1].handleType==handle.handleType); + ASSERT_TRUE(listHandles[1].handle==handle2.handle); + ASSERT_TRUE(listHandles[1].handleType==handle2.handleType); } @@ -429,6 +547,7 @@ TEST_F(CAmRoutingInterfaceTest,nothingTodisconnect) } + int main(int argc, char **argv) { try @@ -439,7 +558,7 @@ int main(int argc, char **argv) catch (TCLAP::ArgException &e) // catch any exceptions { std::cerr << "error: " << e.error() << " for arg " << e.argId() << std::endl; } CAmCommandLineSingleton::instance()->preparse(argc,argv); - CAmDltWrapper::instanctiateOnce("RTEST","RoutingInterface Test",enableDebug.getValue(),CAmDltWrapper::logDestination::DAEMON); + CAmDltWrapper::instanctiateOnce("RTEST","RoutingInterface Test",enableDebug.getValue(),CAmDltWrapper::logDestination::COMMAND_LINE); ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } |