From c257969265998040c78e4794caec4ba5ea85f9e6 Mon Sep 17 00:00:00 2001 From: Brian Balser Date: Mon, 24 Jun 2024 10:43:25 -0400 Subject: [PATCH] Support new location source field on wifi heartbeats --- Cargo.lock | 50 ++++++++++++------- Cargo.toml | 4 +- file_store/src/wifi_heartbeat.rs | 9 +++- mobile_verifier/src/heartbeats/mod.rs | 7 ++- .../tests/integrations/heartbeats.rs | 4 +- .../tests/integrations/hex_boosting.rs | 21 +++++--- .../tests/integrations/last_location.rs | 3 +- .../tests/integrations/modeled_coverage.rs | 4 +- .../tests/integrations/rewarder_poc_dc.rs | 7 ++- .../tests/integrations/seniority.rs | 5 +- 10 files changed, 79 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b37ef565e..b06c29f5a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1617,11 +1617,11 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "beacon" version = "0.1.0" -source = "git+https://github.com/helium/proto?branch=master#04ef234d5cff695fa88cd115d5fbecf03ce97bf8" +source = "git+https://github.com/helium/proto?branch=bbalser/wifi-location-source#69e46c06c549d6e9fdf6644d5058a3373e944421" dependencies = [ "base64 0.21.7", "byteorder", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "prost", "rand 0.8.5", "rand_chacha 0.3.0", @@ -1776,7 +1776,7 @@ dependencies = [ "futures", "futures-util", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "http 0.2.11", "http-serde", "humantime-serde", @@ -2618,7 +2618,7 @@ dependencies = [ "axum 0.7.4", "bs58 0.4.0", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "http 0.2.11", "notify", "serde", @@ -3200,7 +3200,7 @@ dependencies = [ "futures-util", "h3o", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "hex-literal", "http 0.2.11", "lazy_static", @@ -3776,7 +3776,7 @@ dependencies = [ "h3o", "helium-anchor-gen", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=master)", "hex", "itertools", "jsonrpc_client", @@ -3801,7 +3801,7 @@ dependencies = [ [[package]] name = "helium-proto" version = "0.1.0" -source = "git+https://github.com/helium/proto?branch=master#04ef234d5cff695fa88cd115d5fbecf03ce97bf8" +source = "git+https://github.com/helium/proto?branch=bbalser/wifi-location-source#69e46c06c549d6e9fdf6644d5058a3373e944421" dependencies = [ "bytes", "prost", @@ -3812,6 +3812,18 @@ dependencies = [ "tonic-build", ] +[[package]] +name = "helium-proto" +version = "0.1.0" +source = "git+https://github.com/helium/proto?branch=master#04ef234d5cff695fa88cd115d5fbecf03ce97bf8" +dependencies = [ + "bytes", + "prost", + "prost-build", + "serde", + "serde_json", +] + [[package]] name = "helium-sub-daos" version = "0.1.5" @@ -3853,7 +3865,7 @@ dependencies = [ "async-trait", "chrono", "derive_builder", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "hextree", "rust_decimal", "rust_decimal_macros", @@ -4269,7 +4281,7 @@ dependencies = [ "futures", "futures-util", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "http 0.2.11", "humantime-serde", "metrics", @@ -4338,7 +4350,7 @@ dependencies = [ "futures", "futures-util", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "hextree", "http 0.2.11", "http-serde", @@ -4380,7 +4392,7 @@ dependencies = [ "futures", "futures-util", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "http 0.2.11", "http-serde", "humantime-serde", @@ -4422,7 +4434,7 @@ dependencies = [ "futures-util", "h3o", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "http-serde", "humantime-serde", "iot-config", @@ -5010,7 +5022,7 @@ dependencies = [ "futures", "futures-util", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "hextree", "http 0.2.11", "http-serde", @@ -5050,7 +5062,7 @@ dependencies = [ "futures", "h3o", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "mobile-config", "prost", "rand 0.8.5", @@ -5086,7 +5098,7 @@ dependencies = [ "futures", "futures-util", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "http 0.2.11", "http-serde", "humantime-serde", @@ -5130,7 +5142,7 @@ dependencies = [ "futures-util", "h3o", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "hex-assignments", "hextree", "http-serde", @@ -5813,7 +5825,7 @@ dependencies = [ "futures", "futures-util", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "http 0.2.11", "hyper 0.14.28", "jsonrpsee", @@ -5896,7 +5908,7 @@ dependencies = [ "futures-util", "helium-anchor-gen", "helium-lib", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "humantime-serde", "metrics", "metrics-exporter-prometheus", @@ -6503,7 +6515,7 @@ dependencies = [ "futures", "futures-util", "helium-crypto", - "helium-proto", + "helium-proto 0.1.0 (git+https://github.com/helium/proto?branch=bbalser/wifi-location-source)", "humantime-serde", "lazy_static", "metrics", diff --git a/Cargo.toml b/Cargo.toml index 870fd79e0..8a6f7f3d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -70,7 +70,7 @@ helium-lib = { git = "https://github.com/helium/helium-wallet-rs.git", branch = hextree = { git = "https://github.com/jaykickliter/HexTree", branch = "main", features = [ "disktree", ] } -helium-proto = { git = "https://github.com/helium/proto", branch = "master", features = [ +helium-proto = { git = "https://github.com/helium/proto", branch = "bbalser/wifi-location-source", features = [ "services", ] } solana-client = "1.18" @@ -82,7 +82,7 @@ reqwest = { version = "0", default-features = false, features = [ "json", "rustls-tls", ] } -beacon = { git = "https://github.com/helium/proto", branch = "master" } +beacon = { git = "https://github.com/helium/proto", branch = "bbalser/wifi-location-source" } humantime = "2" humantime-serde = "1" metrics = ">=0.22" diff --git a/file_store/src/wifi_heartbeat.rs b/file_store/src/wifi_heartbeat.rs index 68d72eb2e..fcb12d27c 100644 --- a/file_store/src/wifi_heartbeat.rs +++ b/file_store/src/wifi_heartbeat.rs @@ -4,7 +4,9 @@ use crate::{ }; use chrono::{DateTime, Utc}; use helium_crypto::PublicKeyBinary; -use helium_proto::services::poc_mobile::{WifiHeartbeatIngestReportV1, WifiHeartbeatReqV1}; +use helium_proto::services::poc_mobile::{ + LocationSource, WifiHeartbeatIngestReportV1, WifiHeartbeatReqV1, +}; use serde::{Deserialize, Serialize}; use uuid::Uuid; @@ -17,6 +19,7 @@ pub struct WifiHeartbeat { pub location_validation_timestamp: Option>, pub coverage_object: Vec, pub timestamp: DateTime, + pub location_source: LocationSource, } impl WifiHeartbeat { @@ -47,6 +50,7 @@ impl TryFrom for WifiHeartbeat { } else { v.location_validation_timestamp.to_timestamp().ok() }; + let location_source = v.location_source(); Ok(Self { pubkey: v.pub_key.into(), lat: v.lat, @@ -55,6 +59,7 @@ impl TryFrom for WifiHeartbeat { coverage_object: v.coverage_object, timestamp: v.timestamp.to_timestamp()?, location_validation_timestamp, + location_source, }) } } @@ -107,6 +112,7 @@ mod tests { coverage_object: vec![], timestamp: Utc::now().timestamp() as u64, location_validation_timestamp: now as u64, + location_source: LocationSource::Skyhook.into(), signature: vec![], }), }; @@ -120,6 +126,7 @@ mod tests { coverage_object: vec![], timestamp: Utc::now().timestamp() as u64, location_validation_timestamp: 0, + location_source: LocationSource::Gps.into(), signature: vec![], }), }; diff --git a/mobile_verifier/src/heartbeats/mod.rs b/mobile_verifier/src/heartbeats/mod.rs index 2e21a68a9..e52183a16 100644 --- a/mobile_verifier/src/heartbeats/mod.rs +++ b/mobile_verifier/src/heartbeats/mod.rs @@ -18,7 +18,7 @@ use file_store::{ use futures::stream::{Stream, StreamExt}; use h3o::{CellIndex, LatLng}; use helium_crypto::PublicKeyBinary; -use helium_proto::services::poc_mobile as proto; +use helium_proto::services::poc_mobile::{self as proto, LocationSource}; use retainer::Cache; use rust_decimal::{prelude::ToPrimitive, Decimal}; use rust_decimal_macros::dec; @@ -207,6 +207,7 @@ pub struct Heartbeat { pub lon: f64, pub coverage_object: Option, pub location_validation_timestamp: Option>, + pub location_source: LocationSource, pub timestamp: DateTime, } @@ -254,6 +255,7 @@ impl From for Heartbeat { lat: value.report.lat, lon: value.report.lon, location_validation_timestamp: None, + location_source: LocationSource::Gps, timestamp: value.received_timestamp, } } @@ -270,6 +272,7 @@ impl From for Heartbeat { lat: value.report.lat, lon: value.report.lon, location_validation_timestamp: value.report.location_validation_timestamp, + location_source: value.report.location_source, timestamp: value.received_timestamp, } } @@ -620,6 +623,7 @@ impl ValidatedHeartbeat { .location_validation_timestamp .map_or(0, |v| v.timestamp() as u64), distance_to_asserted: self.distance_to_asserted.map_or(0, |v| v as u64), + location_source: self.heartbeat.location_source.into(), ..Default::default() }, &[("validity", self.validity.as_str_name())], @@ -787,6 +791,7 @@ mod test { cbsd_id: None, coverage_object: Some(coverage_object), location_validation_timestamp: None, + location_source: LocationSource::Skyhook, }, validity: Default::default(), location_trust_score_multiplier: dec!(1.0), diff --git a/mobile_verifier/tests/integrations/heartbeats.rs b/mobile_verifier/tests/integrations/heartbeats.rs index c827e9f44..edd1faf1d 100644 --- a/mobile_verifier/tests/integrations/heartbeats.rs +++ b/mobile_verifier/tests/integrations/heartbeats.rs @@ -1,7 +1,7 @@ use chrono::{DateTime, Utc}; use futures_util::TryStreamExt; use helium_crypto::PublicKeyBinary; -use helium_proto::services::poc_mobile::HeartbeatValidity; +use helium_proto::services::poc_mobile::{HeartbeatValidity, LocationSource}; use mobile_verifier::{ cell_type::CellType, heartbeats::{HbType, Heartbeat, HeartbeatReward, ValidatedHeartbeat}, @@ -27,6 +27,7 @@ async fn test_save_wifi_heartbeat(pool: PgPool) -> anyhow::Result<()> { coverage_object: Some(coverage_object), location_validation_timestamp: None, timestamp: "2023-08-23 00:00:00.000000000 UTC".parse().unwrap(), + location_source: LocationSource::Skyhook, }, cell_type: CellType::SercommIndoor, distance_to_asserted: Some(1000), // Cannot be null @@ -64,6 +65,7 @@ async fn test_save_cbrs_heartbeat(pool: PgPool) -> anyhow::Result<()> { coverage_object: Some(coverage_object), location_validation_timestamp: None, timestamp: "2023-08-23 00:00:00.000000000 UTC".parse().unwrap(), + location_source: LocationSource::Gps, }, cell_type: CellType::SercommIndoor, distance_to_asserted: None, diff --git a/mobile_verifier/tests/integrations/hex_boosting.rs b/mobile_verifier/tests/integrations/hex_boosting.rs index a0058ec75..2d4e71994 100644 --- a/mobile_verifier/tests/integrations/hex_boosting.rs +++ b/mobile_verifier/tests/integrations/hex_boosting.rs @@ -6,12 +6,9 @@ use file_store::{ speedtest::CellSpeedtest, }; use helium_crypto::PublicKeyBinary; -use helium_proto::services::{ - poc_lora::UnallocatedRewardType, - poc_mobile::{ - CoverageObjectValidity, HeartbeatValidity, RadioReward, SeniorityUpdateReason, SignalLevel, - UnallocatedReward, - }, +use helium_proto::services::poc_mobile::{ + CoverageObjectValidity, HeartbeatValidity, LocationSource, RadioReward, SeniorityUpdateReason, + SignalLevel, UnallocatedReward, }; use hextree::Cell; use mobile_config::boosted_hex_info::BoostedHexInfo; @@ -1163,6 +1160,7 @@ async fn seed_heartbeats_v1( coverage_object: Some(cov_obj_1.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(10), @@ -1190,6 +1188,7 @@ async fn seed_heartbeats_v1( coverage_object: Some(cov_obj_2.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(10), @@ -1217,6 +1216,7 @@ async fn seed_heartbeats_v1( coverage_object: Some(cov_obj_3.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(10), @@ -1265,6 +1265,7 @@ async fn seed_heartbeats_v2( coverage_object: Some(cov_obj_1.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(10), @@ -1292,6 +1293,7 @@ async fn seed_heartbeats_v2( coverage_object: Some(cov_obj_2.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(10), @@ -1319,6 +1321,7 @@ async fn seed_heartbeats_v2( coverage_object: Some(cov_obj_3.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(10), @@ -1369,6 +1372,7 @@ async fn seed_heartbeats_v3( coverage_object: Some(cov_obj_1.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(10), @@ -1396,6 +1400,7 @@ async fn seed_heartbeats_v3( coverage_object: Some(cov_obj_2.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(10), @@ -1423,6 +1428,7 @@ async fn seed_heartbeats_v3( coverage_object: Some(cov_obj_3.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(300), @@ -1471,6 +1477,7 @@ async fn seed_heartbeats_v4( coverage_object: Some(cov_obj_1.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(10), @@ -1498,6 +1505,7 @@ async fn seed_heartbeats_v4( coverage_object: Some(cov_obj_2.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(10), @@ -1526,6 +1534,7 @@ async fn seed_heartbeats_v4( coverage_object: Some(cov_obj_3.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::SercommOutdoor, distance_to_asserted: Some(1), diff --git a/mobile_verifier/tests/integrations/last_location.rs b/mobile_verifier/tests/integrations/last_location.rs index c5ba6a150..a4c9730cb 100644 --- a/mobile_verifier/tests/integrations/last_location.rs +++ b/mobile_verifier/tests/integrations/last_location.rs @@ -4,7 +4,7 @@ use chrono::{DateTime, Duration, Utc}; use file_store::coverage::RadioHexSignalLevel; use h3o::LatLng; use helium_crypto::PublicKeyBinary; -use helium_proto::services::poc_mobile as proto; +use helium_proto::services::poc_mobile::{self as proto, LocationSource}; use mobile_verifier::{ coverage::{CoverageObject, CoverageObjectCache}, geofence::GeofenceValidator, @@ -291,6 +291,7 @@ impl HeartbeatBuilder { coverage_object: Some(self.coverage_object.coverage_object.uuid), location_validation_timestamp: self.location_validation_timestamp, timestamp: self.timestamp.unwrap_or(Utc::now()), + location_source: LocationSource::Skyhook, } } } diff --git a/mobile_verifier/tests/integrations/modeled_coverage.rs b/mobile_verifier/tests/integrations/modeled_coverage.rs index 4d5c64432..4026247cc 100644 --- a/mobile_verifier/tests/integrations/modeled_coverage.rs +++ b/mobile_verifier/tests/integrations/modeled_coverage.rs @@ -9,7 +9,7 @@ use futures::stream::{self, StreamExt}; use helium_crypto::PublicKeyBinary; use helium_proto::services::{ mobile_config::NetworkKeyRole, - poc_mobile::{CoverageObjectValidity, SignalLevel}, + poc_mobile::{CoverageObjectValidity, LocationSource, SignalLevel}, }; use hextree::Cell; use mobile_config::boosted_hex_info::{BoostedHexInfo, BoostedHexes}; @@ -1391,6 +1391,7 @@ async fn ensure_lower_trust_score_for_distant_heartbeats(pool: PgPool) -> anyhow location_validation_timestamp: Some(DateTime::::MIN_UTC), operation_mode: true, coverage_object: Vec::from(coverage_object_uuid.into_bytes()), + location_source: LocationSource::Skyhook, }, received_timestamp: Utc::now(), }; @@ -1406,6 +1407,7 @@ async fn ensure_lower_trust_score_for_distant_heartbeats(pool: PgPool) -> anyhow location_validation_timestamp: Some(DateTime::::MIN_UTC), operation_mode: true, coverage_object: Vec::from(coverage_object_uuid.into_bytes()), + location_source: LocationSource::Skyhook, }, received_timestamp: Utc::now(), }; diff --git a/mobile_verifier/tests/integrations/rewarder_poc_dc.rs b/mobile_verifier/tests/integrations/rewarder_poc_dc.rs index f3eaf1e4a..5dca10bfc 100644 --- a/mobile_verifier/tests/integrations/rewarder_poc_dc.rs +++ b/mobile_verifier/tests/integrations/rewarder_poc_dc.rs @@ -6,8 +6,8 @@ use file_store::{ }; use helium_crypto::PublicKeyBinary; use helium_proto::services::poc_mobile::{ - CoverageObjectValidity, GatewayReward, HeartbeatValidity, RadioReward, SeniorityUpdateReason, - SignalLevel, UnallocatedReward, UnallocatedRewardType, + CoverageObjectValidity, GatewayReward, HeartbeatValidity, LocationSource, RadioReward, + SeniorityUpdateReason, SignalLevel, UnallocatedReward, UnallocatedRewardType, }; use mobile_verifier::{ cell_type::CellType, @@ -186,6 +186,7 @@ async fn seed_heartbeats( coverage_object: Some(cov_obj_1.coverage_object.uuid), location_validation_timestamp: None, timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Gps, }, cell_type: CellType::SercommIndoor, distance_to_asserted: None, @@ -214,6 +215,7 @@ async fn seed_heartbeats( coverage_object: Some(cov_obj_2.coverage_object.uuid), location_validation_timestamp: None, timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Gps, }, cell_type: CellType::SercommOutdoor, distance_to_asserted: None, @@ -241,6 +243,7 @@ async fn seed_heartbeats( coverage_object: Some(cov_obj_3.coverage_object.uuid), location_validation_timestamp: Some(ts - ChronoDuration::hours(24)), timestamp: ts + ChronoDuration::hours(n), + location_source: LocationSource::Skyhook, }, cell_type: CellType::NovaGenericWifiIndoor, distance_to_asserted: Some(10), diff --git a/mobile_verifier/tests/integrations/seniority.rs b/mobile_verifier/tests/integrations/seniority.rs index 6b1fae38d..3d3d7435c 100644 --- a/mobile_verifier/tests/integrations/seniority.rs +++ b/mobile_verifier/tests/integrations/seniority.rs @@ -1,5 +1,7 @@ use chrono::{DateTime, Utc}; -use helium_proto::services::poc_mobile::{HeartbeatValidity, SeniorityUpdateReason}; +use helium_proto::services::poc_mobile::{ + HeartbeatValidity, LocationSource, SeniorityUpdateReason, +}; use mobile_verifier::cell_type::CellType; use mobile_verifier::heartbeats::{HbType, Heartbeat, ValidatedHeartbeat}; use mobile_verifier::seniority::{Seniority, SeniorityUpdate, SeniorityUpdateAction}; @@ -23,6 +25,7 @@ async fn test_seniority_updates(pool: PgPool) -> anyhow::Result<()> { coverage_object: Some(coverage_object), location_validation_timestamp: None, timestamp: "2023-08-23 00:00:00.000000000 UTC".parse().unwrap(), + location_source: LocationSource::Skyhook, }, cell_type: CellType::SercommIndoor, distance_to_asserted: None,