Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_resolve_isValidSchemaTableName.c125 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3#include <string.h>4#include <stdlib.h>5 6/* Wrapper provided in the module for the static function */7extern int test_isValidSchemaTableName(const char *zTab, Table *pTab, const char *zDb);8 9static void initTable(Table *pTab, const char *zName){10  memset(pTab, 0, sizeof(*pTab));11  pTab->tnum = 1;          /* Required by the target function (assert) */12  pTab->zName = (char*)zName; /* Safe: function only reads the name */13}14 15void setUp(void) {16  /* No global setup required */17}18 19void tearDown(void) {20  /* No global teardown required */21}22 23/* Non "sqlite_" prefix should always be rejected */24void test_isValidSchemaTableName_rejects_non_sqlite_prefix(void) {25  Table t;26  initTable(&t, PREFERRED_SCHEMA_TABLE);27  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName("mytable", &t, NULL));28  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName("sqlitex_schema", &t, NULL));29}30 31/* Preferred main schema name should be accepted for non-legacy-temp pTab names */32void test_isValidSchemaTableName_accepts_preferred_schema_for_main(void) {33  Table t1, t2, t3;34  initTable(&t1, PREFERRED_SCHEMA_TABLE);35  initTable(&t2, LEGACY_SCHEMA_TABLE);36  initTable(&t3, PREFERRED_TEMP_SCHEMA_TABLE);37 38  /* Case-insensitive acceptance of preferred schema name */39  TEST_ASSERT_EQUAL_INT(1, test_isValidSchemaTableName(PREFERRED_SCHEMA_TABLE, &t1, NULL));40  TEST_ASSERT_EQUAL_INT(1, test_isValidSchemaTableName("SQLITE_SCHEMA", &t1, NULL));41 42  TEST_ASSERT_EQUAL_INT(1, test_isValidSchemaTableName(PREFERRED_SCHEMA_TABLE, &t2, NULL));43  TEST_ASSERT_EQUAL_INT(1, test_isValidSchemaTableName("SqlItE_ScHeMa", &t2, NULL));44 45  /* Even if pTab is preferred temp schema, only preferred main schema name matches in the else-branch */46  TEST_ASSERT_EQUAL_INT(1, test_isValidSchemaTableName(PREFERRED_SCHEMA_TABLE, &t3, NULL));47}48 49/* Legacy main schema input is not accepted for non-legacy-temp pTab names */50void test_isValidSchemaTableName_rejects_legacy_master_for_non_legacy_temp_targets(void) {51  Table t1, t2, t3;52  initTable(&t1, PREFERRED_SCHEMA_TABLE);53  initTable(&t2, LEGACY_SCHEMA_TABLE);54  initTable(&t3, PREFERRED_TEMP_SCHEMA_TABLE);55 56  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName(LEGACY_SCHEMA_TABLE, &t1, NULL));57  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName(LEGACY_SCHEMA_TABLE, &t2, NULL));58  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName("SQLITE_MASTER", &t3, NULL));59}60 61/* Legacy temp schema target handling */62void test_isValidSchemaTableName_legacy_temp_accepts_preferred_temp_unconditionally(void) {63  Table t;64  initTable(&t, LEGACY_TEMP_SCHEMA_TABLE);65 66  TEST_ASSERT_EQUAL_INT(1, test_isValidSchemaTableName(PREFERRED_TEMP_SCHEMA_TABLE, &t, NULL));67  TEST_ASSERT_EQUAL_INT(1, test_isValidSchemaTableName("SQLITE_TEMP_SCHEMA", &t, NULL));68}69 70/* Legacy temp schema target requires zDb qualifier for main schema synonyms */71void test_isValidSchemaTableName_legacy_temp_requires_db_for_main_schema_names(void) {72  Table t;73  initTable(&t, LEGACY_TEMP_SCHEMA_TABLE);74 75  /* Without zDb qualifier -> reject */76  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName(PREFERRED_SCHEMA_TABLE, &t, NULL));77  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName(LEGACY_SCHEMA_TABLE, &t, NULL));78 79  /* With zDb qualifier (any non-NULL string) -> accept */80  TEST_ASSERT_EQUAL_INT(1, test_isValidSchemaTableName(PREFERRED_SCHEMA_TABLE, &t, "temp"));81  TEST_ASSERT_EQUAL_INT(1, test_isValidSchemaTableName(LEGACY_SCHEMA_TABLE, &t, "temp"));82}83 84/* Legacy temp schema target never accepts legacy temp name as input */85void test_isValidSchemaTableName_legacy_temp_never_accepts_legacy_temp_name(void) {86  Table t;87  initTable(&t, LEGACY_TEMP_SCHEMA_TABLE);88 89  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName(LEGACY_TEMP_SCHEMA_TABLE, &t, NULL));90  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName(LEGACY_TEMP_SCHEMA_TABLE, &t, "temp"));91  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName("SQLITE_TEMP_MASTER", &t, "temp"));92}93 94/* Preferred temp pTab name behaves like non-legacy-temp branch (only preferred main schema accepted) */95void test_isValidSchemaTableName_preferred_temp_target_behavior(void) {96  Table t;97  initTable(&t, PREFERRED_TEMP_SCHEMA_TABLE);98 99  TEST_ASSERT_EQUAL_INT(1, test_isValidSchemaTableName(PREFERRED_SCHEMA_TABLE, &t, NULL));100  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName(PREFERRED_TEMP_SCHEMA_TABLE, &t, NULL));101  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName(LEGACY_SCHEMA_TABLE, &t, "main"));102  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName(LEGACY_TEMP_SCHEMA_TABLE, &t, "temp"));103}104 105/* Misc rejections under sqlite_ prefix but non-matching suffixes */106void test_isValidSchemaTableName_rejects_other_sqlite_prefix_names(void) {107  Table t;108  initTable(&t, PREFERRED_SCHEMA_TABLE);109 110  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName("sqlite_not_schema", &t, NULL));111  TEST_ASSERT_EQUAL_INT(0, test_isValidSchemaTableName("SQLITE_SOMETHING", &t, "main"));112}113 114int main(void) {115  UNITY_BEGIN();116  RUN_TEST(test_isValidSchemaTableName_rejects_non_sqlite_prefix);117  RUN_TEST(test_isValidSchemaTableName_accepts_preferred_schema_for_main);118  RUN_TEST(test_isValidSchemaTableName_rejects_legacy_master_for_non_legacy_temp_targets);119  RUN_TEST(test_isValidSchemaTableName_legacy_temp_accepts_preferred_temp_unconditionally);120  RUN_TEST(test_isValidSchemaTableName_legacy_temp_requires_db_for_main_schema_names);121  RUN_TEST(test_isValidSchemaTableName_legacy_temp_never_accepts_legacy_temp_name);122  RUN_TEST(test_isValidSchemaTableName_preferred_temp_target_behavior);123  RUN_TEST(test_isValidSchemaTableName_rejects_other_sqlite_prefix_names);124  return UNITY_END();125}