< Summary - Backend C Tests - Coverage Report (WSL)

Information
Class: test_db_connection_real_c
Assembly: src.backend.tests.unit.database
File(s): ./src/backend/tests/unit/database/test_db_connection_real.c
Line coverage
94%
Covered lines: 84
Uncovered lines: 5
Coverable lines: 89
Total lines: 177
Line coverage: 94.3%
Branch coverage
83%
Covered branches: 5
Total branches: 6
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100 2/18/2026 - 10:50:55 PM Line coverage: 94.3% (84/89) Branch coverage: 83.3% (5/6) Total lines: 177 2/18/2026 - 10:50:55 PM Line coverage: 94.3% (84/89) Branch coverage: 83.3% (5/6) Total lines: 177

File(s)

./src/backend/tests/unit/database/test_db_connection_real.c

#LineLine coverage
 1#include <stdarg.h>
 2#include <stddef.h>
 3#include <setjmp.h>
 4#include <cmocka.h>
 5#include <string.h>
 6#include <stdio.h>
 7#include <stdlib.h>
 8#include <pthread.h>
 9
 10// PostgreSQL'i tamamen devre dışı bırak
 11#define LIBPQ_FE_H
 12#define PQconninfoOption void
 13#define PGconn void
 14#define PGresult void
 15#define ConnStatusType int
 16#define ExecStatusType int
 17#define CONNECTION_OK 0
 18#define CONNECTION_BAD 1
 19#define PGRES_COMMAND_OK 1
 20#define PGRES_TUPLES_OK 2
 21#define PGRES_FATAL_ERROR 3
 22
 23#include "db_connection.h"
 24
 25// Logger mock'ları
 026void LOG_INFO(const char *format, ...) {}
 27
 028void LOG_ERROR(const char *format, ...) {}
 29
 30/* ====================================================================
 31 * MOCK FONKSİYONLAR
 32 * ==================================================================== */
 33
 34static int mock_connection_status = CONNECTION_OK;
 35static char mock_error_message[256] = "";
 36static int mock_connect_fail = 0;
 37static void *mock_conn_ptr = (void *)0x12345678;
 38
 39static int mock_PQconnectdb_called = 0;
 40static int mock_PQfinish_called = 0;
 41static int mock_PQstatus_called = 0;
 42
 1143void *PQconnectdb(const char *conninfo) {
 1144  mock_PQconnectdb_called++;
 45
 1146  if (mock_connect_fail) {
 047    return NULL;
 48  }
 49
 1150  return mock_conn_ptr;
 51}
 52
 1153void PQfinish(void *conn) {
 1154  mock_PQfinish_called++;
 1155}
 56
 1557int PQstatus(const void *conn) {
 1558  mock_PQstatus_called++;
 1559  return mock_connection_status;
 60}
 61
 062char *PQerrorMessage(const void *conn) {
 063  return mock_error_message;
 64}
 65
 66/* ====================================================================
 67 * TEST SETUP
 68 * ==================================================================== */
 69
 570static void reset_mocks(void) {
 571  mock_connection_status = CONNECTION_OK;
 572  mock_error_message[0] = '\0';
 573  mock_connect_fail = 0;
 574  mock_PQconnectdb_called = 0;
 575  mock_PQfinish_called = 0;
 576  mock_PQstatus_called = 0;
 577}
 78
 579static void setup_default_config(DatabaseConfig *cfg) {
 580  memset(cfg, 0, sizeof(DatabaseConfig));
 581  strcpy(cfg->host, "localhost");
 582  cfg->port = 5432;
 583  strcpy(cfg->dbname, "testdb");
 584  strcpy(cfg->user, "testuser");
 585  strcpy(cfg->password, "testpass");
 586  strcpy(cfg->sslmode, "disable");
 587  cfg->connect_timeout = 5;
 588  cfg->pool_min = 2;
 589  cfg->pool_max = 5;
 590}
 91
 92/* ====================================================================
 93 * TEST CASES
 94 * ==================================================================== */
 95
 196static void test_pool_init_success(void **state) {
 197  reset_mocks();
 98  DatabaseConfig cfg;
 199  setup_default_config(&cfg);
 1100  ConnectionPool *pool = db_pool_init(&cfg, 0, 0);
 1101  assert_non_null(pool);
 1102  db_pool_destroy();
 1103}
 104
 1105static void test_acquire_success(void **state) {
 1106  reset_mocks();
 107  DatabaseConfig cfg;
 1108  setup_default_config(&cfg);
 1109  ConnectionPool *pool = db_pool_init(&cfg, 0, 0);
 1110  DBConnection *conn = db_pool_acquire();
 1111  assert_non_null(conn);
 1112  db_pool_release(conn);
 1113  db_pool_destroy();
 1114}
 115
 1116static void test_acquire_all_and_exhaust(void **state) {
 1117  reset_mocks();
 118  DatabaseConfig cfg;
 1119  setup_default_config(&cfg);
 1120  cfg.pool_max = 3;
 1121  ConnectionPool *pool = db_pool_init(&cfg, 0, 0);
 122  DBConnection *conns[5];
 123
 4124  for (int i = 0; i < cfg.pool_max; i++) {
 3125    conns[i] = db_pool_acquire();
 3126    assert_non_null(conns[i]);
 127  }
 128
 1129  DBConnection *exhausted = db_pool_acquire();
 1130  assert_null(exhausted);
 131
 4132  for (int i = 0; i < cfg.pool_max; i++) {
 3133    db_pool_release(conns[i]);
 134  }
 135
 1136  db_pool_destroy();
 1137}
 138
 1139static void test_metrics(void **state) {
 1140  reset_mocks();
 141  DatabaseConfig cfg;
 1142  setup_default_config(&cfg);
 1143  ConnectionPool *pool = db_pool_init(&cfg, 0, 0);
 1144  PoolMetrics metrics = db_pool_get_metrics();
 1145  DBConnection *conn = db_pool_acquire();
 1146  assert_non_null(conn);
 1147  metrics = db_pool_get_metrics();
 1148  printf("\nDEBUG: acquire_cnt=%zu, used_cnt=%d\n", metrics.acquire_cnt, metrics.used_cnt);
 1149  db_pool_release(conn);
 1150  metrics = db_pool_get_metrics();
 1151  printf("DEBUG: release_cnt=%zu, used_cnt=%d\n", metrics.release_cnt, metrics.used_cnt);
 1152  db_pool_destroy();
 1153}
 154
 1155static void test_release_null(void **state) {
 1156  reset_mocks();
 157  DatabaseConfig cfg;
 1158  setup_default_config(&cfg);
 1159  ConnectionPool *pool = db_pool_init(&cfg, 0, 0);
 1160  db_pool_release(NULL);
 1161  db_pool_destroy();
 1162}
 163
 164/* ====================================================================
 165 * MAIN
 166 * ==================================================================== */
 167
 1168int main(void) {
 1169  const struct CMUnitTest tests[] = {
 170    cmocka_unit_test(test_pool_init_success),
 171    cmocka_unit_test(test_acquire_success),
 172    cmocka_unit_test(test_acquire_all_and_exhaust),
 173    cmocka_unit_test(test_metrics),
 174    cmocka_unit_test(test_release_null),
 175  };
 1176  return cmocka_run_group_tests(tests, NULL, NULL);
 177}

Methods/Properties