adjust timing in flaky Windows test (#60)
Adjust "wait_period" to be much greater than "trigger_period" in multi-threaded waitset test
This commit is contained in:
parent
17845ae1f9
commit
ef5690278b
1 changed files with 4 additions and 32 deletions
|
@ -12,6 +12,7 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
#include <algorithm> // for std::max
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <future>
|
#include <future>
|
||||||
|
@ -147,7 +148,7 @@ TEST(CLASSNAME(WaitSetTestFixture, RMW_IMPLEMENTATION), multi_wait_set_threaded)
|
||||||
const size_t number_of_threads = 20; // concurrent waits
|
const size_t number_of_threads = 20; // concurrent waits
|
||||||
const size_t count_target = 10; // number of times each wait should wake up before being "done"
|
const size_t count_target = 10; // number of times each wait should wake up before being "done"
|
||||||
const size_t retry_limit = 100; // number of times to retry when a timeout occurs waiting
|
const size_t retry_limit = 100; // number of times to retry when a timeout occurs waiting
|
||||||
const uint64_t wait_period = RCL_MS_TO_NS(1); // timeout passed to rcl_wait each try
|
const uint64_t wait_period = RCL_MS_TO_NS(100); // timeout passed to rcl_wait each try
|
||||||
const std::chrono::milliseconds trigger_period(2); // period between each round of triggers
|
const std::chrono::milliseconds trigger_period(2); // period between each round of triggers
|
||||||
struct TestSet
|
struct TestSet
|
||||||
{
|
{
|
||||||
|
@ -173,18 +174,9 @@ TEST(CLASSNAME(WaitSetTestFixture, RMW_IMPLEMENTATION), multi_wait_set_threaded)
|
||||||
EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string_safe();
|
EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string_safe();
|
||||||
ret = rcl_wait_set_add_guard_condition(&test_set.wait_set, &test_set.guard_condition);
|
ret = rcl_wait_set_add_guard_condition(&test_set.wait_set, &test_set.guard_condition);
|
||||||
EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string_safe();
|
EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string_safe();
|
||||||
{
|
|
||||||
std::stringstream ss;
|
|
||||||
ss << "[thread " << test_set.thread_id << "] Waiting (try #" << wake_try_count << ")";
|
|
||||||
// printf("%s\n", ss.str().c_str());
|
|
||||||
}
|
|
||||||
ret = rcl_wait(&test_set.wait_set, wait_period);
|
ret = rcl_wait(&test_set.wait_set, wait_period);
|
||||||
if (ret != RCL_RET_TIMEOUT) {
|
if (ret != RCL_RET_TIMEOUT) {
|
||||||
{
|
ASSERT_EQ(ret, RCL_RET_OK);
|
||||||
std::stringstream ss;
|
|
||||||
ss << "[thread " << test_set.thread_id << "] Wakeup (try #" << wake_try_count << ")";
|
|
||||||
// printf("%s\n", ss.str().c_str());
|
|
||||||
}
|
|
||||||
change_detected = true;
|
change_detected = true;
|
||||||
// if not timeout, then the single guard condition should be set
|
// if not timeout, then the single guard condition should be set
|
||||||
if (!test_set.wait_set.guard_conditions[0]) {
|
if (!test_set.wait_set.guard_conditions[0]) {
|
||||||
|
@ -198,7 +190,7 @@ TEST(CLASSNAME(WaitSetTestFixture, RMW_IMPLEMENTATION), multi_wait_set_threaded)
|
||||||
} else {
|
} else {
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "[thread " << test_set.thread_id << "] Timeout (try #" << wake_try_count << ")";
|
ss << "[thread " << test_set.thread_id << "] Timeout (try #" << wake_try_count << ")";
|
||||||
// printf("%s\n", ss.str().c_str());
|
printf("%s\n", ss.str().c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!change_detected) {
|
if (!change_detected) {
|
||||||
|
@ -255,31 +247,15 @@ TEST(CLASSNAME(WaitSetTestFixture, RMW_IMPLEMENTATION), multi_wait_set_threaded)
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
// *INDENT-ON*
|
// *INDENT-ON*
|
||||||
// auto print_state = [&test_sets](std::string prefix) {
|
|
||||||
// std::stringstream ss;
|
|
||||||
// ss << prefix << "[";
|
|
||||||
// size_t enumerate = 0;
|
|
||||||
// for (const auto & test_set : test_sets) {
|
|
||||||
// enumerate++;
|
|
||||||
// if (enumerate != 1) {
|
|
||||||
// ss << ", ";
|
|
||||||
// }
|
|
||||||
// ss << std::setfill('0') << std::setw(2) << test_set.wake_count.load();
|
|
||||||
// }
|
|
||||||
// ss << "]";
|
|
||||||
// printf("%s\n", ss.str().c_str());
|
|
||||||
// };
|
|
||||||
size_t loop_count = 0;
|
size_t loop_count = 0;
|
||||||
while (loop_test()) {
|
while (loop_test()) {
|
||||||
loop_count++;
|
loop_count++;
|
||||||
// print_state("triggering, current states: ");
|
|
||||||
for (const auto & test_set : test_sets) {
|
for (const auto & test_set : test_sets) {
|
||||||
ret = rcl_trigger_guard_condition(&test_set.guard_condition);
|
ret = rcl_trigger_guard_condition(&test_set.guard_condition);
|
||||||
EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string_safe();
|
EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string_safe();
|
||||||
}
|
}
|
||||||
std::this_thread::sleep_for(trigger_period);
|
std::this_thread::sleep_for(trigger_period);
|
||||||
}
|
}
|
||||||
// print_state("final states: ");
|
|
||||||
// Join the threads.
|
// Join the threads.
|
||||||
for (auto & test_set : test_sets) {
|
for (auto & test_set : test_sets) {
|
||||||
test_set.thread.join();
|
test_set.thread.join();
|
||||||
|
@ -288,10 +264,6 @@ TEST(CLASSNAME(WaitSetTestFixture, RMW_IMPLEMENTATION), multi_wait_set_threaded)
|
||||||
for (auto & test_set : test_sets) {
|
for (auto & test_set : test_sets) {
|
||||||
ASSERT_EQ(count_target, test_set.wake_count.load());
|
ASSERT_EQ(count_target, test_set.wake_count.load());
|
||||||
}
|
}
|
||||||
// printf(
|
|
||||||
// "number of loops to get '%zu' wake ups on all threads: %zu\n",
|
|
||||||
// count_target,
|
|
||||||
// loop_count);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the interaction of a guard condition and a negative timeout by
|
// Check the interaction of a guard condition and a negative timeout by
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue