Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add crash.test script. (CVS 1660) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
64a6d805178af8947ccca19898c06979 |
User & Date: | danielk1977 2004-06-22 13:12:52.000 |
Context
2004-06-22
| ||
13:22 | Fix some segfaults that could have occurred after a malloc() failure. (CVS 1661) (check-in: 80151e7281 user: drh tags: trunk) | |
13:12 | Add crash.test script. (CVS 1660) (check-in: 64a6d80517 user: danielk1977 tags: trunk) | |
12:46 | Add comments to test1.c. (CVS 1659) (check-in: be6bd6c99d user: drh tags: trunk) | |
Changes
Changes to main.mk.
︙ | ︙ | |||
52 53 54 55 56 57 58 | # TCCX = $(TCC) $(OPTS) $(THREADSAFE) $(USLEEP) -I. -I$(TOP)/src # Object files for the SQLite library. # LIBOBJ = attach.o auth.o btree.o build.o date.o delete.o \ expr.o func.o hash.o insert.o \ | | | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | # TCCX = $(TCC) $(OPTS) $(THREADSAFE) $(USLEEP) -I. -I$(TOP)/src # Object files for the SQLite library. # LIBOBJ = attach.o auth.o btree.o build.o date.o delete.o \ expr.o func.o hash.o insert.o \ main.o opcodes.o os_mac.o os_unix.o os_win.o \ pager.o parse.o pragma.o printf.o random.o \ select.o table.o tclsqlite.o tokenize.o trigger.o \ update.o util.o vacuum.o \ vdbe.o vdbeapi.o vdbeaux.o vdbemem.o \ where.o utf.o legacy.o # All of the source code files. |
︙ | ︙ | |||
115 116 117 118 119 120 121 122 123 124 125 126 127 128 | TESTSRC = \ $(TOP)/src/btree.c \ $(TOP)/src/func.c \ $(TOP)/src/os_mac.c \ $(TOP)/src/os_test.c \ $(TOP)/src/os_unix.c \ $(TOP)/src/os_win.c \ $(TOP)/src/pager.c \ $(TOP)/src/pragma.c \ $(TOP)/src/printf.c \ $(TOP)/src/test1.c \ $(TOP)/src/test2.c \ $(TOP)/src/test3.c \ $(TOP)/src/test4.c \ | > | 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | TESTSRC = \ $(TOP)/src/btree.c \ $(TOP)/src/func.c \ $(TOP)/src/os_mac.c \ $(TOP)/src/os_test.c \ $(TOP)/src/os_unix.c \ $(TOP)/src/os_win.c \ $(TOP)/src/os_test.c \ $(TOP)/src/pager.c \ $(TOP)/src/pragma.c \ $(TOP)/src/printf.c \ $(TOP)/src/test1.c \ $(TOP)/src/test2.c \ $(TOP)/src/test3.c \ $(TOP)/src/test4.c \ |
︙ | ︙ |
Changes to src/os_test.c.
︙ | ︙ | |||
96 97 98 99 100 101 102 | } static OsTestFile *pAllFiles = 0; /* ** Initialise the os_test.c specific fields of pFile. */ | | | > > > | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | } static OsTestFile *pAllFiles = 0; /* ** Initialise the os_test.c specific fields of pFile. */ static void initFile(OsFile *id, char const *zName){ OsTestFile *pFile = (OsTestFile *) sqliteMalloc(sizeof(OsTestFile) + strlen(zName)+1); pFile->nMaxWrite = 0; pFile->nBlk = 0; pFile->apBlk = 0; pFile->zName = (char *)(&pFile[1]); strcpy(pFile->zName, zName); *id = pFile; pFile->pNext = pAllFiles; pAllFiles = pFile; } /* ** Undo the work done by initFile. Delete the OsTestFile structure |
︙ | ︙ | |||
188 189 190 191 192 193 194 | for(i=0; i<pFile->nBlk; i++){ u8 *p = pFile->apBlk[i]; if( p ){ int skip = 0; if( crash ){ char random; sqlite3Randomness(1, &random); | | > > > > > > > > > | 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | for(i=0; i<pFile->nBlk; i++){ u8 *p = pFile->apBlk[i]; if( p ){ int skip = 0; if( crash ){ char random; sqlite3Randomness(1, &random); if( random & 0x01 ){ skip = 1; /* printf("Not writing block %d of %s\n", i, pFile->zName); */ }else{ /* printf("Writing block %d of %s\n", i, pFile->zName); */ } } if( rc==SQLITE_OK ){ rc = sqlite3RealSeek(&pFile->fd, BLOCK_OFFSET(i)); } if( rc==SQLITE_OK && !skip ){ int len = BLOCKSIZE; |
︙ | ︙ | |||
376 377 378 379 380 381 382 | /* ** The three functions used to open files. All that is required is to ** initialise the os_test.c specific fields and then call the corresponding ** os_unix.c function to really open the file. */ int sqlite3OsOpenReadWrite(const char *zFilename, OsFile *id, int *pReadonly){ | | | | | 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 | /* ** The three functions used to open files. All that is required is to ** initialise the os_test.c specific fields and then call the corresponding ** os_unix.c function to really open the file. */ int sqlite3OsOpenReadWrite(const char *zFilename, OsFile *id, int *pReadonly){ initFile(id, zFilename); return sqlite3RealOpenReadWrite(zFilename, &(*id)->fd, pReadonly); } int sqlite3OsOpenExclusive(const char *zFilename, OsFile *id, int delFlag){ initFile(id, zFilename); return sqlite3RealOpenExclusive(zFilename, &(*id)->fd, delFlag); } int sqlite3OsOpenReadOnly(const char *zFilename, OsFile *id){ initFile(id, zFilename); return sqlite3RealOpenReadOnly(zFilename, &(*id)->fd); } /* ** These six function calls are passed straight through to the os_unix.c ** backend. */ |
︙ | ︙ |
Changes to src/os_test.h.
︙ | ︙ | |||
25 26 27 28 29 30 31 32 33 34 35 36 37 38 | typedef struct OsTestFile* OsFile; typedef struct OsTestFile OsTestFile; struct OsTestFile { u8 **apBlk; /* Array of blocks that have been written to. */ int nBlk; /* Size of apBlock. */ int nMaxWrite; /* Largest offset written to. */ OsRealFile fd; OsTestFile *pNext; }; void sqlite3SetCrashseed(int seed); #endif /* _SQLITE_OS_UNIX_H_ */ | > | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | typedef struct OsTestFile* OsFile; typedef struct OsTestFile OsTestFile; struct OsTestFile { u8 **apBlk; /* Array of blocks that have been written to. */ int nBlk; /* Size of apBlock. */ int nMaxWrite; /* Largest offset written to. */ char *zName; /* File name */ OsRealFile fd; OsTestFile *pNext; }; void sqlite3SetCrashseed(int seed); #endif /* _SQLITE_OS_UNIX_H_ */ |
Changes to src/test1.c.
︙ | ︙ | |||
9 10 11 12 13 14 15 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** Code for testing the printf() interface to SQLite. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** Code for testing the printf() interface to SQLite. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** ** $Id: test1.c,v 1.83 2004/06/22 13:12:52 danielk1977 Exp $ */ #include "sqliteInt.h" #include "tcl.h" #include "os.h" #include <stdlib.h> #include <string.h> |
︙ | ︙ | |||
989 990 991 992 993 994 995 | Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ #ifdef OS_TEST int seed; if( objc!=2 ) goto bad_args; | | | 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 | Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ #ifdef OS_TEST int seed; if( objc!=2 ) goto bad_args; if( Tcl_GetIntFromObj(interp, objv[1], &seed) ) return TCL_ERROR; sqlite3SetCrashseed(seed); #endif return TCL_OK; #ifdef OS_TEST bad_args: Tcl_AppendResult(interp, "wrong # args: should be \"", |
︙ | ︙ |
Added test/crash.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # $Id: crash.test,v 1.1 2004/06/22 13:12:52 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl proc run_testfixturex {script} { set f [open crash.tcl w] puts $f $script close $f exec ./testfixturex crash.tcl } do_test crash-1.1 { execsql { CREATE TABLE abc(a, b, c); INSERT INTO abc VALUES(1, 2, 3); INSERT INTO abc VALUES(4, 5, 6); } } {} do_test crash-1.2 { set script { sqlite3_crashseed 1 sqlite3 db test.db db eval {pragma synchronous=full;} db eval {DELETE FROM abc WHERE a = 1;} } catch { run_testfixturex $script } msg set msg } {child process exited abnormally} do_test crash-1.3 { catchsql { SELECT * FROM abc; } } {0 {1 2 3 4 5 6}} do_test crash-1.4 { set script { sqlite3_crashseed 2 sqlite3 db test.db db eval {DELETE FROM abc WHERE a = 1;} } catch { run_testfixturex $script } msg set msg } {child process exited abnormally} do_test crash-1.5 { catch { SELECT * FROM abc; } } {1 2 3 4 5 6} finish_test |
Changes to test/quick.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file runs all tests. # | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file runs all tests. # # $Id: quick.test,v 1.25 2004/06/22 13:12:52 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl rename finish_test really_finish_test proc finish_test {} {} set ISQUICK 1 set EXCLUDE { all.test quick.test btree2.test malloc.test memleak.test misuse.test format3.test crash.test } if {[sqlite3 -has-codec]} { lappend EXCLUDE \ attach.test \ attach2.test \ auth.test \ |
︙ | ︙ |