Loading services/incremental/IncrementalService.cpp +6 −3 Original line number Original line Diff line number Diff line Loading @@ -2523,7 +2523,8 @@ std::optional<Milliseconds> IncrementalService::DataLoaderStub::needToBind() { now - mCurrentStatusTs <= Constants::bindingTimeout) { now - mCurrentStatusTs <= Constants::bindingTimeout) { LOG(INFO) << "Binding still in progress. " LOG(INFO) << "Binding still in progress. " << (healthy ? "The DL is healthy/freshly bound, ok to retry for a few times." << (healthy ? "The DL is healthy/freshly bound, ok to retry for a few times." : "Already unhealthy, don't do anything."); : "Already unhealthy, don't do anything.") << " for storage " << mId; // Binding still in progress. // Binding still in progress. if (!healthy) { if (!healthy) { // Already unhealthy, don't do anything. // Already unhealthy, don't do anything. Loading @@ -2546,7 +2547,8 @@ std::optional<Milliseconds> IncrementalService::DataLoaderStub::needToBind() { const auto previousBindTs = mPreviousBindTs; const auto previousBindTs = mPreviousBindTs; mPreviousBindTs = now; mPreviousBindTs = now; const auto nonCrashingInterval = std::max(castToMs(now - previousBindTs), 100ms); const auto nonCrashingInterval = std::max(castToMs(now - previousBindTs - mPreviousBindDelay), 100ms); if (previousBindTs.time_since_epoch() == Clock::duration::zero() || if (previousBindTs.time_since_epoch() == Clock::duration::zero() || nonCrashingInterval > Constants::healthyDataLoaderUptime) { nonCrashingInterval > Constants::healthyDataLoaderUptime) { mPreviousBindDelay = 0ms; mPreviousBindDelay = 0ms; Loading Loading @@ -2575,7 +2577,8 @@ bool IncrementalService::DataLoaderStub::bind() { const auto bindDelay = *maybeBindDelay; const auto bindDelay = *maybeBindDelay; if (bindDelay > 1s) { if (bindDelay > 1s) { LOG(INFO) << "Delaying bind to " << mParams.packageName << " by " LOG(INFO) << "Delaying bind to " << mParams.packageName << " by " << bindDelay.count() / 1000 << "s"; << bindDelay.count() / 1000 << "s" << " for storage " << mId; } } bool result = false; bool result = false; Loading services/incremental/test/IncrementalServiceTest.cpp +22 −1 Original line number Original line Diff line number Diff line Loading @@ -245,6 +245,7 @@ public: mId = mountId; mId = mountId; mListener = listener; mListener = listener; mDataLoader = mDataLoaderHolder; mDataLoader = mDataLoaderHolder; mBindDelayMs = bindDelayMs; *_aidl_return = true; *_aidl_return = true; if (mListener) { if (mListener) { mListener->onStatusChanged(mId, IDataLoaderStatusListener::DATA_LOADER_BOUND); mListener->onStatusChanged(mId, IDataLoaderStatusListener::DATA_LOADER_BOUND); Loading Loading @@ -341,14 +342,18 @@ public: } } mDataLoader = nullptr; mDataLoader = nullptr; } } mBindDelayMs = -1; if (mListener) { if (mListener) { mListener->onStatusChanged(id, IDataLoaderStatusListener::DATA_LOADER_DESTROYED); mListener->onStatusChanged(id, IDataLoaderStatusListener::DATA_LOADER_DESTROYED); } } return binder::Status::ok(); return binder::Status::ok(); } } int bindDelayMs() const { return mBindDelayMs; } private: private: int mId; int mId = -1; int mBindDelayMs = -1; sp<IDataLoaderStatusListener> mListener; sp<IDataLoaderStatusListener> mListener; sp<IDataLoader> mDataLoader; sp<IDataLoader> mDataLoader; sp<IDataLoader> mDataLoaderHolder; sp<IDataLoader> mDataLoaderHolder; Loading Loading @@ -604,11 +609,14 @@ public: MOCK_CONST_METHOD0(now, TimePoint()); MOCK_CONST_METHOD0(now, TimePoint()); void start() { ON_CALL(*this, now()).WillByDefault(Invoke(this, &MockClockWrapper::getClock)); } void start() { ON_CALL(*this, now()).WillByDefault(Invoke(this, &MockClockWrapper::getClock)); } template <class Delta> template <class Delta> void advance(Delta delta) { void advance(Delta delta) { mClock += delta; mClock += delta; } } void advanceMs(int deltaMs) { mClock += std::chrono::milliseconds(deltaMs); } TimePoint getClock() const { return mClock; } TimePoint getClock() const { return mClock; } TimePoint mClock = Clock::now(); TimePoint mClock = Clock::now(); Loading Loading @@ -894,31 +902,38 @@ TEST_F(IncrementalServiceTest, testDataLoaderDestroyedAndDelayed) { ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); // Try the reduced delay, just in case. mClock->advanceMs(mDataLoaderManager->bindDelayMs() / 2); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); } } Loading Loading @@ -1012,31 +1027,37 @@ TEST_F(IncrementalServiceTest, testDataLoaderOnRestart) { ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); } } Loading Loading
services/incremental/IncrementalService.cpp +6 −3 Original line number Original line Diff line number Diff line Loading @@ -2523,7 +2523,8 @@ std::optional<Milliseconds> IncrementalService::DataLoaderStub::needToBind() { now - mCurrentStatusTs <= Constants::bindingTimeout) { now - mCurrentStatusTs <= Constants::bindingTimeout) { LOG(INFO) << "Binding still in progress. " LOG(INFO) << "Binding still in progress. " << (healthy ? "The DL is healthy/freshly bound, ok to retry for a few times." << (healthy ? "The DL is healthy/freshly bound, ok to retry for a few times." : "Already unhealthy, don't do anything."); : "Already unhealthy, don't do anything.") << " for storage " << mId; // Binding still in progress. // Binding still in progress. if (!healthy) { if (!healthy) { // Already unhealthy, don't do anything. // Already unhealthy, don't do anything. Loading @@ -2546,7 +2547,8 @@ std::optional<Milliseconds> IncrementalService::DataLoaderStub::needToBind() { const auto previousBindTs = mPreviousBindTs; const auto previousBindTs = mPreviousBindTs; mPreviousBindTs = now; mPreviousBindTs = now; const auto nonCrashingInterval = std::max(castToMs(now - previousBindTs), 100ms); const auto nonCrashingInterval = std::max(castToMs(now - previousBindTs - mPreviousBindDelay), 100ms); if (previousBindTs.time_since_epoch() == Clock::duration::zero() || if (previousBindTs.time_since_epoch() == Clock::duration::zero() || nonCrashingInterval > Constants::healthyDataLoaderUptime) { nonCrashingInterval > Constants::healthyDataLoaderUptime) { mPreviousBindDelay = 0ms; mPreviousBindDelay = 0ms; Loading Loading @@ -2575,7 +2577,8 @@ bool IncrementalService::DataLoaderStub::bind() { const auto bindDelay = *maybeBindDelay; const auto bindDelay = *maybeBindDelay; if (bindDelay > 1s) { if (bindDelay > 1s) { LOG(INFO) << "Delaying bind to " << mParams.packageName << " by " LOG(INFO) << "Delaying bind to " << mParams.packageName << " by " << bindDelay.count() / 1000 << "s"; << bindDelay.count() / 1000 << "s" << " for storage " << mId; } } bool result = false; bool result = false; Loading
services/incremental/test/IncrementalServiceTest.cpp +22 −1 Original line number Original line Diff line number Diff line Loading @@ -245,6 +245,7 @@ public: mId = mountId; mId = mountId; mListener = listener; mListener = listener; mDataLoader = mDataLoaderHolder; mDataLoader = mDataLoaderHolder; mBindDelayMs = bindDelayMs; *_aidl_return = true; *_aidl_return = true; if (mListener) { if (mListener) { mListener->onStatusChanged(mId, IDataLoaderStatusListener::DATA_LOADER_BOUND); mListener->onStatusChanged(mId, IDataLoaderStatusListener::DATA_LOADER_BOUND); Loading Loading @@ -341,14 +342,18 @@ public: } } mDataLoader = nullptr; mDataLoader = nullptr; } } mBindDelayMs = -1; if (mListener) { if (mListener) { mListener->onStatusChanged(id, IDataLoaderStatusListener::DATA_LOADER_DESTROYED); mListener->onStatusChanged(id, IDataLoaderStatusListener::DATA_LOADER_DESTROYED); } } return binder::Status::ok(); return binder::Status::ok(); } } int bindDelayMs() const { return mBindDelayMs; } private: private: int mId; int mId = -1; int mBindDelayMs = -1; sp<IDataLoaderStatusListener> mListener; sp<IDataLoaderStatusListener> mListener; sp<IDataLoader> mDataLoader; sp<IDataLoader> mDataLoader; sp<IDataLoader> mDataLoaderHolder; sp<IDataLoader> mDataLoaderHolder; Loading Loading @@ -604,11 +609,14 @@ public: MOCK_CONST_METHOD0(now, TimePoint()); MOCK_CONST_METHOD0(now, TimePoint()); void start() { ON_CALL(*this, now()).WillByDefault(Invoke(this, &MockClockWrapper::getClock)); } void start() { ON_CALL(*this, now()).WillByDefault(Invoke(this, &MockClockWrapper::getClock)); } template <class Delta> template <class Delta> void advance(Delta delta) { void advance(Delta delta) { mClock += delta; mClock += delta; } } void advanceMs(int deltaMs) { mClock += std::chrono::milliseconds(deltaMs); } TimePoint getClock() const { return mClock; } TimePoint getClock() const { return mClock; } TimePoint mClock = Clock::now(); TimePoint mClock = Clock::now(); Loading Loading @@ -894,31 +902,38 @@ TEST_F(IncrementalServiceTest, testDataLoaderDestroyedAndDelayed) { ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); // Try the reduced delay, just in case. mClock->advanceMs(mDataLoaderManager->bindDelayMs() / 2); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); } } Loading Loading @@ -1012,31 +1027,37 @@ TEST_F(IncrementalServiceTest, testDataLoaderOnRestart) { ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _)) .WillByDefault(Invoke(mDataLoaderManager, .WillByDefault(Invoke(mDataLoaderManager, &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay)); mClock->advanceMs(mDataLoaderManager->bindDelayMs()); mDataLoaderManager->setDataLoaderStatusDestroyed(); mDataLoaderManager->setDataLoaderStatusDestroyed(); } } Loading