public async Task TryGetAsyncTest() { var stateManager = new MockActorStateManager(); var keyMock = new Mock <IStateKey>(); keyMock.Setup(x => x.ToString()).Returns("TestName"); var state = new ActorDictionaryState <string, TestState>(stateManager, keyMock.Object); var cts = new CancellationTokenSource(1000); await SetupValues(stateManager, "TestName", ("A", new TestState { Value = "A1" }), ("A", new TestState { Value = "A2" }), ("B", new TestState { Value = "B1" })); var value0 = await state.TryGetValueAsync("A", cts.Token); Assert.True(value0.HasValue); Assert.Equal("A1", value0.Value.Value); var value1 = await state.TryGetValueAsync("B", cts.Token); Assert.True(value1.HasValue); Assert.Equal("B1", value1.Value.Value); var value2 = await state.TryGetValueAsync("C", cts.Token); Assert.False(value2.HasValue); }
public async Task ContainsKeyAsyncTest() { var stateManager = new MockActorStateManager(); var keyMock = new Mock <IStateKey>(); keyMock.Setup(x => x.ToString()).Returns("TestName"); var state = new ActorDictionaryState <string, TestState>(stateManager, keyMock.Object); var cts = new CancellationTokenSource(1000); await SetupValues(stateManager, "TestName", ("A", new TestState { Value = "A1" }), ("A", new TestState { Value = "A2" }), ("B", new TestState { Value = "B1" })); Assert.True(await state.ContainsKeyAsync("A", cts.Token)); Assert.True(await state.ContainsKeyAsync("B", cts.Token)); Assert.False(await state.ContainsKeyAsync("C", cts.Token)); }
public async Task AddAsync_SecondValueTest() { var stateManager = new MockActorStateManager(); var keyMock = new Mock <IStateKey>(); keyMock.Setup(x => x.ToString()).Returns("TestName"); var state = new ActorDictionaryState <string, TestState>(stateManager, keyMock.Object); var cts = new CancellationTokenSource(1000); var hashCodes = await SetupValues(stateManager, "TestName", ("A", new TestState { Value = "A" })); var firstKeyHash = hashCodes[0]; var secondKey = "B"; var secondKeyHash = (long)secondKey.GetHashCode(); await state.AddAsync(secondKey, new TestState { Value = secondKey }, cts.Token); var manifest = await stateManager.GetStateAsync <HashManifest>("TestName", cts.Token); Assert.NotNull(manifest); Assert.Equal(2, manifest.Count); Assert.Equal(2, manifest.Next); Assert.Equal(firstKeyHash, manifest.Head); Assert.Equal(secondKeyHash, manifest.Tail); var bucket = await stateManager.GetStateAsync <HashBucket>($"TestName:{secondKeyHash:X}", cts.Token); Assert.NotNull(bucket); Assert.Equal(1, bucket.Head); Assert.Equal(1, bucket.Tail); Assert.Equal(firstKeyHash, bucket.Previous); Assert.Null(bucket.Next); Assert.Equal(secondKeyHash, bucket.HashCode); var node = await stateManager.GetStateAsync <HashKeyNode <string> >($"TestName:{secondKeyHash:X}:1", cts.Token); Assert.NotNull(node); Assert.Null(node.Previous); Assert.Null(node.Next); var value = await stateManager.GetStateAsync <TestState>($"TestName:{secondKeyHash:X}:1:v", cts.Token); Assert.NotNull(value); Assert.Equal(secondKey, value.Value); }
public async Task DeleteAsyncTest() { var stateManager = new MockActorStateManager(); var keyMock = new Mock <IStateKey>(); keyMock.Setup(x => x.ToString()).Returns("TestName"); var state = new ActorDictionaryState <string, TestState>(stateManager, keyMock.Object); var cts = new CancellationTokenSource(1000); var hashCodes = await SetupValues(stateManager, "TestName", ("A", new TestState { Value = "A1" }), ("A", new TestState { Value = "A2" }), ("B", new TestState { Value = "B1" })); var firstKeyHash = hashCodes[0]; var secondKeyHash = hashCodes[1]; await state.DeleteStateAsync(cts.Token); Assert.False(await stateManager.ContainsStateAsync("TestName", cts.Token)); Assert.False(await stateManager.ContainsStateAsync($"TestName:{firstKeyHash:X}", cts.Token)); Assert.False(await stateManager.ContainsStateAsync($"TestName:{firstKeyHash:X}:0", cts.Token)); Assert.False(await stateManager.ContainsStateAsync($"TestName:{firstKeyHash:X}:0:v", cts.Token)); Assert.False(await stateManager.ContainsStateAsync($"TestName:{firstKeyHash:X}:1", cts.Token)); Assert.False(await stateManager.ContainsStateAsync($"TestName:{firstKeyHash:X}:1:v", cts.Token)); Assert.False(await stateManager.ContainsStateAsync($"TestName:{secondKeyHash:X}", cts.Token)); Assert.False(await stateManager.ContainsStateAsync($"TestName:{secondKeyHash:X}:2", cts.Token)); Assert.False(await stateManager.ContainsStateAsync($"TestName:{secondKeyHash:X}:2:v", cts.Token)); }