Esempio n. 1
0
        /// <summary>
        /// On my test code I want to pass the mock statemanager all the time.
        /// </summary>
        /// <param name="actorStateManager">Mock StateManager.</param>
        /// <returns>TestActor.</returns>
        private TestActor CreateTestDemoActor(IActorStateManager actorStateManager)
        {
            var host      = ActorHost.CreateForTest <TestActor>();
            var testActor = new TestActor(host, actorStateManager);

            return(testActor);
        }
Esempio n. 2
0
        public async Task CanTestStartingAndStoppinReminder()
        {
            var reminders = new List <ActorReminder>();

            var timerManager = new Mock <ActorTimerManager>(MockBehavior.Strict);

            timerManager
            .Setup(tm => tm.RegisterReminderAsync(It.IsAny <ActorReminder>()))
            .Callback <ActorReminder>(reminder => reminders.Add(reminder))
            .Returns(Task.CompletedTask);
            timerManager
            .Setup(tm => tm.UnregisterReminderAsync(It.IsAny <ActorReminderToken>()))
            .Callback <ActorReminderToken>(reminder => reminders.RemoveAll(t => t.Name == reminder.Name))
            .Returns(Task.CompletedTask);

            var host = ActorHost.CreateForTest <CoolTestActor>(new ActorTestOptions()
            {
                TimerManager = timerManager.Object,
            });
            var actor = new CoolTestActor(host);

            // Start the reminder
            var message = new Message()
            {
                Text = "Remind me to tape the hockey game tonite.",
            };
            await actor.StartReminderAsync(message);

            var reminder = Assert.Single(reminders);

            Assert.Equal("record", reminder.Name);
            Assert.Equal(TimeSpan.FromSeconds(5), reminder.Period);
            Assert.Equal(TimeSpan.Zero, reminder.DueTime);

            var state = JsonSerializer.Deserialize <Message>(reminder.State);

            Assert.Equal(message.Text, state.Text);

            // Simulate invoking the reminder interface
            for (var i = 0; i < 10; i++)
            {
                await actor.ReceiveReminderAsync(reminder.Name, reminder.State, reminder.DueTime, reminder.Period);
            }

            // Stop the reminder
            await actor.StopReminderAsync();

            Assert.Empty(reminders);
        }
Esempio n. 3
0
        public async Task ActorCodeBuilder_BuildDispatcher()
        {
            var host = ActorHost.CreateForTest <TestActor>();

            var dispatcher = ActorCodeBuilder.GetOrCreateMethodDispatcher(typeof(ITestActor));
            var methodId   = MethodDescription.Create("test", typeof(ITestActor).GetMethod("GetCountAsync"), true).Id;

            var impl     = new TestActor(host);
            var request  = new ActorRequestMessageBody(0);
            var response = new WrappedRequestMessageFactory();

            var body = (WrappedMessage)await dispatcher.DispatchAsync(impl, methodId, request, response, default);

            dynamic bodyValue = body.Value;

            Assert.Equal(5, (int)bodyValue.retVal);
        }
Esempio n. 4
0
        public void TestRegisterActor_SavesActivator()
        {
            var actorType            = typeof(TestActor);
            var actorTypeInformation = ActorTypeInformation.Get(actorType);
            var host  = ActorHost.CreateForTest <TestActor>();
            var actor = new TestActor(host);

            var activator = Mock.Of <ActorActivator>();

            var actorRuntimeOptions = new ActorRuntimeOptions();

            actorRuntimeOptions.Actors.RegisterActor <TestActor>(registration =>
            {
                registration.Activator = activator;
            });

            Assert.Collection(
                actorRuntimeOptions.Actors,
                registration =>
            {
                Assert.Same(actorTypeInformation.ImplementationType, registration.Type.ImplementationType);
                Assert.Same(activator, registration.Activator);
            });
        }