From 7d47105aaca7614366d59a5c3ae905a53b4342db Mon Sep 17 00:00:00 2001 From: Jay McCarthy Date: Tue, 23 Oct 2012 11:27:08 -0600 Subject: [PATCH 1/5] Test localhost tcp before running echo server test original commit: 552fe0f755b30ce298aa0be0044eb6ae68209873 --- collects/tests/net/available.rkt | 83 ++++++++++++++++++++++++++++++++ collects/tests/net/websocket.rkt | 21 ++++---- 2 files changed, 94 insertions(+), 10 deletions(-) create mode 100644 collects/tests/net/available.rkt diff --git a/collects/tests/net/available.rkt b/collects/tests/net/available.rkt new file mode 100644 index 0000000000..9fc245f2c9 --- /dev/null +++ b/collects/tests/net/available.rkt @@ -0,0 +1,83 @@ +#lang racket/base +(require racket/tcp + racket/list + racket/match + racket/port + racket/contract) + +(define to-client #"0") +(define to-server #"1") +(define (tcp-localhost-available?) + (with-handlers + ([exn? (λ (x) #f)]) + (define the-listener + (tcp-listen 0 4 #t #f)) + (define-values (local-host port end-host end-port) + (tcp-addresses the-listener #t)) + (let loop ([listener the-listener] + [sip #f] [sop #f] + [connected? #f] + [cip #f] [cop #f]) + (if (and (not listener) + (not sip) + (not sop) + connected? + (not cip) + (not cop)) + #t + (sync + (if listener + (handle-evt + (tcp-accept-evt listener) + (match-lambda + [(list sip sop) + (tcp-close listener) + (loop #f sip sop connected? cip cop)])) + never-evt) + (if sop + (handle-evt + (write-bytes-avail-evt to-client sop) + (λ (written-bs-n) + (tcp-abandon-port sop) + (loop #f sip #f connected? cip cop))) + never-evt) + (if sip + (handle-evt + (read-bytes-evt 1 sip) + (λ (read-bs) + (unless (bytes=? to-server read-bs) + (error 'wrong)) + (tcp-abandon-port sip) + (loop #f #f sop connected? cip cop))) + never-evt) + (if connected? + never-evt + (handle-evt + always-evt + (λ (_) + (define-values (cip cop) + (tcp-connect "localhost" port)) + (loop listener sip sop #t cip cop)))) + (if cop + (handle-evt + (write-bytes-avail-evt to-server cop) + (λ (written-bs-n) + (tcp-abandon-port cop) + (loop listener sip sop connected? cip #f))) + never-evt) + (if cip + (handle-evt + (read-bytes-evt 1 cip) + (λ (read-bs) + (unless (bytes=? to-client read-bs) + (error 'wrong)) + (tcp-abandon-port cip) + (loop listener sip sop connected? #f cop))) + never-evt)))))) + +(provide + (contract-out + [tcp-localhost-available? (-> boolean?)])) + +(module+ main + (tcp-localhost-available?)) diff --git a/collects/tests/net/websocket.rkt b/collects/tests/net/websocket.rkt index 51373a3351..cc90765581 100644 --- a/collects/tests/net/websocket.rkt +++ b/collects/tests/net/websocket.rkt @@ -6,6 +6,7 @@ racket/async-channel net/url rackunit + tests/net/available tests/eli-tester) (define RANDOM-K 100) @@ -81,14 +82,14 @@ (define p (async-channel-get confirm)) (define conn (ws-connect (string->url (format "ws://localhost:~a" p)))) - (when conn - (test (ws-send! conn r) - (ws-recv conn) => r - (ws-send! conn "a") - (ws-recv conn) => "a" - (ws-close! conn))) + (test (ws-send! conn r) + (ws-recv conn) => r + (ws-send! conn "a") + (ws-recv conn) => "a" + (ws-close! conn)) (test (shutdown!)))] - (test #:failure-prefix "old" - (parameterize ([framing-mode 'old]) (test-echo-server)) - #:failure-prefix "new" - (parameterize ([framing-mode 'new]) (test-echo-server)))))) + (when (tcp-localhost-available?) + (test #:failure-prefix "old" + (parameterize ([framing-mode 'old]) (test-echo-server)) + #:failure-prefix "new" + (parameterize ([framing-mode 'new]) (test-echo-server))))))) From 191874f50f7acd3ee6053fd9a3640a11174cde9c Mon Sep 17 00:00:00 2001 From: Jay McCarthy Date: Fri, 26 Oct 2012 15:26:39 -0600 Subject: [PATCH 2/5] second attempt at removing reliance on tcp. available has been greatly simplified because it relied on the behavior the thread.rktl test is actually testing original commit: f16e76ca3275608479d9b49845c421c89a931162 --- collects/tests/net/available.rkt | 70 ++++---------------------------- 1 file changed, 7 insertions(+), 63 deletions(-) diff --git a/collects/tests/net/available.rkt b/collects/tests/net/available.rkt index 9fc245f2c9..3b67aa85f2 100644 --- a/collects/tests/net/available.rkt +++ b/collects/tests/net/available.rkt @@ -5,75 +5,19 @@ racket/port racket/contract) -(define to-client #"0") -(define to-server #"1") (define (tcp-localhost-available?) (with-handlers ([exn? (λ (x) #f)]) (define the-listener - (tcp-listen 0 4 #t #f)) + (tcp-listen 0 5 #t)) (define-values (local-host port end-host end-port) (tcp-addresses the-listener #t)) - (let loop ([listener the-listener] - [sip #f] [sop #f] - [connected? #f] - [cip #f] [cop #f]) - (if (and (not listener) - (not sip) - (not sop) - connected? - (not cip) - (not cop)) - #t - (sync - (if listener - (handle-evt - (tcp-accept-evt listener) - (match-lambda - [(list sip sop) - (tcp-close listener) - (loop #f sip sop connected? cip cop)])) - never-evt) - (if sop - (handle-evt - (write-bytes-avail-evt to-client sop) - (λ (written-bs-n) - (tcp-abandon-port sop) - (loop #f sip #f connected? cip cop))) - never-evt) - (if sip - (handle-evt - (read-bytes-evt 1 sip) - (λ (read-bs) - (unless (bytes=? to-server read-bs) - (error 'wrong)) - (tcp-abandon-port sip) - (loop #f #f sop connected? cip cop))) - never-evt) - (if connected? - never-evt - (handle-evt - always-evt - (λ (_) - (define-values (cip cop) - (tcp-connect "localhost" port)) - (loop listener sip sop #t cip cop)))) - (if cop - (handle-evt - (write-bytes-avail-evt to-server cop) - (λ (written-bs-n) - (tcp-abandon-port cop) - (loop listener sip sop connected? cip #f))) - never-evt) - (if cip - (handle-evt - (read-bytes-evt 1 cip) - (λ (read-bs) - (unless (bytes=? to-client read-bs) - (error 'wrong)) - (tcp-abandon-port cip) - (loop listener sip sop connected? #f cop))) - never-evt)))))) + (thread + (λ () + (tcp-accept the-listener) + (tcp-close the-listener))) + (tcp-connect "localhost" port) + #t)) (provide (contract-out From 7c864d188f7307233e45047a3595c6fb4cd04ad3 Mon Sep 17 00:00:00 2001 From: John Clements Date: Thu, 1 Nov 2012 12:37:34 -0700 Subject: [PATCH 3/5] exposed mapping for unreserved characters original commit: 1f02a0a8b8ef63e3db673a6a6339e7ef3c2fbfc3 --- collects/net/scribblings/uri-codec.scrbl | 6 ++++++ collects/tests/net/uri-codec.rkt | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/collects/net/scribblings/uri-codec.scrbl b/collects/net/scribblings/uri-codec.scrbl index 6429b238f4..04a41496e2 100644 --- a/collects/net/scribblings/uri-codec.scrbl +++ b/collects/net/scribblings/uri-codec.scrbl @@ -86,6 +86,12 @@ Encodes a string according to the rules in @cite["RFC3986"] for the userinfo fie @defproc[(uri-userinfo-decode [str string?]) string?]{ Decodes a string according to the rules in @cite["RFC3986"] for the userinfo field. } +@defproc[(uri-unreserved-encode [str string?]) string?]{ +Encodes a string according to the rules in @cite["RFC3986"](section 2.3) for the unreserved characters. +} +@defproc[(uri-unreserved-decode [str string?]) string?]{ +Decodes a string according to the rules in @cite["RFC3986"](section 2.3) for the unreserved characters. +} @defproc[(form-urlencoded-encode [str string?]) string?]{ diff --git a/collects/tests/net/uri-codec.rkt b/collects/tests/net/uri-codec.rkt index 2517f6f43f..d6836e90d8 100644 --- a/collects/tests/net/uri-codec.rkt +++ b/collects/tests/net/uri-codec.rkt @@ -69,7 +69,17 @@ (uri-userinfo-decode "hello") => "hello" (uri-userinfo-decode "hello%20there") => "hello there" (uri-userinfo-decode "hello:there") => "hello:there" - + + ;; tried to choose characters from each subset: + (uri-encode "M~(@; ") => "M~(%40%3B%20" + (uri-path-segment-encode "M~(@; ") => "M~(@%3B%20" + (uri-userinfo-encode "M~(@; ") => "M~(%40;%20" + (uri-unreserved-encode "M~(@; ") => "M~%28%40%3B%20" + ;; matching decodes: + (uri-decode "M~(%40%3B%20") => "M~(@; " + (uri-path-segment-decode "M~(@%3B%20") => "M~(@; " + (uri-userinfo-decode "M~(%40;%20") => "M~(@; " + (uri-unreserved-decode "M~%28%40%3B%20") => "M~(@; " )) ;; tests adapted from Noel Welsh's original test suite From e023d133e7548fbe556b80e7d26c916d6b24bed2 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Thu, 1 Nov 2012 15:14:23 -0600 Subject: [PATCH 4/5] adding close-eval at the end of scribble files that have a toplevel evaluator original commit: dcf4d8b040f1acdc535d1542e0d7b1bb1112d987 --- collects/net/scribblings/cookie.scrbl | 4 ++++ collects/net/scribblings/head.scrbl | 4 ++++ collects/net/scribblings/uri-codec.scrbl | 3 +++ 3 files changed, 11 insertions(+) diff --git a/collects/net/scribblings/cookie.scrbl b/collects/net/scribblings/cookie.scrbl index ecd0b22d6f..dfbe81fcd6 100644 --- a/collects/net/scribblings/cookie.scrbl +++ b/collects/net/scribblings/cookie.scrbl @@ -187,3 +187,7 @@ Imports nothing, exports @racket[cookie^].} @defsignature[cookie^ ()]{} Includes everything exported by the @racketmodname[net/cookie] module. + + + +@close-eval[cookie-eval] \ No newline at end of file diff --git a/collects/net/scribblings/head.scrbl b/collects/net/scribblings/head.scrbl index 440612e680..f46e79eff5 100644 --- a/collects/net/scribblings/head.scrbl +++ b/collects/net/scribblings/head.scrbl @@ -241,3 +241,7 @@ Imports nothing, exports @racket[head^].} @defsignature[head^ ()]{} Includes everything exported by the @racketmodname[net/head] module. + + + +@close-eval[head-eval] \ No newline at end of file diff --git a/collects/net/scribblings/uri-codec.scrbl b/collects/net/scribblings/uri-codec.scrbl index 04a41496e2..f25e274e7b 100644 --- a/collects/net/scribblings/uri-codec.scrbl +++ b/collects/net/scribblings/uri-codec.scrbl @@ -185,3 +185,6 @@ Imports nothing, exports @racket[uri-codec^].} @defsignature[uri-codec^ ()]{} Includes everything exported by the @racketmodname[net/uri-codec] module. + + +@close-eval[uri-codec-eval] From 91b048020e4fa97b965e97f2e42407fad146ee41 Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Tue, 6 Nov 2012 14:07:15 -0500 Subject: [PATCH 5/5] Newlines at EOFs. original commit: 14d8c8b5a5b665d03c14748e5416ec2f1753d4fb --- collects/net/scribblings/cookie.scrbl | 3 +-- collects/net/scribblings/head.scrbl | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/collects/net/scribblings/cookie.scrbl b/collects/net/scribblings/cookie.scrbl index dfbe81fcd6..59ee053eee 100644 --- a/collects/net/scribblings/cookie.scrbl +++ b/collects/net/scribblings/cookie.scrbl @@ -189,5 +189,4 @@ Imports nothing, exports @racket[cookie^].} Includes everything exported by the @racketmodname[net/cookie] module. - -@close-eval[cookie-eval] \ No newline at end of file +@close-eval[cookie-eval] diff --git a/collects/net/scribblings/head.scrbl b/collects/net/scribblings/head.scrbl index f46e79eff5..2d7a073ba1 100644 --- a/collects/net/scribblings/head.scrbl +++ b/collects/net/scribblings/head.scrbl @@ -243,5 +243,4 @@ Imports nothing, exports @racket[head^].} Includes everything exported by the @racketmodname[net/head] module. - -@close-eval[head-eval] \ No newline at end of file +@close-eval[head-eval]