save checkpoint

This commit is contained in:
master
2026-02-12 21:02:43 +02:00
parent 5bca406787
commit 9911b7d73c
593 changed files with 174390 additions and 1376 deletions

View File

@@ -0,0 +1,128 @@
using Microsoft.AspNetCore.Http;
using StellaOps.Gateway.WebService.Routing;
using StellaOps.Router.Gateway.Configuration;
namespace StellaOps.Gateway.WebService.Tests.Routing;
public sealed class StellaOpsRouteResolverTests
{
private static StellaOpsRoute MakeRoute(
string path,
StellaOpsRouteType type = StellaOpsRouteType.Microservice,
bool isRegex = false,
string? translatesTo = null)
{
return new StellaOpsRoute
{
Path = path,
Type = type,
IsRegex = isRegex,
TranslatesTo = translatesTo ?? "http://backend:5000"
};
}
[Fact]
public void Resolve_ExactPathMatch_ReturnsRoute()
{
var route = MakeRoute("/dashboard");
var resolver = new StellaOpsRouteResolver(new[] { route });
var result = resolver.Resolve(new PathString("/dashboard"));
Assert.NotNull(result);
Assert.Equal("/dashboard", result.Path);
}
[Fact]
public void Resolve_PrefixMatch_ReturnsRoute()
{
var route = MakeRoute("/app");
var resolver = new StellaOpsRouteResolver(new[] { route });
var result = resolver.Resolve(new PathString("/app/index.html"));
Assert.NotNull(result);
Assert.Equal("/app", result.Path);
}
[Fact]
public void Resolve_RegexRoute_Matches()
{
var route = MakeRoute(@"^/api/v[0-9]+/.*", isRegex: true);
var resolver = new StellaOpsRouteResolver(new[] { route });
var result = resolver.Resolve(new PathString("/api/v2/data"));
Assert.NotNull(result);
Assert.True(result.IsRegex);
Assert.Equal(@"^/api/v[0-9]+/.*", result.Path);
}
[Fact]
public void Resolve_NoMatch_ReturnsNull()
{
var route = MakeRoute("/dashboard");
var resolver = new StellaOpsRouteResolver(new[] { route });
var result = resolver.Resolve(new PathString("/unknown"));
Assert.Null(result);
}
[Fact]
public void Resolve_FirstMatchWins()
{
var firstRoute = MakeRoute("/api", translatesTo: "http://first:5000");
var secondRoute = MakeRoute("/api", translatesTo: "http://second:5000");
var resolver = new StellaOpsRouteResolver(new[] { firstRoute, secondRoute });
var result = resolver.Resolve(new PathString("/api/resource"));
Assert.NotNull(result);
Assert.Equal("http://first:5000", result.TranslatesTo);
}
[Fact]
public void Resolve_NotFoundPageRoute_IsExcluded()
{
var notFoundRoute = MakeRoute("/not-found", type: StellaOpsRouteType.NotFoundPage);
var resolver = new StellaOpsRouteResolver(new[] { notFoundRoute });
var result = resolver.Resolve(new PathString("/not-found"));
Assert.Null(result);
}
[Fact]
public void Resolve_ServerErrorPageRoute_IsExcluded()
{
var errorRoute = MakeRoute("/error", type: StellaOpsRouteType.ServerErrorPage);
var resolver = new StellaOpsRouteResolver(new[] { errorRoute });
var result = resolver.Resolve(new PathString("/error"));
Assert.Null(result);
}
[Fact]
public void Resolve_CaseInsensitive_Matches()
{
var route = MakeRoute("/app");
var resolver = new StellaOpsRouteResolver(new[] { route });
var result = resolver.Resolve(new PathString("/APP"));
Assert.NotNull(result);
Assert.Equal("/app", result.Path);
}
[Fact]
public void Resolve_EmptyRoutes_ReturnsNull()
{
var resolver = new StellaOpsRouteResolver(Array.Empty<StellaOpsRoute>());
var result = resolver.Resolve(new PathString("/anything"));
Assert.Null(result);
}
}