[bug#56563] gnu: tests: Fix guix-data-service test.
Commit Message
Since revision 32, guix-data-service starts immediately but returns an HTTP
error code until initialization is complete. Adjust the test accordingly, and
remove the increased startup time limit.
* gnu/services/guix.scm (guix-data-service): Use default #:pid-file-timeout.
* gnu/tests/guix.scm (guix-data-service): Retry the http-get test several
times to give the service time to initialize.
---
gnu/services/guix.scm | 2 --
gnu/tests/guix.scm | 19 +++++++++++++------
2 files changed, 13 insertions(+), 8 deletions(-)
Comments
Timotej Lazar <timotej.lazar@araneo.si> anaandika:
[...]
> + ;; The service starts immediately but replies with status 500 until
> + ;; initialization is complete, so keep trying for a while.
> + (define* (try-http-get attempts)
Minor nitpick. This function definition does not
take any optional or key-word arguments AFAICT, so
it should be a "define" instead :)
> + (let ((status (let-values (((response text)
> + (http-get #$(simple-format
> + #f "http://localhost:~A/healthcheck"
> + forwarded-port))))
> + (response-code response))))
> + (if (or (= status 200) (<= attempts 1))
> + status
> + (begin (sleep 10) (try-http-get (- attempts 1))))))
> +
> (test-equal "http-get"
> 200
> - (let-values
> - (((response text)
> - (http-get #$(simple-format
> - #f "http://localhost:~A/healthcheck" forwarded-port)
> - #:decode-body? #t)))
> - (response-code response)))
> + (try-http-get 10))
>
> (test-end))))
Munyoki Kilyungi <me@bonfacemunyoki.com> [2022-07-15 00:26:16+0300]:
> Timotej Lazar <timotej.lazar@araneo.si> anaandika:
>> + (define* (try-http-get attempts)
>
> Minor nitpick. This function definition does not
> take any optional or key-word arguments AFAICT, so
> it should be a "define" instead :)
It used to but then I changed my mind. :) Nice catch, I’ll send an
update. Thanks!
Timotej Lazar <timotej.lazar@araneo.si> anaandika:
> Munyoki Kilyungi <me@bonfacemunyoki.com> [2022-07-15 00:26:16+0300]:
>> Timotej Lazar <timotej.lazar@araneo.si> anaandika:
>>> + (define* (try-http-get attempts)
>>
>> Minor nitpick. This function definition does not
>> take any optional or key-word arguments AFAICT, so
>> it should be a "define" instead :)
>
> It used to but then I changed my mind. :) Nice catch, I’ll send an
> update. Thanks!
Cool \m/\m/.
@@ -652,8 +652,6 @@ (define (guix-data-service-shepherd-services config)
#:user #$user
#:group #$group
#:pid-file "/var/run/guix-data-service/pid"
- ;; Allow time for migrations to run
- #:pid-file-timeout 120
#:environment-variables
`(,(string-append
"GUIX_LOCPATH=" #$glibc-utf8-locales "/lib/locale")
@@ -222,14 +222,21 @@ (define marionette
((pid) (number? pid))))))
marionette))
+ ;; The service starts immediately but replies with status 500 until
+ ;; initialization is complete, so keep trying for a while.
+ (define* (try-http-get attempts)
+ (let ((status (let-values (((response text)
+ (http-get #$(simple-format
+ #f "http://localhost:~A/healthcheck"
+ forwarded-port))))
+ (response-code response))))
+ (if (or (= status 200) (<= attempts 1))
+ status
+ (begin (sleep 10) (try-http-get (- attempts 1))))))
+
(test-equal "http-get"
200
- (let-values
- (((response text)
- (http-get #$(simple-format
- #f "http://localhost:~A/healthcheck" forwarded-port)
- #:decode-body? #t)))
- (response-code response)))
+ (try-http-get 10))
(test-end))))