Пример #1
0
        public async Task ResetColor_WithDefaultState_DoesNotClearState()
        {
            // Arrange
            var state = new ColorGrainState();

            var mockState = new Mock <IPersistentState <ColorGrainState> >();

            mockState.SetupGet(o => o.State).Returns(state);
            mockState.Setup(o => o.ClearStateAsync());

            var mockMapper = new Mock <IAttributeToFactoryMapper <PersistentStateAttribute> >();

            mockMapper.Setup(o => o.GetFactory(It.IsAny <ParameterInfo>(), It.IsAny <PersistentStateAttribute>())).Returns(context => mockState.Object);

            Silo.AddService(mockMapper.Object);

            var grain = await Silo.CreateGrainAsync <ColorGrain>(GrainId);

            // Act
            await grain.ResetColor();

            // Assert
            state.Color.Should().Be(Color.Unknown);
            state.Id.Should().Be(Guid.Empty);

            // Note that the following assert ties this test to the _implementation_ details. Generally, one should try
            // to avoid tying the test to the implementation details. It can lead to more brittle tests. However, one may
            // choose to accept this as a trade-off when the implementation detail represents an important behavior.
            mockState.Verify(o => o.ClearStateAsync(), Times.Never);
        }
Пример #2
0
        public async Task GetColor_WithState_ReturnsColor()
        {
            // Arrange
            var state = new ColorGrainState
            {
                Color = Color.Red,
                Id    = GrainId,
            };

            var mockState = new Mock <IPersistentState <ColorGrainState> >();

            mockState.SetupGet(o => o.State).Returns(state);

            var mockMapper = new Mock <IAttributeToFactoryMapper <PersistentStateAttribute> >();

            mockMapper.Setup(o => o.GetFactory(It.IsAny <ParameterInfo>(), It.IsAny <PersistentStateAttribute>())).Returns(context => mockState.Object);

            Silo.AddService(mockMapper.Object);

            var grain = await Silo.CreateGrainAsync <ColorGrain>(GrainId);

            // Act
            var color = await grain.GetColor();

            // Assert
            color.Should().Be(Color.Red);
        }
Пример #3
0
        public async Task SetColor_WithDefaultState_SetsState()
        {
            // Arrange
            var state = new ColorGrainState();

            var mockState = new Mock <IPersistentState <ColorGrainState> >();

            mockState.SetupGet(o => o.State).Returns(state);
            mockState.Setup(o => o.WriteStateAsync());

            var mockMapper = new Mock <IAttributeToFactoryMapper <PersistentStateAttribute> >();

            mockMapper.Setup(o => o.GetFactory(It.IsAny <ParameterInfo>(), It.IsAny <PersistentStateAttribute>())).Returns(context => mockState.Object);

            Silo.AddService(mockMapper.Object);

            var grain = await Silo.CreateGrainAsync <ColorGrain>(GrainId);

            // Act
            await grain.SetColor(Color.Blue);

            // Assert
            state.Color.Should().Be(Color.Blue);
            state.Id.Should().Be(GrainId);
        }
Пример #4
0
        public async Task OnActivateAsync_WithDefaultState_DoesNotMutateState()
        {
            // Arrange
            var state = new ColorGrainState();

            Silo.AddPersistentState(stateName: "State", state: state);

            // Act
            var grain = await Silo.CreateGrainAsync <ColorGrain>(GrainId);

            // Assert
            state.Color.Should().Be(Color.Unknown);
            state.Id.Should().Be(Guid.Empty);
        }
Пример #5
0
        public async Task SetColor_WithDefaultState_SetsState()
        {
            // Arrange
            var state = new ColorGrainState();

            Silo.AddPersistentState(stateName: "State", state: state);

            var grain = await Silo.CreateGrainAsync <ColorGrain>(GrainId);

            // Act
            await grain.SetColor(Color.Blue);

            // Assert
            state.Color.Should().Be(Color.Blue);
            state.Id.Should().Be(GrainId);
        }
Пример #6
0
        public async Task GetLeastFavouriteColor_WithGrainState_ReturnsColor()
        {
            // Arrange
            var state = new ColorGrainState
            {
                Color = Color.Red,
                Id    = GrainId,
            };

            Silo.AddGrainState <ColorRankingGrain, ColorGrainState>(state: state);

            var grain = await Silo.CreateGrainAsync <ColorRankingGrain>(GrainId);

            // Act
            var color = await grain.GetLeastFavouriteColor();

            color.Should().Be(Color.Red);
        }
Пример #7
0
        public async Task GetColor_WithState_ReturnsColor()
        {
            // Arrange
            var state = new ColorGrainState
            {
                Color = Color.Red,
                Id    = GrainId,
            };

            Silo.AddPersistentState(stateName: "State", state: state);

            var grain = await Silo.CreateGrainAsync <ColorGrain>(GrainId);

            // Act
            var color = await grain.GetColor();

            // Assert
            color.Should().Be(Color.Red);
        }
Пример #8
0
        public async Task ResetColor_WithState_ClearsState()
        {
            // Arrange
            var state = new ColorGrainState
            {
                Color = Color.Red,
                Id    = GrainId,
            };

            Silo.AddPersistentState(stateName: "State", state: state);

            var grain = await Silo.CreateGrainAsync <ColorGrain>(GrainId);

            // Act
            await grain.ResetColor();

            // Assert
            var storageStats = Silo.StorageManager.GetStorageStats(stateName: "State");

            storageStats.Clears.Should().Be(1);
        }
Пример #9
0
        public async Task ResetColor_WithDefaultState_DoesNotClearState()
        {
            // Arrange
            var state = new ColorGrainState();

            Silo.AddPersistentState(stateName: "State", state: state);

            var grain = await Silo.CreateGrainAsync <ColorGrain>(GrainId);

            // Act
            await grain.ResetColor();

            // Assert
            state.Color.Should().Be(Color.Unknown);
            state.Id.Should().Be(Guid.Empty);

            // Note that the following assert ties this test to the _implementation_ details. Generally, one should try
            // to avoid tying the test to the implementation details. It can lead to more brittle tests. However, one may
            // choose to accept this as a trade-off when the implementation detail represents an important behavior.
            var storageStats = Silo.StorageManager.GetStorageStats(stateName: "State");

            storageStats.Clears.Should().Be(0);
        }
Пример #10
0
        public async Task SetColor_WithMutatedState_ThrowsInconsistentStateException()
        {
            // Arrange
            var state = new ColorGrainState();

            var mockState = new Mock <IPersistentState <ColorGrainState> >();

            mockState.SetupGet(o => o.State).Returns(state);
            mockState.Setup(o => o.WriteStateAsync()).Throws <InconsistentStateException>();

            var mockMapper = new Mock <IAttributeToFactoryMapper <PersistentStateAttribute> >();

            mockMapper.Setup(o => o.GetFactory(It.IsAny <ParameterInfo>(), It.IsAny <PersistentStateAttribute>())).Returns(context => mockState.Object);

            Silo.AddService(mockMapper.Object);

            var grain = await Silo.CreateGrainAsync <ColorGrain>(GrainId);

            Action action = () => grain.SetColor(Color.Green);

            // Act+Assert
            action.Should().Throw <InconsistentStateException>();
        }