Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion tests/Proto.Actor.Tests/ActorMetricsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ public void CounterProducesMeasurement()
{
var measurements = new List<long>();
using var listener = new MeterListener();
const string spawnCounterName = "protoactor_actor_spawn_count";
listener.InstrumentPublished = (instrument, l) =>
{
if (instrument.Name == ActorMetrics.ActorSpawnCount.Name)
if (instrument.Name == spawnCounterName)
{
l.EnableMeasurementEvents(instrument);
}
Expand Down
2 changes: 1 addition & 1 deletion tests/Proto.Actor.Tests/SupervisionTests_AllForOne.cs
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ public async Task AllForOneStrategy_Should_EscalateFailureToParent()
context.Send(parent, "hello");

Assert.True(parentMailboxStats.Reset.Wait(TimeSpan.FromSeconds(5)));
var failure = parentMailboxStats.Received.OfType<Failure>().Single();
var failure = parentMailboxStats.Received.ToArray().OfType<Failure>().Single();
Assert.IsType<Exception>(failure.Reason);
}

Expand Down
36 changes: 20 additions & 16 deletions tests/Proto.Actor.Tests/SupervisionTests_OneForOne.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Proto.Mailbox;
using Proto.TestFixtures;
Expand Down Expand Up @@ -91,10 +92,10 @@ public async Task
await using var system = new ActorSystem();
var context = system.Root;

var childMailboxStats = new TestMailboxStatistics(msg => msg is Stopped);
var childMailboxStats = new TestMailboxStatistics(msg => msg is Stop);

var strategy = new OneForOneStrategy((pid, reason) => SupervisorDirective.Restart, 3,
TimeSpan.FromMilliseconds(100)
TimeSpan.FromSeconds(1)
);

var childProps = Props.FromProducer(() => new ChildActor())
Expand All @@ -110,15 +111,15 @@ public async Task
context.Send(parent, "3rd restart");

// wait more than the time period
await Task.Delay(500);
Assert.DoesNotContain(Stop.Instance, childMailboxStats.Posted);
Assert.DoesNotContain(Stop.Instance, childMailboxStats.Received);
await Task.Delay(1100);
Assert.DoesNotContain(Stop.Instance, childMailboxStats.Posted.ToArray());
Assert.DoesNotContain(Stop.Instance, childMailboxStats.Received.ToArray());

context.Send(parent, "4th restart");

childMailboxStats.Reset.Wait(500);
Assert.DoesNotContain(Stop.Instance, childMailboxStats.Posted);
Assert.DoesNotContain(Stop.Instance, childMailboxStats.Received);
childMailboxStats.Reset.Wait(1000);
Assert.DoesNotContain(Stop.Instance, childMailboxStats.Posted.ToArray());
Assert.DoesNotContain(Stop.Instance, childMailboxStats.Received.ToArray());
}

[Fact]
Expand All @@ -128,7 +129,7 @@ public async Task
await using var system = new ActorSystem();
var context = system.Root;

var childMailboxStats = new TestMailboxStatistics(msg => msg is Stopped);
var childMailboxStats = new TestMailboxStatistics(msg => msg is Restart r && r.Reason == Exception);

var strategy = new OneForOneStrategy((pid, reason) => SupervisorDirective.Restart, 3,
TimeSpan.FromMilliseconds(100)
Expand All @@ -147,9 +148,10 @@ public async Task
context.Send(parent, "3rd restart");
context.Send(parent, "4th restart");

childMailboxStats.Reset.Wait(2000);
Assert.Contains(Stop.Instance, childMailboxStats.Posted);
Assert.Contains(Stop.Instance, childMailboxStats.Received);
Assert.True(SpinWait.SpinUntil(
() => childMailboxStats.Posted.ToArray().Contains(Stop.Instance) &&
childMailboxStats.Received.ToArray().Contains(Stop.Instance),
TimeSpan.FromSeconds(5)));
}

[Fact]
Expand All @@ -158,7 +160,7 @@ public async Task OneForOneStrategy_Should_PassExceptionOnRestart()
await using var system = new ActorSystem();
var context = system.Root;

var childMailboxStats = new TestMailboxStatistics(msg => msg is Stopped);
var childMailboxStats = new TestMailboxStatistics(msg => msg is Restart r && r.Reason == Exception);
var strategy = new OneForOneStrategy((pid, reason) => SupervisorDirective.Restart, 1, null);

var childProps = Props.FromProducer(() => new ChildActor())
Expand All @@ -171,9 +173,11 @@ public async Task OneForOneStrategy_Should_PassExceptionOnRestart()

context.Send(parent, "hello");

childMailboxStats.Reset.Wait(1000);
Assert.Contains(childMailboxStats.Posted, msg => msg is Restart r && r.Reason == Exception);
Assert.Contains(childMailboxStats.Received, msg => msg is Restart r && r.Reason == Exception);
Assert.True(SpinWait.SpinUntil(
() => childMailboxStats.Received.ToArray().Any(msg => msg is Restart r && r.Reason == Exception),
TimeSpan.FromSeconds(5)));
Assert.Contains(childMailboxStats.Posted.ToArray(), msg => msg is Restart r && r.Reason == Exception);
Assert.Contains(childMailboxStats.Received.ToArray(), msg => msg is Restart r && r.Reason == Exception);
}

[Fact]
Expand Down
Loading