CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
mmap2.test88 linesDownload Raw Back to test
1# 2013 March 202#3# The author disclaims copyright to this source code.  In place of4# a legal notice, here is a blessing:5#6#    May you do good and not evil.7#    May you find forgiveness for yourself and forgive others.8#    May you share freely, never taking more than you give.9#10#***********************************************************************11#12# This file tests the effect of the mmap() or mremap() system calls 13# returning an error on the library. 14#15# If either mmap() or mremap() fails, SQLite should log an error 16# message, then continue accessing the database using read() and 17# write() exclusively.18#19 20set testdir [file dirname $argv0]21source $testdir/tester.tcl22set testprefix mmap223 24if {[llength [info commands test_syscall]]==0} {25  finish_test26  return27} 28ifcapable !mmap {29  finish_test30  return31}32 33db close34sqlite3_shutdown35test_sqlite3_log xLog36proc xLog {error_code msg} {37  if {[string match os_unix.c* $msg]} {38    lappend ::log $msg 39  }40}41 42foreach syscall {mmap mremap} {43  test_syscall uninstall 44  if {[catch {test_syscall install $syscall}]} continue45 46  for {set i 1} {$i < 20} {incr i} {47    reset_db48    execsql { PRAGMA mmap_size = 8000000 }49 50    test_syscall fault $i 151    test_syscall errno $syscall ENOMEM52    set ::log ""53 54    do_execsql_test 1.$syscall.$i.1 {55      CREATE TABLE t1(a, b, UNIQUE(a, b));56      INSERT INTO t1 VALUES(randomblob(1000), randomblob(1000));57      INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;58      INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;59      INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;60      INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;61      INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;62      INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1;63    }64 65    set nFail [test_syscall fault 0 0]66 67    do_execsql_test 1.$syscall.$i.2 {68      SELECT count(*) FROM t1;69      PRAGMA integrity_check;70    } {64 ok}71 72    do_test 1.$syscall.$i.3 {73      expr {$nFail==0 || $nFail==1}74    } {1}75 76    do_test 1.$syscall.$i.4.nFail=$nFail {77      regexp ".*${syscall}.*" $::log78    } [expr $nFail>0]79  }80}81 82db close83test_syscall uninstall 84sqlite3_shutdown85test_sqlite3_log 86sqlite3_initialize87finish_test88