1*3f982cf4SFabien Sanglard // Copyright 2020 The Chromium Authors. All rights reserved. 2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be 3*3f982cf4SFabien Sanglard // found in the LICENSE file. 4*3f982cf4SFabien Sanglard 5*3f982cf4SFabien Sanglard #ifndef TESTING_UTIL_TASK_UTIL_H_ 6*3f982cf4SFabien Sanglard #define TESTING_UTIL_TASK_UTIL_H_ 7*3f982cf4SFabien Sanglard 8*3f982cf4SFabien Sanglard #include <thread> 9*3f982cf4SFabien Sanglard 10*3f982cf4SFabien Sanglard #include "gtest/gtest.h" 11*3f982cf4SFabien Sanglard #include "platform/api/time.h" 12*3f982cf4SFabien Sanglard #include "util/osp_logging.h" 13*3f982cf4SFabien Sanglard 14*3f982cf4SFabien Sanglard namespace openscreen { 15*3f982cf4SFabien Sanglard 16*3f982cf4SFabien Sanglard template <typename Cond> 17*3f982cf4SFabien Sanglard void WaitForCondition(Cond condition, 18*3f982cf4SFabien Sanglard Clock::duration delay = std::chrono::milliseconds(250), 19*3f982cf4SFabien Sanglard int max_attempts = 8) { 20*3f982cf4SFabien Sanglard int attempts = 1; 21*3f982cf4SFabien Sanglard do { 22*3f982cf4SFabien Sanglard OSP_LOG_INFO << "--- Checking condition, attempt " << attempts << "/" 23*3f982cf4SFabien Sanglard << max_attempts; 24*3f982cf4SFabien Sanglard if (condition()) { 25*3f982cf4SFabien Sanglard break; 26*3f982cf4SFabien Sanglard } 27*3f982cf4SFabien Sanglard std::this_thread::sleep_for(delay); 28*3f982cf4SFabien Sanglard } while (attempts++ < max_attempts); 29*3f982cf4SFabien Sanglard ASSERT_TRUE(condition()); 30*3f982cf4SFabien Sanglard } 31*3f982cf4SFabien Sanglard 32*3f982cf4SFabien Sanglard } // namespace openscreen 33*3f982cf4SFabien Sanglard 34*3f982cf4SFabien Sanglard #endif // TESTING_UTIL_TASK_UTIL_H_ 35