Refactor MediumEnvironment to improve FakeClock usage.

PiperOrigin-RevId: 904891357
This commit is contained in:
Edwin Wu
2026-04-24 02:07:38 -07:00
committed by Copybara-Service
parent c577ccaf4f
commit 04022d0db3
11 changed files with 277 additions and 278 deletions
@@ -151,10 +151,6 @@ class AnalyticsRecorderTest : public ::testing::Test {
}
void TearDown() override { MediumEnvironment::Instance().Stop(); }
FakeClock& GetFakeClock() const {
return *MediumEnvironment::Instance().GetSimulatedClock().value();
}
};
// Test if session_was_logged_ is reset by checking if LogSession can take
@@ -190,19 +186,19 @@ TEST_F(AnalyticsRecorderTest, SetFieldsCorrectlyForNestedAdvertisingCalls) {
analytics_recorder.BuildAdvertisingMetadataParams();
advertising_metadata_params->operation_result_with_mediums = {
operation_result};
GetFakeClock().FastForward(absl::Milliseconds(50));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(50));
analytics_recorder.OnStartAdvertising(strategy, /*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStopAdvertising();
operation_result.set_medium(BLE);
advertising_metadata_params->operation_result_with_mediums = {
operation_result};
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnStartAdvertising(strategy, /*mediums=*/{BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -273,16 +269,16 @@ TEST_F(AnalyticsRecorderTest, SetFieldsCorrectlyForNestedDiscoveryCalls) {
/*is_extended_advertisement_supported*/ true,
/*connected_ap_frequency*/ 1, /*is_nfc_available=*/false,
{operation_result, operation_result2});
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartDiscovery(strategy, /*mediums=*/{BLE, BLUETOOTH},
discovery_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnStopDiscovery();
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnEndpointFound(BLUETOOTH);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.OnEndpointFound(BLE);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
auto discovery_metadata_params2 =
analytics_recorder.BuildDiscoveryMetadataParams(
@@ -291,7 +287,7 @@ TEST_F(AnalyticsRecorderTest, SetFieldsCorrectlyForNestedDiscoveryCalls) {
{operation_result});
analytics_recorder.OnStartDiscovery(strategy, /*mediums=*/{BLUETOOTH},
discovery_metadata_params2.get());
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -307,14 +303,8 @@ TEST_F(AnalyticsRecorderTest, SetFieldsCorrectlyForNestedDiscoveryCalls) {
duration_millis: 200
medium: BLE
medium: BLUETOOTH
discovered_endpoint {
medium: BLUETOOTH
latency_millis: 500
}
discovered_endpoint {
medium: BLE
latency_millis: 900
}
discovered_endpoint { medium: BLUETOOTH latency_millis: 500 }
discovered_endpoint { medium: BLE latency_millis: 900 }
discovery_metadata {
supports_extended_ble_advertisements: true
connected_ap_frequency: 1
@@ -364,38 +354,38 @@ TEST_F(AnalyticsRecorderTest,
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(strategy, mediums,
advertising_metadata_params.get());
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnStartDiscovery(strategy, mediums,
discovery_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnStopAdvertising();
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.OnStopDiscovery();
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.OnStartAdvertising(strategy, mediums,
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.OnStopAdvertising();
GetFakeClock().FastForward(absl::Milliseconds(700));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(700));
analytics_recorder.OnStartDiscovery(strategy, mediums,
discovery_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(800));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(800));
analytics_recorder.OnStopDiscovery();
GetFakeClock().FastForward(absl::Milliseconds(900));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(900));
analytics_recorder.OnStartDiscovery(strategy, mediums, {});
GetFakeClock().FastForward(absl::Milliseconds(1000));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1000));
analytics_recorder.OnStartAdvertising(strategy, mediums,
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(1100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1100));
analytics_recorder.OnStopDiscovery();
GetFakeClock().FastForward(absl::Milliseconds(1200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1200));
analytics_recorder.OnStopAdvertising();
GetFakeClock().FastForward(absl::Milliseconds(1300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1300));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -503,35 +493,35 @@ TEST_F(AnalyticsRecorderTest, AdvertiserConnectionRequestsWorks) {
analytics_recorder.BuildAdvertisingMetadataParams();
advertising_metadata_params->operation_result_with_mediums = {
operation_result};
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnConnectionRequestReceived(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.OnConnectionRequestReceived(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(700));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(700));
analytics_recorder.OnRemoteEndpointRejected(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(800));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(800));
analytics_recorder.OnConnectionRequestReceived(endpoint_id_2);
GetFakeClock().FastForward(absl::Milliseconds(900));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(900));
analytics_recorder.OnLocalEndpointRejected(endpoint_id_2);
GetFakeClock().FastForward(absl::Milliseconds(1000));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1000));
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_2);
GetFakeClock().FastForward(absl::Milliseconds(1100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1100));
analytics_recorder.OnConnectionRequestReceived(endpoint_id_3);
GetFakeClock().FastForward(absl::Milliseconds(1200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1200));
analytics_recorder.OnLocalEndpointRejected(endpoint_id_3);
GetFakeClock().FastForward(absl::Milliseconds(1300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1300));
analytics_recorder.OnRemoteEndpointRejected(endpoint_id_3);
GetFakeClock().FastForward(absl::Milliseconds(1400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1400));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -606,36 +596,36 @@ TEST_F(AnalyticsRecorderTest, DiscoveryConnectionRequestsWorks) {
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
discovery_metadata_params->operation_result_with_mediums = {operation_result};
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
discovery_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnConnectionRequestSent(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.OnConnectionRequestSent(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(700));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(700));
analytics_recorder.OnRemoteEndpointRejected(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(800));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(800));
analytics_recorder.OnConnectionRequestSent(endpoint_id_2);
GetFakeClock().FastForward(absl::Milliseconds(900));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(900));
analytics_recorder.OnLocalEndpointRejected(endpoint_id_2);
GetFakeClock().FastForward(absl::Milliseconds(1000));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1000));
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_2);
GetFakeClock().FastForward(absl::Milliseconds(1100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1100));
analytics_recorder.OnConnectionRequestSent(endpoint_id_3);
GetFakeClock().FastForward(absl::Milliseconds(1200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1200));
analytics_recorder.OnLocalEndpointRejected(endpoint_id_3);
GetFakeClock().FastForward(absl::Milliseconds(1300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1300));
analytics_recorder.OnRemoteEndpointRejected(endpoint_id_3);
GetFakeClock().FastForward(absl::Milliseconds(1400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1400));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -712,26 +702,26 @@ TEST_F(AnalyticsRecorderTest,
analytics_recorder.BuildAdvertisingMetadataParams();
advertising_metadata_params->operation_result_with_mediums = {
operation_result};
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
// Ignored by local.
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnConnectionRequestReceived(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
// Ignored by remote.
analytics_recorder.OnConnectionRequestReceived(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
// Ignored by both.
analytics_recorder.OnConnectionRequestReceived(endpoint_id_2);
GetFakeClock().FastForward(absl::Milliseconds(700));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(700));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -801,27 +791,27 @@ TEST_F(AnalyticsRecorderTest,
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
discovery_metadata_params->operation_result_with_mediums = {operation_result};
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
discovery_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
// Ignored by local.
analytics_recorder.OnConnectionRequestSent(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
// Ignored by remote.
analytics_recorder.OnConnectionRequestSent(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
// Ignored by both.
analytics_recorder.OnConnectionRequestSent(endpoint_id_2);
GetFakeClock().FastForward(absl::Milliseconds(700));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(700));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -887,7 +877,7 @@ TEST_F(AnalyticsRecorderTest, SuccessfulIncomingConnectionAttempt) {
analytics_recorder.BuildAdvertisingMetadataParams();
advertising_metadata_params->operation_result_with_mediums = {
operation_result};
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
@@ -896,13 +886,13 @@ TEST_F(AnalyticsRecorderTest, SuccessfulIncomingConnectionAttempt) {
std::make_unique<ConnectionAttemptMetadataParams>();
connections_attempt_metadata_params->operation_result_code =
OperationResultCode::DETAIL_SUCCESS;
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnIncomingConnectionAttempt(
INITIAL, BLUETOOTH, RESULT_SUCCESS, absl::Duration{},
/*connection_token=*/"", connections_attempt_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnStopAdvertising();
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -982,17 +972,17 @@ TEST_F(AnalyticsRecorderTest,
OperationResultCode::CONNECTIVITY_BT_CLIENT_SOCKET_CREATION_FAILURE);
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
discovery_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnConnectionRequestSent(endpoint_id);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnOutgoingConnectionAttempt(
endpoint_id, INITIAL, BLUETOOTH, RESULT_ERROR, absl::Duration{},
/*connection_token=*/"", connections_attempt_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1063,21 +1053,21 @@ TEST_F(AnalyticsRecorderTest,
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnConnectionEstablished(endpoint_id, BLUETOOTH,
connection_token);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnConnectionClosed(
endpoint_id, BLUETOOTH, UPGRADED,
ConnectionsLog::EstablishedConnection::UNKNOWN_SAFE_DISCONNECTION_RESULT);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.OnConnectionEstablished(endpoint_id, WIFI_LAN,
connection_token);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1139,41 +1129,41 @@ TEST_F(AnalyticsRecorderTest, OutgoingPayloadUpgraded) {
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnConnectionEstablished(endpoint_id, BLUETOOTH,
connection_token);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnOutgoingPayloadStarted(
{endpoint_id}, payload_id, connections::PayloadType::kFile, 50);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.OnPayloadChunkSent(endpoint_id, payload_id, 10);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.OnPayloadChunkSent(endpoint_id, payload_id, 10);
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.OnConnectionClosed(
endpoint_id, BLUETOOTH, UPGRADED,
ConnectionsLog::EstablishedConnection::SAFE_DISCONNECTION);
GetFakeClock().FastForward(absl::Milliseconds(700));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(700));
analytics_recorder.OnConnectionEstablished(endpoint_id, WIFI_LAN,
connection_token);
GetFakeClock().FastForward(absl::Milliseconds(800));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(800));
analytics_recorder.OnPayloadChunkSent(endpoint_id, payload_id, 10);
GetFakeClock().FastForward(absl::Milliseconds(900));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(900));
analytics_recorder.OnPayloadChunkSent(endpoint_id, payload_id, 10);
GetFakeClock().FastForward(absl::Milliseconds(1000));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1000));
analytics_recorder.OnPayloadChunkSent(endpoint_id, payload_id, 10);
GetFakeClock().FastForward(absl::Milliseconds(1100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1100));
analytics_recorder.OnOutgoingPayloadDone(endpoint_id, payload_id, SUCCESS,
OperationResultCode::DETAIL_SUCCESS);
GetFakeClock().FastForward(absl::Milliseconds(1200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1200));
analytics_recorder.OnConnectionClosed(
endpoint_id, WIFI_LAN, LOCAL_DISCONNECTION,
ConnectionsLog::EstablishedConnection::SAFE_DISCONNECTION);
GetFakeClock().FastForward(absl::Milliseconds(1300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1300));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1260,31 +1250,31 @@ TEST_F(AnalyticsRecorderTest, UpgradeAttemptWorks) {
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnBandwidthUpgradeStarted(endpoint_id, BLE, WIFI_LAN,
INCOMING, connection_token);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnBandwidthUpgradeStarted(
endpoint_id_1, BLUETOOTH, WIFI_LAN, INCOMING, connection_token);
// Error to upgrade.
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.OnBandwidthUpgradeError(
endpoint_id, WIFI_LAN_MEDIUM_ERROR, WIFI_LAN_SOCKET_CREATION,
OperationResultCode::CONNECTIVITY_WIFI_LAN_INVALID_CREDENTIAL);
// Success to upgrade.
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.OnBandwidthUpgradeSuccess(endpoint_id_1);
// Upgrade is unfinished.
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.OnBandwidthUpgradeStarted(
endpoint_id_2, BLUETOOTH, WIFI_LAN, INCOMING, connection_token);
GetFakeClock().FastForward(absl::Milliseconds(700));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(700));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1362,26 +1352,26 @@ TEST_F(AnalyticsRecorderTest, StartListeningForIncomingConnectionsWorks) {
FakeEventLogger event_logger(client_session_done_latch);
AnalyticsRecorder analytics_recorder(&event_logger);
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartedIncomingConnectionListening(
connections::Strategy::kP2pStar);
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnBandwidthUpgradeStarted(endpoint_id, BLE, WIFI_LAN,
INCOMING, connection_token);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnBandwidthUpgradeStarted(
endpoint_id_1, BLUETOOTH, WIFI_LAN, INCOMING, connection_token);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
// Error to upgrade.
analytics_recorder.OnBandwidthUpgradeError(
endpoint_id, WIFI_LAN_MEDIUM_ERROR, WIFI_LAN_SOCKET_CREATION,
OperationResultCode::CONNECTIVITY_WIFI_LAN_INVALID_CREDENTIAL);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
// Success to upgrade.
analytics_recorder.OnBandwidthUpgradeSuccess(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.LogSession();
// ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1432,7 +1422,7 @@ TEST_F(AnalyticsRecorderTest, SetErrorCodeFieldsCorrectly) {
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{WEB_RTC},
discovery_metadata_params.get());
@@ -1440,9 +1430,9 @@ TEST_F(AnalyticsRecorderTest, SetErrorCodeFieldsCorrectly) {
ErrorCodeParams error_code_params = ErrorCodeRecorder::BuildErrorCodeParams(
WEB_RTC, DISCONNECT, DISCONNECT_NETWORK_FAILED,
TACHYON_SEND_MESSAGE_STATUS_EXCEPTION, "", "connection_token");
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnErrorCode(error_code_params);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1466,7 +1456,7 @@ TEST_F(AnalyticsRecorderTest,
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLUETOOTH},
discovery_metadata_params.get());
@@ -1477,9 +1467,9 @@ TEST_F(AnalyticsRecorderTest,
error_code_params.event = START_DISCOVERING;
error_code_params.start_discovering_error = START_EXTENDED_DISCOVERING_FAILED;
error_code_params.connection_token = "connection_token";
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnErrorCode(error_code_params);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1502,7 +1492,7 @@ TEST_F(AnalyticsRecorderTest, SetErrorCodeFieldsCorrectlyForCommonError) {
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLUETOOTH},
discovery_metadata_params.get());
@@ -1510,9 +1500,9 @@ TEST_F(AnalyticsRecorderTest, SetErrorCodeFieldsCorrectlyForCommonError) {
ErrorCodeParams error_code_params = ErrorCodeRecorder::BuildErrorCodeParams(
BLUETOOTH, START_DISCOVERING, INVALID_PARAMETER,
NULL_BLUETOOTH_DEVICE_NAME, "", "connection_token");
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnErrorCode(error_code_params);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1533,7 +1523,7 @@ TEST_F(AnalyticsRecorderTest, CheckIfSessionWasLogged) {
FakeEventLogger event_logger(client_session_done_latch);
AnalyticsRecorder analytics_recorder(&event_logger);
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
// LogSession to count down client_session_done_latch.
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1635,17 +1625,17 @@ TEST_F(AnalyticsRecorderTest,
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnConnectionRequestReceived(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
// LogSession
analytics_recorder.LogSession(); // call ResetClientSessionLoggingResouces
@@ -1684,7 +1674,7 @@ TEST_F(AnalyticsRecorderTest,
CountDownLatch new_start_client_session_done_latch(1);
event_logger.SetStartClientSessionDoneLatchPtr(
&new_start_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.LogStartSession();
ASSERT_TRUE(
new_start_client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1693,13 +1683,13 @@ TEST_F(AnalyticsRecorderTest,
CountDownLatch new_client_session_done_latch(1);
event_logger.SetClientSessionDoneLatch(new_client_session_done_latch);
std::string endpoint_id_1 = "endpoint_id_1";
GetFakeClock().FastForward(absl::Milliseconds(700));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(700));
analytics_recorder.OnConnectionRequestReceived(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(800));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(800));
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(900));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(900));
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(1000));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1000));
analytics_recorder.LogSession();
ASSERT_TRUE(new_client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1767,18 +1757,18 @@ TEST_F(AnalyticsRecorderTest,
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
discovery_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnConnectionRequestSent(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_0);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
// LogSession
analytics_recorder.LogSession(); // call ResetClientSessionLoggingResouces
@@ -1825,13 +1815,13 @@ TEST_F(AnalyticsRecorderTest,
CountDownLatch new_client_session_done_latch(1);
event_logger.SetClientSessionDoneLatch(new_client_session_done_latch);
std::string endpoint_id_1 = "endpoint_id_1";
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.OnConnectionRequestSent(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(700));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(700));
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(800));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(800));
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_1);
GetFakeClock().FastForward(absl::Milliseconds(900));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(900));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1901,14 +1891,14 @@ TEST_F(AnalyticsRecorderTest, ClearcActiveConnectionsAfterSessionWasLogged) {
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(strategy, mediums,
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnConnectionEstablished(endpoint_id, BLUETOOTH,
connection_token);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
// LogSession
analytics_recorder.LogSession(); // call ResetClientSessionLoggingResouces
@@ -1951,7 +1941,7 @@ TEST_F(AnalyticsRecorderTest, ClearcActiveConnectionsAfterSessionWasLogged) {
CountDownLatch new_start_client_session_done_latch(1);
event_logger.SetStartClientSessionDoneLatchPtr(
&new_start_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.LogStartSession();
ASSERT_TRUE(
new_start_client_session_done_latch.Await(kDefaultTimeout).result());
@@ -1959,7 +1949,7 @@ TEST_F(AnalyticsRecorderTest, ClearcActiveConnectionsAfterSessionWasLogged) {
// LogSession again
CountDownLatch new_client_session_done_latch(1);
event_logger.SetClientSessionDoneLatch(new_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2024,33 +2014,33 @@ TEST_F(AnalyticsRecorderTest,
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnBandwidthUpgradeStarted(endpoint_id, BLE, WIFI_LAN,
INCOMING, connection_token);
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnBandwidthUpgradeStarted(
endpoint_id_1, BLUETOOTH, WIFI_LAN, INCOMING, connection_token);
// - Error to upgrade.
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.OnBandwidthUpgradeError(
endpoint_id, WIFI_LAN_MEDIUM_ERROR, WIFI_LAN_SOCKET_CREATION,
OperationResultCode::CONNECTIVITY_WIFI_LAN_INVALID_CREDENTIAL);
// - Success to upgrade.
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.OnBandwidthUpgradeSuccess(endpoint_id_1);
// - Upgrade is unfinished.
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.OnBandwidthUpgradeStarted(
endpoint_id_2, BLUETOOTH, WIFI_LAN, INCOMING, connection_token);
GetFakeClock().FastForward(absl::Milliseconds(700));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(700));
// LogSession
analytics_recorder.LogSession(); // call ResetClientSessionLoggingResouces
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2123,7 +2113,7 @@ TEST_F(AnalyticsRecorderTest,
CountDownLatch new_start_client_session_done_latch(1);
event_logger.SetStartClientSessionDoneLatchPtr(
&new_start_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(800));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(800));
analytics_recorder.LogStartSession();
ASSERT_TRUE(
new_start_client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2131,7 +2121,7 @@ TEST_F(AnalyticsRecorderTest,
// LogSession again
CountDownLatch new_client_session_done_latch(1);
event_logger.SetClientSessionDoneLatch(new_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(900));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(900));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2216,14 +2206,14 @@ TEST_F(AnalyticsRecorderTest,
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnStopAdvertising();
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
// LogSession
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2237,7 +2227,7 @@ TEST_F(AnalyticsRecorderTest,
CountDownLatch new_start_client_session_done_latch(1);
event_logger.SetStartClientSessionDoneLatchPtr(
&new_start_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.LogStartSession();
ASSERT_TRUE(
new_start_client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2246,12 +2236,12 @@ TEST_F(AnalyticsRecorderTest,
CountDownLatch new_client_session_done_latch(1);
event_logger.SetClientSessionDoneLatch(new_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.OnStartAdvertising(strategy, /*mediums=*/{BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.OnStopAdvertising();
GetFakeClock().FastForward(absl::Milliseconds(700));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(700));
analytics_recorder.LogSession();
ASSERT_TRUE(new_client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2272,13 +2262,13 @@ TEST_F(AnalyticsRecorderTest,
// UpdateStrategySessionLocked.
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnStopAdvertising();
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
// LogSession
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2310,7 +2300,7 @@ TEST_F(AnalyticsRecorderTest,
CountDownLatch new_start_client_session_done_latch(1);
event_logger.SetStartClientSessionDoneLatchPtr(
&new_start_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.LogStartSession();
ASSERT_TRUE(
new_start_client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2320,7 +2310,7 @@ TEST_F(AnalyticsRecorderTest,
// strategy_session_proto will be logged.
CountDownLatch new_client_session_done_latch(1);
event_logger.SetClientSessionDoneLatch(new_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.LogSession();
ASSERT_TRUE(new_client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2337,14 +2327,14 @@ TEST_F(AnalyticsRecorderTest,
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(
connections::Strategy::kP2pStar,
/*mediums=*/{BLUETOOTH},
advertising_metadata_params.get()); // set current_advertising_phase_
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnStopAdvertising();
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
// LogSession
analytics_recorder.LogSession();
@@ -2376,7 +2366,7 @@ TEST_F(AnalyticsRecorderTest,
CountDownLatch new_start_client_session_done_latch(1);
event_logger.SetStartClientSessionDoneLatchPtr(
&new_start_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.LogStartSession();
ASSERT_TRUE(
new_start_client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2387,7 +2377,7 @@ TEST_F(AnalyticsRecorderTest,
// be logged.
CountDownLatch new_client_session_done_latch(1);
event_logger.SetClientSessionDoneLatch(new_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2434,15 +2424,15 @@ TEST_F(AnalyticsRecorderTest,
analytics_recorder.BuildDiscoveryMetadataParams(
/*is_extended_advertisement_supported*/ true,
/*connected_ap_frequency*/ 1, /*is_nfc_available=*/false);
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartDiscovery(
strategy, {BLUETOOTH},
discovery_metadata_params.get()); // set current_discovery_phase_
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnStopDiscovery();
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
analytics_recorder.OnEndpointFound(BLUETOOTH);
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
// LogSession
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2457,10 +2447,7 @@ TEST_F(AnalyticsRecorderTest,
discovery_phase {
duration_millis: 200
medium: BLUETOOTH
discovered_endpoint {
medium: BLUETOOTH
latency_millis: 500
}
discovered_endpoint { medium: BLUETOOTH latency_millis: 500 }
discovery_metadata {
supports_extended_ble_advertisements: true
connected_ap_frequency: 1
@@ -2477,7 +2464,7 @@ TEST_F(AnalyticsRecorderTest,
CountDownLatch new_start_client_session_done_latch(1);
event_logger.SetStartClientSessionDoneLatchPtr(
&new_start_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.LogStartSession();
ASSERT_TRUE(
new_start_client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2488,7 +2475,7 @@ TEST_F(AnalyticsRecorderTest,
// logged.
CountDownLatch new_client_session_done_latch(1);
event_logger.SetClientSessionDoneLatch(new_client_session_done_latch);
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -2536,13 +2523,13 @@ TEST_F(AnalyticsRecorderTest,
// UpdateStrategySessionLocked.
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
GetFakeClock().FastForward(absl::Milliseconds(100));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(100));
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
GetFakeClock().FastForward(absl::Milliseconds(200));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(200));
analytics_recorder.OnStopAdvertising();
GetFakeClock().FastForward(absl::Milliseconds(300));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(300));
// LogSession
analytics_recorder.LogSession();
@@ -2573,14 +2560,14 @@ TEST_F(AnalyticsRecorderTest,
// Without calling OnStartAdvertising won't create new
// current_strategy_session_.
GetFakeClock().FastForward(absl::Milliseconds(400));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(400));
analytics_recorder.OnConnectionEstablished(endpoint_id, BLUETOOTH,
/*connection_token=*/"");
GetFakeClock().FastForward(absl::Milliseconds(500));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(500));
analytics_recorder.OnConnectionClosed(
endpoint_id, BLUETOOTH, UPGRADED,
ConnectionsLog::EstablishedConnection::SAFE_DISCONNECTION);
GetFakeClock().FastForward(absl::Milliseconds(600));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(600));
analytics_recorder.LogSession();
// The proto won't change.
@@ -360,10 +360,7 @@ class ClientProxyTest : public ::testing::TestWithParam<FeatureFlags::Flags> {
ClientProxy* client2() { return client2_.get(); }
void FastForward(absl::Duration duration) {
(*env_.GetSimulatedClock())
->FastForward(
ClientProxy::kHighPowerAdvertisementEndpointIdCacheTimeout +
absl::Milliseconds(100));
env_.FastForward(duration);
// make sure the timer based callback is executed.
absl::SleepFor(absl::Milliseconds(100));
}
@@ -17,7 +17,6 @@
#include <atomic>
#include <list>
#include <memory>
#include <optional>
#include <string>
#include <tuple>
#include <utility>
@@ -53,7 +52,6 @@
#include "internal/platform/mutex.h"
#include "internal/platform/mutex_lock.h"
#include "internal/platform/uuid.h"
#include "internal/test/fake_clock.h"
namespace nearby {
namespace connections {
@@ -1628,9 +1626,6 @@ TEST_P(DiscoveredPeripheralTrackerTest,
TEST_P(DiscoveredPeripheralTrackerTest,
OnlyGattAdvertisementReceivedOnDeviceWithExtended) {
std::optional<FakeClock*> fake_clock =
MediumEnvironment::Instance().GetSimulatedClock();
std::vector<std::string> service_ids = {std::string(kServiceIdA)};
ByteArray advertisement_hash = GenerateRandomAdvertisementHash();
ByteArray advertisement_header_bytes =
@@ -1668,7 +1663,7 @@ TEST_P(DiscoveredPeripheralTrackerTest,
// 2. Receive GATT advertisement data again after 4 seconds, it should access
// GATT server.
(*fake_clock)->FastForward(absl::Seconds(4));
MediumEnvironment::Instance().FastForward(absl::Seconds(4));
FindAdvertisement(advertisement_data, {advertisement_bytes}, fetch_latch);
// We should receive a client callback of a peripheral discovery.
@@ -1678,9 +1673,6 @@ TEST_P(DiscoveredPeripheralTrackerTest,
}
TEST_P(DiscoveredPeripheralTrackerTest, SkipExpiredGattAdvertisement) {
std::optional<FakeClock*> fake_clock =
MediumEnvironment::Instance().GetSimulatedClock();
std::vector<std::string> service_ids = {std::string(kServiceIdA)};
ByteArray advertisement_hash = GenerateRandomAdvertisementHash();
ByteArray advertisement_header_bytes =
@@ -1718,7 +1710,7 @@ TEST_P(DiscoveredPeripheralTrackerTest, SkipExpiredGattAdvertisement) {
// 2. The GATT advertisement is already queued and will be skipped.
FindAdvertisement(advertisement_data, {advertisement_bytes}, fetch_latch);
(*fake_clock)->FastForward(absl::Seconds(20));
MediumEnvironment::Instance().FastForward(absl::Seconds(20));
discovered_peripheral_tracker_->StartFetchExecutorForTesting();
// We should not receive a client callback of a peripheral discovery.
@@ -1729,9 +1721,6 @@ TEST_P(DiscoveredPeripheralTrackerTest, SkipExpiredGattAdvertisement) {
TEST_P(DiscoveredPeripheralTrackerTest,
DiscoveredOnceWhenGattAndExtendedAdvertisementReceived) {
std::optional<FakeClock*> fake_clock =
MediumEnvironment::Instance().GetSimulatedClock();
std::vector<std::string> service_ids = {std::string(kServiceIdA)};
ByteArray advertisement_hash = GenerateRandomAdvertisementHash();
ByteArray advertisement_header_bytes =
@@ -1756,7 +1745,7 @@ TEST_P(DiscoveredPeripheralTrackerTest,
},
},
bleutils::kCopresenceServiceUuid);
(*fake_clock)->FastForward(absl::Seconds(4));
MediumEnvironment::Instance().FastForward(absl::Seconds(4));
discovered_peripheral_tracker_->StartFetchExecutorForTesting();
// 1. Received extended advertisement.
@@ -1784,8 +1773,6 @@ TEST_P(DiscoveredPeripheralTrackerTest,
TEST_P(DiscoveredPeripheralTrackerTest,
FindGattAdvertisementInHigherPriorityThanExtendedGattAdvertisement) {
std::optional<FakeClock*> fake_clock =
MediumEnvironment::Instance().GetSimulatedClock();
std::vector<std::string> service_ids = {std::string(kServiceIdA)};
ByteArray advertisement_hash_a = GenerateRandomAdvertisementHash();
ByteArray advertisement_header_a =
@@ -1823,7 +1810,7 @@ TEST_P(DiscoveredPeripheralTrackerTest,
},
},
bleutils::kCopresenceServiceUuid);
(*fake_clock)->FastForward(absl::Seconds(4));
MediumEnvironment::Instance().FastForward(absl::Seconds(4));
discovered_peripheral_tracker_->StartFetchExecutorForTesting();
// 1. Find peripheral A with GATT advertisement.
@@ -16,16 +16,15 @@
#include <atomic>
#include <memory>
#include <optional>
#include <utility>
#include "absl/strings/str_format.h"
#include "absl/synchronization/mutex.h"
#include "absl/time/time.h"
#include "internal/platform/implementation/cancelable.h"
#include "internal/platform/logging.h"
#include "internal/platform/medium_environment.h"
#include "internal/platform/runnable.h"
#include "internal/test/fake_clock.h"
namespace nearby {
namespace g3 {
@@ -66,20 +65,13 @@ class ScheduledCancelable : public api::Cancelable {
} // namespace
ScheduledExecutor::ScheduledExecutor() {
std::optional<FakeClock*> fake_clock =
MediumEnvironment::Instance().GetSimulatedClock();
if (fake_clock.has_value()) {
name_ = absl::StrFormat("G3 scheduled executor %p", this);
(*fake_clock)->AddObserver(name_, [this]() { RunReadyTasks(); });
}
name_ = absl::StrFormat("G3 scheduled executor %p", this);
MediumEnvironment::Instance().AddSimulatedClockObserver(
name_, [this]() { RunReadyTasks(); });
}
ScheduledExecutor::~ScheduledExecutor() {
std::optional<FakeClock*> fake_clock =
MediumEnvironment::Instance().GetSimulatedClock();
if (fake_clock.has_value()) {
(*fake_clock)->RemoveObserver(name_);
}
MediumEnvironment::Instance().RemoveSimulatedClockObserver(name_);
executor_.Shutdown();
}
@@ -96,10 +88,10 @@ std::shared_ptr<api::Cancelable> ScheduledExecutor::Schedule(
runnable();
}
};
std::optional<FakeClock*> fake_clock =
MediumEnvironment::Instance().GetSimulatedClock();
if (fake_clock.has_value()) {
absl::Time trigger_time = (*fake_clock)->Now() + delay;
if (MediumEnvironment::Instance()
.GetEnvironmentConfig()
.use_simulated_clock) {
absl::Time trigger_time = MediumEnvironment::Instance().Now() + delay;
absl::MutexLock lock(mutex_);
tasks_.insert(std::pair<absl::Time, std::unique_ptr<Runnable>>(
trigger_time, std::make_unique<Runnable>(std::move(task))));
@@ -110,15 +102,12 @@ std::shared_ptr<api::Cancelable> ScheduledExecutor::Schedule(
}
void ScheduledExecutor::RunReadyTasks() {
std::optional<FakeClock*> fake_clock =
MediumEnvironment::Instance().GetSimulatedClock();
if (executor_.InShutdown()) {
return;
}
if (!fake_clock.has_value()) {
return;
}
absl::Time current_time = (*fake_clock)->Now();
CHECK(
MediumEnvironment::Instance().GetEnvironmentConfig().use_simulated_clock);
absl::Time current_time = MediumEnvironment::Instance().Now();
absl::MutexLock lock(mutex_);
for (auto it = tasks_.begin(); it != tasks_.end();) {
if (it->first <= current_time) {
@@ -15,26 +15,21 @@
#include "internal/platform/implementation/system_clock.h"
#include "absl/time/clock.h"
#include "absl/time/time.h"
#include "internal/platform/exception.h"
#include "internal/platform/medium_environment.h"
#include "internal/test/fake_clock.h"
namespace nearby {
absl::Time SystemClock::ElapsedRealtime() {
absl::optional<FakeClock*> fake_clock =
MediumEnvironment::Instance().GetSimulatedClock();
if (fake_clock.has_value()) {
return (*fake_clock)->Now();
}
return absl::Now();
return MediumEnvironment::Instance().Now();
}
Exception SystemClock::Sleep(absl::Duration duration) {
absl::optional<FakeClock*> fake_clock =
MediumEnvironment::Instance().GetSimulatedClock();
if (fake_clock.has_value()) {
(*fake_clock)->FastForward(duration);
if (MediumEnvironment::Instance()
.GetEnvironmentConfig()
.use_simulated_clock) {
MediumEnvironment::Instance().FastForward(duration);
} else {
absl::SleepFor(duration);
}
+47 -8
View File
@@ -16,6 +16,7 @@
#include <atomic>
#include <cstdint>
#include <functional>
#include <memory>
#include <optional>
#include <string>
@@ -27,6 +28,7 @@
#include "absl/status/status.h"
#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
#include "absl/time/clock.h"
#include "absl/time/time.h"
#include "internal/platform/borrowable.h"
#include "internal/platform/byte_array.h"
@@ -46,6 +48,7 @@
#include "internal/platform/nsd_service_info.h"
#include "internal/platform/prng.h"
#include "internal/platform/runnable.h"
#include "internal/platform/service_address.h"
#include "internal/platform/uuid.h"
#include "internal/platform/wifi_credential.h"
#include "internal/test/fake_clock.h"
@@ -69,10 +72,14 @@ MediumEnvironment& MediumEnvironment::Instance() {
void MediumEnvironment::Start(EnvironmentConfig config) {
if (!enabled_.exchange(true)) {
LOG(INFO) << "MediumEnvironment::Start()";
config_ = std::move(config);
if (config_.use_simulated_clock) {
{
MutexLock lock(&mutex_);
simulated_clock_ = std::make_unique<FakeClock>();
config_ = std::move(config);
if (config_.use_simulated_clock) {
simulated_clock_ = std::make_shared<FakeClock>();
} else {
simulated_clock_.reset();
}
}
Reset();
}
@@ -82,8 +89,8 @@ void MediumEnvironment::Stop() {
if (enabled_.exchange(false)) {
LOG(INFO) << "MediumEnvironment::Stop()";
Sync(false);
MutexLock lock(&mutex_);
if (config_.use_simulated_clock) {
MutexLock lock(&mutex_);
simulated_clock_.reset();
}
config_ = {};
@@ -132,7 +139,8 @@ void MediumEnvironment::Sync(bool enable_notifications) {
LOG(INFO) << "MediumEnvironment::Sync(): done [count=" << count << "]";
}
const EnvironmentConfig& MediumEnvironment::GetEnvironmentConfig() {
EnvironmentConfig MediumEnvironment::GetEnvironmentConfig() {
MutexLock lock(&mutex_);
return config_;
}
@@ -1150,12 +1158,43 @@ void MediumEnvironment::SetFeatureFlags(const FeatureFlags::Flags& flags) {
FeatureFlags::GetMutableInstanceForTesting().SetFlags(flags);
}
std::optional<FakeClock*> MediumEnvironment::GetSimulatedClock() {
absl::Time MediumEnvironment::Now() {
MutexLock lock(&mutex_);
if (simulated_clock_) {
return std::optional<FakeClock*>(simulated_clock_.get());
return simulated_clock_->Now();
}
return absl::Now();
}
// If simulated_clock_ is valid, it will be advanced by the given duration.
// If simulated_clock_ is not valid, this method will do nothing.
void MediumEnvironment::FastForward(absl::Duration duration) {
std::shared_ptr<FakeClock> sim_clock;
{
MutexLock lock(&mutex_);
if (simulated_clock_) {
sim_clock = simulated_clock_;
}
}
if (sim_clock) {
// Mutex is unlocked before calling FastForward to prevent deadlocks.
sim_clock->FastForward(duration);
}
}
void MediumEnvironment::AddSimulatedClockObserver(
const std::string& name, std::function<void()> observer) {
MutexLock lock(&mutex_);
if (simulated_clock_) {
simulated_clock_->AddObserver(name, std::move(observer));
}
}
void MediumEnvironment::RemoveSimulatedClockObserver(const std::string& name) {
MutexLock lock(&mutex_);
if (simulated_clock_) {
simulated_clock_->RemoveObserver(name);
}
return std::nullopt;
}
void MediumEnvironment::RegisterGattServer(
+8 -3
View File
@@ -17,6 +17,7 @@
#include <atomic>
#include <cstdint>
#include <functional>
#include <memory>
#include <optional>
#include <string>
@@ -162,7 +163,7 @@ class MediumEnvironment {
// Returns a Bluetooth Device object matching given mac address to nullptr.
api::BluetoothDevice* FindBluetoothDevice(MacAddress mac_address);
const EnvironmentConfig& GetEnvironmentConfig();
EnvironmentConfig GetEnvironmentConfig();
#ifndef NO_WEBRTC
// Registers |message_callback| to receive messages sent to device with id
// |self_id|, and |complete_callback| to notify when signaling is complete.
@@ -334,7 +335,11 @@ class MediumEnvironment {
void SetFeatureFlags(const FeatureFlags::Flags& flags);
std::optional<FakeClock*> GetSimulatedClock();
absl::Time Now();
void FastForward(absl::Duration duration);
void AddSimulatedClockObserver(const std::string& name,
std::function<void()> observer);
void RemoveSimulatedClockObserver(const std::string& name);
api::ble::BleMedium* FindBleMedium(api::ble::BlePeripheral::UniqueId id);
@@ -516,7 +521,7 @@ class MediumEnvironment {
bool use_valid_peer_connection_ = true;
absl::Duration peer_connection_latency_ = absl::ZeroDuration();
std::unique_ptr<FakeClock> simulated_clock_ ABSL_GUARDED_BY(mutex_);
std::shared_ptr<FakeClock> simulated_clock_ ABSL_GUARDED_BY(mutex_);
ObserverList<api::BluetoothClassicMedium::Observer> observers_;
bool ble_extended_advertisements_available_ = false;
};
+14 -18
View File
@@ -25,13 +25,12 @@
#include "internal/platform/cancelable.h"
#include "internal/platform/count_down_latch.h"
#include "internal/platform/medium_environment.h"
#include "internal/test/fake_clock.h"
namespace nearby {
// kShortDelay must be significant enough to guarantee that OS under heavy load
// should be able to execute the non-blocking test paths within this time.
absl::Duration kShortDelay = absl::Milliseconds(100);
absl::Duration kShortDelay = absl::Milliseconds(200);
// kLongDelay must be long enough to make sure that under OS under heavy load
// will let kShortDelay fire and jobs scheduled before the kLongDelay fires.
@@ -212,8 +211,6 @@ TEST(ScheduledExecutorTest, ExecuteDuringShutdownFails) {
TEST(ScheduledExecutorTest, SimulatedClockCanSchedule) {
MediumEnvironment::Instance().Start({.use_simulated_clock = true});
FakeClock* fake_clock =
MediumEnvironment::Instance().GetSimulatedClock().value();
ScheduledExecutor executor;
std::atomic_int value = 0;
CountDownLatch first_task_latch(1);
@@ -235,24 +232,23 @@ TEST(ScheduledExecutorTest, SimulatedClockCanSchedule) {
},
kShortDelay);
EXPECT_EQ(value, 0);
fake_clock->FastForward(kShortDelay - absl::Milliseconds(1));
MediumEnvironment::Instance().FastForward(kShortDelay -
absl::Milliseconds(1));
EXPECT_EQ(value, 0);
fake_clock->FastForward(absl::Milliseconds(1));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1));
second_task_latch.Await();
EXPECT_EQ(value, 1);
fake_clock->FastForward(kLongDelay - kShortDelay);
MediumEnvironment::Instance().FastForward(kLongDelay - kShortDelay);
first_task_latch.Await();
EXPECT_EQ(value, 5);
// Very long sleep to make sure that the sleep is truly simulated.
fake_clock->FastForward(absl::Minutes(30));
MediumEnvironment::Instance().FastForward(absl::Minutes(30));
MediumEnvironment::Instance().Stop();
}
TEST(ScheduledExecutorTest,
DestroyExecutorWithSimulatedClockIgnoresPendingTasks) {
MediumEnvironment::Instance().Start({.use_simulated_clock = true});
FakeClock* fake_clock =
MediumEnvironment::Instance().GetSimulatedClock().value();
{
ScheduledExecutor executor;
executor.Schedule(
@@ -262,7 +258,7 @@ TEST(ScheduledExecutorTest,
},
kShortDelay);
}
fake_clock->FastForward(absl::Minutes(30));
MediumEnvironment::Instance().FastForward(absl::Minutes(30));
MediumEnvironment::Instance().Stop();
}
@@ -403,8 +399,6 @@ TEST(ScheduledExecutorTest, CanCancelOneOfTwoRepeatedTasks) {
TEST(ScheduledExecutorTest, SimulatedClockCanScheduleRepeatedly) {
MediumEnvironment::Instance().Start({.use_simulated_clock = true});
FakeClock* fake_clock =
MediumEnvironment::Instance().GetSimulatedClock().value();
ScheduledExecutor executor;
std::atomic_int value = 0;
std::atomic_int i = 0;
@@ -419,11 +413,12 @@ TEST(ScheduledExecutorTest, SimulatedClockCanScheduleRepeatedly) {
EXPECT_EQ(value, 0);
// Advance to just before the first execution.
fake_clock->FastForward(kShortDelay - absl::Milliseconds(1));
MediumEnvironment::Instance().FastForward(kShortDelay -
absl::Milliseconds(1));
EXPECT_EQ(value, 0);
// Advance past the first execution.
fake_clock->FastForward(absl::Milliseconds(1));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1));
latch[0].Await(absl::Seconds(1));
EXPECT_EQ(value, 1);
@@ -431,11 +426,12 @@ TEST(ScheduledExecutorTest, SimulatedClockCanScheduleRepeatedly) {
absl::SleepFor(kShortDelay);
// Advance to just before the second execution.
fake_clock->FastForward(kShortDelay - absl::Milliseconds(1));
MediumEnvironment::Instance().FastForward(kShortDelay -
absl::Milliseconds(1));
EXPECT_EQ(value, 1);
// Advance past the second execution.
fake_clock->FastForward(absl::Milliseconds(1));
MediumEnvironment::Instance().FastForward(absl::Milliseconds(1));
latch[1].Await(absl::Seconds(1));
EXPECT_EQ(value, 2);
@@ -443,7 +439,7 @@ TEST(ScheduledExecutorTest, SimulatedClockCanScheduleRepeatedly) {
cancelable.Cancel();
// Advance a long time and make sure it doesn't run again.
fake_clock->FastForward(kLongDelay * 5);
MediumEnvironment::Instance().FastForward(kLongDelay * 5);
EXPECT_EQ(value, 2);
MediumEnvironment::Instance().Stop();
+4
View File
@@ -19,6 +19,10 @@
#include <utility>
#include <vector>
#include "absl/strings/string_view.h"
#include "absl/synchronization/mutex.h"
#include "absl/time/time.h"
namespace nearby {
FakeClock::~FakeClock() {
+1
View File
@@ -53,6 +53,7 @@ class FakeClock : public Clock {
absl::flat_hash_map<std::string, std::function<void()>> observers_
ABSL_GUARDED_BY(mutex_);
};
} // namespace nearby
#endif // THIRD_PARTY_NEARBY_INTERNAL_TEST_FAKE_CLOCK_H_
+1 -2
View File
@@ -14,9 +14,8 @@
#include "internal/test/fake_clock.h"
#include "gmock/gmock.h"
#include "protobuf-matchers/protocol-buffer-matchers.h"
#include "gtest/gtest.h"
#include "absl/time/time.h"
namespace nearby {
namespace {