16#include <gtest/gtest.h>
38 backend_ = std::make_unique<postgresql_backend>();
60 EXPECT_EQ(backend_->type(), database_types::postgres);
74 EXPECT_FALSE(backend_->is_initialized());
79 EXPECT_FALSE(backend_->in_transaction());
88 auto result = backend_->select_query(
"SELECT * FROM test");
89 EXPECT_FALSE(result.is_ok());
94 auto result = backend_->execute_query(
"CREATE TABLE test (id INT)");
95 EXPECT_FALSE(result.is_ok());
100 auto result = backend_->begin_transaction();
101 EXPECT_FALSE(result.is_ok());
106 auto result = backend_->commit_transaction();
107 EXPECT_FALSE(result.is_ok());
112 auto result = backend_->rollback_transaction();
113 EXPECT_FALSE(result.is_ok());
122 auto result = backend_->shutdown();
123 EXPECT_TRUE(result.is_ok());
130 auto first = backend_->initialize(test_config_);
132 auto second = backend_->initialize(test_config_);
133 EXPECT_FALSE(second.is_ok());
136 GTEST_SKIP() <<
"PostgreSQL support not compiled";
146 auto backend = postgresql_backend::create();
147 ASSERT_NE(backend,
nullptr);
148 EXPECT_EQ(backend->type(), database_types::postgres);
149 EXPECT_FALSE(backend->is_initialized());
158 auto info = backend_->connection_info();
167 auto error = backend_->last_error();
180 config.
host =
"localhost";
186 auto result = backend_->initialize(config);
187 if (!result.is_ok()) {
188 GTEST_SKIP() <<
"Local PostgreSQL not available: " << backend_->last_error();
191 EXPECT_TRUE(backend_->is_initialized());
192 auto info = backend_->connection_info();
193 EXPECT_FALSE(
info.empty());
199 config.
host =
"localhost";
205 if (!backend_->initialize(config).is_ok()) {
206 GTEST_SKIP() <<
"Local PostgreSQL not available";
211 "CREATE TEMP TABLE pg_test (id SERIAL PRIMARY KEY, name TEXT)").is_ok());
214 auto insert_result = backend_->execute_query(
215 "INSERT INTO pg_test (name) VALUES ('test_item')");
216 EXPECT_TRUE(insert_result.is_ok());
219 auto select_result = backend_->select_query(
220 "SELECT * FROM pg_test WHERE name = 'test_item'");
222 EXPECT_GE(select_result.value().size(), 1u);
225 auto update_result = backend_->execute_query(
226 "UPDATE pg_test SET name = 'updated' WHERE name = 'test_item'");
227 EXPECT_TRUE(update_result.is_ok());
230 auto delete_result = backend_->execute_query(
231 "DELETE FROM pg_test WHERE name = 'updated'");
232 EXPECT_TRUE(delete_result.is_ok());
238 config.
host =
"localhost";
244 if (!backend_->initialize(config).is_ok()) {
245 GTEST_SKIP() <<
"Local PostgreSQL not available";
249 "CREATE TEMP TABLE pg_tx_test (id SERIAL, val TEXT)").is_ok());
252 EXPECT_TRUE(backend_->begin_transaction().is_ok());
253 EXPECT_TRUE(backend_->in_transaction());
254 backend_->execute_query(
"INSERT INTO pg_tx_test (val) VALUES ('committed')");
255 EXPECT_TRUE(backend_->commit_transaction().is_ok());
256 EXPECT_FALSE(backend_->in_transaction());
259 EXPECT_TRUE(backend_->begin_transaction().is_ok());
260 backend_->execute_query(
"INSERT INTO pg_tx_test (val) VALUES ('rolled_back')");
261 EXPECT_TRUE(backend_->rollback_transaction().is_ok());
264 auto result = backend_->select_query(
265 "SELECT * FROM pg_tx_test WHERE val = 'rolled_back'");
267 EXPECT_TRUE(result.value().empty());
274 ::testing::InitGoogleTest(&argc, argv);
275 return RUN_ALL_TESTS();
connection_config test_config_
std::unique_ptr< postgresql_backend > backend_
static constexpr const char * backend_name()
Backend name for error messages.
Abstract interface for database backends.
@ info
Informational messages (default)
PostgreSQL database backend plugin implementation.
TEST_F(PostgreSQLBackendTest, TypeReturnsPostgres)
Configuration for database connection.
#define ASSERT_TRUE(condition, message)