84 lines
2.9 KiB
C#
84 lines
2.9 KiB
C#
using FinalFactory.Rendezvous.Contracts;
|
|
using FinalFactory.Rendezvous.Server.Provisioning;
|
|
|
|
namespace FinalFactory.Rendezvous.Tests.Provisioning;
|
|
|
|
public sealed class GamePolicyTests
|
|
{
|
|
[Fact]
|
|
public void RegistryFailsClosedForUnknownAndDisabledScopes()
|
|
{
|
|
GamePolicyRegistry registry = GamePolicyRegistry.Create(
|
|
[
|
|
ProvisioningTestData.CreatePolicy(),
|
|
ProvisioningTestData.CreatePolicy("unscouted", "staging", enabled: false),
|
|
]);
|
|
|
|
Assert.True(registry.TryGet(
|
|
new GameId("space-game"),
|
|
new EnvironmentId("production"),
|
|
out _));
|
|
Assert.False(registry.TryGet(
|
|
new GameId("space-game"),
|
|
new EnvironmentId("staging"),
|
|
out _));
|
|
Assert.False(registry.TryGet(
|
|
new GameId("unscouted"),
|
|
new EnvironmentId("staging"),
|
|
out _));
|
|
}
|
|
|
|
[Fact]
|
|
public void PerGamePolicyConstrainsProtocolMetadataQuotasAndFeatures()
|
|
{
|
|
GamePolicyRegistry registry = GamePolicyRegistry.Create(
|
|
[ProvisioningTestData.CreatePolicy()]);
|
|
Assert.True(registry.TryGet(
|
|
new GameId("space-game"),
|
|
new EnvironmentId("production"),
|
|
out GamePolicy? policy));
|
|
Assert.NotNull(policy);
|
|
|
|
Assert.True(policy.AllowsProtocol(7));
|
|
Assert.False(policy.AllowsProtocol(8));
|
|
Assert.True(policy.AllowsRegion(new RegionId("eu-central")));
|
|
Assert.False(policy.AllowsRegion(new RegionId("us-east")));
|
|
Assert.True(policy.AllowsVisibility(ListingVisibility.Public));
|
|
Assert.True(policy.AllowsPublisherTrust(PublisherTrustMode.PlayerGrant));
|
|
Assert.Equal(FallbackPolicyMode.DedicatedEndpointAllowed, policy.FallbackPolicy);
|
|
Assert.Equal(10, policy.MaxListingsPerPrincipal);
|
|
Assert.Equal(1, policy.MaxAnonymousListingsPerAddress);
|
|
Assert.Equal(100, policy.MaxActiveJoinAttempts);
|
|
Assert.True(policy.AllowsMetadata(new Dictionary<string, string>
|
|
{
|
|
["mode"] = "co-op",
|
|
["map"] = "europa",
|
|
}));
|
|
Assert.False(policy.AllowsMetadata(new Dictionary<string, string>
|
|
{
|
|
["map"] = "europa",
|
|
}));
|
|
Assert.False(policy.AllowsMetadata(new Dictionary<string, string>
|
|
{
|
|
["mode"] = "co-op",
|
|
["unknown"] = "value",
|
|
}));
|
|
}
|
|
|
|
[Fact]
|
|
public void InvalidOrDuplicatePolicyConfigurationFailsAtStartup()
|
|
{
|
|
GamePolicyOptions invalid = ProvisioningTestData.CreatePolicy();
|
|
invalid.ProtocolVersions = [];
|
|
Assert.Throws<ProvisioningConfigurationException>(() =>
|
|
GamePolicyRegistry.Create([invalid]));
|
|
|
|
Assert.Throws<ProvisioningConfigurationException>(() =>
|
|
GamePolicyRegistry.Create(
|
|
[
|
|
ProvisioningTestData.CreatePolicy(),
|
|
ProvisioningTestData.CreatePolicy(),
|
|
]));
|
|
}
|
|
}
|