Пример #1
0
        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);
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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));
        }