예제 #1
0
        public async Task FactoryProbeWithMultipleNewProbes_FakeItEasy()
        {
            var firstUnknownGrain  = A.Fake <IUnknownGrain>();
            var secondUnknownGrain = A.Fake <IUnknownGrain>();
            var probeQueue         = new Queue <IUnknownGrain>(new[] { firstUnknownGrain, secondUnknownGrain });

            Silo.AddProbe <IUnknownGrain>(identity =>
            {
                var nextProbe = probeQueue.Dequeue();

                A.CallTo(() => nextProbe.WhatsMyId())
                .Returns(identity.PrimaryKeyString);

                return(nextProbe);
            });

            var grain = await Silo.CreateGrainAsync <UnknownGrainResolver>("1");

            await grain.CreateAndPingMultiple();

            var resolvedIds = await grain.GetResolvedUnknownGrainIdsAsync();

            resolvedIds[0].Should().Be("unknownGrainOne");
            resolvedIds[1].Should().Be("unknownGrainTwo");
        }
예제 #2
0
        public async Task FactoryProbeWithMultipleNewProbes_Moq()
        {
            // useful for when a grain needs to create other grains whose identities are not known beforehand
            // and probes for the new grains need to return certain values

            var firstUnknownGrain  = new Mock <IUnknownGrain>();
            var secondUnknownGrain = new Mock <IUnknownGrain>();
            var probeQueue         = new Queue <Mock <IUnknownGrain> >(new [] { firstUnknownGrain, secondUnknownGrain });

            Silo.AddProbe <IUnknownGrain>(identity =>
            {
                var nextProbe = probeQueue.Dequeue();

                nextProbe.Setup(probe => probe.WhatsMyId())
                .ReturnsAsync(identity.PrimaryKeyString);

                return(nextProbe);
            });

            var grain = await Silo.CreateGrainAsync <UnknownGrainResolver>("1");

            await grain.CreateAndPingMultiple();

            var resolvedIds = await grain.GetResolvedUnknownGrainIdsAsync();

            resolvedIds[0].Should().Be("unknownGrainOne");
            resolvedIds[1].Should().Be("unknownGrainTwo");
        }
예제 #3
0
        public async Task StringKeyProbe()
        {
            var probe = Silo.AddProbe <IStringKeyGrain>("ABC");

            var key = await probe.Object.GetKey();

            probe.Should().NotBeNull();
            key.Should().BeNull();
        }
예제 #4
0
        public async Task GuidKeyProbe()
        {
            var probe = Silo.AddProbe <IGuidKeyGrain>(Guid.NewGuid());

            var key = await probe.Object.GetKey();

            probe.Should().NotBeNull();
            key.Should().Be(Guid.Empty);
        }
예제 #5
0
        public async Task IntKeyProbe()
        {
            var probe = Silo.AddProbe <IIntegerKeyGrain>(2);

            var key = await probe.Object.GetKey();

            probe.Should().NotBeNull();
            key.Should().Be(0);
        }
예제 #6
0
        public async Task IntCompoundKeyProbe()
        {
            var probe = Silo.AddProbe <IIntegerCompoundKeyGrain>(2, keyExtension: "Test");

            var key = await probe.Object.GetKey();

            probe.Should().NotBeNull();
            key.Item1.Should().Be(0);
            key.Item2.Should().BeNull();
        }
예제 #7
0
        public async Task GuidCompoundKeyProbe()
        {
            var probe = Silo.AddProbe <IGuidCompoundKeyGrain>(Guid.NewGuid(), keyExtension: "Test");

            var key = await probe.Object.GetKey();

            probe.Should().NotBeNull();
            key.Item1.Should().Be(Guid.Empty);
            key.Item2.Should().BeNull();
        }
예제 #8
0
        public async Task SetupProbe()
        {
            IPing grain = await Silo.CreateGrainAsync <PingGrain>(1);

            var pong = Silo.AddProbe <IPong>(22);

            await grain.Ping();

            pong.Verify(p => p.Pong(), Times.Once);
        }
예제 #9
0
        public async Task SetupCompoundProbe()
        {
            IPing grain = await Silo.CreateGrainAsync <PingGrain>(1);

            var pong = Silo.AddProbe <IPongCompound>(44, keyExtension: "Test");

            await grain.PingCompound();

            pong.Verify(p => p.Pong(), Times.Once);
        }
예제 #10
0
        public async Task InvalidProbeType()
        {
            IPing grain = await Silo.CreateGrainAsync <PingGrain>(1);

            //This correct id, but a different grain type
            var pong = Silo.AddProbe <IPong2>(22);

            grain.Invoking(p => p.Ping()).Should().NotThrow();

            pong.Verify(p => p.Pong2(), Times.Never);
        }
예제 #11
0
        public async Task InvalidProbe()
        {
            IPing grain = await Silo.CreateGrainAsync <PingGrain>(1);

            //This uses the wrong id for the IPong since this is hard coded within PingGrain
            var pong = Silo.AddProbe <IPong>(0);

            grain.Invoking(p => p.Ping()).Should().NotThrow();

            pong.Verify(p => p.Pong(), Times.Never);
        }
        private TestKitSilo BuildSut(Guid gameId)
        {
            var mockStreamProvider = new Mock <IPlayerSeatStreamProvider> ();

            mockStreamProvider.SetupGet(x => x.Name).Returns("Default");
            Silo.AddServiceProbe(mockStreamProvider);
            var game = Silo.AddProbe <IGame> (gameId);

            game.Setup(x => x.GetBoardState()).Returns(new Common.BoardState("fen", "orig", "new", "eTag").ToTask());
            return(Silo);
        }
        public void InvalidProbe()
        {
            IPing grain = Silo.CreateGrain <PingGrain>(1);

            //This uses the wrong id for the IPong since this is hard coded within PingGrain
            var pong = Silo.AddProbe <IPong>(0);

            grain.Invoking(p => p.Ping()).ShouldThrowExactly <Exception>();

            pong.Verify(p => p.Pong(), Times.Never);
        }
예제 #14
0
        public async Task InvalidProbeType()
        {
            IPing grain = await Silo.CreateGrainAsync <PingGrain>(1);

            //This uses the correct id, but the wrong grain type
            var pong = Silo.AddProbe <IPong2>(22);

            await grain.Invoking(p => p.Ping()).Should().ThrowExactlyAsync <Exception>();

            pong.Verify(p => p.Pong2(), Times.Never);
        }
        public void InvalidProbeType()
        {
            IPing grain = Silo.CreateGrain <PingGrain>(1);

            //This uses the correct id, but the wrong grain type
            var pong = Silo.AddProbe <IPong2>(22);

            grain.Invoking(p => p.Ping()).ShouldThrowExactly <Exception>();

            pong.Verify(p => p.Pong2(), Times.Never);
        }
예제 #16
0
        public async Task FactoryProbe()
        {
            var pong = new Mock <IPong>();

            Silo.AddProbe <IPong>(identity => pong);

            var grain = await Silo.CreateGrainAsync <PingGrain>(1);

            await grain.Ping();

            pong.Verify(p => p.Pong(), Times.Once);
        }
        public async Task ProbeWithClassPrefix()
        {
            Silo.AddProbe <IDevice>("Android", "TestGrains.DeviceAndroidGrain");
            Silo.AddProbe <IDevice>("IOS", "TestGrains.DeviceIosGrain");

            var managerGrain = this.Silo.CreateGrain <DeviceManagerGrain>(0);
            var iosGrain     = await managerGrain.GetDeviceGrain("IOS");

            var androidGrain = await managerGrain.GetDeviceGrain("Android");


            (await iosGrain.GetDeviceType()).Should().Equals("IOS");
            (await iosGrain.GetDeviceType()).Should().Equals("Android");
        }
        private TestKitSilo BuildSut(Guid gameId)
        {
            var mockStreamProvider = new Mock <IPlayerMoveStreamProvider> ();

            mockStreamProvider.SetupGet(x => x.Name).Returns("Default");
            Silo.AddServiceProbe(mockStreamProvider);
            var game       = Silo.AddProbe <IGame> (gameId);
            var boardState = new Common.BoardState(fen, orig, @new, eTag);

            game.Setup(x => x.GetBoardState()).ReturnsAsync(boardState);
            game.Setup(x => x.ApplyValidatedMove(It.IsAny <IPlayerMove> ())).ReturnsAsync(boardState);
            game.Setup(x => x.IsValidMove(It.IsAny <IPlayerMove> ())).ReturnsAsync(true);
            return(Silo);
        }
예제 #19
0
        public async Task ProbeWithClassPrefix()
        {
            var androidMock = Silo.AddProbe <IDevice>("Android", "TestGrains.DeviceAndroidGrain");
            var iosMock     = Silo.AddProbe <IDevice>("IOS", "TestGrains.DeviceIosGrain");

            var managerGrain = await this.Silo.CreateGrainAsync <DeviceManagerGrain>(0);

            var androidGrain = await managerGrain.GetDeviceGrain("Android");

            var iosGrain = await managerGrain.GetDeviceGrain("IOS");

            androidGrain.Should().BeSameAs(androidMock.Object);
            iosGrain.Should().BeSameAs(iosMock.Object);
        }
예제 #20
0
        private (TestKitSilo sut, Mock <IGame> game, IBoard board) BuildSut(Guid gameId)
        {
            var mockStreamProvider = new Mock <IPlayerMoveStreamProvider> ();

            mockStreamProvider.SetupGet(x => x.Name).Returns("Default");
            Silo.AddServiceProbe(mockStreamProvider);

            var game = Silo.AddProbe <IGame> (gameId);

            game.Setup(x => x.IsValidMove(It.IsAny <IPlayerMove>())).Returns(Task.FromResult(true));
            var board = Silo.CreateGrain <Board> (id: gameId);

            return(Silo, game, board);
        }
예제 #21
0
        public async Task ProbeWithClassPrefix2()
        {
            var androidMock = Silo.AddProbe <IDevice>("Android", "TestGrains.DeviceAndroidGrain");

            androidMock.Setup(o => o.GetDeviceType()).ReturnsAsync("Linux");
            var iosMock = Silo.AddProbe <IDevice>("IOS", "TestGrains.DeviceIosGrain");

            iosMock.Setup(o => o.GetDeviceType()).ReturnsAsync("BSD");

            var managerGrain = await this.Silo.CreateGrainAsync <DeviceManagerGrain>(0);

            var androidType = await managerGrain.GetDeviceType("Android");

            var iosType = await managerGrain.GetDeviceType("IOS");

            androidType.Should().Be("Linux");
            iosType.Should().Be("BSD");
        }