diff --git a/net-test/info.rkt b/net-test/info.rkt index 16f66b23bf..ac350204e1 100644 --- a/net-test/info.rkt +++ b/net-test/info.rkt @@ -13,5 +13,6 @@ "net-lib" "racket-test" "rackunit-lib" + "sandbox-lib" "web-server-lib")) (define update-implies '("net-lib")) diff --git a/net-test/tests/net/uri-codec.rkt b/net-test/tests/net/uri-codec.rkt index a5b0825b7b..490e2b206b 100644 --- a/net-test/tests/net/uri-codec.rkt +++ b/net-test/tests/net/uri-codec.rkt @@ -1,5 +1,5 @@ #lang racket -(require net/uri-codec tests/eli-tester) +(require net/uri-codec tests/eli-tester racket/sandbox) (provide tests) (module+ main (tests)) @@ -97,6 +97,9 @@ (uri-path-segment-unreserved-decode "M~(@%3B%20") => "M~(@; " (uri-encode "æçè") => "%C3%A6%C3%A7%C3%A8" (uri-encode "Kidô senkan Nadeshiko") => "Kid%C3%B4%20senkan%20Nadeshiko" + + do (memory-tests) + do (random-tests) )) ;; tests adapted from Noel Welsh's original test suite @@ -158,4 +161,29 @@ )) +(define (memory-tests) + ;; Test that encode/decode don't take excessive memory + (define STRING-SIZE #e1e6) + (define MB-LIMIT 10) + (define big-string + (build-string + STRING-SIZE + (lambda (i) (integer->char (+ (char->integer #\a) (random 26)))))) + (define (roundtrip s) + (define encoded (form-urlencoded-encode s)) + (form-urlencoded-decode encoded)) + (test (call-with-limits 10 MB-LIMIT + (lambda () (roundtrip big-string))) + => big-string)) + +(define (random-tests) + (define (random-string length) + (build-string length (lambda (i) (integer->char (add1 (random 255)))))) + (define (roundtrip s) + (define encoded (form-urlencoded-encode s)) + (form-urlencoded-decode encoded)) + (for ([i 1000]) + (define s (random-string #e1e3)) + (test (roundtrip s) => s))) + (module+ test (require (submod ".." main))) ; for raco test & drdr