From 7a9c2b9f9fa8b81e46d923b6f4afb88ef74eb7ae Mon Sep 17 00:00:00 2001 From: ReubenBond Date: Wed, 15 May 2024 11:49:50 -0700 Subject: [PATCH] Fix fake provider --- .../General/RingTests_Standalone.cs | 22 ++++++++++++++----- .../ConsistentRingProviderTests.cs | 22 ++++++++++++++----- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/test/NonSilo.Tests/General/RingTests_Standalone.cs b/test/NonSilo.Tests/General/RingTests_Standalone.cs index c78b31f4a5..ac8de6598a 100644 --- a/test/NonSilo.Tests/General/RingTests_Standalone.cs +++ b/test/NonSilo.Tests/General/RingTests_Standalone.cs @@ -207,6 +207,7 @@ private static int CompareSiloAddressesByHash(SiloAddress x, SiloAddress y) internal sealed class FakeSiloStatusOracle : ISiloStatusOracle { private readonly Dictionary _content = []; + private readonly HashSet _subscribers = []; public FakeSiloStatusOracle() { @@ -236,19 +237,28 @@ public Dictionary GetApproximateSiloStatuses(bool onlyA : new Dictionary(_content); } - public void SetSiloStatus(SiloAddress siloAddress, SiloStatus status) => _content[siloAddress] = status; + public void SetSiloStatus(SiloAddress siloAddress, SiloStatus status) + { + _content[siloAddress] = status; + foreach (var subscriber in _subscribers) + { + subscriber.SiloStatusChangeNotification(siloAddress, status); + } + } public bool IsDeadSilo(SiloAddress silo) => GetApproximateSiloStatus(silo) == SiloStatus.Dead; public bool IsFunctionalDirectory(SiloAddress siloAddress) => !GetApproximateSiloStatus(siloAddress).IsTerminating(); - #region Not Implemented - public bool SubscribeToSiloStatusEvents(ISiloStatusListener observer) => throw new NotImplementedException(); + public bool SubscribeToSiloStatusEvents(ISiloStatusListener observer) => _subscribers.Add(observer); - public bool TryGetSiloName(SiloAddress siloAddress, out string siloName) => throw new NotImplementedException(); + public bool TryGetSiloName(SiloAddress siloAddress, out string siloName) + { + siloName = "TestSilo"; + return true; + } - public bool UnSubscribeFromSiloStatusEvents(ISiloStatusListener observer) => throw new NotImplementedException(); - #endregion + public bool UnSubscribeFromSiloStatusEvents(ISiloStatusListener observer) => _subscribers.Remove(observer); } internal class RangeBreakable diff --git a/test/TesterInternal/LivenessTests/ConsistentRingProviderTests.cs b/test/TesterInternal/LivenessTests/ConsistentRingProviderTests.cs index f115ed16c3..b998746aa4 100644 --- a/test/TesterInternal/LivenessTests/ConsistentRingProviderTests.cs +++ b/test/TesterInternal/LivenessTests/ConsistentRingProviderTests.cs @@ -129,6 +129,7 @@ private Dictionary> GetQueueHistogram(List<(SiloAddress K internal sealed class FakeSiloStatusOracle : ISiloStatusOracle { private readonly Dictionary _content = []; + private readonly HashSet _subscribers = []; public FakeSiloStatusOracle() { @@ -158,19 +159,28 @@ public Dictionary GetApproximateSiloStatuses(bool onlyA : new Dictionary(_content); } - public void SetSiloStatus(SiloAddress siloAddress, SiloStatus status) => _content[siloAddress] = status; + public void SetSiloStatus(SiloAddress siloAddress, SiloStatus status) + { + _content[siloAddress] = status; + foreach (var subscriber in _subscribers) + { + subscriber.SiloStatusChangeNotification(siloAddress, status); + } + } public bool IsDeadSilo(SiloAddress silo) => GetApproximateSiloStatus(silo) == SiloStatus.Dead; public bool IsFunctionalDirectory(SiloAddress siloAddress) => !GetApproximateSiloStatus(siloAddress).IsTerminating(); - #region Not Implemented - public bool SubscribeToSiloStatusEvents(ISiloStatusListener observer) => throw new NotImplementedException(); + public bool SubscribeToSiloStatusEvents(ISiloStatusListener observer) => _subscribers.Add(observer); - public bool TryGetSiloName(SiloAddress siloAddress, out string siloName) => throw new NotImplementedException(); + public bool TryGetSiloName(SiloAddress siloAddress, out string siloName) + { + siloName = "TestSilo"; + return true; + } - public bool UnSubscribeFromSiloStatusEvents(ISiloStatusListener observer) => throw new NotImplementedException(); - #endregion + public bool UnSubscribeFromSiloStatusEvents(ISiloStatusListener observer) => _subscribers.Remove(observer); } } }