Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Further improvements to the threading test and test suite infrastructure related to garbage collection. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
4a6f2f3342fc4e835f7560fc4bed4c6d |
User & Date: | mistachkin 2012-10-26 22:34:56.499 |
Context
2012-10-27
| ||
02:38 | Add native logging callback to the interop assembly for use in the debug build. Make the test for ticket [72905c9a77] shutdown SQLite prior to attempting to enable logging. Fix test constraints on tests for tickets [72905c9a77] and [e1b2e0f769] (i.e. wrap them using the fixConstraints helper procedure). Enhancements to the test suite infrastructure. check-in: 4b64a8d444 user: mistachkin tags: trunk | |
2012-10-26
| ||
22:34 | Further improvements to the threading test and test suite infrastructure related to garbage collection. check-in: 4a6f2f3342 user: mistachkin tags: trunk | |
20:47 | Simplify critical handle count result matching by the threading test. check-in: be3b5a073a user: mistachkin tags: trunk | |
Changes
Changes to Tests/common.eagle.
︙ | ︙ | |||
557 558 559 560 561 562 563 564 565 566 567 568 569 570 | # NOTE: Return the full path of the loaded file. # return $fileName } return "" } proc checkForSQLite { channel } { tputs $channel "---- checking for core SQLite library... " if {[catch { object invoke -flags +NonPublic System.Data.SQLite.SQLite3 \ SQLiteVersion} version] == 0} then { | > > > > > > > > > > > > > > > | 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 | # NOTE: Return the full path of the loaded file. # return $fileName } return "" } proc isSQLiteReady {} { # # NOTE: This procedure must return non-zero only if the SQLite native # library and the System.Data.SQLite managed assembly are loaded # and ready for use by the test suite. Currently, this procedure # should be called only after the [tryLoadAssembly] procedure has # been called to probe for the System.Data.SQLite managed assembly # and the [checkForSQLite] procedure has been called to probe for # the SQLite native library; otherwise, this procedure will simply # always return zero. # return [expr {[haveConstraint System.Data.SQLite] && \ [haveConstraint SQLite]}] } proc checkForSQLite { channel } { tputs $channel "---- checking for core SQLite library... " if {[catch { object invoke -flags +NonPublic System.Data.SQLite.SQLite3 \ SQLiteVersion} version] == 0} then { |
︙ | ︙ | |||
1087 1088 1089 1090 1091 1092 1093 | # set code 0 } return $code } | | > > > > > > > > > | > > > > > > > > > > > > | | | | | | | > > > > > > > > > > > > > > > | 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 | # set code 0 } return $code } proc collectGarbage { channel {milliseconds 1000} } { if {[catch {object invoke GC GetTotalMemory false} result] == 0} then { tputs $channel [appendArgs \ "---- memory in use by the CLR before collection... " \ $result " bytes\n"] } else { tputs $channel [appendArgs \ "==== WARNING: failed full garbage collection, error: " \ \n\t $result \n] } ######################################################################### # # NOTE: Repeatedly attempt to collect garbage until the allotted number # of milliseconds has elapsed. Always attempt to collect garbage # at least once. # set start [clock seconds] set stop [expr {$start + ($milliseconds / 1000)}] do { # # NOTE: Attempt to force a full garbage collection now. Report any # error that is encountered if we fail. # if {[catch {object invoke GC GetTotalMemory true} error]} then { tputs $channel [appendArgs \ "==== WARNING: failed full garbage collection, error: " \ \n\t $error \n] } set now [clock seconds] } while {$start <= $now && $now < $stop} ######################################################################### if {[catch {object invoke GC GetTotalMemory false} result] == 0} then { tputs $channel [appendArgs \ "---- memory in use by the CLR after collection... " \ $result " bytes\n"] } else { tputs $channel [appendArgs \ "==== WARNING: failed full garbage collection, error: " \ \n\t $result \n] } } proc getSQLiteHandleCounts { channel {quiet false} } { set result [list] if {[haveConstraint \ |
︙ | ︙ | |||
1136 1137 1138 1139 1140 1141 1142 1143 | proc shutdownSQLite { channel {force false} {quiet false} } { # # NOTE: Make sure that SQLite core library is completely shutdown. This # is used by tests that change configuration options and/or those # that need to make sure logging is initialized (i.e. just in case # the SQLite core library was initialized in the process prior to # the SQLiteLog class being able to setup its logging callback). # | > > | | 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 | proc shutdownSQLite { channel {force false} {quiet false} } { # # NOTE: Make sure that SQLite core library is completely shutdown. This # is used by tests that change configuration options and/or those # that need to make sure logging is initialized (i.e. just in case # the SQLite core library was initialized in the process prior to # the SQLiteLog class being able to setup its logging callback). # Normally, this should only be performed if SQLite is loaded and # ready for use by the test suite. # if {$force || [isSQLiteReady]} then { if {[catch {object invoke -flags +NonPublic \ System.Data.SQLite.UnsafeNativeMethods \ sqlite3_shutdown} result] == 0} then { if {!$quiet} then { tputs $channel [appendArgs \ "---- call sqlite3_shutdown()... ok: " $result \n] } |
︙ | ︙ | |||
1291 1292 1293 1294 1295 1296 1297 | } } } } else { tputs $channel no\n # | | > > | | 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 | } } } } else { tputs $channel no\n # # NOTE: Does our caller want to reset the directories? This can only # be performed if SQLite is loaded and ready for use by the test # suite. # if {$reset && [isSQLiteReady]} then { # # NOTE: Now make sure the database and temporary directories are # reset their default values, which should be null for both. # Since the sqlite3_win32_set_directory function does not # appear to be available, use the associated PRAGMA commands # instead. # |
︙ | ︙ | |||
1319 1320 1321 1322 1323 1324 1325 | } } } } # # NOTE: Finally, show the current value of the database and temporary | | > > | | | | | | | > | 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 | } } } } # # NOTE: Finally, show the current value of the database and temporary # directories. This can only be performed if SQLite is loaded # and ready for use by the test suite. # if {[isSQLiteReady]} then { foreach directory [list data_store_directory temp_store_directory] { tputs $channel [appendArgs "---- checking " $directory "... "] set sql [appendArgs "PRAGMA " $directory \;] if {[catch {executeSql $sql scalar} result] == 0} then { tputs $channel [appendArgs "ok: \"" $result \"\n] } else { tputs $channel [appendArgs "error: " \n\t $result \n] } } } } proc loadSQLiteTestSettings { channel {quiet false} } { # # NOTE: Skip loading the settings if their usage has been disabled. |
︙ | ︙ |
Changes to Tests/thread.eagle.
︙ | ︙ | |||
445 446 447 448 449 450 451 | }] true true true results errors [list System.Data.SQLite.dll Eagle.dll]] list $code $results \ [expr {[info exists errors] ? $errors : ""}] \ [expr {$code eq "Ok" ? [catch { object invoke _Dynamic${id}.Test${id} RunTestThreads } result] : [set result ""]}] $result \ | | | 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 | }] true true true results errors [list System.Data.SQLite.dll Eagle.dll]] list $code $results \ [expr {[info exists errors] ? $errors : ""}] \ [expr {$code eq "Ok" ? [catch { object invoke _Dynamic${id}.Test${id} RunTestThreads } result] : [set result ""]}] $result \ [collectGarbage $test_channel [expr {$count(1) * 1000}]] \ [getSQLiteHandleCounts $test_channel] \ [reportSQLiteResources $test_channel] } -cleanup { cleanupDb $fileName unset -nocomplain result results errors code sql dataSource id db fileName } -time true -constraints {eagle monoBug28 command.sql compile.DATA SQLite\ |
︙ | ︙ |