projects/guix·blob javascript-team · refs

146 lines · 5.4 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2024 Fabio Natali <[email protected]>
3;;;
4;;; This file is part of GNU Guix.
5;;;
6;;; GNU Guix is free software; you can redistribute it and/or modify it
7;;; under the terms of the GNU General Public License as published by
8;;; the Free Software Foundation; either version 3 of the License, or (at
9;;; your option) any later version.
10;;;
11;;; GNU Guix is distributed in the hope that it will be useful, but
12;;; WITHOUT ANY WARRANTY; without even the implied warranty of
13;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14;;; GNU General Public License for more details.
15;;;
16;;; You should have received a copy of the GNU General Public License
17;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
18
19(define-module (gnu tests upnp)
20 #:use-module (gnu services)
21 #:use-module (gnu services networking)
22 #:use-module (gnu services upnp)
23 #:use-module (gnu system vm)
24 #:use-module (gnu tests)
25 #:use-module (guix gexp)
26 #:export (%test-readymedia))
27
28(define %readymedia-default-port 8200)
29(define %readymedia-media-directory "/media")
30(define %readymedia-configuration-test
31 (readymedia-configuration
32 (port %readymedia-default-port)
33 (media-directories
34 (list (readymedia-media-directory (path %readymedia-media-directory)
35 (types '(A V)))))))
36
37(define (run-readymedia-test)
38 (define os
39 (marionette-operating-system
40 (simple-operating-system
41 (service dhcpcd-service-type)
42 (service readymedia-service-type
43 %readymedia-configuration-test))
44 #:imported-modules '((gnu services herd)
45 (json parser))
46 #:requirements '(readymedia)))
47
48 (define test
49 (with-imported-modules '((gnu build marionette))
50 #~(begin
51 (use-modules (gnu build marionette)
52 (srfi srfi-64))
53
54 (define marionette
55 (make-marionette
56 (list #$(virtual-machine
57 (operating-system os)
58 (port-forwardings '())))))
59
60 (test-runner-current (system-test-runner #$output))
61 (test-begin "readymedia")
62
63 ;; ReadyMedia user
64 (test-assert "ReadyMedia user exists"
65 (marionette-eval
66 '(begin
67 (getpwnam #$%readymedia-user-account)
68 #t)
69 marionette))
70 (test-assert "ReadyMedia group exists"
71 (marionette-eval
72 '(begin
73 (getgrnam #$%readymedia-user-group)
74 #t)
75 marionette))
76
77 ;; Cache directory
78 (test-assert "cache directory exists"
79 (marionette-eval
80 '(eq? (stat:type (stat #$(%readymedia-default-cache-directory)))
81 'directory)
82 marionette))
83 (test-assert "cache directory has correct ownership"
84 (marionette-eval
85 '(let ((cache-dir (stat #$(%readymedia-default-cache-directory)))
86 (user (getpwnam #$%readymedia-user-account)))
87 (and (eqv? (stat:uid cache-dir) (passwd:uid user))
88 (eqv? (stat:gid cache-dir) (passwd:gid user))))
89 marionette))
90 (test-assert "cache directory has expected permissions"
91 (marionette-eval
92 '(eqv? (stat:perms (stat #$(%readymedia-default-cache-directory)))
93 #o755)
94 marionette))
95
96 ;; Log file
97 (test-assert "log file exists"
98 (marionette-eval
99 '(file-exists? #$(%readymedia-default-log-file))
100 marionette))
101
102 ;; Pid directory and file
103 (test-assert "pid directory exists"
104 (marionette-eval
105 '(eq? (stat:type (stat #$%readymedia-default-pid-directory))
106 'directory)
107 marionette))
108 (test-assert "pid directory has correct ownership"
109 (marionette-eval
110 '(let ((pid-dir (stat #$%readymedia-default-pid-directory))
111 (user (getpwnam #$%readymedia-user-account)))
112 (and (eqv? (stat:uid pid-dir) (passwd:uid user))
113 (eqv? (stat:gid pid-dir) (passwd:gid user))))
114 marionette))
115 (test-assert "pid directory has expected permissions"
116 (marionette-eval
117 '(eqv? (stat:perms (stat #$%readymedia-default-pid-directory))
118 #o755)
119 marionette))
120 (test-assert "containerd PID file present"
121 (wait-for-file #$(%readymedia-pid-file) marionette))
122
123 ;; Service
124 (test-assert "ReadyMedia service is running"
125 (marionette-eval
126 '(begin
127 (use-modules (gnu services herd)
128 (srfi srfi-1))
129 (live-service-running
130 (find (lambda (live-service)
131 (memq 'readymedia
132 (live-service-provision live-service)))
133 (current-services))))
134 marionette))
135 (test-assert "ReadyMedia service is listening for connections"
136 (wait-for-tcp-port #$%readymedia-default-port marionette))
137
138 (test-end))))
139
140 (gexp->derivation "readymedia-test" test))
141
142(define %test-readymedia
143 (system-test
144 (name "readymedia")
145 (description "Test the ReadyMedia service.")
146 (value (run-readymedia-test))))