Annotation of embedaddon/sqlite3/test/quota2.test, revision 1.1.1.1

1.1       misho       1: # 2011 December 1
                      2: #
                      3: # The author disclaims copyright to this source code.  In place of
                      4: # 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: 
                     13: set testdir [file dirname $argv0]
                     14: source $testdir/tester.tcl
                     15: source $testdir/malloc_common.tcl
                     16: 
                     17: db close
                     18: sqlite3_quota_initialize "" 1
                     19: 
                     20: foreach dir {quota2a/x1 quota2a/x2 quota2a quota2b quota2c} {
                     21:   file delete -force $dir
                     22: }
                     23: foreach dir {quota2a quota2a/x1 quota2a/x2 quota2b quota2c} {
                     24:   file mkdir $dir
                     25: }
                     26: 
                     27: # The standard_path procedure converts a pathname into a standard format
                     28: # that is the same across platforms.
                     29: #
                     30: unset -nocomplain ::quota_pwd ::quota_mapping
                     31: set ::quota_pwd [string map {\\ /} [pwd]]
                     32: set ::quota_mapping [list $::quota_pwd PWD]
                     33: proc standard_path {x} {
                     34:   set x [string map {\\ /} $x]
                     35:   return [string map $::quota_mapping $x]
                     36: }
                     37: 
                     38: # The quota_check procedure is a callback from the quota handler.
                     39: # It has three arguments which are (1) the full pathname of the file
                     40: # that has gone over quota, (2) the quota limit, (3) the requested
                     41: # new quota size to cover the last write.  These three values are
                     42: # appended to the global variable $::quota.  The filename is processed
                     43: # to convert every \ character into / and to change the name of the
                     44: # working directory to PWD.  
                     45: #
                     46: # The quota is increased to the request if the ::quota_request_ok 
                     47: # global variable is true.
                     48: #
                     49: set ::quota {}
                     50: set ::quota_request_ok 0
                     51: 
                     52: proc quota_check {filename limitvar size} {
                     53:   upvar $limitvar limit
                     54:   lappend ::quota [standard_path $filename] [set limit] $size
                     55:   if {$::quota_request_ok} {set limit $size}
                     56: }
                     57: 
                     58: sqlite3_quota_set */quota2a/* 4000 quota_check
                     59: sqlite3_quota_set */quota2b/* 5000 quota_check
                     60: 
                     61: unset -nocomplain bigtext
                     62: for {set i 1} {$i<=1000} {incr i} {
                     63:   if {$i%10==0} {
                     64:     append bigtext [format "%06d\n" $i]
                     65:   } else {
                     66:     append bigtext [format "%06d " $i]
                     67:   }
                     68: }
                     69: 
                     70: catch { unset h1 }
                     71: catch { unset x }
                     72: do_test quota2-1.1 {
                     73:   set ::h1 [sqlite3_quota_fopen quota2a/xyz.txt w+b]
                     74:   sqlite3_quota_fwrite $::h1 1 7000 $bigtext
                     75: } {4000}
                     76: do_test quota2-1.2 {
                     77:   set ::quota
                     78: } {PWD/quota2a/xyz.txt 4000 7000}
                     79: do_test quota2-1.3 {
                     80:   sqlite3_quota_rewind $::h1
                     81:   set ::x [sqlite3_quota_fread $::h1 1001 7]
                     82:   string length $::x
                     83: } {3003}
                     84: do_test quota2-1.4 {
                     85:   string match $::x [string range $::bigtext 0 3002]
                     86: } {1}
                     87: do_test quota2-1.5 {
                     88:   sqlite3_quota_fseek $::h1 0 SEEK_END
                     89:   sqlite3_quota_ftell $::h1
                     90: } {4000}
                     91: do_test quota2-1.6 {
                     92:   sqlite3_quota_fseek $::h1 -100 SEEK_END
                     93:   sqlite3_quota_ftell $::h1
                     94: } {3900}
                     95: do_test quota2-1.7 {
                     96:   sqlite3_quota_fseek $::h1 -100 SEEK_CUR
                     97:   sqlite3_quota_ftell $::h1
                     98: } {3800}
                     99: do_test quota2-1.8 {
                    100:   sqlite3_quota_fseek $::h1 50 SEEK_CUR
                    101:   sqlite3_quota_ftell $::h1
                    102: } {3850}
                    103: do_test quota2-1.9 {
                    104:   sqlite3_quota_fseek $::h1 50 SEEK_SET
                    105:   sqlite3_quota_ftell $::h1
                    106: } {50}
                    107: do_test quota2-1.10 {
                    108:   sqlite3_quota_rewind $::h1
                    109:   sqlite3_quota_ftell $::h1
                    110: } {0}
                    111: do_test quota2-1.11 {
                    112:   standard_path [sqlite3_quota_dump]
                    113: } {{*/quota2b/* 5000 0} {*/quota2a/* 4000 4000 {PWD/quota2a/xyz.txt 4000 1 0}}}
                    114: do_test quota2-1.12 {
                    115:   sqlite3_quota_fclose $::h1
                    116:   standard_path [sqlite3_quota_dump]
                    117: } {{*/quota2b/* 5000 0} {*/quota2a/* 4000 4000 {PWD/quota2a/xyz.txt 4000 0 0}}}
                    118: do_test quota2-1.13 {
                    119:   sqlite3_quota_remove quota2a/xyz.txt
                    120:   standard_path [sqlite3_quota_dump]
                    121: } {{*/quota2b/* 5000 0} {*/quota2a/* 4000 0}}
                    122: 
                    123: 
                    124: set quota {}
                    125: do_test quota2-2.1 {
                    126:   set ::h1 [sqlite3_quota_fopen quota2c/xyz.txt w+b]
                    127:   sqlite3_quota_fwrite $::h1 1 7000 $bigtext
                    128: } {7000}
                    129: do_test quota2-2.2 {
                    130:   set ::quota
                    131: } {}
                    132: do_test quota2-2.3 {
                    133:   sqlite3_quota_rewind $::h1
                    134:   set ::x [sqlite3_quota_fread $::h1 1001 7]
                    135:   string length $::x
                    136: } {6006}
                    137: do_test quota2-2.4 {
                    138:   string match $::x [string range $::bigtext 0 6005]
                    139: } {1}
                    140: do_test quota2-2.5 {
                    141:   sqlite3_quota_fseek $::h1 0 SEEK_END
                    142:   sqlite3_quota_ftell $::h1
                    143: } {7000}
                    144: do_test quota2-2.6 {
                    145:   sqlite3_quota_fseek $::h1 -100 SEEK_END
                    146:   sqlite3_quota_ftell $::h1
                    147: } {6900}
                    148: do_test quota2-2.7 {
                    149:   sqlite3_quota_fseek $::h1 -100 SEEK_CUR
                    150:   sqlite3_quota_ftell $::h1
                    151: } {6800}
                    152: do_test quota2-2.8 {
                    153:   sqlite3_quota_fseek $::h1 50 SEEK_CUR
                    154:   sqlite3_quota_ftell $::h1
                    155: } {6850}
                    156: do_test quota2-2.9 {
                    157:   sqlite3_quota_fseek $::h1 50 SEEK_SET
                    158:   sqlite3_quota_ftell $::h1
                    159: } {50}
                    160: do_test quota2-2.10 {
                    161:   sqlite3_quota_rewind $::h1
                    162:   sqlite3_quota_ftell $::h1
                    163: } {0}
                    164: do_test quota2-2.11 {
                    165:   standard_path [sqlite3_quota_dump]
                    166: } {{*/quota2b/* 5000 0} {*/quota2a/* 4000 0}}
                    167: do_test quota2-2.12 {
                    168:   sqlite3_quota_fclose $::h1
                    169:   standard_path [sqlite3_quota_dump]
                    170: } {{*/quota2b/* 5000 0} {*/quota2a/* 4000 0}}
                    171: 
                    172: do_test quota2-3.1 {
                    173:   sqlite3_quota_set */quota2b/* 0 quota_check
                    174:   set ::h1 [sqlite3_quota_fopen quota2a/x1/a.txt a]
                    175:   sqlite3_quota_fwrite $::h1 10 10 $bigtext
                    176: } {10}
                    177: do_test quota2-3.2 {
                    178:   standard_path [sqlite3_quota_dump]
                    179: } {{*/quota2a/* 4000 100 {PWD/quota2a/x1/a.txt 100 1 0}}}
                    180: do_test quota2-3.3a {
                    181:   sqlite3_quota_fflush $::h1 0
                    182:   standard_path [sqlite3_quota_dump]
                    183: } {{*/quota2a/* 4000 100 {PWD/quota2a/x1/a.txt 100 1 0}}}
                    184: do_test quota2-3.3b {
                    185:   sqlite3_quota_fflush $::h1 1
                    186:   standard_path [sqlite3_quota_dump]
                    187: } {{*/quota2a/* 4000 100 {PWD/quota2a/x1/a.txt 100 1 0}}}
                    188: do_test quota2-3.3c {
                    189:   sqlite3_quota_fflush $::h1
                    190:   standard_path [sqlite3_quota_dump]
                    191: } {{*/quota2a/* 4000 100 {PWD/quota2a/x1/a.txt 100 1 0}}}
                    192: do_test quota2-3.4 {
                    193:   sqlite3_quota_fclose $::h1
                    194:   standard_path [sqlite3_quota_dump]
                    195: } {{*/quota2a/* 4000 100 {PWD/quota2a/x1/a.txt 100 0 0}}}
                    196: do_test quota2-3.5 {
                    197:   set ::h2 [sqlite3_quota_fopen quota2a/x2/b.txt a]
                    198:   sqlite3_quota_fwrite $::h2 10 20 $bigtext
                    199:   standard_path [sqlite3_quota_dump]
                    200: } {{*/quota2a/* 4000 300 {PWD/quota2a/x2/b.txt 200 1 0} {PWD/quota2a/x1/a.txt 100 0 0}}}
                    201: do_test quota2-3.6 {
                    202:   set ::h3 [sqlite3_quota_fopen quota2a/x1/c.txt a]
                    203:   sqlite3_quota_fwrite $::h3 10 50 $bigtext
                    204:   standard_path [sqlite3_quota_dump]
                    205: } {{*/quota2a/* 4000 800 {PWD/quota2a/x1/c.txt 500 1 0} {PWD/quota2a/x2/b.txt 200 1 0} {PWD/quota2a/x1/a.txt 100 0 0}}}
                    206: do_test quota2-3.7 {
                    207:   file exists quota2a/x1/a.txt
                    208: } {1}
                    209: do_test quota2-3.8 {
                    210:   file exists quota2a/x2/b.txt
                    211: } {1}
                    212: do_test quota2-3.9 {
                    213:   file exists quota2a/x1/c.txt
                    214: } {1}
                    215: do_test quota2-3.10 {
                    216:   sqlite3_quota_remove quota2a/x1
                    217:   standard_path [sqlite3_quota_dump]
                    218: } {{*/quota2a/* 4000 700 {PWD/quota2a/x1/c.txt 500 1 1} {PWD/quota2a/x2/b.txt 200 1 0}}}
                    219: do_test quota2-3.11 {
                    220:   sqlite3_quota_fclose $::h2
                    221:   sqlite3_quota_fclose $::h3
                    222:   standard_path [sqlite3_quota_dump]
                    223: } {{*/quota2a/* 4000 200 {PWD/quota2a/x2/b.txt 200 0 0}}}
                    224: do_test quota2-3.12 {
                    225:   file exists quota2a/x1/a.txt
                    226: } {0}
                    227: do_test quota2-3.13 {
                    228:   file exists quota2a/x2/b.txt
                    229: } {1}
                    230: do_test quota2-3.14 {
                    231:   file exists quota2a/x1/c.txt
                    232: } {0}
                    233: 
                    234: catch { sqlite3_quota_shutdown }
                    235: catch { unset quota_request_ok }
                    236: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>