diff --git a/src/config.rs b/src/config.rs index 422529215..893c90ff6 100644 --- a/src/config.rs +++ b/src/config.rs @@ -857,6 +857,8 @@ impl Context { /// /// This should only be used by test code and during configure. pub(crate) async fn set_primary_self_addr(&self, primary_new: &str) -> Result<()> { + self.quota.write().await.take(); + // add old primary address (if exists) to secondary addresses let mut secondary_addrs = self.get_all_self_addrs().await?; // never store a primary address also as a secondary @@ -869,7 +871,7 @@ impl Context { self.set_config_internal(Config::ConfiguredAddr, Some(primary_new)) .await?; - + self.emit_event(EventType::ConnectivityChanged); Ok(()) } diff --git a/src/quota.rs b/src/quota.rs index d0cce66eb..1710d9da1 100644 --- a/src/quota.rs +++ b/src/quota.rs @@ -197,7 +197,7 @@ mod tests { } #[tokio::test(flavor = "multi_thread", worker_threads = 2)] - async fn test_quota_needs_update() { + async fn test_quota_needs_update() -> Result<()> { let mut tcm = TestContextManager::new(); let t = &tcm.unconfigured().await; const TIMEOUT: u64 = 60; @@ -214,5 +214,14 @@ mod tests { modified: tools::Time::now(), }); assert!(!t.quota_needs_update(TIMEOUT).await); + + t.evtracker.clear_events(); + t.set_primary_self_addr("new@addr").await?; + assert!(t.quota.read().await.is_none()); + t.evtracker + .get_matching(|evt| matches!(evt, EventType::ConnectivityChanged)) + .await; + assert!(t.quota_needs_update(TIMEOUT).await); + Ok(()) } }