55 lines
2.0 KiB
C#
55 lines
2.0 KiB
C#
using System.Collections.Immutable;
|
|
using Akka.Actor;
|
|
using Akka.Cluster.Tools.Client;
|
|
using Akka.Configuration;
|
|
using Akka.TestKit.Xunit2;
|
|
using Xunit;
|
|
using ZB.MOM.WW.ScadaBridge.Communication.Actors;
|
|
|
|
namespace ZB.MOM.WW.ScadaBridge.Communication.Tests;
|
|
|
|
public class DefaultSiteClientFactoryTests : TestKit
|
|
{
|
|
private static readonly Config TestConfig = ConfigurationFactory.ParseString(@"
|
|
akka.actor.provider = cluster
|
|
akka.remote.dot-netty.tcp.port = 0
|
|
akka.remote.dot-netty.tcp.hostname = localhost")
|
|
.WithFallback(ClusterClientReceptionist.DefaultConfig());
|
|
|
|
public DefaultSiteClientFactoryTests() : base(TestConfig) { }
|
|
|
|
private static ImmutableHashSet<ActorPath> Contacts() =>
|
|
ImmutableHashSet.Create(ActorPath.Parse("akka.tcp://other@localhost:2552/system/receptionist"));
|
|
|
|
[Fact]
|
|
public void Create_TwiceForSameSite_DoesNotCollide()
|
|
{
|
|
var factory = new DefaultSiteClientFactory();
|
|
var first = factory.Create(Sys, "site-a", Contacts());
|
|
var second = factory.Create(Sys, "site-a", Contacts()); // pre-fix: InvalidActorNameException
|
|
Assert.NotEqual(first.Path, second.Path);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("site/with/slashes")]
|
|
[InlineData("site with spaces")]
|
|
[InlineData("näme#!")]
|
|
public void Create_WithUnsafeSiteId_SanitizesAndSucceeds(string siteId)
|
|
{
|
|
var factory = new DefaultSiteClientFactory();
|
|
var client = factory.Create(Sys, siteId, Contacts()); // pre-fix: InvalidActorNameException
|
|
Assert.NotNull(client);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("plant-01", "plant-01")]
|
|
[InlineData("a/b c", "a_b_c")]
|
|
[InlineData("", "site")]
|
|
public void SanitizeForActorName_ProducesValidPathElement(string input, string expected)
|
|
{
|
|
Assert.Equal(expected, DefaultSiteClientFactory.SanitizeForActorName(input));
|
|
Assert.True(ActorPath.IsValidPathElement(
|
|
DefaultSiteClientFactory.SanitizeForActorName(input)));
|
|
}
|
|
}
|