| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | |
| 12 | |
| 13 | |
| 14 | |
| 15 | |
| 16 | |
| 17 | |
| 18 | |
| 19 |
|
| 20 | (define-module (gnu tests high-availability)
|
| 21 | #:use-module (gnu tests)
|
| 22 | #:use-module (gnu packages erlang)
|
| 23 | #:use-module (gnu packages high-availability)
|
| 24 | #:use-module (gnu system)
|
| 25 | #:use-module (gnu system file-systems)
|
| 26 | #:use-module (gnu system shadow)
|
| 27 | #:use-module (gnu system vm)
|
| 28 | #:use-module (gnu services)
|
| 29 | #:use-module (gnu services high-availability)
|
| 30 | #:use-module (gnu services networking)
|
| 31 | #:use-module (guix gexp)
|
| 32 | #:use-module (guix store)
|
| 33 | #:export (%test-epmd
|
| 34 | %test-rabbitmq))
|
| 35 |
|
| 36 | |
| 37 | |
| 38 | |
| 39 | (define %epmd-os
|
| 40 | (simple-operating-system
|
| 41 | (service epmd-service-type
|
| 42 | (epmd-configuration (port 14369)))))
|
| 43 |
|
| 44 | (define* (run-epmd-test #:key (epmd-port 14369))
|
| 45 | "Run tests in %EPMD-OS, forwarding PORT."
|
| 46 | (define os
|
| 47 | (marionette-operating-system
|
| 48 | %epmd-os
|
| 49 | #:imported-modules '((gnu services herd)
|
| 50 | (guix combinators))))
|
| 51 |
|
| 52 | (define forwarded-port 14369)
|
| 53 |
|
| 54 | (define vm
|
| 55 | (virtual-machine
|
| 56 | (operating-system os)
|
| 57 | (memory-size 512)
|
| 58 | (port-forwardings `((,epmd-port . ,forwarded-port)))))
|
| 59 |
|
| 60 | (define test
|
| 61 | (with-imported-modules '((gnu build marionette))
|
| 62 | #~(begin
|
| 63 | (use-modules (srfi srfi-64)
|
| 64 | (gnu build marionette)
|
| 65 | (ice-9 rdelim))
|
| 66 |
|
| 67 | (define marionette
|
| 68 | (make-marionette (list #$vm)))
|
| 69 |
|
| 70 | (mkdir #$output)
|
| 71 | (chdir #$output)
|
| 72 |
|
| 73 | (test-runner-current (system-test-runner #$output))
|
| 74 | (test-begin "epmd")
|
| 75 |
|
| 76 | |
| 77 | (test-assert "service running"
|
| 78 | (marionette-eval
|
| 79 | '(begin
|
| 80 | (use-modules (gnu services herd))
|
| 81 | (match (start-service 'epmd)
|
| 82 | (#f #f)
|
| 83 | (('service response-parts ...)
|
| 84 | (match (assq-ref response-parts 'running)
|
| 85 | ((#t) #t)
|
| 86 | ((pid) pid)))))
|
| 87 | marionette))
|
| 88 |
|
| 89 | (test-assert "epmd port ready"
|
| 90 | (wait-for-tcp-port #$forwarded-port marionette))
|
| 91 |
|
| 92 | (test-assert "epmd connection is successful"
|
| 93 | (marionette-eval
|
| 94 | '(begin
|
| 95 | (use-modules (guix build utils))
|
| 96 |
|
| 97 | (current-output-port (open-file "/dev/console" "w0"))
|
| 98 | (invoke #$(file-append erlang "/bin/epmd")
|
| 99 | "-port"
|
| 100 | "14369"
|
| 101 | "-names"))
|
| 102 | marionette))
|
| 103 | (test-end))))
|
| 104 |
|
| 105 | (gexp->derivation "epmd-test" test))
|
| 106 |
|
| 107 | (define %test-epmd
|
| 108 | (system-test
|
| 109 | (name "epmd")
|
| 110 | (description "Connect to a running epmd service.")
|
| 111 | (value (run-epmd-test))))
|
| 112 |
|
| 113 | (define %rabbitmq-config-file
|
| 114 | (plain-file "rabbitmq.conf" "
|
| 115 | listeners.tcp.1 = 127.0.0.1:15672
|
| 116 | listeners.tcp.2 = ::1:15672
|
| 117 |
|
| 118 | distribution.listener.interface = 127.0.0.1
|
| 119 | "))
|
| 120 |
|
| 121 | (define %rabbitmq-os
|
| 122 | (simple-operating-system
|
| 123 | (service epmd-service-type)
|
| 124 | (service rabbitmq-service-type
|
| 125 | (rabbitmq-configuration (node-name "rabbit@komputilo")
|
| 126 | (config-file %rabbitmq-config-file)))))
|
| 127 |
|
| 128 | (define* (run-rabbitmq-test #:key (rabbitmq-port 15672))
|
| 129 | "Run tests in %RABBITMQ-OS, forwarding PORT."
|
| 130 | (define os
|
| 131 | (marionette-operating-system
|
| 132 | %rabbitmq-os
|
| 133 | #:imported-modules '((gnu services herd)
|
| 134 | (guix combinators))))
|
| 135 |
|
| 136 | (define forwarded-port 15672)
|
| 137 |
|
| 138 | (define vm
|
| 139 | (virtual-machine
|
| 140 | (operating-system os)
|
| 141 | (memory-size 512)
|
| 142 | (port-forwardings `((,rabbitmq-port . ,forwarded-port)))))
|
| 143 |
|
| 144 | (define test
|
| 145 | (with-imported-modules '((gnu build marionette))
|
| 146 | #~(begin
|
| 147 | (use-modules (srfi srfi-64)
|
| 148 | (gnu build marionette)
|
| 149 | (ice-9 rdelim))
|
| 150 |
|
| 151 | (define marionette
|
| 152 | (make-marionette (list #$vm)))
|
| 153 |
|
| 154 | (mkdir #$output)
|
| 155 | (chdir #$output)
|
| 156 |
|
| 157 | (test-runner-current (system-test-runner #$output))
|
| 158 | (test-begin "rabbitmq")
|
| 159 |
|
| 160 | |
| 161 | (test-assert "service running"
|
| 162 | (marionette-eval
|
| 163 | '(begin
|
| 164 | (use-modules (gnu services herd))
|
| 165 | (match (start-service 'rabbitmq)
|
| 166 | (#f #f)
|
| 167 | (('service response-parts ...)
|
| 168 | (match (assq-ref response-parts 'running)
|
| 169 | ((#t) #t)
|
| 170 | ((pid) pid)))))
|
| 171 | marionette))
|
| 172 |
|
| 173 | (test-assert "RabbitMQ port ready"
|
| 174 | (wait-for-tcp-port #$forwarded-port marionette))
|
| 175 |
|
| 176 | (test-assert "RabbitMQ log file exists"
|
| 177 | (marionette-eval
|
| 178 | '(file-exists? "/var/log/rabbitmq/[email protected]")
|
| 179 | marionette))
|
| 180 |
|
| 181 | (test-assert "RabbitMQ await startup command is successful"
|
| 182 | (marionette-eval
|
| 183 | '(begin
|
| 184 | (use-modules (guix build utils))
|
| 185 |
|
| 186 | (current-output-port (open-file "/dev/console" "w0"))
|
| 187 | (invoke #$(file-append rabbitmq "/sbin/rabbitmqctl")
|
| 188 | "await_startup"
|
| 189 | "-n"
|
| 190 | "rabbit@komputilo"))
|
| 191 | marionette))
|
| 192 |
|
| 193 | (test-assert "RabbitMQ status command is successful"
|
| 194 | (marionette-eval
|
| 195 | '(begin
|
| 196 | (use-modules (guix build utils))
|
| 197 |
|
| 198 | (current-output-port (open-file "/dev/console" "w0"))
|
| 199 | (invoke #$(file-append rabbitmq "/sbin/rabbitmqctl")
|
| 200 | "status"
|
| 201 | "-n"
|
| 202 | "rabbit@komputilo"))
|
| 203 | marionette))
|
| 204 | (test-end))))
|
| 205 |
|
| 206 | (gexp->derivation "rabbitmq-test" test))
|
| 207 |
|
| 208 | (define %test-rabbitmq
|
| 209 | (system-test
|
| 210 | (name "rabbitmq")
|
| 211 | (description "Connect to a running RABBITMQ server.")
|
| 212 | (value (run-rabbitmq-test))))
|