feat: add tenant provisioning and key lifecycle (#5)
quality-gate / quality (push) Successful in 50s
quality-gate / quality (push) Successful in 50s
Closes #5
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
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(),
|
||||
]));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user