save checkpoint
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user