Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add tests to quota.test. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
ec9af6ebd49505c4e5f90fb6450c7194 |
User & Date: | dan 2010-09-01 18:00:10.000 |
Context
2010-09-01
| ||
19:29 | Identify additional requirements in the sqlite3_vfs object documentation. (check-in: 47064453c3 user: drh tags: trunk) | |
18:00 | Add tests to quota.test. (check-in: ec9af6ebd4 user: dan tags: trunk) | |
16:19 | Call quota callback destructors from within sqlite3_quota_shutdown(). (check-in: fb80c6f3de user: dan tags: trunk) | |
Changes
Changes to src/test_quota.c.
︙ | ︙ | |||
828 829 830 831 832 833 834 835 836 837 838 839 840 841 | const char *zPattern; /* File pattern to configure */ sqlite3_int64 iLimit; /* Initial quota in bytes */ Tcl_Obj *pScript; /* Tcl script to invoke to increase quota */ int rc; /* Value returned by quota_set() */ TclQuotaCallback *p; /* Callback object */ int nScript; /* Length of callback script */ void (*xDestroy)(void*); /* Optional destructor for pArg */ /* Process arguments */ if( objc!=4 ){ Tcl_WrongNumArgs(interp, 1, objv, "PATTERN LIMIT SCRIPT"); return TCL_ERROR; } zPattern = Tcl_GetString(objv[1]); | > | 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 | const char *zPattern; /* File pattern to configure */ sqlite3_int64 iLimit; /* Initial quota in bytes */ Tcl_Obj *pScript; /* Tcl script to invoke to increase quota */ int rc; /* Value returned by quota_set() */ TclQuotaCallback *p; /* Callback object */ int nScript; /* Length of callback script */ void (*xDestroy)(void*); /* Optional destructor for pArg */ void (*xCallback)(const char *, sqlite3_int64 *, sqlite3_int64, void *); /* Process arguments */ if( objc!=4 ){ Tcl_WrongNumArgs(interp, 1, objv, "PATTERN LIMIT SCRIPT"); return TCL_ERROR; } zPattern = Tcl_GetString(objv[1]); |
︙ | ︙ | |||
851 852 853 854 855 856 857 858 859 860 861 862 863 | return TCL_OK; } memset(p, 0, sizeof(TclQuotaCallback)); p->interp = interp; Tcl_IncrRefCount(pScript); p->pScript = pScript; xDestroy = tclCallbackDestructor; }else{ p = 0; xDestroy = 0; } /* Invoke sqlite3_quota_set() */ | > > | | 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 | return TCL_OK; } memset(p, 0, sizeof(TclQuotaCallback)); p->interp = interp; Tcl_IncrRefCount(pScript); p->pScript = pScript; xDestroy = tclCallbackDestructor; xCallback = tclQuotaCallback; }else{ p = 0; xDestroy = 0; xCallback = 0; } /* Invoke sqlite3_quota_set() */ rc = sqlite3_quota_set(zPattern, iLimit, xCallback, (void*)p, xDestroy); Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC); return TCL_OK; } /* ** tclcmd: sqlite3_quota_dump |
︙ | ︙ |
Changes to test/quota.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # May you share freely, never taking more than you give. # #*********************************************************************** # set testdir [file dirname $argv0] source $testdir/tester.tcl db close do_test quota-1.1 { sqlite3_quota_initialize nosuchvfs 1 } {SQLITE_ERROR} do_test quota-1.2 { sqlite3_quota_initialize "" 1 } {SQLITE_OK} do_test quota-1.3 { sqlite3_quota_initialize "" 1 } {SQLITE_MISUSE} do_test quota-1.4 { sqlite3_quota_shutdown } {SQLITE_OK} | > | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # May you share freely, never taking more than you give. # #*********************************************************************** # set testdir [file dirname $argv0] source $testdir/tester.tcl source $testdir/malloc_common.tcl db close do_test quota-1.1 { sqlite3_quota_initialize nosuchvfs 1 } {SQLITE_ERROR} do_test quota-1.2 { sqlite3_quota_initialize "" 1 } {SQLITE_OK} do_test quota-1.3 { sqlite3_quota_initialize "" 1 } {SQLITE_MISUSE} do_test quota-1.4 { sqlite3_quota_shutdown } {SQLITE_OK} |
︙ | ︙ | |||
106 107 108 109 110 111 112 113 114 115 116 117 118 119 | sqlite3_quota_shutdown } {SQLITE_OK} #------------------------------------------------------------------------- # Try some tests with more than one connection to a database file. Still # in rollback mode. # proc quota_check {filename limitvar size} { upvar $limitvar limit lappend ::quota [set limit] $size if {[info exists ::quota_request_ok]} { set limit $size } } do_test quota-3.1.1 { | > > > > > | 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | sqlite3_quota_shutdown } {SQLITE_OK} #------------------------------------------------------------------------- # Try some tests with more than one connection to a database file. Still # in rollback mode. # # quota-3.1.*: Two connections to a single database file. # # quota-3.2.*: Two connections to each of several database files (that # are in the same quota group). # proc quota_check {filename limitvar size} { upvar $limitvar limit lappend ::quota [set limit] $size if {[info exists ::quota_request_ok]} { set limit $size } } do_test quota-3.1.1 { |
︙ | ︙ | |||
141 142 143 144 145 146 147 148 | do_test quota-3.1.4 { catchsql { CREATE TABLE t3(a, b) } } {1 {database or disk is full}} do_test quota-3.1.5 { set ::quota_request_ok 1 execsql { CREATE TABLE t3(a, b) } } {} | > > > > > | > | > > > | > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | do_test quota-3.1.4 { catchsql { CREATE TABLE t3(a, b) } } {1 {database or disk is full}} do_test quota-3.1.5 { set ::quota_request_ok 1 execsql { CREATE TABLE t3(a, b) } } {} do_test quota-3.1.6 { db close db2 close sqlite3_quota_set *test.db 0 {} } {SQLITE_OK} do_test quota-3.2.1 { file delete force test.db test2.db sqlite3_quota_set * 4096 {} sqlite3 db1a test.db sqlite3 db2a test2.db foreach db {db1a db2a} { execsql { PRAGMA page_size = 1024; PRAGMA journal_mode = delete; PRAGMA auto_vacuum = off; CREATE TABLE t1(a, b); } $db } sqlite3 db1b test.db sqlite3 db2b test2.db list [file size test.db] [file size test2.db] } {2048 2048} catch { unset ::quota_request_ok } do_test quota-3.2.2 { execsql { INSERT INTO t1 VALUES('x', 'y') } db1a } {} do_test quota-3.2.3 { execsql { INSERT INTO t1 VALUES('v', 'w') } db1b } {} do_test quota-3.2.4 { execsql { INSERT INTO t1 VALUES('t', 'u') } db2a } {} do_test quota-3.2.5 { execsql { INSERT INTO t1 VALUES('r', 's') } db2b } {} do_test quota-3.2.6 { catchsql { INSERT INTO t1 VALUES(randomblob(500), randomblob(500)) } db1a } {1 {database or disk is full}} do_test quota-3.2.7 { catchsql { INSERT INTO t1 VALUES(randomblob(500), randomblob(500)) } db1b } {1 {database or disk is full}} do_test quota-3.2.8 { catchsql { INSERT INTO t1 VALUES(randomblob(500), randomblob(500)) } db2a } {1 {database or disk is full}} do_test quota-3.2.9 { catchsql { INSERT INTO t1 VALUES(randomblob(500), randomblob(500)) } db2b } {1 {database or disk is full}} set ::quota [list] proc quota_callback {file limitvar size} { upvar $limitvar limit lappend ::quota $file $size set limit 0 } sqlite3_quota_set * 4096 quota_callback do_test quota-3.3.1 { execsql { INSERT INTO t1 VALUES(randomblob(500), randomblob(500)) } db1a execsql { INSERT INTO t1 VALUES(randomblob(500), randomblob(500)) } db1b execsql { INSERT INTO t1 VALUES(randomblob(500), randomblob(500)) } db2a execsql { INSERT INTO t1 VALUES(randomblob(500), randomblob(500)) } db2b set ::quota } [list [file join [pwd] test.db] 5120] do_test quota-3.2.X { foreach db {db1a db2a db2b db1b} { catch { $db close } } sqlite3_quota_set * 0 {} } {SQLITE_OK} #------------------------------------------------------------------------- # Quotas are deleted when unused and when there limit is set to zero # # Return a list of all currently defined quotas. Each quota is identified # by its pattern. |
︙ | ︙ | |||
262 263 264 265 266 267 268 | sqlite3_quota_set A 1000 quota_callback sqlite3_quota_shutdown } {SQLITE_OK} do_test quota-4.4.2 { quota_list } {} | > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 | sqlite3_quota_set A 1000 quota_callback sqlite3_quota_shutdown } {SQLITE_OK} do_test quota-4.4.2 { quota_list } {} #------------------------------------------------------------------------- # The following tests test that the quota VFS handles malloc and IO # errors. # sqlite3_quota_initialize "" 1 sqlite3_quota_set *test.db 4096 {} do_faultsim_test quota-5.1 -prep { catch {db close} } -body { sqlite3 db test2.db } do_faultsim_test quota-5.2 -prep { catch {db close} } -body { sqlite3 db test.db } catch { db close } file delete -force test.db do_test quota-5.3.prep { sqlite3 db test.db execsql { PRAGMA auto_vacuum = 1; PRAGMA page_size = 1024; CREATE TABLE t1(a, b); INSERT INTO t1 VALUES(10, zeroblob(1200)); } faultsim_save_and_close } {} do_faultsim_test quota-5.3 -prep { faultsim_restore_and_reopen } -body { execsql { DELETE FROM t1 } } do_test quota-5.4.1 { catch { db close } file delete -force test.db file mkdir test.db list [catch { sqlite3 db test.db } msg] $msg } {1 {unable to open database file}} do_faultsim_test quota-5.5 -prep { catch { sqlite3_quota_shutdown } } -body { sqlite3_quota_initialize "" 1 } do_faultsim_test quota-5.6 -prep { catch { sqlite3_quota_shutdown } sqlite3_quota_initialize "" 1 } -body { sqlite3_quota_set * 4096 {} } catch { sqlite3_quota_shutdown } finish_test |