PostgreSQL¶
PostgreSQL is a powerful, open-source relational database management system (RDBMS) used to store, manage, and retrieve structured data.
Add the following dependency to your project file:
| NuGet | |
|---|---|
1 | |
You can start a PostgreSQL container instance from any .NET application. To create and start a container instance with the default configuration, use the module-specific builder as shown below:
1 2 | |
The following example utilizes the xUnit.net module to reduce overhead by automatically managing the lifecycle of the dependent container instance. It creates and starts the container using the module-specific builder and injects it as a shared class fixture into the test class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | |
SSL¶
Use WithSsl to enable TLS and map the server certificates. Configure the client connection string with SslMode and (for validation) the CA certificate.
Note
When SSL is enabled, Testcontainers does not set the SSL mode for the connection string. You will need to choose the SslMode and configure it yourself.
Note
When SSL is enabled, Testcontainers overrides the entrypoint to copy the certificates for the user that runs PostgreSQL and then runs docker-entrypoint.sh, not an entrypoint defined by a custom image. If you set an entrypoint with WithEntrypoint, Testcontainers does not override it. You will need to copy the certificates from /etc/ssl/postgresql to /var/run/postgresql/ssl yourself and make sure only the PostgreSQL user can access them.
1 2 | |
1 2 3 4 | |
VerifyFull and SANs¶
SslMode=VerifyFull additionally validates that the host in the connection string matches a subject alternative name (SAN) of the server certificate. Testcontainers usually resolves the container host to the IP address 127.0.0.1. The certificate must include a matching IP SAN, for example IP:127.0.0.1:
1 2 3 4 | |
The test example uses the following NuGet dependencies:
1 2 3 4 5 | |
To execute the tests, use the command dotnet test from a terminal.
Tip
For the complete source code of this example and additional information, please refer to our test projects.