From c0c79ad0667105e66666b5679a9264be58a92bb2 Mon Sep 17 00:00:00 2001
From: Dan Goodliffe <dan@randomdan.homeip.net>
Date: Mon, 7 Dec 2015 14:15:26 +0000
Subject: Improve connection failure detection

---
 libpqpp/unittests/testpq.cpp | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

(limited to 'libpqpp/unittests')

diff --git a/libpqpp/unittests/testpq.cpp b/libpqpp/unittests/testpq.cpp
index 002b18c..3f55c63 100644
--- a/libpqpp/unittests/testpq.cpp
+++ b/libpqpp/unittests/testpq.cpp
@@ -169,6 +169,44 @@ BOOST_AUTO_TEST_CASE( insertId )
 	delete ro;
 }
 
+BOOST_AUTO_TEST_CASE( reconnect )
+{
+	auto ro = DB::MockDatabase::openConnectionTo("pqmock");
+	auto rok = DB::MockDatabase::openConnectionTo("pqmock");
+	auto pqconn = dynamic_cast<PQ::Connection *>(ro);
+	int pid1 = PQbackendPID(pqconn->conn);
+	BOOST_REQUIRE(pid1);
+	ro->ping();
+	auto kil = rok->newModifyCommand("SELECT pg_terminate_backend(?)");
+	kil->bindParamI(0, pid1);
+	kil->execute();
+	delete kil;
+	ro->ping();
+	int pid2 = PQbackendPID(pqconn->conn);
+	BOOST_REQUIRE(pid2);
+	BOOST_REQUIRE(pid1 != pid2);
+	delete ro;
+	delete rok;
+}
+
+BOOST_AUTO_TEST_CASE( reconnectInTx )
+{
+	auto ro = DB::MockDatabase::openConnectionTo("pqmock");
+	auto rok = DB::MockDatabase::openConnectionTo("pqmock");
+	auto pqconn = dynamic_cast<PQ::Connection *>(ro);
+	int pid1 = PQbackendPID(pqconn->conn);
+	BOOST_REQUIRE(pid1);
+	ro->ping();
+	ro->beginTx();
+	auto kil = rok->newModifyCommand("SELECT pg_terminate_backend(?)");
+	kil->bindParamI(0, pid1);
+	kil->execute();
+	delete kil;
+	BOOST_REQUIRE_THROW(ro->ping(), PQ::ConnectionError);
+	delete ro;
+	delete rok;
+}
+
 BOOST_AUTO_TEST_SUITE_END();
 
 BOOST_AUTO_TEST_CASE( connfail )
-- 
cgit v1.2.3