getnotify.phpt 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. --TEST--
  2. PDO PgSQL LISTEN/NOTIFY support
  3. --SKIPIF--
  4. <?php # vim:se ft=php:
  5. if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
  6. require dirname(__FILE__) . '/config.inc';
  7. require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
  8. PDOTest::skip();
  9. ?>
  10. --FILE--
  11. <?php
  12. require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
  13. $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
  14. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  15. // pgsqlGetPid should return something meaningful
  16. $pid = $db->pgsqlGetPid();
  17. var_dump($pid > 0);
  18. // No listen, no notifies
  19. var_dump($db->pgsqlGetNotify());
  20. // Listen started, no notifies
  21. $db->exec("LISTEN notifies_phpt");
  22. var_dump($db->pgsqlGetNotify());
  23. // No parameters, use default PDO::FETCH_NUM
  24. $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);
  25. $db->exec("NOTIFY notifies_phpt");
  26. $notify = $db->pgsqlGetNotify();
  27. var_dump(count($notify));
  28. var_dump($notify[0]);
  29. var_dump($notify[1] == $pid);
  30. // No parameters, use default PDO::FETCH_ASSOC
  31. $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  32. $db->exec("NOTIFY notifies_phpt");
  33. $notify = $db->pgsqlGetNotify();
  34. var_dump(count($notify));
  35. var_dump($notify['message']);
  36. var_dump($notify['pid'] == $pid);
  37. // Test PDO::FETCH_NUM as parameter
  38. $db->exec("NOTIFY notifies_phpt");
  39. $notify = $db->pgsqlGetNotify(PDO::FETCH_NUM);
  40. var_dump(count($notify));
  41. var_dump($notify[0]);
  42. var_dump($notify[1] == $pid);
  43. // Test PDO::FETCH_ASSOC as parameter
  44. $db->exec("NOTIFY notifies_phpt");
  45. $notify = $db->pgsqlGetNotify(PDO::FETCH_ASSOC);
  46. var_dump(count($notify));
  47. var_dump($notify['message']);
  48. var_dump($notify['pid'] == $pid);
  49. // Test PDO::FETCH_BOTH as parameter
  50. $db->exec("NOTIFY notifies_phpt");
  51. $notify = $db->pgsqlGetNotify(PDO::FETCH_BOTH);
  52. var_dump(count($notify));
  53. var_dump($notify['message']);
  54. var_dump($notify['pid'] == $pid);
  55. var_dump($notify[0]);
  56. var_dump($notify[1] == $pid);
  57. // Verify that there are no notifies queued
  58. var_dump($db->pgsqlGetNotify());
  59. // Test second parameter, should wait 2 seconds because no notify is queued
  60. $t = microtime(1);
  61. $notify = $db->pgsqlGetNotify(PDO::FETCH_ASSOC, 1000);
  62. $diff = microtime(1) - $t;
  63. var_dump($diff >= 1 || 1 - abs($diff) < .05);
  64. var_dump($notify);
  65. // Test second parameter, should return immediately because a notify is queued
  66. $db->exec("NOTIFY notifies_phpt");
  67. $t = microtime(1);
  68. $notify = $db->pgsqlGetNotify(PDO::FETCH_ASSOC, 5000);
  69. $diff = microtime(1) - $t;
  70. var_dump($diff < 1 || abs(1 - abs($diff)) < .05);
  71. var_dump(count($notify));
  72. ?>
  73. --EXPECT--
  74. bool(true)
  75. bool(false)
  76. bool(false)
  77. int(2)
  78. string(13) "notifies_phpt"
  79. bool(true)
  80. int(2)
  81. string(13) "notifies_phpt"
  82. bool(true)
  83. int(2)
  84. string(13) "notifies_phpt"
  85. bool(true)
  86. int(2)
  87. string(13) "notifies_phpt"
  88. bool(true)
  89. int(4)
  90. string(13) "notifies_phpt"
  91. bool(true)
  92. string(13) "notifies_phpt"
  93. bool(true)
  94. bool(false)
  95. bool(true)
  96. bool(false)
  97. bool(true)
  98. int(2)