pgLabII/pgLabII.PgUtils.Tests/ConnectionStrings/JdbcCodecTests.cs
2025-08-31 10:22:08 +02:00

55 lines
2 KiB
C#

using pgLabII.PgUtils.ConnectionStrings;
namespace pgLabII.PgUtils.Tests.ConnectionStrings;
public class JdbcCodecTests
{
[Fact]
public void Parse_Basic()
{
var codec = new JdbcCodec();
var r = codec.TryParse("jdbc:postgresql://localhost:5433/mydb?sslmode=require&applicationName=app&connectTimeout=12");
Assert.True(r.IsSuccess);
var d = r.Value;
Assert.Single(d.Hosts);
Assert.Equal("localhost", d.Hosts[0].Host);
Assert.Equal((ushort)5433, d.Hosts[0].Port);
Assert.Equal("mydb", d.Database);
Assert.Equal(Npgsql.SslMode.Require, d.SslMode);
Assert.Equal("app", d.ApplicationName);
Assert.Equal(12, d.TimeoutSeconds);
}
[Fact]
public void Parse_MultiHost_MixedPorts()
{
var codec = new JdbcCodec();
var r = codec.TryParse("jdbc:postgresql://host1:5432,[::1]:5544,host3/db");
Assert.True(r.IsSuccess);
var d = r.Value;
Assert.Equal(3, d.Hosts.Count);
Assert.Equal("host1", d.Hosts[0].Host);
Assert.Equal((ushort)5432, d.Hosts[0].Port);
Assert.Equal("::1", d.Hosts[1].Host);
Assert.Equal((ushort)5544, d.Hosts[1].Port);
Assert.Equal("host3", d.Hosts[2].Host);
Assert.Null(d.Hosts[2].Port);
Assert.Equal("db", d.Database);
}
[Fact]
public void Format_RoundTrip()
{
var codec = new JdbcCodec();
var parsed = codec.TryParse("jdbc:postgresql://hostA,hostB:5555/test_db?applicationName=cli&param=x%20y");
Assert.True(parsed.IsSuccess);
var formatted = codec.TryFormat(parsed.Value);
Assert.True(formatted.IsSuccess);
var parsed2 = codec.TryParse(formatted.Value);
Assert.True(parsed2.IsSuccess);
Assert.Equal(parsed.Value.Hosts.Count, parsed2.Value.Hosts.Count);
Assert.Equal(parsed.Value.Database, parsed2.Value.Database);
Assert.Equal("cli", parsed2.Value.ApplicationName);
Assert.Equal("x y", parsed2.Value.Properties["param"]);
}
}