From: "Ludovic Courtès" <ludo@gnu.org>
To: Maxime Devos <maximedevos@telenet.be>
Cc: 53389@debbugs.gnu.org
Subject: [bug#53389] [PATCH 0/9] Replace some mocking with with-http-server*, avoid hardcoding ports,
Date: Sat, 22 Jan 2022 17:48:32 +0100 [thread overview]
Message-ID: <87lez7zpgf.fsf_-_@gnu.org> (raw)
In-Reply-To: <20220120130849.292178-1-maximedevos@telenet.be> (Maxime Devos's message of "Thu, 20 Jan 2022 13:08:41 +0000")
Hi Maxime,
Maxime Devos <maximedevos@telenet.be> skribis:
> An incompatible change to with-http-server has been made: it now
> also exits when the thunk exits. This change allows implementing
> with-http-server*. It also keeps threads from lingering if the
> thunk doesn't access all of RESPONSES+DATA.
>
> Usually, this change is fine, but it does not interact nicely with
> monads in tests/challenge, so a variant with-http-server/lingering
> preserving the old behaviour has been defined.
>
> * guix/tests/http.scm
> (call-with-http-server): Extract most functionality to ...
> (call-with-http-server*): ... this new procedure. Also stop the
> server thread after 'thunk' returns instead of when the last response
> has been sent unless requested not to.
> (with-http-server/keep-lingering): New macro.
> * tests/challenge.scm (call-mismatch-test): Use the 'keep-lingering'
> variant of 'with-http-server'.
[...]
> #:export (with-http-server
> + with-http-server/keep-lingering
> + with-http-server*
> call-with-http-server
> + call-with-http-server*
> %http-server-port
> %local-url))
My first reaction was: have we gone overboard? :-)
Since it’s an internal module and a test helper, I’m in favor of keeping
it as simple as possible. Can we keep a single ‘with-http-server’ form
that would cover all cases?
We can update existing tests to include the expected URL path (or a
wildcard, if needed), instead of keeping several forms. We don’t need
to worry about backward compatibility at all.
> + (unless keep-lingering?
> + ;; exit the server thread
> + (system-async-mark (lambda () (throw 'quit)) server))
When do we need ‘keep-lingering?’? So far, all uses of
‘with-http-server’ expected that the server would quit once the last
response has been sent. It would be nice if we could keep it that way.
> + (apply values results)))))
> +
> +
> +(define* (call-with-http-server responses+data thunk #:key (keep-lingering? #false))
> + "Call THUNK with an HTTP server running and returning RESPONSES+DATA
> +on HTTP requests. Each element of RESPONSES+DATA must be a tuple containing a
> +response and a string, or an HTTP response code and a string.
> +
> +The argument RESPONSES+DATA is thunked. As such, RESPONSES+DATA can use
> +%http-server-port. %http-server-port will be set to the port listened at.
> +It will be set for the dynamic extent of THUNK and RESPONSES+DATA.
> +
> +The server will exit after the last response. When KEEP-LINGERING? is false,
> +the server will also exit after THUNK returns."
Within tests, it would be nice if we could avoid using the ‘thunk’ form
and instead always use the declarative form (list of URL path/response
code/response body). That should make the tests more concise and
readable.
Or are there new uses where the declarative form is insufficiently
expressive?
Thanks,
Ludo’.
next prev parent reply other threads:[~2022-01-22 16:49 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-20 12:59 [bug#53389] [PATCH 0/9] Replace some mocking with with-http-server*, avoid hardcoding ports, Maxime Devos
2022-01-20 13:08 ` [bug#53389] [PATCH 1/9] tests: Support arbitrary HTTP request handlers Maxime Devos
2022-01-20 13:08 ` [bug#53389] [PATCH 2/9] tests: Generalise %local-url Maxime Devos
2022-01-20 13:08 ` [bug#53389] [PATCH 3/9] tests/minetest: Run a HTTP server instead of mocking Maxime Devos
2022-01-20 13:08 ` [bug#53389] [PATCH 4/9] tests/import-github: " Maxime Devos
2022-01-20 13:08 ` [bug#53389] [PATCH 5/9] tests/cpan: Do not hard code a HTTP port Maxime Devos
2022-01-20 13:08 ` [bug#53389] [PATCH 6/9] tests/lint: Do not assume the next port is free Maxime Devos
2022-01-20 13:08 ` [bug#53389] [PATCH 7/9] tests: Allow checking the URI of a HTTP request Maxime Devos
2022-01-20 13:08 ` [bug#53389] [PATCH 8/9] tests/cpan: Verify URIs Maxime Devos
2022-01-20 13:08 ` [bug#53389] [PATCH 9/9] tests/challenge: Do not hard code HTTP ports Maxime Devos
2022-01-22 16:48 ` Ludovic Courtès [this message]
2022-01-22 18:55 ` [bug#53389] [PATCH 0/9] Replace some mocking with with-http-server*, avoid hardcoding ports, Maxime Devos
2022-01-25 7:54 ` Ludovic Courtès
2022-01-25 13:37 ` Maxime Devos
2022-02-07 9:53 ` Ludovic Courtès
2022-02-07 10:59 ` Maxime Devos
2022-03-06 16:23 ` Ludovic Courtès
2022-03-07 7:00 ` Maxime Devos
2022-01-22 19:21 ` Maxime Devos
2022-01-22 19:57 ` Maxime Devos
2022-01-22 20:42 ` Maxime Devos
2022-01-22 18:08 ` [bug#53389] [PATCH 1/9] tests: Support arbitrary HTTP request handlers Maxime Devos
2022-01-20 15:11 ` [bug#53389] [PATCH 0/9] Replace some mocking with with-http-server*, avoid hardcoding ports, Ludovic Courtès
2022-04-12 19:46 ` [bug#53389] [PATCH 0/9] Replace some mocking with with-http-server Maxime Devos
2022-04-21 15:20 ` [bug#53389] [PATCH v2 0/25] Replace some mocking with with-http-server*, avoid harcoding ports Maxime Devos
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87lez7zpgf.fsf_-_@gnu.org \
--to=ludo@gnu.org \
--cc=53389@debbugs.gnu.org \
--cc=maximedevos@telenet.be \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).