summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2021-04-15 01:18:24 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2021-08-02 15:15:02 -0400
commit69dcc24c9f0cdfea674eb690e7755d26a25ced2b (patch)
tree657e1068cea480e45c8fe7ea4c15b0f982bae52a /tests
parent8e1f94421873777c6bb0b83daa4f81cbacc8b3ff (diff)
services: Add a service for Jami.
* gnu/services/telephony.scm (string-or-computed-file?) (string-list?, account-fingerprint-list?): New procedures. (maybe-string-list, maybe-account-fingerprint-list) (maybe-boolean, maybe-string, jami-account-list): New configuration field types. (serialize-string-list, serialize-boolean, serialize-string) (jami-account, jami-account->alist, jami-configuration) (jami-account-list?, jami-account-list-maybe): New procedures. (%jami-accounts): New variable. (jami-configuration->command-line-arguments): New procedure. (jami-dbus-session-activation, jami-shepherd-services): New procedures. (jami-service-type): New variable. * gnu/build/jami-service.scm: New file. * gnu/tests/data/jami-dummy-account.dat: Likewise. * gnu/tests/telephony.scm: Likewise. * gnu/local.mk (GNU_SYSTEM_MODULES): Register them. * Makefile.am (SCM_TESTS): Register the test file. (dist_patch_DATA): Register the new data file. * doc/guix.texi (Telephony Services): Document it.
Diffstat (limited to 'tests')
-rw-r--r--tests/services/telephony.scm446
1 files changed, 446 insertions, 0 deletions
diff --git a/tests/services/telephony.scm b/tests/services/telephony.scm
new file mode 100644
index 0000000000..b4a0f120d4
--- /dev/null
+++ b/tests/services/telephony.scm
@@ -0,0 +1,446 @@
+;;; 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)