This reverts commit4673f81793, which reverted commit69dcc24c9fwith the fix detailed below. Thanks to Christopher Baines for reporting the failure and proposing a fix. * guix/self.scm (compiled-guix) [*system-test-modules*]: Add the test data files via the 'extra-files' argument. * gnu/local.mk (dist_patch_DATA): Move the tests/data/jami-dummy-account.dat file to... * gnu/local.mk (MODULES_NOT_COMPILED): ... here.
		
			
				
	
	
		
			446 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
			
		
		
	
	
			446 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
;;; GNU Guix --- Functional package management for GNU
 | 
						|
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@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 (tests services telephony)
 | 
						|
  #:use-module (gnu build jami-service)
 | 
						|
  #:use-module (gnu services telephony)
 | 
						|
  #:use-module (srfi srfi-64))
 | 
						|
 | 
						|
;;; Tests for the (gnu services telephony) and related modules.
 | 
						|
 | 
						|
(test-begin "jami-service")
 | 
						|
 | 
						|
(define parse-dbus-reply
 | 
						|
  (@@ (gnu build jami-service) parse-dbus-reply))
 | 
						|
 | 
						|
(define parse-account-ids
 | 
						|
  (@@ (gnu build jami-service) parse-account-ids))
 | 
						|
 | 
						|
(define parse-account-details
 | 
						|
  (@@ (gnu build jami-service) parse-account-details))
 | 
						|
 | 
						|
(define parse-contacts
 | 
						|
  (@@ (gnu build jami-service) parse-contacts))
 | 
						|
 | 
						|
(define jami-account->alist
 | 
						|
  (@@ (gnu services telephony) jami-account->alist))
 | 
						|
 | 
						|
;; $ dbus-send --print-reply --dest="cx.ring.Ring" \
 | 
						|
;; "/cx/ring/Ring/ConfigurationManager" \
 | 
						|
;; "cx.ring.Ring.ConfigurationManager.getAccountList"
 | 
						|
(define getAccountList-reply "\
 | 
						|
method return time=1622217253.386711 sender=:1.7 -> destination=:1.14 serial=140 reply_serial=2
 | 
						|
   array [
 | 
						|
      string \"addf37fbb558d6a0\"
 | 
						|
      string \"d5cbeb7d08c98a65\"
 | 
						|
      string \"398af0c6b74ce101\"
 | 
						|
   ]
 | 
						|
")
 | 
						|
 | 
						|
(test-equal "parse-account-ids"
 | 
						|
  '("addf37fbb558d6a0" "d5cbeb7d08c98a65" "398af0c6b74ce101")
 | 
						|
  (parse-account-ids getAccountList-reply))
 | 
						|
 | 
						|
;; $ dbus-send --print-reply --dest="cx.ring.Ring" \
 | 
						|
;; "/cx/ring/Ring/ConfigurationManager" \
 | 
						|
;; "cx.ring.Ring.ConfigurationManager.getAccountDetails" \
 | 
						|
;; 'string:398af0c6b74ce101'
 | 
						|
(define getAccountDetails-reply "\
 | 
						|
method return time=1622254991.789588 sender=:1.7 -> destination=:1.19 serial=145 reply_serial=2
 | 
						|
   array [
 | 
						|
      dict entry(
 | 
						|
         string \"Account.accountDiscovery\"
 | 
						|
         string \"false\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.accountPublish\"
 | 
						|
         string \"false\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.activeCallLimit\"
 | 
						|
         string \"-1\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.alias\"
 | 
						|
         string \"some-rendezvous-point-name\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.allModeratorEnabled\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.allowCertFromContact\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.allowCertFromHistory\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.allowCertFromTrusted\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.archiveHasPassword\"
 | 
						|
         string \"false\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.audioPortMax\"
 | 
						|
         string \"32766\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.audioPortMin\"
 | 
						|
         string \"16384\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.autoAnswer\"
 | 
						|
         string \"false\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.defaultModerators\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.deviceID\"
 | 
						|
         string \"94b4070fc7a8afa8482c777a9822c52e6af2e1bd\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.deviceName\"
 | 
						|
         string \"some-device\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.dhtProxyListUrl\"
 | 
						|
         string \"https://config.jami.net/proxyList\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.displayName\"
 | 
						|
         string \"some-rendezvous-point-name\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.dtmfType\"
 | 
						|
         string \"overrtp\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.enable\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.hasCustomUserAgent\"
 | 
						|
         string \"false\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.hostname\"
 | 
						|
         string \"bootstrap.jami.net\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.localInterface\"
 | 
						|
         string \"default\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.localModeratorsEnabled\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.mailbox\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.managerUri\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.managerUsername\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.peerDiscovery\"
 | 
						|
         string \"false\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.presenceSubscribeSupported\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.proxyEnabled\"
 | 
						|
         string \"false\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.proxyPushToken\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.proxyServer\"
 | 
						|
         string \"dhtproxy.jami.net:[80-95]\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.publishedAddress\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.publishedPort\"
 | 
						|
         string \"5060\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.publishedSameAsLocal\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.rendezVous\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.ringtoneEnabled\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.ringtonePath\"
 | 
						|
         string \"/usr/share/ring/ringtones/default.opus\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.type\"
 | 
						|
         string \"RING\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.upnpEnabled\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.useragent\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.username\"
 | 
						|
         string \"ccb8bbe2382343f7feb140710ab48aaf1b55634e\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.videoEnabled\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.videoPortMax\"
 | 
						|
         string \"65534\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"Account.videoPortMin\"
 | 
						|
         string \"49152\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"DHT.PublicInCalls\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"DHT.port\"
 | 
						|
         string \"7766\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"RingNS.account\"
 | 
						|
         string \"3989b55313a911b6f0c004748b49b254f35c9ef6\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"RingNS.uri\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"SRTP.enable\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"SRTP.keyExchange\"
 | 
						|
         string \"sdes\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"SRTP.rtpFallback\"
 | 
						|
         string \"false\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"STUN.enable\"
 | 
						|
         string \"false\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"STUN.server\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TLS.certificateFile\"
 | 
						|
         string \"/var/lib/jami/.local/share/jami/398af0c6b74ce101/ring_device.crt\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TLS.certificateListFile\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TLS.ciphers\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TLS.method\"
 | 
						|
         string \"Automatic\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TLS.negotiationTimeoutSec\"
 | 
						|
         string \"-1\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TLS.password\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TLS.privateKeyFile\"
 | 
						|
         string \"/var/lib/jami/.local/share/jami/398af0c6b74ce101/ring_device.key\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TLS.requireClientCertificate\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TLS.serverName\"
 | 
						|
         string \"\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TLS.verifyClient\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TLS.verifyServer\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TURN.enable\"
 | 
						|
         string \"true\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TURN.password\"
 | 
						|
         string \"ring\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TURN.realm\"
 | 
						|
         string \"ring\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TURN.server\"
 | 
						|
         string \"turn.jami.net\"
 | 
						|
      )
 | 
						|
      dict entry(
 | 
						|
         string \"TURN.username\"
 | 
						|
         string \"ring\"
 | 
						|
      )
 | 
						|
   ]
 | 
						|
")
 | 
						|
 | 
						|
(test-equal "parse-account-details; username, alias and display name"
 | 
						|
  '("ccb8bbe2382343f7feb140710ab48aaf1b55634e" ;username
 | 
						|
    "some-rendezvous-point-name"               ;alias
 | 
						|
    "some-rendezvous-point-name")              ;displayName
 | 
						|
  (let ((account-details (parse-account-details getAccountDetails-reply)))
 | 
						|
    (list (assoc-ref account-details "Account.username")
 | 
						|
          (assoc-ref account-details "Account.alias")
 | 
						|
          (assoc-ref account-details "Account.displayName"))))
 | 
						|
 | 
						|
(define getContacts-reply "\
 | 
						|
method return time=1627014042.752673 sender=:1.113 -> destination=:1.186 serial=220 reply_serial=2
 | 
						|
   array [
 | 
						|
      array [
 | 
						|
         dict entry(
 | 
						|
            string \"added\"
 | 
						|
            string \"1578883327\"
 | 
						|
         )
 | 
						|
         dict entry(
 | 
						|
            string \"confirmed\"
 | 
						|
            string \"true\"
 | 
						|
         )
 | 
						|
         dict entry(
 | 
						|
            string \"id\"
 | 
						|
            string \"1c7d5a09464223442549fef172a3cf6f4de9b01c\"
 | 
						|
         )
 | 
						|
      ]
 | 
						|
      array [
 | 
						|
         dict entry(
 | 
						|
            string \"added\"
 | 
						|
            string \"1623107941\"
 | 
						|
         )
 | 
						|
         dict entry(
 | 
						|
            string \"confirmed\"
 | 
						|
            string \"true\"
 | 
						|
         )
 | 
						|
         dict entry(
 | 
						|
            string \"id\"
 | 
						|
            string \"5903c6c9ac5cb863c64e559add3d5d1c8c563449\"
 | 
						|
         )
 | 
						|
      ]
 | 
						|
      array [
 | 
						|
         dict entry(
 | 
						|
            string \"added\"
 | 
						|
            string \"1595996256\"
 | 
						|
         )
 | 
						|
         dict entry(
 | 
						|
            string \"confirmed\"
 | 
						|
            string \"true\"
 | 
						|
         )
 | 
						|
         dict entry(
 | 
						|
            string \"id\"
 | 
						|
            string \"ff2d72a548693214fb3a0f0f7a943b5e2bb9be03\"
 | 
						|
         )
 | 
						|
      ]
 | 
						|
   ]")
 | 
						|
 | 
						|
(test-equal "parse-account-contacts"
 | 
						|
  '((("added" . "1578883327")
 | 
						|
     ("confirmed" . "true")
 | 
						|
     ("id" . "1c7d5a09464223442549fef172a3cf6f4de9b01c"))
 | 
						|
    (("added" . "1623107941")
 | 
						|
     ("confirmed" . "true")
 | 
						|
     ("id" . "5903c6c9ac5cb863c64e559add3d5d1c8c563449"))
 | 
						|
    (("added" . "1595996256")
 | 
						|
     ("confirmed" . "true")
 | 
						|
     ("id" . "ff2d72a548693214fb3a0f0f7a943b5e2bb9be03")))
 | 
						|
  (parse-contacts getContacts-reply))
 | 
						|
 | 
						|
(define getContacts-empty-reply "\
 | 
						|
method return time=1627400787.873988 sender=:1.1197 -> destination=:1.1463 serial=2127 reply_serial=2
 | 
						|
   array [
 | 
						|
   ]")
 | 
						|
 | 
						|
(test-equal "parse-account-contacts, empty array"
 | 
						|
  '()
 | 
						|
  (parse-contacts getContacts-empty-reply))
 | 
						|
 | 
						|
(define %dummy-jami-account (jami-account
 | 
						|
                             (archive "/tmp/dummy.gz")))
 | 
						|
 | 
						|
(define %dummy-jami-account-2 (jami-account
 | 
						|
                               (archive "/tmp/dummy.gz")
 | 
						|
                               (rendezvous-point? #t)
 | 
						|
                               (peer-discovery? #f)
 | 
						|
                               (bootstrap-hostnames '("bootstrap.me"
 | 
						|
                                                      "fallback.another.host"))
 | 
						|
                               (name-server-uri "https://my.name.server")))
 | 
						|
 | 
						|
(test-equal "jami-account->alist, no account detail value set"
 | 
						|
  '()
 | 
						|
  (jami-account->alist %dummy-jami-account))
 | 
						|
 | 
						|
(test-equal "jami-account->alist, with account detail values"
 | 
						|
  '(("Account.hostname" . "bootstrap.me;fallback.another.host")
 | 
						|
    ("Account.peerDiscovery" . "false")
 | 
						|
    ("Account.rendezVous" . "true")
 | 
						|
    ("RingNS.uri" . "https://my.name.server"))
 | 
						|
  (sort (jami-account->alist %dummy-jami-account-2)
 | 
						|
        (lambda (x y)
 | 
						|
          (string<=? (car x) (car y)))))
 | 
						|
 | 
						|
(test-end)
 |