Move 39 monitoring, events, and system endpoint test files from NATS.Server.Tests into a dedicated NATS.Server.Monitoring.Tests project. Update namespaces, replace private GetFreePort/ReadUntilAsync with TestUtilities shared helpers, add InternalsVisibleTo, and register in the solution file. All 439 tests pass.
153 lines
5.3 KiB
C#
153 lines
5.3 KiB
C#
using System.Text.Json;
|
|
using NATS.Server.Events;
|
|
|
|
namespace NATS.Server.Monitoring.Tests.Events;
|
|
|
|
public class EventApiAndSubjectsParityBatch2Tests
|
|
{
|
|
[Fact]
|
|
public void EventSubjects_DefineMissingServerRequestSubjects()
|
|
{
|
|
EventSubjects.RemoteLatency.ShouldBe("$SYS.SERVER.{0}.ACC.{1}.LATENCY.M2");
|
|
EventSubjects.UserDirectInfo.ShouldBe("$SYS.REQ.USER.INFO");
|
|
EventSubjects.UserDirectReq.ShouldBe("$SYS.REQ.USER.{0}.INFO");
|
|
EventSubjects.AccountNumSubsReq.ShouldBe("$SYS.REQ.ACCOUNT.NSUBS");
|
|
EventSubjects.AccountSubs.ShouldBe("$SYS._INBOX_.{0}.NSUBS");
|
|
EventSubjects.ClientKickReq.ShouldBe("$SYS.REQ.SERVER.{0}.KICK");
|
|
EventSubjects.ClientLdmReq.ShouldBe("$SYS.REQ.SERVER.{0}.LDM");
|
|
EventSubjects.ServerStatsPingReq.ShouldBe("$SYS.REQ.SERVER.PING.STATSZ");
|
|
EventSubjects.ServerReloadReq.ShouldBe("$SYS.REQ.SERVER.{0}.RELOAD");
|
|
}
|
|
|
|
[Fact]
|
|
public void OcspSubjects_MatchGoPatterns()
|
|
{
|
|
EventSubjects.OcspPeerReject.ShouldBe("$SYS.SERVER.{0}.OCSP.PEER.CONN.REJECT");
|
|
EventSubjects.OcspPeerChainlinkInvalid.ShouldBe("$SYS.SERVER.{0}.OCSP.PEER.LINK.INVALID");
|
|
}
|
|
|
|
[Fact]
|
|
public void OcspPeerRejectEvent_IncludesPeerCertInfo()
|
|
{
|
|
var evt = new OcspPeerRejectEventMsg
|
|
{
|
|
Id = "id",
|
|
Kind = "client",
|
|
Reason = "revoked",
|
|
Peer = new EventCertInfo
|
|
{
|
|
Subject = "CN=client",
|
|
Issuer = "CN=issuer",
|
|
Fingerprint = "fingerprint",
|
|
Raw = "raw",
|
|
},
|
|
};
|
|
|
|
var json = JsonSerializer.Serialize(evt);
|
|
json.ShouldContain("\"peer\":");
|
|
json.ShouldContain("\"subject\":\"CN=client\"");
|
|
}
|
|
|
|
[Fact]
|
|
public void OcspPeerChainlinkInvalidEvent_SerializesExpectedShape()
|
|
{
|
|
var evt = new OcspPeerChainlinkInvalidEventMsg
|
|
{
|
|
Id = "id",
|
|
Link = new EventCertInfo { Subject = "CN=link" },
|
|
Peer = new EventCertInfo { Subject = "CN=peer" },
|
|
};
|
|
|
|
var json = JsonSerializer.Serialize(evt);
|
|
json.ShouldContain("\"type\":\"io.nats.server.advisory.v1.ocsp_peer_link_invalid\"");
|
|
json.ShouldContain("\"link\":");
|
|
json.ShouldContain("\"peer\":");
|
|
}
|
|
|
|
[Fact]
|
|
public void EventFilterOptions_HasCoreGoFields()
|
|
{
|
|
var opts = new EventFilterOptions
|
|
{
|
|
Name = "srv-a",
|
|
Cluster = "cluster-a",
|
|
Host = "127.0.0.1",
|
|
Tags = ["a", "b"],
|
|
Domain = "domain-a",
|
|
};
|
|
|
|
opts.Name.ShouldBe("srv-a");
|
|
opts.Cluster.ShouldBe("cluster-a");
|
|
opts.Host.ShouldBe("127.0.0.1");
|
|
opts.Tags.ShouldBe(["a", "b"]);
|
|
opts.Domain.ShouldBe("domain-a");
|
|
}
|
|
|
|
[Fact]
|
|
public void OptionRequestTypes_IncludeBaseFilterFields()
|
|
{
|
|
new StatszEventOptions { Name = "n" }.Name.ShouldBe("n");
|
|
new ConnzEventOptions { Cluster = "c" }.Cluster.ShouldBe("c");
|
|
new RoutezEventOptions { Host = "h" }.Host.ShouldBe("h");
|
|
new HealthzEventOptions { Domain = "d" }.Domain.ShouldBe("d");
|
|
new JszEventOptions { Tags = ["t"] }.Tags.ShouldBe(["t"]);
|
|
}
|
|
|
|
[Fact]
|
|
public void ServerApiResponses_ExposeDataAndError()
|
|
{
|
|
var response = new ServerAPIResponse
|
|
{
|
|
Server = new EventServerInfo { Id = "S1" },
|
|
Data = new { ok = true },
|
|
Error = new ServerAPIError { Code = 500, Description = "err" },
|
|
};
|
|
|
|
response.Server.Id.ShouldBe("S1");
|
|
response.Error?.Code.ShouldBe(500);
|
|
response.Error?.Description.ShouldBe("err");
|
|
}
|
|
|
|
[Fact]
|
|
public void TypedServerApiWrappers_CarryResponsePayload()
|
|
{
|
|
new ServerAPIConnzResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
new ServerAPIRoutezResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
new ServerAPIGatewayzResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
new ServerAPIJszResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
new ServerAPIHealthzResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
new ServerAPIVarzResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
new ServerAPISubszResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
new ServerAPILeafzResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
new ServerAPIAccountzResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
new ServerAPIExpvarzResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
new ServerAPIpqueueszResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
new ServerAPIRaftzResponse { Data = new object() }.Data.ShouldNotBeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void RequestPayloadTypes_KickAndLdm()
|
|
{
|
|
var kick = new KickClientReq { ClientId = 22 };
|
|
var ldm = new LDMClientReq { ClientId = 33 };
|
|
|
|
kick.ClientId.ShouldBe(22UL);
|
|
ldm.ClientId.ShouldBe(33UL);
|
|
}
|
|
|
|
[Fact]
|
|
public void UserInfo_IncludesExpectedIdentityFields()
|
|
{
|
|
var info = new UserInfo
|
|
{
|
|
User = "alice",
|
|
Account = "A",
|
|
Permissions = "pubsub",
|
|
};
|
|
|
|
info.User.ShouldBe("alice");
|
|
info.Account.ShouldBe("A");
|
|
info.Permissions.ShouldBe("pubsub");
|
|
}
|
|
}
|