diff options
author | Rodion Goritskov <rodion.goritskov@gmail.com> | 2024-12-28 22:41:55 +0100 |
---|---|---|
committer | Rodion Goritskov <rodion.goritskov@gmail.com> | 2025-01-16 23:53:59 +0100 |
commit | a89e3cbe656e3b884f0df3ea55de3630a8e58f0f (patch) | |
tree | 4b2a5b244e20f6352d26e6e9d33ee658e71e87b6 /gnu/tests | |
parent | a42d57a935009e4dd9b9e9464458540def2cb576 (diff) |
gnu: Add miniflux-service-type.add-miniflux-service
* gnu/services/feed.scm (miniflux-service-type): New variable.
* gnu/tests/feed.scm (%test-miniflux): Add test.
Change-Id: I4a336e677ec8b46aed632f0ded9cc11c2d38975f
Diffstat (limited to 'gnu/tests')
-rw-r--r-- | gnu/tests/feed.scm | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/gnu/tests/feed.scm b/gnu/tests/feed.scm new file mode 100644 index 0000000000..8be7d8b826 --- /dev/null +++ b/gnu/tests/feed.scm @@ -0,0 +1,136 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2024 Rodion Goritskov <rodion.goritskov@gmail.com> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu tests feed) + #:use-module (gnu tests) + #:use-module (gnu system) + #:use-module (gnu system vm) + #:use-module (gnu services) + #:use-module (gnu services networking) + #:use-module (gnu services databases) + #:use-module (gnu packages databases) + #:use-module (guix monads) + #:use-module (guix store) + #:use-module (guix profiles) + #:use-module (gnu services feed) + #:use-module (guix gexp) + #:export (%test-miniflux)) + +(define retry-on-error + #~(lambda* (f #:key times delay) + (let loop ((attempt 1)) + (match (catch + #t + (lambda () + (cons #t + (f))) + (lambda args + (cons #f + args))) + ((#t . return-value) + return-value) + ((#f . error-args) + (if (>= attempt times) + error-args + (begin + (sleep delay) + (loop (+ 1 attempt))))))))) + +(define %miniflux-os + (simple-operating-system + (service dhcp-client-service-type) + (service postgresql-service-type + (postgresql-configuration + (postgresql postgresql-13))) + (service miniflux-service-type + (miniflux-configuration + (listen-addr "0.0.0.0:8080"))))) + +(define* (run-miniflux-test name test-os) + (define os + (marionette-operating-system + test-os + #:imported-modules '((gnu services herd) + (guix combinators)))) + + (define forwarded-port 8080) + + (define vm + (virtual-machine + (operating-system os) + (memory-size 512) + (port-forwardings `((8080 . ,forwarded-port))))) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (srfi srfi-64) + (srfi srfi-11) + (gnu build marionette) + (web client) + (web uri) + (web response) + (ice-9 match)) + + (define marionette + (make-marionette (list #$vm))) + + (test-runner-current (system-test-runner #$output)) + (test-begin #$name) + + (test-assert "Check Miniflux service is running" + (begin + (#$retry-on-error + (lambda () + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (match (start-service '#$(string->symbol name)) + (#f #f) + (('service response-parts ...) + (match (assq-ref response-parts 'running) + (#f #f) + ((running) #t))))) + marionette)) + #:delay 1 + #:times 10))) + + (test-assert "Miniflux TCP port ready, IPv4" + (wait-for-tcp-port #$forwarded-port marionette)) + + (test-assert "Miniflux login page is opened" + (begin + (wait-for-tcp-port #$forwarded-port marionette) + (#$retry-on-error + (lambda () + (let-values (((response text) + (http-get + #$(format #f "http://localhost:~A/" forwarded-port) + #:decode-body? #t))) + (string-contains text "<title>Sign In - Miniflux</title>"))) + #:times 10 + #:delay 5))) + + (test-end)))) + (gexp->derivation "miniflux-test" test)) + +(define %test-miniflux + (system-test + (name "miniflux") + (description "Connect to a running Miniflux service.") + (value (run-miniflux-test name %miniflux-os)))) |