Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_main_sqlite3_setlk_timeout.c116 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3#include <stdlib.h>4#include <string.h>5 6/* Unity setUp/tearDown */7void setUp(void) {8  /* No global setup required */9}10void tearDown(void) {11  /* No global teardown required */12}13 14/* Test: valid ms values should return SQLITE_OK and, if enabled, update fields */15void test_sqlite3_setlk_timeout_valid_ms_updates_and_ok(void) {16  sqlite3 *db = NULL;17  int rc = sqlite3_open(":memory:", &db);18  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);19  TEST_ASSERT_NOT_NULL(db);20 21  int flags = 0xA5A5;22 23  /* Call with a positive timeout */24  rc = sqlite3_setlk_timeout(db, 2000, flags);25  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);26 27#ifdef SQLITE_ENABLE_SETLK_TIMEOUT28  /* When feature is enabled, the db fields should reflect the call */29  TEST_ASSERT_EQUAL_INT(2000, db->setlkTimeout);30  TEST_ASSERT_EQUAL_INT(flags, db->setlkFlags);31#endif32 33  /* Call with zero timeout */34  rc = sqlite3_setlk_timeout(db, 0, flags + 1);35  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);36 37#ifdef SQLITE_ENABLE_SETLK_TIMEOUT38  TEST_ASSERT_EQUAL_INT(0, db->setlkTimeout);39  TEST_ASSERT_EQUAL_INT(flags + 1, db->setlkFlags);40#endif41 42  /* Call with -1 (special value) */43  rc = sqlite3_setlk_timeout(db, -1, 0);44  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);45 46#ifdef SQLITE_ENABLE_SETLK_TIMEOUT47  TEST_ASSERT_EQUAL_INT(-1, db->setlkTimeout);48  TEST_ASSERT_EQUAL_INT(0, db->setlkFlags);49#endif50 51  sqlite3_close(db);52}53 54/* Test: ms < -1 returns SQLITE_RANGE and does not modify fields if feature is enabled */55void test_sqlite3_setlk_timeout_ms_less_than_minus1_is_range_and_no_change(void) {56  sqlite3 *db = NULL;57  int rc = sqlite3_open(":memory:", &db);58  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);59  TEST_ASSERT_NOT_NULL(db);60 61#ifdef SQLITE_ENABLE_SETLK_TIMEOUT62  /* Initialize fields to known values to verify they are unchanged on error */63  db->setlkTimeout = 123;64  db->setlkFlags = 0x55AA;65#endif66 67  rc = sqlite3_setlk_timeout(db, -2, 0xFFFF);68  TEST_ASSERT_EQUAL_INT(SQLITE_RANGE, rc);69 70#ifdef SQLITE_ENABLE_SETLK_TIMEOUT71  TEST_ASSERT_EQUAL_INT(123, db->setlkTimeout);72  TEST_ASSERT_EQUAL_INT(0x55AA, db->setlkFlags);73#endif74 75  sqlite3_close(db);76}77 78/* Test: NULL db behavior.79   - With API armor: expect SQLITE_MISUSE_BKPT.80   - Without SETLK feature: db is unused; expect SQLITE_OK.81   Do not compile this test in the potentially unsafe combination:82   SETLK enabled but API armor disabled (could dereference NULL). */83#if defined(SQLITE_ENABLE_API_ARMOR) || !defined(SQLITE_ENABLE_SETLK_TIMEOUT)84void test_sqlite3_setlk_timeout_null_db_behavior(void) {85  int rc;86 87#if defined(SQLITE_ENABLE_API_ARMOR)88  rc = sqlite3_setlk_timeout(NULL, 0, 0);89  TEST_ASSERT_EQUAL_INT(SQLITE_MISUSE_BKPT, rc);90 91  /* Also check that range check is not reached before armor; with invalid ms it still should be MISUSE_BKPT */92  rc = sqlite3_setlk_timeout(NULL, -2, 0);93  TEST_ASSERT_EQUAL_INT(SQLITE_MISUSE_BKPT, rc);94#else95  /* SETLK feature not enabled: function does not deref db and should return OK for valid ms */96  rc = sqlite3_setlk_timeout(NULL, 0, 0);97  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);98 99  /* But for ms < -1, range error occurs irrespective of db */100  rc = sqlite3_setlk_timeout(NULL, -3, 0);101  TEST_ASSERT_EQUAL_INT(SQLITE_RANGE, rc);102#endif103}104#endif105 106int main(void) {107  UNITY_BEGIN();108 109  RUN_TEST(test_sqlite3_setlk_timeout_valid_ms_updates_and_ok);110  RUN_TEST(test_sqlite3_setlk_timeout_ms_less_than_minus1_is_range_and_no_change);111#if defined(SQLITE_ENABLE_API_ARMOR) || !defined(SQLITE_ENABLE_SETLK_TIMEOUT)112  RUN_TEST(test_sqlite3_setlk_timeout_null_db_behavior);113#endif114 115  return UNITY_END();116}