summaryrefslogtreecommitdiffstats
path: root/tests/internals.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/internals.tcl')
-rw-r--r--tests/internals.tcl96
1 files changed, 0 insertions, 96 deletions
diff --git a/tests/internals.tcl b/tests/internals.tcl
deleted file mode 100644
index 36dbc90..0000000
--- a/tests/internals.tcl
+++ /dev/null
@@ -1,96 +0,0 @@
-# This file contains internal facilities for Tcl tests.
-#
-# Source this file in the related tests to include from tcl-tests:
-#
-# source [file join [file dirname [info script]] internals.tcl]
-#
-# Copyright © 2020 Sergey G. Brester (sebres).
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-
-if {[namespace which -command ::tcltest::internals::scriptpath] eq ""} {namespace eval ::tcltest::internals {
-
-namespace path ::tcltest
-
-::tcltest::ConstraintInitializer testWithLimit { expr {[testConstraint macOrUnix] && ![catch { exec prlimit --version }]} }
-
-# test-with-limit --
-#
-# Usage: test-with-limit ?-addmem bytes? ?-maxmem bytes? command
-# Options:
-# -addmem - set additional memory limit (in bytes) as difference (extra memory needed to run a test)
-# -maxmem - set absolute maximum address space limit (in bytes)
-#
-proc testWithLimit args {
- set body [lindex $args end]
- array set in [lrange $args 0 end-1]
- # test in child process (with limits):
- set pipe {}
- if {[catch {
- # start new process:
- set pipe [open |[list [interpreter]] r+]
- set ppid [pid $pipe]
- # create prlimit args:
- set args {}
- # with limited address space:
- if {[info exists in(-addmem)] || [info exists in(-maxmem)]} {
- if {[info exists in(-addmem)]} {
- # as difference to normal usage, so try to retrieve current memory usage:
- if {[catch {
- # using ps (vsz is in KB):
- incr in(-addmem) [expr {[lindex [exec ps -hq $ppid -o vsz] end] * 1024}]
- }]} {
- # ps failed, use default size 20MB:
- incr in(-addmem) 20000000
- # + size of locale-archive (may be up to 100MB):
- incr in(-addmem) [expr {
- [file exists /usr/lib/locale/locale-archive] ?
- [file size /usr/lib/locale/locale-archive] : 0
- }]
- }
- if {![info exists in(-maxmem)]} {
- set in(-maxmem) $in(-addmem)
- }
- set in(-maxmem) [expr { max($in(-addmem), $in(-maxmem)) }]
- }
- append args --as=$in(-maxmem)
- }
- # apply limits:
- exec prlimit -p $ppid {*}$args
- } msg opt]} {
- catch {close $pipe}
- tcltest::Warn "testWithLimit: error - [regsub {^\s*([^\n]*).*$} $msg {\1}]"
- tcltest::Skip testWithLimit
- }
- # execute body, close process and return:
- set ret [catch {
- chan configure $pipe -buffering line
- puts $pipe "puts \[$body\]"
- puts $pipe exit
- set result [read $pipe]
- close $pipe
- set pipe {}
- set result
- } result opt]
- if {$pipe ne ""} { catch { close $pipe } }
- if {$ret && [dict get $opt -errorcode] eq "BYPASS-SKIPPED-TEST"} {
- return {*}$opt $result
- }
- if { ( [info exists in(-warn-on-code)] && $ret in $in(-warn-on-code) )
- || ( $ret && [info exists in(-warn-on-alloc-error)] && $in(-warn-on-alloc-error)
- && [regexp {\munable to (?:re)?alloc\M} $result] )
- } {
- tcltest::Warn "testWithLimit: wrong limit, result: $result"
- tcltest::Skip testWithLimit
- }
- return {*}$opt $result
-}
-
-# export all routines starting with test
-namespace export test*
-
-# for script path & as mark for loaded
-proc scriptpath {} [list return [info script]]
-
-}}; # end of internals. \ No newline at end of file