JDBC string support
This commit is contained in:
parent
1d53ca2fc2
commit
0090f39910
7 changed files with 396 additions and 28 deletions
55
pgLabII.PgUtils.Tests/ConnectionStrings/JdbcCodecTests.cs
Normal file
55
pgLabII.PgUtils.Tests/ConnectionStrings/JdbcCodecTests.cs
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
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¶m=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"]);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue