Files
esiur-dotnet/Tests/Features/Functional/README.md
T
2026-07-14 02:27:33 +03:00

59 lines
2.0 KiB
Markdown

# Esiur functional smoke test
This project starts an in-process Esiur server and an authenticated client,
runs its scenarios over a real loopback connection, and exits with a non-zero
status if any assertion fails.
Coverage includes:
- resource attachment and property serialization;
- procedure and resource calls, optional arguments, tuples, and events;
- named rate policies for function calls and property setters;
- rate-limit denial propagation to callers;
- pull streams backed by `IAsyncEnumerable<T>`;
- `TerminateExecution` through async-enumerator disposal;
- `HaltExecution` and `ResumeExecution` for a cooperative push stream.
- parser allocation and collection budgets, attachment quotas, and per-IP connection limits.
Run it from the repository root:
```powershell
dotnet run --project Tests\Features\Functional\Esiur.Tests.Functional.csproj
```
The runner selects an available loopback port and shuts down its client,
server, and warehouses when complete.
Rate policies are registered by name on the server Warehouse:
```csharp
warehouse.AddRatePolicy(new BurstRatePolicy("standard-call")
{
PermitLimit = 100,
Period = TimeSpan.FromSeconds(1),
BurstLimit = 20,
QueueLimit = 50,
});
warehouse.Configuration.RateControl.DenialsBeforeConnectionBlock = 5;
[RateControl("standard-call")]
public void Call()
{
}
```
Security limits are configured per Warehouse. A value of zero disables an individual limit:
```csharp
warehouse.Configuration.Parser.MaximumPacketSize = 8 * 1024 * 1024;
warehouse.Configuration.Parser.MaximumAllocationSize = 4 * 1024 * 1024;
warehouse.Configuration.Parser.MaximumCollectionItems = 65_536;
warehouse.Configuration.ResourceAttachments.MaximumAttachedResourcesPerConnection = 4_096;
warehouse.Configuration.ResourceAttachments.MaximumPendingAttachmentsPerConnection = 128;
warehouse.Configuration.ResourceAttachments.RejectDuplicateAttachments = true;
warehouse.Configuration.Connections.MaximumConnectionsPerIpAddress = 64;
```