feat(batch8): implement store enum parity group B

This commit is contained in:
Joseph Doherty
2026-02-28 11:53:44 -05:00
parent cfb49ef477
commit 59085ba9ea
4 changed files with 347 additions and 0 deletions

View File

@@ -1,4 +1,5 @@
using System.Text;
using System.Text.Json;
using Shouldly;
using ZB.MOM.NatsNet.Server;
@@ -223,6 +224,104 @@ public class StoreTypesTests
StoreParity.IsPermissionError(null).ShouldBeFalse();
}
[Fact]
public void RetentionPolicy_StringParity_ReturnsExpectedText()
{
RetentionPolicy.LimitsPolicy.String().ShouldBe("Limits");
RetentionPolicy.InterestPolicy.String().ShouldBe("Interest");
RetentionPolicy.WorkQueuePolicy.String().ShouldBe("WorkQueue");
((RetentionPolicy)99).String().ShouldBe("Unknown Retention Policy");
}
[Fact]
public void RetentionPolicy_JsonParity_RoundTripsExpectedTokens()
{
JsonSerializer.Serialize(RetentionPolicy.LimitsPolicy).ShouldBe("\"limits\"");
JsonSerializer.Serialize(RetentionPolicy.InterestPolicy).ShouldBe("\"interest\"");
JsonSerializer.Serialize(RetentionPolicy.WorkQueuePolicy).ShouldBe("\"workqueue\"");
JsonSerializer.Deserialize<RetentionPolicy>("\"limits\"").ShouldBe(RetentionPolicy.LimitsPolicy);
JsonSerializer.Deserialize<RetentionPolicy>("\"interest\"").ShouldBe(RetentionPolicy.InterestPolicy);
JsonSerializer.Deserialize<RetentionPolicy>("\"workqueue\"").ShouldBe(RetentionPolicy.WorkQueuePolicy);
}
[Fact]
public void RetentionPolicy_UnmarshalInvalid_Throws()
{
Should.Throw<JsonException>(() => JsonSerializer.Deserialize<RetentionPolicy>("\"bogus\""));
}
[Fact]
public void DiscardPolicy_StringAndJsonParity_MatchesGo()
{
DiscardPolicy.DiscardOld.String().ShouldBe("DiscardOld");
DiscardPolicy.DiscardNew.String().ShouldBe("DiscardNew");
((DiscardPolicy)99).String().ShouldBe("Unknown Discard Policy");
JsonSerializer.Serialize(DiscardPolicy.DiscardOld).ShouldBe("\"old\"");
JsonSerializer.Serialize(DiscardPolicy.DiscardNew).ShouldBe("\"new\"");
JsonSerializer.Deserialize<DiscardPolicy>("\"OLD\"").ShouldBe(DiscardPolicy.DiscardOld);
JsonSerializer.Deserialize<DiscardPolicy>("\"new\"").ShouldBe(DiscardPolicy.DiscardNew);
}
[Fact]
public void StorageType_StringAndJsonParity_MatchesGo()
{
StorageType.MemoryStorage.String().ShouldBe("Memory");
StorageType.FileStorage.String().ShouldBe("File");
((StorageType)99).String().ShouldBe("Unknown Storage Type");
JsonSerializer.Serialize(StorageType.MemoryStorage).ShouldBe("\"memory\"");
JsonSerializer.Serialize(StorageType.FileStorage).ShouldBe("\"file\"");
JsonSerializer.Deserialize<StorageType>("\"memory\"").ShouldBe(StorageType.MemoryStorage);
JsonSerializer.Deserialize<StorageType>("\"file\"").ShouldBe(StorageType.FileStorage);
}
[Fact]
public void AckPolicy_JsonParity_MatchesGo()
{
JsonSerializer.Serialize(AckPolicy.AckNone).ShouldBe("\"none\"");
JsonSerializer.Serialize(AckPolicy.AckAll).ShouldBe("\"all\"");
JsonSerializer.Serialize(AckPolicy.AckExplicit).ShouldBe("\"explicit\"");
JsonSerializer.Deserialize<AckPolicy>("\"none\"").ShouldBe(AckPolicy.AckNone);
JsonSerializer.Deserialize<AckPolicy>("\"all\"").ShouldBe(AckPolicy.AckAll);
JsonSerializer.Deserialize<AckPolicy>("\"explicit\"").ShouldBe(AckPolicy.AckExplicit);
Should.Throw<JsonException>(() => JsonSerializer.Deserialize<AckPolicy>("\"bad\""));
}
[Fact]
public void ReplayPolicy_JsonParity_MatchesGo()
{
JsonSerializer.Serialize(ReplayPolicy.ReplayInstant).ShouldBe("\"instant\"");
JsonSerializer.Serialize(ReplayPolicy.ReplayOriginal).ShouldBe("\"original\"");
JsonSerializer.Deserialize<ReplayPolicy>("\"instant\"").ShouldBe(ReplayPolicy.ReplayInstant);
JsonSerializer.Deserialize<ReplayPolicy>("\"original\"").ShouldBe(ReplayPolicy.ReplayOriginal);
Should.Throw<JsonException>(() => JsonSerializer.Deserialize<ReplayPolicy>("\"bad\""));
}
[Fact]
public void DeliverPolicy_JsonParity_MapsUndefinedToAll()
{
JsonSerializer.Serialize(DeliverPolicy.DeliverAll).ShouldBe("\"all\"");
JsonSerializer.Serialize(DeliverPolicy.DeliverLast).ShouldBe("\"last\"");
JsonSerializer.Serialize(DeliverPolicy.DeliverLastPerSubject).ShouldBe("\"last_per_subject\"");
JsonSerializer.Serialize(DeliverPolicy.DeliverNew).ShouldBe("\"new\"");
JsonSerializer.Serialize(DeliverPolicy.DeliverByStartSequence).ShouldBe("\"by_start_sequence\"");
JsonSerializer.Serialize(DeliverPolicy.DeliverByStartTime).ShouldBe("\"by_start_time\"");
JsonSerializer.Serialize((DeliverPolicy)99).ShouldBe("\"undefined\"");
JsonSerializer.Deserialize<DeliverPolicy>("\"all\"").ShouldBe(DeliverPolicy.DeliverAll);
JsonSerializer.Deserialize<DeliverPolicy>("\"undefined\"").ShouldBe(DeliverPolicy.DeliverAll);
JsonSerializer.Deserialize<DeliverPolicy>("\"last\"").ShouldBe(DeliverPolicy.DeliverLast);
JsonSerializer.Deserialize<DeliverPolicy>("\"last_per_subject\"").ShouldBe(DeliverPolicy.DeliverLastPerSubject);
JsonSerializer.Deserialize<DeliverPolicy>("\"new\"").ShouldBe(DeliverPolicy.DeliverNew);
JsonSerializer.Deserialize<DeliverPolicy>("\"by_start_sequence\"").ShouldBe(DeliverPolicy.DeliverByStartSequence);
JsonSerializer.Deserialize<DeliverPolicy>("\"by_start_time\"").ShouldBe(DeliverPolicy.DeliverByStartTime);
Should.Throw<JsonException>(() => JsonSerializer.Deserialize<DeliverPolicy>("\"bad\""));
}
private static void AppendUVarInt(List<byte> buffer, ulong value)
{
while (value >= 0x80)