feat(deploy): provision Unscouted smoke tenant (#22)

This commit is contained in:
KyuubiYoru
2026-07-16 21:49:17 +02:00
parent 9e863ebf64
commit f368fec6eb
4 changed files with 92 additions and 7 deletions
@@ -238,6 +238,10 @@ public sealed class ProductionProcessTests
"--Rendezvous:Provisioning:SigningKeys:0:NotBefore", now.AddHours(-1).ToString("O"),
"--Rendezvous:Provisioning:SigningKeys:0:SignUntil", now.AddHours(1).ToString("O"),
"--Rendezvous:Provisioning:SigningKeys:0:VerifyUntil", now.AddHours(2).ToString("O"),
"--Rendezvous:Provisioning:SigningKeys:1:SecretReference", $"file:{secretPath}",
"--Rendezvous:Provisioning:SigningKeys:1:NotBefore", now.AddHours(-1).ToString("O"),
"--Rendezvous:Provisioning:SigningKeys:1:SignUntil", now.AddHours(1).ToString("O"),
"--Rendezvous:Provisioning:SigningKeys:1:VerifyUntil", now.AddHours(2).ToString("O"),
"--Rendezvous:Udp:Port", udpPort.ToString(System.Globalization.CultureInfo.InvariantCulture),
"--Rendezvous:Deployment:PublicUdpPort", udpPort.ToString(System.Globalization.CultureInfo.InvariantCulture),
},
@@ -40,14 +40,19 @@ public sealed partial class DocumentationContractTests
}
[Fact]
public void LocalCredentialHelperIsFixedScopeAndSmokeDelegatesToIt()
public void LocalCredentialHelperWhitelistsProvisionedGameScopesAndSmokeDelegatesToIt()
{
string root = FindRepositoryRoot();
string helper = File.ReadAllText(Path.Combine(root, "scripts", "mint-local-publisher-credential.sh"));
string smoke = File.ReadAllText(Path.Combine(root, "scripts", "smoke-deployment.sh"));
Assert.Contains("if (( $# != 0 ));", helper, StringComparison.Ordinal);
Assert.Contains("\"gameId\": \"space-game\"", helper, StringComparison.Ordinal);
Assert.Contains("space-game)", helper, StringComparison.Ordinal);
Assert.Contains("unscouted)", helper, StringComparison.Ordinal);
Assert.Contains("KEY_ID=\"local-smoke-1\"", helper, StringComparison.Ordinal);
Assert.Contains("KEY_ID=\"local-smoke-unscouted-1\"", helper, StringComparison.Ordinal);
Assert.Contains("RENDEZVOUS_LOCAL_CREDENTIAL_GAME_ID must be space-game or unscouted", helper, StringComparison.Ordinal);
Assert.Contains("\"gameId\": game_id", helper, StringComparison.Ordinal);
Assert.Contains("\"environmentId\": \"smoke\"", helper, StringComparison.Ordinal);
Assert.Contains("\"regions\": [\"local\"]", helper, StringComparison.Ordinal);
Assert.Contains("now + 600", helper, StringComparison.Ordinal);
@@ -60,6 +65,32 @@ public sealed partial class DocumentationContractTests
Assert.DoesNotContain("openssl dgst", smoke, StringComparison.Ordinal);
}
[Fact]
public void UnscoutedComposeTenantIsGameScopedAndMetadataBounded()
{
string root = FindRepositoryRoot();
using JsonDocument settings = JsonDocument.Parse(File.ReadAllText(
Path.Combine(root, "deploy", "compose", "appsettings.Production.json")));
JsonElement provisioning = settings.RootElement.GetProperty("Rendezvous").GetProperty("Provisioning");
JsonElement game = provisioning.GetProperty("Games").EnumerateArray().Single(
static item => item.GetProperty("GameId").GetString() == "unscouted");
JsonElement key = provisioning.GetProperty("SigningKeys").EnumerateArray().Single(
static item => item.GetProperty("KeyId").GetString() == "local-smoke-unscouted-1");
Assert.Equal("smoke", game.GetProperty("EnvironmentId").GetString());
Assert.Equal([1], game.GetProperty("ProtocolVersions").EnumerateArray().Select(static value => value.GetInt32()));
Assert.Equal(["mode", "mods", "world"], game.GetProperty("MetadataValueMaxBytes")
.EnumerateObject().Select(static property => property.Name).Order(StringComparer.Ordinal));
Assert.Equal(["mode", "mods", "world"], game.GetProperty("RequiredMetadataKeys")
.EnumerateArray().Select(static value => value.GetString()).Order(StringComparer.Ordinal));
Assert.Equal(3, game.GetProperty("MetadataMaxKeys").GetInt32());
Assert.Equal("DedicatedEndpointAllowed", game.GetProperty("FallbackPolicy").GetString());
Assert.Equal("unscouted", key.GetProperty("GameId").GetString());
Assert.Equal("smoke", key.GetProperty("EnvironmentId").GetString());
Assert.Equal(["DedicatedPublisher"], key.GetProperty("CredentialKinds")
.EnumerateArray().Select(static value => value.GetString()));
}
[Fact]
public void EveryIncidentRunbookHasDetectContainRecoverAndVerifyGates()
{