UnitSignalingSettings.swift 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. //
  2. // SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
  3. // SPDX-License-Identifier: GPL-3.0-or-later
  4. //
  5. import XCTest
  6. @testable import NextcloudTalk
  7. final class UnitSignalingSettings: XCTestCase {
  8. func testSignalingSettings() throws {
  9. let dataJson =
  10. """
  11. {
  12. "signalingMode": "external",
  13. "userId": "test-user",
  14. "hideWarning": true,
  15. "server": "https://domain.invalid/standalone-signaling/",
  16. "ticket": "ticket:user:1234",
  17. "helloAuthParams": {
  18. "1.0": {
  19. "userid": "test-user",
  20. "ticket": "helloauth1:ticket:user:1234"
  21. },
  22. "2.0": {
  23. "token": "helloauth2:ticket:user:1234"
  24. }
  25. },
  26. "stunservers": [
  27. {
  28. "urls": [
  29. "stun:stun.domain.invalid:443"
  30. ]
  31. }
  32. ],
  33. "turnservers": [
  34. {
  35. "urls": [
  36. "turn:turn.domain.invalid:443?transport=udp",
  37. "turns:turn.domain.invalid:443?transport=udp"
  38. ],
  39. "username": "user:name",
  40. "credential": "password"
  41. }
  42. ],
  43. }
  44. """
  45. // swiftlint:disable:next force_cast
  46. let signalingDict = try JSONSerialization.jsonObject(with: dataJson.data(using: .utf8)!) as! [String: Any]
  47. let signalingSettings = SignalingSettings(dictionary: signalingDict)
  48. XCTAssertEqual(signalingSettings?.server, "https://domain.invalid/standalone-signaling/")
  49. XCTAssertEqual(signalingSettings?.signalingMode, "external")
  50. XCTAssertEqual(signalingSettings?.ticket, "ticket:user:1234")
  51. let stunServers = signalingSettings?.stunServers
  52. let turnServers = signalingSettings?.turnServers
  53. XCTAssertEqual(stunServers?.count, 1)
  54. XCTAssertEqual(stunServers?[0].urls?.count, 1)
  55. XCTAssertEqual(stunServers?[0].urls?[0], "stun:stun.domain.invalid:443")
  56. XCTAssertEqual(turnServers?.count, 1)
  57. XCTAssertEqual(turnServers?[0].urls?.count, 2)
  58. XCTAssertEqual(turnServers?[0].urls?[0], "turn:turn.domain.invalid:443?transport=udp")
  59. XCTAssertEqual(turnServers?[0].urls?[1], "turns:turn.domain.invalid:443?transport=udp")
  60. XCTAssertEqual(turnServers?[0].username, "user:name")
  61. XCTAssertEqual(turnServers?[0].credential, "password")
  62. }
  63. func testSignalingSettingsFederation() throws {
  64. let dataJson =
  65. """
  66. {
  67. "signalingMode": "external",
  68. "userId": "user",
  69. "hideWarning": true,
  70. "server": "https://domain.invalid/standalone-signaling",
  71. "ticket": "ticket:user:1234",
  72. "helloAuthParams": {
  73. "1.0": {
  74. "userid": "user",
  75. "ticket": "helloauth1:ticket"
  76. },
  77. "2.0": {
  78. "token": "helloauth2:ticket"
  79. }
  80. },
  81. "federation": {
  82. "server": "https://domain2.invalid/standalone-signaling",
  83. "nextcloudServer": "https://nextcloud.domain2.invalid",
  84. "helloAuthParams": {
  85. "token": "federation:token"
  86. },
  87. "roomId": "federation:roomId"
  88. },
  89. "stunservers": [
  90. {
  91. "urls": [
  92. "stun:stun.domain.invalid:443"
  93. ]
  94. }
  95. ],
  96. "turnservers": [
  97. {
  98. "urls": [
  99. "turn:turn.domain.invalid:3478?transport=udp",
  100. "turn:turn.domain.invalid:3478?transport=tcp"
  101. ],
  102. "username": "username",
  103. "credential": "password"
  104. }
  105. ],
  106. }
  107. """
  108. // swiftlint:disable:next force_cast
  109. let signalingDict = try JSONSerialization.jsonObject(with: dataJson.data(using: .utf8)!) as! [String: Any]
  110. let signalingSettings = SignalingSettings(dictionary: signalingDict)
  111. XCTAssertNotNil(signalingSettings?.federation)
  112. let federation = signalingSettings?.getFederationJoinDictionary()
  113. XCTAssertEqual(federation?["signaling"], "https://domain2.invalid/standalone-signaling")
  114. XCTAssertEqual(federation?["roomid"], "federation:roomId")
  115. XCTAssertEqual(federation?["url"], "https://nextcloud.domain2.invalid/ocs/v2.php/apps/spreed/api/v3/signaling/backend")
  116. XCTAssertEqual(federation?["token"], "federation:token")
  117. }
  118. }