;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2016, 2017 Ludovic Courtès ;;; ;;; 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 . (define-module (test-services) #:use-module (gnu services) #:use-module (gnu services herd) #:use-module (gnu services shepherd) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) #:use-module (srfi srfi-64)) (define live-service (@@ (gnu services herd) live-service)) (test-begin "services") (test-equal "services, default value" '(42 123 234 error) (let* ((t1 (service-typ
aboutsummaryrefslogtreecommitdiff
(start #f))) (e (shepherd-service-back-edges (list s1 s2 s3)))) (and (lset= eq? (e s1) (list s2 s3)) (lset= eq? (e s2) (list s3)) (null? (e s3))))) (test-equal "shepherd-service-upgrade: nothing to do" '(() ()) (call-with-values (lambda () (shepherd-service-upgrade '() '())) list)) (test-equal "shepherd-service-upgrade: one unchanged, one upgraded, one new" '(((bar)) ;unload ((bar) (baz))) ;load (call-with-values (lambda () ;; Here 'foo' is not upgraded because it is still running, whereas ;; 'bar' is upgraded because it is not currently running. 'baz' is ;; loaded because it's a new service. (shepherd-service-upgrade (list (live-service '(foo) '() #t) (live-service '(bar) '() #f) (live-service '(root) '() #t)) ;essential! (list (shepherd-service (provision '(foo)) (start #t)) (shepherd-service (provision '(bar)) (start #t)) (shepherd-service (provision '(baz)) (start #t))))) (lambda (unload load) (list (map live-service-provision unload) (map shepherd-service-provision load))))) (test-equal "shepherd-service-upgrade: service depended on is not unloaded" '(((baz)) ;unload ()) ;load (call-with-values (lambda () ;; Service 'bar' is not among the target services; yet, it must not be ;; unloaded because 'foo' depends on it. (shepherd-service-upgrade (list (live-service '(foo) '(bar) #t) (live-service '(bar) '() #t) ;still used! (live-service '(baz) '() #t)) (list (shepherd-service (provision '(foo)) (start #t))))) (lambda (unload load) (list (map live-service-provision unload) (map shepherd-service-provision load))))) (test-equal "shepherd-service-upgrade: obsolete services that depend on each other" '(((foo) (bar) (baz)) ;unload ((qux))) ;load (call-with-values (lambda () ;; 'foo', 'bar', and 'baz' depend on each other, but all of them are ;; obsolete, and thus should be unloaded. (shepherd-service-upgrade (list (live-service '(foo) '(bar) #t) ;obsolete (live-service '(bar) '(baz) #t) ;obsolete (live-service '(baz) '() #t)) ;obsolete (list (shepherd-service (provision '(qux)) (start #t))))) (lambda (unload load) (list (map live-service-provision unload) (map shepherd-service-provision load))))) (test-end)