From eb790c48cddcee28b0761a38c75ddfca283bd1e1 Mon Sep 17 00:00:00 2001 From: Francis Tsui Date: Fri, 12 Sep 2025 17:16:34 -0700 Subject: [PATCH] Fix flaky test. PiperOrigin-RevId: 806481329 --- sharing/BUILD | 1 + sharing/nearby_file_handler.cc | 10 ++++++++-- sharing/nearby_file_handler.h | 4 +++- sharing/nearby_file_handler_test.cc | 29 +++++++++++++++++++++-------- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/sharing/BUILD b/sharing/BUILD index a9b75e5d..50020f80 100644 --- a/sharing/BUILD +++ b/sharing/BUILD @@ -643,6 +643,7 @@ cc_test( "//internal/base:file_path", "//internal/base:files", "//internal/platform/implementation:platform_impl", + "//internal/test", "//sharing/internal/api:mock_sharing_platform", "@com_github_protobuf_matchers//protobuf-matchers", "@com_google_absl//absl/synchronization", diff --git a/sharing/nearby_file_handler.cc b/sharing/nearby_file_handler.cc index fa682488..645d9f4c 100644 --- a/sharing/nearby_file_handler.cc +++ b/sharing/nearby_file_handler.cc @@ -27,6 +27,7 @@ #include "absl/types/span.h" #include "internal/base/file_path.h" #include "internal/base/files.h" +#include "internal/platform/task_runner.h" #include "internal/platform/task_runner_impl.h" #include "sharing/internal/api/sharing_platform.h" #include "sharing/internal/public/logging.h" @@ -55,9 +56,14 @@ std::vector DoOpenFiles( } // namespace -NearbyFileHandler::NearbyFileHandler(SharingPlatform& platform) +NearbyFileHandler::NearbyFileHandler(SharingPlatform& platform, + std::unique_ptr runner) : platform_(platform) { - sequenced_task_runner_ = std::make_unique(1); + if (runner) { + sequenced_task_runner_ = std::move(runner); + } else { + sequenced_task_runner_ = std::make_unique(1); + } } NearbyFileHandler::~NearbyFileHandler() = default; diff --git a/sharing/nearby_file_handler.h b/sharing/nearby_file_handler.h index b1a2e8ed..b1702467 100644 --- a/sharing/nearby_file_handler.h +++ b/sharing/nearby_file_handler.h @@ -41,7 +41,9 @@ class NearbyFileHandler { using OpenFilesCallback = std::function)>; using DeleteFilesFromDiskCallback = std::function; - explicit NearbyFileHandler(nearby::sharing::api::SharingPlatform& platform); + // Pass in a TaskRunner to use for testing. + explicit NearbyFileHandler(nearby::sharing::api::SharingPlatform& platform, + std::unique_ptr runner = nullptr); ~NearbyFileHandler(); // Open the files given in |file_paths| and return the opened files sizes via diff --git a/sharing/nearby_file_handler_test.cc b/sharing/nearby_file_handler_test.cc index 93101d0b..d39b8aa2 100644 --- a/sharing/nearby_file_handler_test.cc +++ b/sharing/nearby_file_handler_test.cc @@ -15,22 +15,25 @@ #include "sharing/nearby_file_handler.h" #include -#include #include #include +#include +#include #include #include "gtest/gtest.h" #include "absl/synchronization/notification.h" -#include "absl/time/clock.h" #include "absl/time/time.h" #include "internal/base/file_path.h" #include "internal/base/files.h" +#include "internal/test/fake_clock.h" +#include "internal/test/fake_task_runner.h" #include "sharing/internal/api/mock_sharing_platform.h" namespace nearby { namespace sharing { namespace { +using ::absl::Seconds; using ::nearby::sharing::api::MockSharingPlatform; bool CreateFile(FilePath& file_path) { @@ -66,7 +69,10 @@ TEST(NearbyFileHandler, OpenFiles) { TEST(NearbyFileHandler, DeleteAFileFromDisk) { MockSharingPlatform mock_platform; - NearbyFileHandler nearby_file_handler(mock_platform); + FakeClock clock; + auto task_runner = std::make_unique(&clock, 1); + FakeTaskRunner* task_runner_ptr = task_runner.get(); + NearbyFileHandler nearby_file_handler(mock_platform, std::move(task_runner)); FilePath test_file = Files::GetTemporaryDirectory().append( FilePath("nearby_nfh_test_abc.jpg")); ASSERT_TRUE(CreateFile(test_file)); @@ -74,13 +80,16 @@ TEST(NearbyFileHandler, DeleteAFileFromDisk) { file_paths.push_back(test_file); nearby_file_handler.DeleteFilesFromDisk(file_paths, []() {}); ASSERT_TRUE(Files::FileExists(test_file)); - absl::SleepFor(absl::Seconds(2)); + EXPECT_TRUE(task_runner_ptr->SyncWithTimeout(Seconds(5))); ASSERT_FALSE(Files::FileExists(test_file)); } TEST(NearbyFileHandler, DeleteMultipleFilesFromDisk) { MockSharingPlatform mock_platform; - NearbyFileHandler nearby_file_handler(mock_platform); + FakeClock clock; + auto task_runner = std::make_unique(&clock, 1); + FakeTaskRunner* task_runner_ptr = task_runner.get(); + NearbyFileHandler nearby_file_handler(mock_platform, std::move(task_runner)); FilePath test_file = Files::GetTemporaryDirectory().append( FilePath("nearby_nfh_test_abc.jpg")); FilePath test_file2 = Files::GetTemporaryDirectory().append( @@ -94,7 +103,8 @@ TEST(NearbyFileHandler, DeleteMultipleFilesFromDisk) { ASSERT_FALSE(Files::FileExists(test_file)); ASSERT_FALSE(Files::FileExists(test_file2)); ASSERT_FALSE(Files::FileExists(test_file3)); - absl::SleepFor(absl::Seconds(2)); + + EXPECT_TRUE(task_runner_ptr->SyncWithTimeout(Seconds(5))); ASSERT_FALSE(Files::FileExists(test_file)); ASSERT_FALSE(Files::FileExists(test_file2)); ASSERT_FALSE(Files::FileExists(test_file3)); @@ -103,7 +113,10 @@ TEST(NearbyFileHandler, DeleteMultipleFilesFromDisk) { TEST(NearbyFileHandler, TestCallback) { MockSharingPlatform mock_platform; std::atomic_bool received_callback = false; - NearbyFileHandler nearby_file_handler(mock_platform); + FakeClock clock; + auto task_runner = std::make_unique(&clock, 1); + FakeTaskRunner* task_runner_ptr = task_runner.get(); + NearbyFileHandler nearby_file_handler(mock_platform, std::move(task_runner)); FilePath test_file = Files::GetTemporaryDirectory().append( FilePath("nearby_nfh_test_abc.jpg")); ASSERT_TRUE(CreateFile(test_file)); @@ -113,7 +126,7 @@ TEST(NearbyFileHandler, TestCallback) { file_paths, [&received_callback]() { received_callback = true; }); ASSERT_FALSE(received_callback); ASSERT_TRUE(Files::FileExists(test_file)); - absl::SleepFor(absl::Seconds(2)); + EXPECT_TRUE(task_runner_ptr->SyncWithTimeout(Seconds(5))); ASSERT_TRUE(received_callback); ASSERT_FALSE(Files::FileExists(test_file)); }