Move 50 auth/accounts/permissions/JWT/NKey test files from NATS.Server.Tests into a dedicated NATS.Server.Auth.Tests project. Update namespaces, replace private GetFreePort/ReadUntilAsync helpers with TestUtilities calls, replace Task.Delay with TaskCompletionSource in test doubles, and add InternalsVisibleTo. 690 tests pass.
118 lines
3.7 KiB
C#
118 lines
3.7 KiB
C#
using NATS.Server.Auth;
|
|
using NATS.Server.Imports;
|
|
using NATS.Server.Subscriptions;
|
|
|
|
namespace NATS.Server.Auth.Tests.Auth;
|
|
|
|
public class AccountResponseAndInterestParityBatch1Tests
|
|
{
|
|
[Fact]
|
|
public void ClientInfoHdr_constant_matches_go_value()
|
|
{
|
|
Account.ClientInfoHdr.ShouldBe("Nats-Request-Info");
|
|
}
|
|
|
|
[Fact]
|
|
public void Interest_and_subscription_interest_count_plain_and_queue_matches()
|
|
{
|
|
using var account = new Account("A");
|
|
account.SubList.Insert(new Subscription { Subject = "orders.*", Sid = "1" });
|
|
account.SubList.Insert(new Subscription { Subject = "orders.*", Sid = "2", Queue = "workers" });
|
|
|
|
account.Interest("orders.created").ShouldBe(2);
|
|
account.SubscriptionInterest("orders.created").ShouldBeTrue();
|
|
account.SubscriptionInterest("payments.created").ShouldBeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public void NumServiceImports_counts_distinct_from_subject_keys()
|
|
{
|
|
using var importer = new Account("importer");
|
|
using var exporter = new Account("exporter");
|
|
|
|
importer.Imports.AddServiceImport(new ServiceImport
|
|
{
|
|
DestinationAccount = exporter,
|
|
From = "svc.a",
|
|
To = "svc.remote.a",
|
|
});
|
|
importer.Imports.AddServiceImport(new ServiceImport
|
|
{
|
|
DestinationAccount = exporter,
|
|
From = "svc.a",
|
|
To = "svc.remote.b",
|
|
});
|
|
importer.Imports.AddServiceImport(new ServiceImport
|
|
{
|
|
DestinationAccount = exporter,
|
|
From = "svc.b",
|
|
To = "svc.remote.c",
|
|
});
|
|
|
|
importer.NumServiceImports().ShouldBe(2);
|
|
}
|
|
|
|
[Fact]
|
|
public void NumPendingResponses_filters_by_service_export()
|
|
{
|
|
using var account = new Account("A");
|
|
account.AddServiceExport("svc.one", ServiceResponseType.Singleton, null);
|
|
account.AddServiceExport("svc.two", ServiceResponseType.Singleton, null);
|
|
|
|
var seOne = account.Exports.Services["svc.one"];
|
|
var seTwo = account.Exports.Services["svc.two"];
|
|
|
|
account.Exports.Responses["r1"] = new ServiceImport
|
|
{
|
|
DestinationAccount = account,
|
|
From = "_R_.AAA.>",
|
|
To = "reply.one",
|
|
Export = seOne,
|
|
IsResponse = true,
|
|
};
|
|
account.Exports.Responses["r2"] = new ServiceImport
|
|
{
|
|
DestinationAccount = account,
|
|
From = "_R_.BBB.>",
|
|
To = "reply.two",
|
|
Export = seOne,
|
|
IsResponse = true,
|
|
};
|
|
account.Exports.Responses["r3"] = new ServiceImport
|
|
{
|
|
DestinationAccount = account,
|
|
From = "_R_.CCC.>",
|
|
To = "reply.three",
|
|
Export = seTwo,
|
|
IsResponse = true,
|
|
};
|
|
|
|
account.NumPendingAllResponses().ShouldBe(3);
|
|
account.NumPendingResponses("svc.one").ShouldBe(2);
|
|
account.NumPendingResponses("svc.two").ShouldBe(1);
|
|
account.NumPendingResponses("svc.unknown").ShouldBe(0);
|
|
}
|
|
|
|
[Fact]
|
|
public void RemoveRespServiceImport_removes_mapping_for_specified_reason()
|
|
{
|
|
using var account = new Account("A");
|
|
account.AddServiceExport("svc.one", ServiceResponseType.Singleton, null);
|
|
var seOne = account.Exports.Services["svc.one"];
|
|
|
|
var responseSi = new ServiceImport
|
|
{
|
|
DestinationAccount = account,
|
|
From = "_R_.ZZZ.>",
|
|
To = "reply",
|
|
Export = seOne,
|
|
IsResponse = true,
|
|
};
|
|
account.Exports.Responses["r1"] = responseSi;
|
|
|
|
account.RemoveRespServiceImport(responseSi, ResponseServiceImportRemovalReason.Timeout);
|
|
|
|
account.Exports.Responses.Count.ShouldBe(0);
|
|
}
|
|
}
|