v2-0001-add-regression-test-of-service-option.patch
application/octet-stream
Filename: v2-0001-add-regression-test-of-service-option.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
Series: patch v2-0001
| File | + | − |
|---|---|---|
| src/interfaces/libpq/meson.build | 1 | 0 |
| src/interfaces/libpq/t/006_service.pl | 82 | 0 |
diff --git a/src/interfaces/libpq/meson.build b/src/interfaces/libpq/meson.build
index 19f4a52a97a..292fecf3320 100644
--- a/src/interfaces/libpq/meson.build
+++ b/src/interfaces/libpq/meson.build
@@ -122,6 +122,7 @@ tests += {
't/003_load_balance_host_list.pl',
't/004_load_balance_dns.pl',
't/005_negotiate_encryption.pl',
+ 't/006_service.pl',
],
'env': {
'with_ssl': ssl_library,
diff --git a/src/interfaces/libpq/t/006_service.pl b/src/interfaces/libpq/t/006_service.pl
new file mode 100644
index 00000000000..24c9a915a42
--- /dev/null
+++ b/src/interfaces/libpq/t/006_service.pl
@@ -0,0 +1,82 @@
+# Copyright (c) 2023-2024, PostgreSQL Global Development Group
+use strict;
+use warnings FATAL => 'all';
+use Config;
+use PostgreSQL::Test::Utils;
+use PostgreSQL::Test::Cluster;
+use Test::More;
+
+# This tests "service"
+
+# Cluster setup which is shared for testing both load balancing methods
+my $node = PostgreSQL::Test::Cluster->new('node');
+
+# Create a data directory with initdb
+$node->init();
+
+# Start the PostgreSQL server
+$node->start();
+
+my $td = PostgreSQL::Test::Utils::tempdir;
+my $srvfile = "$td/pgsrv.conf";
+
+# Create a service file
+open my $fh, '>', $srvfile or die $!;
+if ($windows_os) {
+
+ # Windows: use CRLF
+ print $fh "[my_srv]", "\r\n";
+ print $fh join( "\r\n", split( ' ', $node->connstr ) ), "\r\n";
+}
+else {
+ # Non-Windows: use LF
+ print $fh "[my_srv]", "\n";
+ print $fh join( "\n", split( ' ', $node->connstr ) ), "\n";
+}
+close $fh;
+
+# Check that service option works as expected
+{
+ local $ENV{PGSERVICEFILE} = $srvfile;
+ $node->connect_ok(
+ 'service=my_srv',
+ 'service=my_srv',
+ sql => "SELECT 'connect1'",
+ expected_stdout => qr/connect1/
+ );
+
+ $node->connect_ok(
+ 'postgres://?service=my_srv',
+ 'postgres://?service=my_srv',
+ sql => "SELECT 'connect2'",
+ expected_stdout => qr/connect2/
+ );
+
+ local $ENV{PGSERVICE} = 'my_srv';
+ $node->connect_ok(
+ '',
+ 'envvar: PGSERVICE=my_srv',
+ sql => "SELECT 'connect3'",
+ expected_stdout => qr/connect3/
+ );
+}
+
+# Check that not existing service fails
+{
+ local $ENV{PGSERVICEFILE} = $srvfile;
+ local $ENV{PGSERVICE} = 'non-existent-service';
+ $node->connect_fails(
+ '',
+ 'envvar: PGSERVICE=non-existent-service',
+ expected_stdout =>
+ qr/definition of service "non-existent-service" not found/
+ );
+
+ $node->connect_fails(
+ 'service=non-existent-service',
+ 'service=non-existent-service',
+ expected_stderr =>
+ qr/definition of service "non-existent-service" not found/
+ );
+}
+
+done_testing();