Skip to content

Commit

Permalink
Add GrainId tests for ISpanParsable and JsonConverter
Browse files Browse the repository at this point in the history
JsonConverter now uses span parsing path so tests added to verify this works.
  • Loading branch information
Alex McAuliffe committed Aug 2, 2023
1 parent 723cd7d commit 79adcab
Showing 1 changed file with 47 additions and 35 deletions.
82 changes: 47 additions & 35 deletions test/NonSilo.Tests/General/Identifiertests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Net;
using System.Text.Json;
using Microsoft.Extensions.DependencyInjection;
using Orleans;
using Orleans.GrainReferences;
Expand Down Expand Up @@ -97,45 +98,56 @@ public void GrainIdShouldEncodeAndDecodePrimaryKeyGuidCorrectly()
}
}

[Fact, TestCategory("SlowBVT"), TestCategory("Identifiers")]
public void GrainId_ToFromPrintableString()
[Theory, TestCategory("SlowBVT"), TestCategory("Identifiers")]
[MemberData(nameof(TestGrainIds))]
public void GrainId_ToFromPrintableString(GrainId grainId)
{
Guid guid = Guid.NewGuid();
GrainId grainId = GrainId.Create(GrainType.Create("test"), GrainIdKeyExtensions.CreateGuidKey(guid));
GrainId roundTripped = RoundTripGrainIdToParsable(grainId);
Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Guid key

string extKey = "Guid-ExtKey-1";
guid = Guid.NewGuid();
grainId = GrainId.Create(GrainType.Create("test"), GrainIdKeyExtensions.CreateGuidKey(guid, extKey));
roundTripped = RoundTripGrainIdToParsable(grainId);
Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Guid key + Extended Key

grainId = GrainId.Create(GrainType.Create("test"), GrainIdKeyExtensions.CreateGuidKey(guid, (string)null));
roundTripped = RoundTripGrainIdToParsable(grainId);
Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Guid key + null Extended Key

long key = random.Next();
grainId = GrainId.Create(GrainType.Create("test"), GrainIdKeyExtensions.CreateIntegerKey(key));
roundTripped = RoundTripGrainIdToParsable(grainId);
Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Int64 key

extKey = "Long-ExtKey-2";
key = random.Next();
grainId = GrainId.Create(GrainType.Create("test"), GrainIdKeyExtensions.CreateIntegerKey(key, extKey));
roundTripped = RoundTripGrainIdToParsable(grainId);
Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Int64 key + Extended Key

key = UniqueKey.NewKey(key).PrimaryKeyToLong();
grainId = GrainId.Create(GrainType.Create("test"), GrainIdKeyExtensions.CreateIntegerKey(key, extKey));
roundTripped = RoundTripGrainIdToParsable(grainId);
Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Int64 key + null Extended Key
string str = grainId.ToString();
var roundTripped = GrainId.Parse(str);

Assert.Equal(grainId, roundTripped);
}

[Theory, TestCategory("SlowBVT"), TestCategory("Identifiers")]
[MemberData(nameof(TestGrainIds))]
public void GrainId_TryParseFromPrintableString(GrainId grainId)
{
string str = grainId.ToString();
var success = GrainId.TryParse(str, out var roundTripped);

Assert.True(success);
Assert.Equal(grainId, roundTripped);
}

private GrainId RoundTripGrainIdToParsable(GrainId input)
[Theory, TestCategory("SlowBVT"), TestCategory("Identifiers")]
[MemberData(nameof(TestGrainIds))]
public void GrainId_RoundTripJsonConverter(GrainId grainId)
{
string str = input.ToString();
return GrainId.Parse(str);
var serialized = JsonSerializer.Serialize(grainId);
var deserialized = JsonSerializer.Deserialize<GrainId>(serialized);

Assert.Equal(grainId, deserialized);
}

public static TheoryData<GrainId> TestGrainIds
{
get
{
var td = new TheoryData<GrainId>();
var grainType = GrainType.Create("test");
var guid = Guid.NewGuid();
var integer = Random.Shared.NextInt64();

td.Add(GrainId.Create(grainType, GrainIdKeyExtensions.CreateGuidKey(guid)));
td.Add(GrainId.Create(grainType, GrainIdKeyExtensions.CreateGuidKey(guid, "Guid-ExtKey-1")));
td.Add(GrainId.Create(grainType, GrainIdKeyExtensions.CreateGuidKey(guid, (string)null)));
td.Add(GrainId.Create(grainType, GrainIdKeyExtensions.CreateIntegerKey(integer)));
td.Add(GrainId.Create(grainType, GrainIdKeyExtensions.CreateIntegerKey(integer, "Long-ExtKey-2")));
td.Add(GrainId.Create(grainType, GrainIdKeyExtensions.CreateIntegerKey(integer, (string)null)));
td.Add(GrainId.Create(grainType, GrainIdKeyExtensions.CreateIntegerKey(UniqueKey.NewKey(integer).PrimaryKeyToLong(), "Long-ExtKey-2")));

return td;
}
}

[Fact, TestCategory("BVT"), TestCategory("Identifiers")]
Expand Down

0 comments on commit 79adcab

Please sign in to comment.