feat: add jetstream config validation models
This commit is contained in:
18
src/NATS.Server/JetStream/Models/ConsumerConfig.cs
Normal file
18
src/NATS.Server/JetStream/Models/ConsumerConfig.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
namespace NATS.Server.JetStream.Models;
|
||||||
|
|
||||||
|
public sealed class ConsumerConfig
|
||||||
|
{
|
||||||
|
public string DurableName { get; set; } = string.Empty;
|
||||||
|
public string? FilterSubject { get; set; }
|
||||||
|
public AckPolicy AckPolicy { get; set; } = AckPolicy.None;
|
||||||
|
public int AckWaitMs { get; set; } = 30_000;
|
||||||
|
public int MaxDeliver { get; set; } = 1;
|
||||||
|
public bool Push { get; set; }
|
||||||
|
public int HeartbeatMs { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum AckPolicy
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
Explicit,
|
||||||
|
}
|
||||||
9
src/NATS.Server/JetStream/Models/StreamConfig.cs
Normal file
9
src/NATS.Server/JetStream/Models/StreamConfig.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
namespace NATS.Server.JetStream.Models;
|
||||||
|
|
||||||
|
public sealed class StreamConfig
|
||||||
|
{
|
||||||
|
public string Name { get; set; } = string.Empty;
|
||||||
|
public List<string> Subjects { get; set; } = [];
|
||||||
|
public int MaxMsgs { get; set; }
|
||||||
|
public int Replicas { get; set; } = 1;
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
using NATS.Server.JetStream.Models;
|
||||||
|
|
||||||
|
namespace NATS.Server.JetStream.Validation;
|
||||||
|
|
||||||
|
public static class JetStreamConfigValidator
|
||||||
|
{
|
||||||
|
public static ValidationResult Validate(StreamConfig config)
|
||||||
|
=> string.IsNullOrWhiteSpace(config.Name) || config.Subjects.Count == 0
|
||||||
|
? ValidationResult.Invalid("name/subjects required")
|
||||||
|
: ValidationResult.Valid();
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class ValidationResult
|
||||||
|
{
|
||||||
|
public bool IsValid { get; }
|
||||||
|
public string Message { get; }
|
||||||
|
|
||||||
|
private ValidationResult(bool isValid, string message)
|
||||||
|
{
|
||||||
|
IsValid = isValid;
|
||||||
|
Message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ValidationResult Valid() => new(true, string.Empty);
|
||||||
|
public static ValidationResult Invalid(string message) => new(false, message);
|
||||||
|
}
|
||||||
15
tests/NATS.Server.Tests/JetStreamConfigValidationTests.cs
Normal file
15
tests/NATS.Server.Tests/JetStreamConfigValidationTests.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
using NATS.Server.JetStream.Models;
|
||||||
|
using NATS.Server.JetStream.Validation;
|
||||||
|
|
||||||
|
namespace NATS.Server.Tests;
|
||||||
|
|
||||||
|
public class JetStreamConfigValidationTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Stream_requires_name_and_subjects()
|
||||||
|
{
|
||||||
|
var config = new StreamConfig { Name = "", Subjects = [] };
|
||||||
|
var result = JetStreamConfigValidator.Validate(config);
|
||||||
|
result.IsValid.ShouldBeFalse();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user