feat: add jetstream consumer api lifecycle
This commit is contained in:
@@ -9,16 +9,19 @@ namespace NATS.Server.Tests;
|
||||
internal sealed class JetStreamApiFixture : IAsyncDisposable
|
||||
{
|
||||
private static readonly StreamManager SharedStreamManager = new();
|
||||
private static readonly JetStreamApiRouter SharedRouter = new(SharedStreamManager);
|
||||
private static readonly ConsumerManager SharedConsumerManager = new();
|
||||
private static readonly JetStreamApiRouter SharedRouter = new(SharedStreamManager, SharedConsumerManager);
|
||||
|
||||
private readonly StreamManager _streamManager;
|
||||
private readonly ConsumerManager _consumerManager;
|
||||
private readonly JetStreamApiRouter _router;
|
||||
private readonly JetStreamPublisher _publisher;
|
||||
|
||||
private JetStreamApiFixture()
|
||||
{
|
||||
_streamManager = new StreamManager();
|
||||
_router = new JetStreamApiRouter(_streamManager);
|
||||
_consumerManager = new ConsumerManager();
|
||||
_router = new JetStreamApiRouter(_streamManager, _consumerManager);
|
||||
_publisher = new JetStreamPublisher(_streamManager);
|
||||
}
|
||||
|
||||
@@ -56,5 +59,17 @@ internal sealed class JetStreamApiFixture : IAsyncDisposable
|
||||
return _streamManager.GetStateAsync(streamName, default).AsTask();
|
||||
}
|
||||
|
||||
public Task<JetStreamApiResponse> CreateConsumerAsync(string stream, string durableName, string filterSubject)
|
||||
{
|
||||
var payload = $@"{{""durable_name"":""{durableName}"",""filter_subject"":""{filterSubject}""}}";
|
||||
return RequestLocalAsync($"$JS.API.CONSUMER.CREATE.{stream}.{durableName}", payload);
|
||||
}
|
||||
|
||||
public async Task<JetStreamConsumerInfo> GetConsumerInfoAsync(string stream, string durableName)
|
||||
{
|
||||
var response = await RequestLocalAsync($"$JS.API.CONSUMER.INFO.{stream}.{durableName}", "{}");
|
||||
return response.ConsumerInfo ?? throw new InvalidOperationException("Consumer not found.");
|
||||
}
|
||||
|
||||
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
|
||||
}
|
||||
|
||||
16
tests/NATS.Server.Tests/JetStreamConsumerApiTests.cs
Normal file
16
tests/NATS.Server.Tests/JetStreamConsumerApiTests.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace NATS.Server.Tests;
|
||||
|
||||
public class JetStreamConsumerApiTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task Create_consumer_and_fetch_info_roundtrip()
|
||||
{
|
||||
await using var fixture = await JetStreamApiFixture.StartWithStreamAsync("ORDERS", "orders.*");
|
||||
|
||||
var create = await fixture.CreateConsumerAsync("ORDERS", "DUR", "orders.created");
|
||||
create.Error.ShouldBeNull();
|
||||
|
||||
var info = await fixture.GetConsumerInfoAsync("ORDERS", "DUR");
|
||||
info.Config.DurableName.ShouldBe("DUR");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user