summaryrefslogtreecommitdiff
path: root/ext/pgsql/tests/29nb_async_connect.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pgsql/tests/29nb_async_connect.phpt')
-rwxr-xr-xext/pgsql/tests/29nb_async_connect.phpt44
1 files changed, 44 insertions, 0 deletions
diff --git a/ext/pgsql/tests/29nb_async_connect.phpt b/ext/pgsql/tests/29nb_async_connect.phpt
new file mode 100755
index 0000000000..fc3868a26d
--- /dev/null
+++ b/ext/pgsql/tests/29nb_async_connect.phpt
@@ -0,0 +1,44 @@
+--TEST--
+PostgreSQL non-blocking async connect
+--SKIPIF--
+<?php
+include("skipif.inc");
+?>
+--FILE--
+<?php
+
+include('config.inc');
+include('nonblocking.inc');
+
+if (!$db = pg_connect($conn_str, PGSQL_CONNECT_ASYNC)) {
+ die("pg_connect() error");
+} elseif (pg_connection_status($db) === PGSQL_CONNECTION_BAD) {
+ die("pg_connect() error");
+} elseif ($db_socket = pg_socket($db)) {
+ stream_set_blocking($db_socket, FALSE);
+} else {
+ die("pg_socket() error");
+}
+
+while (TRUE) {
+ switch ($status = pg_connect_poll($db)) {
+ case PGSQL_POLLING_READING:
+ if (nb_is_readable($db_socket)) { break 2; }
+ break;
+ case PGSQL_POLLING_WRITING:
+ if (nb_is_writable($db_socket)) { break 2; }
+ break;
+ case PGSQL_POLLING_FAILED:
+ die("async connection failed");
+ case PGSQL_POLLING_OK:
+ break 2;
+ }
+}
+assert(pg_connection_status($db) === PGSQL_CONNECTION_MADE);
+echo "OK";
+
+pg_close($db);
+
+?>
+--EXPECT--
+OK