aboutsummaryrefslogtreecommitdiff

-port! #$port) (ft-set-sslconn! #f) (ft-connect-blocking) (ft-send-message #$jid #$message) (ft-set-daemon) (ft-main-loop)))) (define test (with-imported-modules '((gnu build marionette)) #~(begin (use-modules (gnu build marionette) (srfi srfi-64)) (define marionette (make-marionette (list #$vm))) (define (host-wait-for-file file) ;; Wait until FILE exists in the host. (let loop ((i 60)) (cond ((file-exists? file) #t) ((> i 0) (begin (sleep 1)) (loop (- i 1))) (else (error "file didn't show up" file))))) (mkdir #$output) (chdir #$output) (test-begin "xmpp") ;; Wait for XMPP service to be up and running. (test-assert "service running" (marionette-eval '(begin (use-modules (gnu services herd)) (start-service 'xmpp-daemon)) marionette)) ;; Check XMPP service's PID. (test-assert "service process id" (let ((pid (number->string (wait-for-file #$pid-file marionette)))) (marionette-eval `(file-exists? (string-append "/proc/" ,pid)) marionette))) ;; Alice sends an XMPP message to herself, with Freetalk. (test-assert "client-to-server communication" (let ((freetalk-bin (string-append #$freetalk "/bin/freetalk"))) (marionette-eval '(system* #$create-account #$jid #$password) marionette) ;; Freetalk requires write access to $HOME. (setenv "HOME" "/tmp") (system* freetalk-bin "-s" #$script.ft) (host-wait-for-file #$witness))) (test-end) (exit (= (test-runner-fail-count (test-runner-current)) 0))))) (gexp->derivation name test)) (define %create-prosody-account (program-file "create-account" #~(begin (use-modules (ice-9 match)) (match (command-line) ((command jid password) (let ((password-input (format #f "\"~a~%~a\"" password password)) (prosodyctl #$(file-append prosody "/bin/prosodyctl"))) (system (string-join `("echo" ,password-input "|" ,prosodyctl "adduser" ,jid) " ")))))))) (define %test-prosody (let* ((config (prosody-configuration (disable-sasl-mechanisms '()) (virtualhosts (list (virtualhost-configuration (domain "localhost"))))))) (system-test (name "prosody") (description "Connect to a running Prosody daemon.") (value (run-xmpp-test name (service prosody-service-type config) (prosody-configuration-pidfile config) %create-prosody-account))))) ;;; ;;; BitlBee. ;;; (define (run-bitlbee-test) (define os (marionette-operating-system (simple-operating-system (service dhcp-client-service-type) (service bitlbee-service-type (bitlbee-configuration (interface "0.0.0.0")))) #:imported-modules (source-module-closure '((gnu services herd))))) (define vm (virtual-machine (operating-system os) (port-forwardings `((6667 . 6667))))) (define test (with-imported-modules '((gnu build marionette)) #~(begin (use-modules (ice-9 rdelim) (srfi srfi-64) (gnu build marionette)) (define marionette (make-marionette (list #$vm))) (mkdir #$output) (chdir #$output) (test-begin "bitlbee") (test-assert "service started" (marionette-eval '(begin (use-modules (gnu services herd)) (start-service 'bitlbee)) marionette)) (test-equal "valid PID" #$(file-append bitlbee "/sbin/bitlbee") (marionette-eval '(begin (use-modules (srfi srfi-1) (gnu services herd)) (let ((bitlbee (find (lambda (service) (equal? '(bitlbee) (live-service-provision service))) (current-services)))) (and (pk 'bitlbee-service bitlbee) (let ((pid (live-service-running bitlbee))) (readlink (string-append "/proc/" (number->string pid) "/exe")))))) marionette)) (test-assert "connect" (let* ((address (make-socket-address AF_INET INADDR_LOOPBACK 6667)) (sock (socket AF_INET SOCK_STREAM 0))) (connect sock address) ;; See . (->bool (string-contains (pk 'message (read-line sock)) "BitlBee")))) (test-end) (exit (= (test-runner-fail-count (test-runner-current)) 0))))) (gexp->derivation "bitlbee-test" test)) (define %test-bitlbee (system-test (name "bitlbee") (description "Connect to a BitlBee IRC server.") (value (run-bitlbee-test))))