test: add mqtt config parsing coverage
This commit is contained in:
@@ -501,4 +501,112 @@ public class ConfigProcessorTests
|
||||
var opts = ConfigProcessor.ProcessConfigFile(TestDataPath("tls.conf"));
|
||||
opts.HasTls.ShouldBeTrue();
|
||||
}
|
||||
|
||||
// ─── MQTT config ────────────────────────────────────────────
|
||||
|
||||
[Fact]
|
||||
public void MqttConf_ListenHostAndPort()
|
||||
{
|
||||
var opts = ConfigProcessor.ProcessConfigFile(TestDataPath("mqtt.conf"));
|
||||
opts.Mqtt.ShouldNotBeNull();
|
||||
opts.Mqtt!.Host.ShouldBe("10.0.0.1");
|
||||
opts.Mqtt.Port.ShouldBe(1883);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MqttConf_NoAuthUser()
|
||||
{
|
||||
var opts = ConfigProcessor.ProcessConfigFile(TestDataPath("mqtt.conf"));
|
||||
opts.Mqtt.ShouldNotBeNull();
|
||||
opts.Mqtt!.NoAuthUser.ShouldBe("mqtt_default");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MqttConf_Authorization()
|
||||
{
|
||||
var opts = ConfigProcessor.ProcessConfigFile(TestDataPath("mqtt.conf"));
|
||||
opts.Mqtt.ShouldNotBeNull();
|
||||
opts.Mqtt!.Username.ShouldBe("mqtt_user");
|
||||
opts.Mqtt.Password.ShouldBe("mqtt_pass");
|
||||
opts.Mqtt.Token.ShouldBe("mqtt_token");
|
||||
opts.Mqtt.AuthTimeout.ShouldBe(3.0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MqttConf_Tls()
|
||||
{
|
||||
var opts = ConfigProcessor.ProcessConfigFile(TestDataPath("mqtt.conf"));
|
||||
opts.Mqtt.ShouldNotBeNull();
|
||||
opts.Mqtt!.TlsCert.ShouldBe("/path/to/mqtt-cert.pem");
|
||||
opts.Mqtt.TlsKey.ShouldBe("/path/to/mqtt-key.pem");
|
||||
opts.Mqtt.TlsCaCert.ShouldBe("/path/to/mqtt-ca.pem");
|
||||
opts.Mqtt.TlsVerify.ShouldBeTrue();
|
||||
opts.Mqtt.TlsTimeout.ShouldBe(5.0);
|
||||
opts.Mqtt.HasTls.ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MqttConf_QosSettings()
|
||||
{
|
||||
var opts = ConfigProcessor.ProcessConfigFile(TestDataPath("mqtt.conf"));
|
||||
opts.Mqtt.ShouldNotBeNull();
|
||||
opts.Mqtt!.AckWait.ShouldBe(TimeSpan.FromSeconds(60));
|
||||
opts.Mqtt.MaxAckPending.ShouldBe((ushort)2048);
|
||||
opts.Mqtt.JsApiTimeout.ShouldBe(TimeSpan.FromSeconds(10));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MqttConf_JetStreamSettings()
|
||||
{
|
||||
var opts = ConfigProcessor.ProcessConfigFile(TestDataPath("mqtt.conf"));
|
||||
opts.Mqtt.ShouldNotBeNull();
|
||||
opts.Mqtt!.JsDomain.ShouldBe("mqtt-domain");
|
||||
opts.Mqtt.StreamReplicas.ShouldBe(3);
|
||||
opts.Mqtt.ConsumerReplicas.ShouldBe(1);
|
||||
opts.Mqtt.ConsumerMemoryStorage.ShouldBeTrue();
|
||||
opts.Mqtt.ConsumerInactiveThreshold.ShouldBe(TimeSpan.FromMinutes(5));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MqttConf_MaxAckPendingValidation_ReportsError()
|
||||
{
|
||||
var ex = Should.Throw<ConfigProcessorException>(() =>
|
||||
ConfigProcessor.ProcessConfig("""
|
||||
mqtt {
|
||||
max_ack_pending: 70000
|
||||
}
|
||||
"""));
|
||||
ex.Errors.ShouldContain(e => e.Contains("max_ack_pending"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MqttConf_Aliases()
|
||||
{
|
||||
// Test alias keys: "ackwait" (alias for "ack_wait"), "net" (alias for "host"),
|
||||
// "max_inflight" (alias for "max_ack_pending"), "consumer_auto_cleanup" (alias)
|
||||
var opts = ConfigProcessor.ProcessConfig("""
|
||||
mqtt {
|
||||
net: "127.0.0.1"
|
||||
port: 1884
|
||||
ackwait: "45s"
|
||||
max_inflight: 500
|
||||
api_timeout: "8s"
|
||||
consumer_auto_cleanup: "10m"
|
||||
}
|
||||
""");
|
||||
opts.Mqtt.ShouldNotBeNull();
|
||||
opts.Mqtt!.Host.ShouldBe("127.0.0.1");
|
||||
opts.Mqtt.Port.ShouldBe(1884);
|
||||
opts.Mqtt.AckWait.ShouldBe(TimeSpan.FromSeconds(45));
|
||||
opts.Mqtt.MaxAckPending.ShouldBe((ushort)500);
|
||||
opts.Mqtt.JsApiTimeout.ShouldBe(TimeSpan.FromSeconds(8));
|
||||
opts.Mqtt.ConsumerInactiveThreshold.ShouldBe(TimeSpan.FromMinutes(10));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MqttConf_Absent_ReturnsNull()
|
||||
{
|
||||
var opts = ConfigProcessor.ProcessConfig("port: 4222");
|
||||
opts.Mqtt.ShouldBeNull();
|
||||
}
|
||||
}
|
||||
|
||||
28
tests/NATS.Server.Tests/TestData/mqtt.conf
Normal file
28
tests/NATS.Server.Tests/TestData/mqtt.conf
Normal file
@@ -0,0 +1,28 @@
|
||||
mqtt {
|
||||
listen: "10.0.0.1:1883"
|
||||
no_auth_user: "mqtt_default"
|
||||
|
||||
authorization {
|
||||
user: "mqtt_user"
|
||||
pass: "mqtt_pass"
|
||||
token: "mqtt_token"
|
||||
timeout: 3.0
|
||||
}
|
||||
|
||||
tls {
|
||||
cert_file: "/path/to/mqtt-cert.pem"
|
||||
key_file: "/path/to/mqtt-key.pem"
|
||||
ca_file: "/path/to/mqtt-ca.pem"
|
||||
verify: true
|
||||
timeout: 5.0
|
||||
}
|
||||
|
||||
ack_wait: "60s"
|
||||
max_ack_pending: 2048
|
||||
js_domain: "mqtt-domain"
|
||||
js_api_timeout: "10s"
|
||||
stream_replicas: 3
|
||||
consumer_replicas: 1
|
||||
consumer_memory_storage: true
|
||||
consumer_inactive_threshold: "5m"
|
||||
}
|
||||
Reference in New Issue
Block a user