From 6e5c1a56b6b01e2e4fcf1c1b2fe5de52e52b2655 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Wed, 2 Dec 2015 21:26:31 +0000 Subject: Check for libpq thread safety, disable libcrypto init (fixes crashes with multiple ssl connections) add test --- libpqpp/connection.cpp | 8 ++++++++ libpqpp/connection.h | 3 ++- libpqpp/unittests/testpq.cpp | 11 +++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) (limited to 'libpqpp') diff --git a/libpqpp/connection.cpp b/libpqpp/connection.cpp index 51aac63..e47d846 100644 --- a/libpqpp/connection.cpp +++ b/libpqpp/connection.cpp @@ -3,9 +3,17 @@ #include "selectcommand.h" #include "modifycommand.h" #include +#include NAMEDFACTORY("postgresql", PQ::Connection, DB::ConnectionFactory); +static void setup() __attribute__((constructor(101))); +static void setup() +{ + BOOST_ASSERT(PQisthreadsafe() == 1); + PQinitOpenSSL(1, 0); +} + static void noNoticeProcessor(void *, const char *) { diff --git a/libpqpp/connection.h b/libpqpp/connection.h index 40fb00e..618c875 100644 --- a/libpqpp/connection.h +++ b/libpqpp/connection.h @@ -3,9 +3,10 @@ #include #include +#include namespace PQ { - class Connection : public DB::Connection { + class DLL_PUBLIC Connection : public DB::Connection { public: Connection(const std::string & info); ~Connection(); diff --git a/libpqpp/unittests/testpq.cpp b/libpqpp/unittests/testpq.cpp index 5dc4b2d..002b18c 100644 --- a/libpqpp/unittests/testpq.cpp +++ b/libpqpp/unittests/testpq.cpp @@ -10,6 +10,7 @@ #include #include #include "../error.h" +#include "../connection.h" class StandardMockDatabase : public PQ::Mock { public: @@ -175,3 +176,13 @@ BOOST_AUTO_TEST_CASE( connfail ) BOOST_REQUIRE_THROW(DB::ConnectionFactory::createNew("postgresql", "host=localhost user=no"), PQ::ConnectionError); } +BOOST_AUTO_TEST_CASE( ssl ) +{ + auto conn = DB::ConnectionFactory::createNew("postgresql", "host=randomdan.homeip.net user=gentoo dbname=postgres sslmode=require"); + BOOST_REQUIRE(conn); + auto pqconn = dynamic_cast(conn); + BOOST_REQUIRE(pqconn); + BOOST_REQUIRE(PQgetssl(pqconn->conn)); + delete conn; +} + -- cgit v1.2.3