diff options
| author | Anders Betts <anders.betts@gmail.com> | 2026-09-20 10:36:09 +0200 |
|---|---|---|
| committer | Anders Betts <anders.betts@gmail.com> | 2026-09-20 10:36:09 +0200 |
| commit | 9ee8cb18b1017dce11e7c8c9b7fafad301cb766e (patch) | |
| tree | ab28600c9c29bb425a25d2375d28e95a97aa1f2c /tests | |
| parent | ae60b7d2c87cc9ed6878faa57cd4233f77f6f7c3 (diff) | |
| download | bokf-9ee8cb18b1017dce11e7c8c9b7fafad301cb766e.tar.gz bokf-9ee8cb18b1017dce11e7c8c9b7fafad301cb766e.zip | |
db: make attachments append-only (schema v7)
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_core.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/tests/test_core.c b/tests/test_core.c index 56c70dd..70a1ab7 100644 --- a/tests/test_core.c +++ b/tests/test_core.c @@ -508,8 +508,18 @@ static void test_pre_migration_snapshot(const char *tmpdir, sqlite3_close(sdb); /* the reopened database is at the current version and usable */ + char ver[16]; + snprintf(ver, sizeof ver, "%d", BOKF_SCHEMA_VERSION); v = db_text(db, "SELECT value FROM meta WHERE key='schema_version'"); - CHECK(v && strcmp(v, "6") == 0); + CHECK(v && strcmp(v, ver) == 0); + free(v); + v = db_text(db, "SELECT name FROM sqlite_master WHERE type='trigger'" + " AND name='attachments_no_update'"); + CHECK(v && strcmp(v, "attachments_no_update") == 0); + free(v); + v = db_text(db, "SELECT name FROM sqlite_master WHERE type='trigger'" + " AND name='attachments_no_delete'"); + CHECK(v && strcmp(v, "attachments_no_delete") == 0); free(v); int64_t user_id = 0; CHECK(db_create_user(db, "migrated", "Migrated", "secret123", 0, &user_id, @@ -2414,7 +2424,21 @@ int main(void) sqlite3_finalize(ast); CHECK(attachment_id > 0); - /* attachments are re-hashed only with full:true */ + /* the append-only triggers block updates and deletes; dropping one + simulates a modified database file for the re-hash check */ + err = NULL; + CHECK(db_exec(g_db, reqf("UPDATE attachments SET content=x'00'" + " WHERE id=%lld", (long long)attachment_id), + &err) != 0); + free(err); + err = NULL; + CHECK(db_exec(g_db, reqf("DELETE FROM attachments WHERE id=%lld", + (long long)attachment_id), + &err) != 0); + free(err); + err = NULL; + CHECK(db_exec(g_db, "DROP TRIGGER attachments_no_update", &err) == 0); + free(err); err = NULL; CHECK(db_exec(g_db, reqf("UPDATE attachments SET content=x'00'" " WHERE id=%lld", (long long)attachment_id), |
