From b8000c08c0378525bad674bb9ea5c274ba3f8ee1 Mon Sep 17 00:00:00 2001 From: Bogdan Popa Date: Mon, 30 Nov 2020 14:49:31 +0200 Subject: [PATCH 1/2] start command: fix default value for port Defaulting the port to "8080" at the `command-line' level breaks customization via `pollen.rkt'. --- pollen/private/command.rkt | 4 +-- pollen/test/data/project-port/hello.txt.pp | 3 ++ pollen/test/data/project-port/pollen.rkt | 6 ++++ pollen/test/test-project-port.rkt | 36 ++++++++++++++++++++++ 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 pollen/test/data/project-port/hello.txt.pp create mode 100644 pollen/test/data/project-port/pollen.rkt create mode 100644 pollen/test/test-project-port.rkt diff --git a/pollen/private/command.rkt b/pollen/private/command.rkt index 2cb1db9..21cea0e 100644 --- a/pollen/private/command.rkt +++ b/pollen/private/command.rkt @@ -182,13 +182,13 @@ version print the version" (current-server-port) (make-publish-di #:once-each [("--launch" "-l") "Launch browser after start" (set! launch-wanted #t)] [("--local") "Restrict access to localhost" (set! localhost-wanted #t)] - #:args ([dir (current-directory)] [port "8080"]) + #:args ([dir (current-directory)] [port #f]) (define parsed-dir (path->directory-path (normalize-path (very-nice-path dir)))) (unless (directory-exists? parsed-dir) (error (format "~a is not a directory" parsed-dir))) - (define parsed-port (string->number port)) + (define parsed-port (and port (string->number port))) (when (and parsed-port (not (exact-positive-integer? parsed-port))) (error (format "~a is not a valid port number" parsed-port))) (values parsed-dir parsed-port))) diff --git a/pollen/test/data/project-port/hello.txt.pp b/pollen/test/data/project-port/hello.txt.pp new file mode 100644 index 0000000..e33f50f --- /dev/null +++ b/pollen/test/data/project-port/hello.txt.pp @@ -0,0 +1,3 @@ +#lang pollen + +Hello! diff --git a/pollen/test/data/project-port/pollen.rkt b/pollen/test/data/project-port/pollen.rkt new file mode 100644 index 0000000..20cb202 --- /dev/null +++ b/pollen/test/data/project-port/pollen.rkt @@ -0,0 +1,6 @@ +#lang racket/base + +(module setup racket/base + (provide (all-defined-out)) + (define project-server-port + 9876)) diff --git a/pollen/test/test-project-port.rkt b/pollen/test/test-project-port.rkt new file mode 100644 index 0000000..83be40b --- /dev/null +++ b/pollen/test/test-project-port.rkt @@ -0,0 +1,36 @@ +#lang racket/base + +(require rackunit + racket/port + racket/runtime-path) + +(define-runtime-path project-port-dir "data/project-port") + +(define thd #f) +(define-values (in out) (make-pipe)) +(parameterize ([exit-handler (lambda (code) + (fail (format "abnormal exit from raco command~n code: ~a" code)) + (kill-thread thd))]) + (set! thd + (parameterize ([current-output-port out] + [current-error-port out] + [current-directory project-port-dir] + [current-command-line-arguments (vector "start")]) + (thread + (lambda () + (dynamic-require '(submod pollen/private/command raco) #f))))) + + (dynamic-wind + void + (lambda () + (sync + (handle-evt + (regexp-match-evt #rx"project server is http://localhost:9876" in) + void) + (handle-evt + (alarm-evt (+ (current-inexact-milliseconds) 5000)) + (lambda (_) + (fail "timed out while waiting for server to start"))))) + (lambda () + (break-thread thd) + (thread-wait thd)))) -- 2.25.1 From e7be028dc0358ffceeb17d55ebd39ac111654384 Mon Sep 17 00:00:00 2001 From: Bogdan Popa Date: Mon, 30 Nov 2020 15:11:59 +0200 Subject: [PATCH 2/2] test-project-port: connect to server to verify that it's up --- pollen/test/test-project-port.rkt | 75 ++++++++++++++++++------------- 1 file changed, 45 insertions(+), 30 deletions(-) diff --git a/pollen/test/test-project-port.rkt b/pollen/test/test-project-port.rkt index 83be40b..c449d6f 100644 --- a/pollen/test/test-project-port.rkt +++ b/pollen/test/test-project-port.rkt @@ -1,36 +1,51 @@ #lang racket/base -(require rackunit - racket/port - racket/runtime-path) +(require racket/port + racket/runtime-path + racket/tcp + rackunit) (define-runtime-path project-port-dir "data/project-port") -(define thd #f) -(define-values (in out) (make-pipe)) -(parameterize ([exit-handler (lambda (code) - (fail (format "abnormal exit from raco command~n code: ~a" code)) - (kill-thread thd))]) - (set! thd - (parameterize ([current-output-port out] - [current-error-port out] - [current-directory project-port-dir] - [current-command-line-arguments (vector "start")]) - (thread - (lambda () - (dynamic-require '(submod pollen/private/command raco) #f))))) +(define the-port + (dynamic-require + `(submod ,(build-path project-port-dir "pollen.rkt") setup) + 'project-server-port)) - (dynamic-wind - void - (lambda () - (sync - (handle-evt - (regexp-match-evt #rx"project server is http://localhost:9876" in) - void) - (handle-evt - (alarm-evt (+ (current-inexact-milliseconds) 5000)) - (lambda (_) - (fail "timed out while waiting for server to start"))))) - (lambda () - (break-thread thd) - (thread-wait thd)))) +(define-values (in out) + (make-pipe)) + +(define thd + (parameterize ([current-output-port out] + [current-error-port out] + [current-directory project-port-dir] + [current-command-line-arguments (vector "start")] + [exit-handler (lambda (code) + (fail (format "abnormal exit from raco command~n code: ~a" code)) + (kill-thread thd))]) + (thread + (lambda () + (dynamic-require '(submod pollen/private/command raco) #f))))) + +(dynamic-wind + void + (lambda () + (sync + (handle-evt + (regexp-match-evt #rx"ready to rock" in) + void) + (handle-evt + (alarm-evt (+ (current-inexact-milliseconds) 5000)) + (lambda (_) + (fail "timed out while waiting for server to start")))) + + (with-handlers ([exn:fail? + (lambda (e) + (fail (format "failed to connect to server: ~a" (exn-message e))))]) + (define-values (cin cout) + (tcp-connect "127.0.0.1" the-port)) + (close-output-port cout) + (close-input-port cin))) + (lambda () + (break-thread thd) + (thread-wait thd))) -- 2.25.1