guix/tests/services/telephony.scm

447 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)