/// <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); }
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); }
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); }
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); }); }