You've already forked guix-tribes
Fix Hitch test lifecycle for local builds
This commit is contained in:
+85
-2
@@ -1,5 +1,13 @@
|
||||
(define-module (tribes packages web)
|
||||
#:use-module (gnu packages)
|
||||
#:use-module (gnu packages base)
|
||||
#:use-module (gnu packages curl)
|
||||
#:use-module (gnu packages libevent)
|
||||
#:use-module (gnu packages linux)
|
||||
#:use-module (gnu packages lsof)
|
||||
#:use-module (gnu packages pkg-config)
|
||||
#:use-module (gnu packages python)
|
||||
#:use-module (gnu packages tls)
|
||||
#:use-module ((gnu packages web) #:prefix upstream:)
|
||||
#:use-module ((guix licenses) #:prefix license:)
|
||||
#:use-module (guix base32)
|
||||
@@ -16,8 +24,65 @@
|
||||
|
||||
(define-public hitch
|
||||
(package
|
||||
(inherit upstream:hitch)
|
||||
(name "hitch")
|
||||
(version "1.8.0")
|
||||
(home-page "https://hitch-tls.org/")
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
`(#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-before 'check 'pre-check
|
||||
(lambda _
|
||||
;; Our grep is compiled without perl regexp support. Rewrite the
|
||||
;; command to not use it. Literal tabs are supported only in perl
|
||||
;; regexps, so inject one with printf instead.
|
||||
(substitute* "src/tests/test32-proxy-authority.sh"
|
||||
(("grep -Pq") "grep -q")
|
||||
(("extension:\\\\tdefault")
|
||||
"extension:$(printf '\\011')default"))
|
||||
|
||||
;; Most tests attempt to access hitch-tls.org, which is
|
||||
;; unavailable in the build container. Run them against a dummy
|
||||
;; local web server instead.
|
||||
(for-each (lambda (test)
|
||||
(substitute* test
|
||||
(("\\[hitch-tls\\.org\\]:80")
|
||||
"[localhost]:8000")))
|
||||
(find-files "src/tests" "\\.sh$"))
|
||||
|
||||
;; This test still relies on live external DNS/backend behavior
|
||||
;; via HOSTALIASES and is too environment-dependent for a
|
||||
;; reproducible build.
|
||||
(substitute* "src/tests/test25-dynamic-backend-address.sh"
|
||||
(("\\. hitch_test\\.sh")
|
||||
". hitch_test.sh\nskip \"dynamic backend address test requires live external backends\""))
|
||||
|
||||
;; The build container does not reap zombie processes, causing
|
||||
;; stop_hitch to hang indefinitely while waiting for the process
|
||||
;; to terminate because 'kill -0' never succeeds. Use a
|
||||
;; different test to see whether the process has shut down.
|
||||
(substitute* "src/tests/hitch_test.sh"
|
||||
(("kill -0 \"\\$HITCH_PID\"")
|
||||
"$(ps -p $HITCH_PID -o state= | grep -qv '^Z$')"))))
|
||||
(replace 'check
|
||||
(lambda* (#:key tests? #:allow-other-keys)
|
||||
(if (not tests?)
|
||||
#t
|
||||
(dynamic-wind
|
||||
(lambda ()
|
||||
;; Keep the dummy backend out of the build log pipe and
|
||||
;; tear it down explicitly after the suite so the daemon
|
||||
;; can observe EOF and finalize the derivation.
|
||||
(system* (which "sh") "-c"
|
||||
"python3 -m http.server >/dev/null 2>&1 & echo $! > .guix-hitch-test-http-server.pid")
|
||||
(invoke "sleep" "1"))
|
||||
(lambda ()
|
||||
(invoke "make" "check"))
|
||||
(lambda ()
|
||||
(when (file-exists? ".guix-hitch-test-http-server.pid")
|
||||
(system* (which "sh") "-c"
|
||||
"kill $(cat .guix-hitch-test-http-server.pid) >/dev/null 2>&1 || true")
|
||||
(delete-file ".guix-hitch-test-http-server.pid"))))))))))
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
@@ -25,7 +90,25 @@
|
||||
version
|
||||
".tar.gz"))
|
||||
(sha256
|
||||
(base32 "0klg2pfsbhjdabjv52i0gfjfv23r45n4vs3965xa5zkzpj299jfz"))))))
|
||||
(base32 "0klg2pfsbhjdabjv52i0gfjfv23r45n4vs3965xa5zkzpj299jfz"))))
|
||||
(native-inputs
|
||||
(list pkg-config
|
||||
|
||||
;; For tests.
|
||||
curl
|
||||
grep
|
||||
lsof
|
||||
procps
|
||||
python))
|
||||
(inputs
|
||||
(list libev openssl))
|
||||
(synopsis "Scalable TLS proxy")
|
||||
(description
|
||||
"Hitch is a performant TLS proxy based on @code{libev}. It terminates
|
||||
SSL/TLS connections and forwards the unencrypted traffic to a backend such
|
||||
as a web server. It is designed to handle many thousand connections on
|
||||
multicore machines.")
|
||||
(license license:bsd-2)))
|
||||
|
||||
(define-public vinyl
|
||||
(package
|
||||
|
||||
Reference in New Issue
Block a user