From 63efb86fd9273828d3792c0e0c66e32bbeee617b Mon Sep 17 00:00:00 2001 From: Jens Lorenz Date: Wed, 15 Jul 2015 17:43:37 +0200 Subject: calculateMainConnectionDelay doesn't work if only a single connection has a timing information Signed-off-by: Jens Lorenz --- AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp | 16 ++++++---------- .../test/AmMapHandlerTest/CAmMapHandlerTest.cpp | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp b/AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp index 1af6361..d8878c3 100644 --- a/AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp +++ b/AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp @@ -534,8 +534,7 @@ am_Error_e CAmDatabaseHandlerMap::enterMainConnectionDB(const am_MainConnection_ } //now check the connectionTable for all connections in the route. IF connectionID exist - delay = calculateDelayForRoute(mainConnectionData.listConnectionID); - mMappedData.mMainConnectionMap[nextID].delay = delay; + delay = calculateDelayForRoute(mainConnectionData.listConnectionID); logInfo("DatabaseHandler::enterMainConnectionDB entered new mainConnection with sourceID", mainConnectionData.sourceID, "sinkID:", mainConnectionData.sinkID, "delay:", delay, "assigned ID:", connectionID); if (mpDatabaseObserver) @@ -549,7 +548,9 @@ am_Error_e CAmDatabaseHandlerMap::enterMainConnectionDB(const am_MainConnection_ //finally, we update the delay value for the maintable if (delay == 0) delay = -1; - return (changeDelayMainConnection(delay, connectionID)); + (void)changeDelayMainConnection(delay, connectionID); + + return (E_OK); } /** @@ -2225,21 +2226,16 @@ am_timeSync_t CAmDatabaseHandlerMap::calculateMainConnectionDelay(const am_mainC return -1; am_MainConnection_s mainConnection = mMappedData.mMainConnectionMap.at(mainConnectionID); am_timeSync_t delay = 0; - am_timeSync_t min = SHRT_MAX; std::vector::const_iterator iter = mainConnection.listConnectionID.begin(); for(;iterdelay; - min = std::min(min,source->delay); + delay += std::max(source->delay, static_cast(0)); } } - if (min < 0) - delay = -1; - return (delay); - + return (delay == 0 ? -1 : std::min(delay, static_cast(SHRT_MAX))); } /** diff --git a/AudioManagerDaemon/test/AmMapHandlerTest/CAmMapHandlerTest.cpp b/AudioManagerDaemon/test/AmMapHandlerTest/CAmMapHandlerTest.cpp index 0e9b3dc..18632f3 100644 --- a/AudioManagerDaemon/test/AmMapHandlerTest/CAmMapHandlerTest.cpp +++ b/AudioManagerDaemon/test/AmMapHandlerTest/CAmMapHandlerTest.cpp @@ -3020,7 +3020,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, enter_removeCrossfader) ASSERT_EQ(E_OK,pDatabaseHandler.removeCrossfaderDB(crossfaderID))<< "ERROR: database error"; } -TEST_F(CAmMapHandlerObserverCallbacksTest, enter_removeMainConnection) +TEST_F(CAmMapHandlerObserverCallbacksTest, enter_update_removeMainConnection) { //fill the connection database am_Connection_s connection; @@ -3076,9 +3076,20 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, enter_removeMainConnection) EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), timingInformationChanged(1, _)).Times(1); ASSERT_EQ(E_OK, pDatabaseHandler.enterMainConnectionDB(mainConnection,mainConnectionID)); ASSERT_NE(0, mainConnectionID); + + //change delay of first connection + am_timeSync_t delay = 20; + EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), timingInformationChanged(mainConnectionID, 20)).Times(1); + ASSERT_EQ(E_OK, pDatabaseHandler.changeConnectionTimingInformation(mainConnection.listConnectionID[0], delay)); + + //change delay of route + delay = 40; + EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), timingInformationChanged(mainConnectionID, 40)).Times(1); + ASSERT_EQ(E_OK, pDatabaseHandler.changeDelayMainConnection(delay, mainConnectionID)); + EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), removedMainConnection(1)).Times(1); EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), mainConnectionStateChanged(1, _)).Times(1); - ASSERT_EQ(E_OK,pDatabaseHandler.removeMainConnectionDB(1)) << "ERROR: database error"; + ASSERT_EQ(E_OK,pDatabaseHandler.removeMainConnectionDB(mainConnectionID)) << "ERROR: database error"; } TEST_F(CAmMapHandlerObserverCallbacksTest, changeSinkAvailability) -- cgit v1.2.1