From 148affed30a5d7cbb108404a069cde5f8d8d63f9 Mon Sep 17 00:00:00 2001
From: Friedrich Wilckens <friedrich.wilckens@ingramcontent.com>
Date: Mon, 30 Oct 2023 13:23:18 -0700
Subject: [PATCH] PostgreSQL: added test case for failed connection attempt.

---
 .../testsuite/src/PostgreSQLTest.cpp          | 31 ++++++++++++++++++-
 .../PostgreSQL/testsuite/src/PostgreSQLTest.h |  2 ++
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/Data/PostgreSQL/testsuite/src/PostgreSQLTest.cpp b/Data/PostgreSQL/testsuite/src/PostgreSQLTest.cpp
index cb17b8463..0b551b642 100644
--- a/Data/PostgreSQL/testsuite/src/PostgreSQLTest.cpp
+++ b/Data/PostgreSQL/testsuite/src/PostgreSQLTest.cpp
@@ -140,6 +140,33 @@ void PostgreSQLTest::testConnectNoDB()
 	}
 }
 
+
+void PostgreSQLTest::testFailedConnect()
+{
+	std::string dbConnString;
+	dbConnString +=  "host=" + getHost();
+	dbConnString += " user=invalid";
+	dbConnString +=	" password=invalid";
+	dbConnString += " port=" + getPort();
+
+	Poco::SharedPtr<Poco::Data::Session> pInvalidSession;
+	try
+	{
+		std::cout << "Attempting to Connect to [" << dbConnString << "] with invalid credentials: " << std::endl;
+		Session session(PostgreSQL::Connector::KEY, dbConnString);
+		fail ("must fail");
+	}
+	catch (ConnectionFailedException& ex)
+	{
+		std::cout  << ex.displayText() << std::endl;
+	}
+	catch (ConnectionException& ex)
+	{
+		std::cout << ex.displayText() << std::endl;
+	}
+}
+
+
 void PostgreSQLTest::testPostgreSQLOIDs()
 {
 	if (!_pSession) fail ("Test not available.");
@@ -309,6 +336,7 @@ void PostgreSQLTest::testBarebonePostgreSQL()
 }
 
 
+
 void PostgreSQLTest::testSimpleAccess()
 {
 	if (!_pSession) fail ("Test not available.");
@@ -775,7 +803,7 @@ void PostgreSQLTest::testSqlState()
 	}
 	catch (const Poco::Data::PostgreSQL::PostgreSQLException & exception)
 	{
-		assertTrue(exception.sqlState() == std::string("42601"));    
+		assertTrue(exception.sqlState() == std::string("42601"));
 	}
 }
 
@@ -1236,6 +1264,7 @@ CppUnit::Test* PostgreSQLTest::suite()
 	CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("PostgreSQLTest");
 
 	CppUnit_addTest(pSuite, PostgreSQLTest, testConnectNoDB);
+	CppUnit_addTest(pSuite, PostgreSQLTest, testFailedConnect);
 	CppUnit_addTest(pSuite, PostgreSQLTest, testPostgreSQLOIDs);
 	//CppUnit_addTest(pSuite, PostgreSQLTest, testBarebonePostgreSQL);
 	CppUnit_addTest(pSuite, PostgreSQLTest, testSimpleAccess);
diff --git a/Data/PostgreSQL/testsuite/src/PostgreSQLTest.h b/Data/PostgreSQL/testsuite/src/PostgreSQLTest.h
index 9f2158830..4900e6520 100644
--- a/Data/PostgreSQL/testsuite/src/PostgreSQLTest.h
+++ b/Data/PostgreSQL/testsuite/src/PostgreSQLTest.h
@@ -36,9 +36,11 @@ public:
 	~PostgreSQLTest();
 
 	void testConnectNoDB();
+	void testFailedConnect();
 	void testPostgreSQLOIDs();
 	void testBarebonePostgreSQL();
 
+
 	void testSimpleAccess();
 	void testComplexType();
 	void testSimpleAccessVector();