From 5e4990b41de4219c9b9cbb33bd971c2af5f9fa16 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 10:52:04 +0200 Subject: [PATCH 01/11] Add ElixxirDAppsSDKTests target --- Package.swift | 7 +++++++ Tests/ElixxirDAppsSDKTests/ElixxirDAppsSDKTests.swift | 8 ++++++++ 2 files changed, 15 insertions(+) create mode 100644 Tests/ElixxirDAppsSDKTests/ElixxirDAppsSDKTests.swift diff --git a/Package.swift b/Package.swift index 1c347fa7..4cf23277 100644 --- a/Package.swift +++ b/Package.swift @@ -34,6 +34,13 @@ let package = Package( ], swiftSettings: swiftSettings ), + .testTarget( + name: "ElixxirDAppsSDKTests", + dependencies: [ + .target(name: "ElixxirDAppsSDK") + ], + swiftSettings: swiftSettings + ), .binaryTarget( name: "Bindings", path: "Frameworks/Bindings.xcframework" diff --git a/Tests/ElixxirDAppsSDKTests/ElixxirDAppsSDKTests.swift b/Tests/ElixxirDAppsSDKTests/ElixxirDAppsSDKTests.swift new file mode 100644 index 00000000..1332921d --- /dev/null +++ b/Tests/ElixxirDAppsSDKTests/ElixxirDAppsSDKTests.swift @@ -0,0 +1,8 @@ +import XCTest +@testable import ElixxirDAppsSDK + +final class ElixxirDAppsSDKTests: XCTestCase { + func testExample() { + XCTAssert(true) + } +} -- GitLab From 38a7aff70e398da79f71d6118ccba813f0a6c349 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 11:21:57 +0200 Subject: [PATCH 02/11] Add Identity codable model --- Package.swift | 12 +++++- Sources/ElixxirDAppsSDK/Identity.swift | 27 +++++++++++++ .../ElixxirDAppsSDKTests/IdentityTests.swift | 38 +++++++++++++++++++ Tests/ElixxirDAppsSDKTests/TestHelpers.swift | 17 +++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 Sources/ElixxirDAppsSDK/Identity.swift create mode 100644 Tests/ElixxirDAppsSDKTests/IdentityTests.swift create mode 100644 Tests/ElixxirDAppsSDKTests/TestHelpers.swift diff --git a/Package.swift b/Package.swift index 4cf23277..5f0bf3ed 100644 --- a/Package.swift +++ b/Package.swift @@ -26,6 +26,12 @@ let package = Package( targets: ["ElixxirDAppsSDK"] ), ], + dependencies: [ + .package( + url: "https://github.com/pointfreeco/swift-custom-dump.git", + .upToNextMajor(from: "0.4.0") + ), + ], targets: [ .target( name: "ElixxirDAppsSDK", @@ -37,7 +43,11 @@ let package = Package( .testTarget( name: "ElixxirDAppsSDKTests", dependencies: [ - .target(name: "ElixxirDAppsSDK") + .target(name: "ElixxirDAppsSDK"), + .product( + name: "CustomDump", + package: "swift-custom-dump" + ), ], swiftSettings: swiftSettings ), diff --git a/Sources/ElixxirDAppsSDK/Identity.swift b/Sources/ElixxirDAppsSDK/Identity.swift new file mode 100644 index 00000000..116fea14 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Identity.swift @@ -0,0 +1,27 @@ +import Foundation + +public struct Identity: Equatable, Codable { + enum CodingKeys: String, CodingKey { + case id = "ID" + case rsaPrivatePem = "RSAPrivatePem" + case salt = "Salt" + case dhKeyPrivate = "DHKeyPrivate" + } + + public init( + id: Data, + rsaPrivatePem: Data, + salt: Data, + dhKeyPrivate: Data + ) { + self.id = id + self.rsaPrivatePem = rsaPrivatePem + self.salt = salt + self.dhKeyPrivate = dhKeyPrivate + } + + public var id: Data + public var rsaPrivatePem: Data + public var salt: Data + public var dhKeyPrivate: Data +} diff --git a/Tests/ElixxirDAppsSDKTests/IdentityTests.swift b/Tests/ElixxirDAppsSDKTests/IdentityTests.swift new file mode 100644 index 00000000..1a4fb85f --- /dev/null +++ b/Tests/ElixxirDAppsSDKTests/IdentityTests.swift @@ -0,0 +1,38 @@ +import CustomDump +import XCTest +@testable import ElixxirDAppsSDK + +final class IdentityTests: XCTestCase { + func testCoding() throws { + let userId = secureRandomData(count: 32) + let rsaPrivateKey = secureRandomData(count: 32) + let salt = secureRandomData(count: 32) + let dhKeyPrivate = secureRandomData(count: 32) + let jsonString = """ + { + "ID": \(userId.jsonEncodedBase64()), + "RSAPrivatePem": \(rsaPrivateKey.jsonEncodedBase64()), + "Salt": \(salt.jsonEncodedBase64()), + "DHKeyPrivate": \(dhKeyPrivate.jsonEncodedBase64()) + } + """ + let jsonData = jsonString.data(using: .utf8)! + let decoder = JSONDecoder() + decoder.dataDecodingStrategy = .base64 + let identity = try decoder.decode(Identity.self, from: jsonData) + + XCTAssertNoDifference(identity, Identity( + id: userId, + rsaPrivatePem: rsaPrivateKey, + salt: salt, + dhKeyPrivate: dhKeyPrivate + )) + + let encoder = JSONEncoder() + encoder.dataEncodingStrategy = .base64 + let encodedIdentity = try encoder.encode(identity) + let decodedIdentity = try decoder.decode(Identity.self, from: encodedIdentity) + + XCTAssertNoDifference(decodedIdentity, identity) + } +} diff --git a/Tests/ElixxirDAppsSDKTests/TestHelpers.swift b/Tests/ElixxirDAppsSDKTests/TestHelpers.swift new file mode 100644 index 00000000..ff545db0 --- /dev/null +++ b/Tests/ElixxirDAppsSDKTests/TestHelpers.swift @@ -0,0 +1,17 @@ +import Foundation + +func secureRandomData(count: Int) -> Data { + var bytes = [Int8](repeating: 0, count: count) + let status = SecRandomCopyBytes(kSecRandomDefault, count, &bytes) + assert(status == errSecSuccess) + return Data(bytes: bytes, count: count) +} + +extension Data { + func jsonEncodedBase64() -> String { + let encoder = JSONEncoder() + encoder.dataEncodingStrategy = .base64 + let data = try! encoder.encode(self) + return String(data: data, encoding: .utf8)! + } +} -- GitLab From 19b8f3ac7d6c02b20e47924d0ad7836aae6ae61d Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 11:22:08 +0200 Subject: [PATCH 03/11] Clean up --- Tests/ElixxirDAppsSDKTests/ElixxirDAppsSDKTests.swift | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 Tests/ElixxirDAppsSDKTests/ElixxirDAppsSDKTests.swift diff --git a/Tests/ElixxirDAppsSDKTests/ElixxirDAppsSDKTests.swift b/Tests/ElixxirDAppsSDKTests/ElixxirDAppsSDKTests.swift deleted file mode 100644 index 1332921d..00000000 --- a/Tests/ElixxirDAppsSDKTests/ElixxirDAppsSDKTests.swift +++ /dev/null @@ -1,8 +0,0 @@ -import XCTest -@testable import ElixxirDAppsSDK - -final class ElixxirDAppsSDKTests: XCTestCase { - func testExample() { - XCTAssert(true) - } -} -- GitLab From 0f945331be8ada79f10293a3b8ea84773cf5aedb Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 11:52:38 +0200 Subject: [PATCH 04/11] Refactor --- Sources/ElixxirDAppsSDK/Identity.swift | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Sources/ElixxirDAppsSDK/Identity.swift b/Sources/ElixxirDAppsSDK/Identity.swift index 116fea14..f192f6af 100644 --- a/Sources/ElixxirDAppsSDK/Identity.swift +++ b/Sources/ElixxirDAppsSDK/Identity.swift @@ -1,13 +1,6 @@ import Foundation -public struct Identity: Equatable, Codable { - enum CodingKeys: String, CodingKey { - case id = "ID" - case rsaPrivatePem = "RSAPrivatePem" - case salt = "Salt" - case dhKeyPrivate = "DHKeyPrivate" - } - +public struct Identity: Equatable { public init( id: Data, rsaPrivatePem: Data, @@ -25,3 +18,12 @@ public struct Identity: Equatable, Codable { public var salt: Data public var dhKeyPrivate: Data } + +extension Identity: Codable { + enum CodingKeys: String, CodingKey { + case id = "ID" + case rsaPrivatePem = "RSAPrivatePem" + case salt = "Salt" + case dhKeyPrivate = "DHKeyPrivate" + } +} -- GitLab From 00ad36391484d1a91bd73873c5821203e2da82ef Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 12:13:47 +0200 Subject: [PATCH 05/11] Add MessageSendReport codable model --- .../ElixxirDAppsSDK/MessageSendReport.swift | 51 +++++++++++++++++++ .../MessageSendReportTests.swift | 35 +++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/MessageSendReport.swift create mode 100644 Tests/ElixxirDAppsSDKTests/MessageSendReportTests.swift diff --git a/Sources/ElixxirDAppsSDK/MessageSendReport.swift b/Sources/ElixxirDAppsSDK/MessageSendReport.swift new file mode 100644 index 00000000..687fc08d --- /dev/null +++ b/Sources/ElixxirDAppsSDK/MessageSendReport.swift @@ -0,0 +1,51 @@ +import Foundation + +public struct MessageSendReport: Equatable { + public init( + roundList: [Int], + messageId: Data, + timestamp: Int + ) { + self.roundList = roundList + self.messageId = messageId + self.timestamp = timestamp + } + + public var roundList: [Int] + public var messageId: Data + public var timestamp: Int +} + +extension MessageSendReport: Codable { + enum CodingKeys: String, CodingKey { + case roundList = "RoundList" + case messageId = "MessageID" + case timestamp = "Timestamp" + } + + enum RoundListCodingKeys: String, CodingKey { + case rounds = "Rounds" + } + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + messageId = try container.decode(Data.self, forKey: .messageId) + timestamp = try container.decode(Int.self, forKey: .timestamp) + let roundListContainer = try container.nestedContainer( + keyedBy: RoundListCodingKeys.self, + forKey: .roundList + ) + roundList = try roundListContainer.decode([Int].self, forKey: .rounds) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(messageId, forKey: .messageId) + try container.encode(timestamp, forKey: .timestamp) + var roundListContainer = container.nestedContainer( + keyedBy: RoundListCodingKeys.self, + forKey: .roundList + ) + try roundListContainer.encode(roundList, forKey: .rounds) + } +} diff --git a/Tests/ElixxirDAppsSDKTests/MessageSendReportTests.swift b/Tests/ElixxirDAppsSDKTests/MessageSendReportTests.swift new file mode 100644 index 00000000..9adb1f2b --- /dev/null +++ b/Tests/ElixxirDAppsSDKTests/MessageSendReportTests.swift @@ -0,0 +1,35 @@ +import CustomDump +import XCTest +@testable import ElixxirDAppsSDK + +final class MessageSendReportTests: XCTestCase { + func testCoding() throws { + let messageId = secureRandomData(count: 32) + let jsonString = """ + { + "RoundList": { + "Rounds": [1,5,9] + }, + "MessageID": \(messageId.jsonEncodedBase64()), + "Timestamp": 1653582683183384000 + } + """ + let jsonData = jsonString.data(using: .utf8)! + let decoder = JSONDecoder() + decoder.dataDecodingStrategy = .base64 + let report = try decoder.decode(MessageSendReport.self, from: jsonData) + + XCTAssertNoDifference(report, MessageSendReport( + roundList: [1, 5, 9], + messageId: messageId, + timestamp: 1_653_582_683_183_384_000 + )) + + let encoder = JSONEncoder() + encoder.dataEncodingStrategy = .base64 + let encodedReport = try encoder.encode(report) + let decodedReport = try decoder.decode(MessageSendReport.self, from: encodedReport) + + XCTAssertNoDifference(decodedReport, report) + } +} -- GitLab From bb00851ce2af8607d51bfc5a26720c4f2dcd0039 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 12:18:46 +0200 Subject: [PATCH 06/11] Add ContactFact codable model --- Sources/ElixxirDAppsSDK/ContactFact.swift | 19 ++++++++++++ .../ContactFactTests.swift | 30 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/ContactFact.swift create mode 100644 Tests/ElixxirDAppsSDKTests/ContactFactTests.swift diff --git a/Sources/ElixxirDAppsSDK/ContactFact.swift b/Sources/ElixxirDAppsSDK/ContactFact.swift new file mode 100644 index 00000000..f4401028 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/ContactFact.swift @@ -0,0 +1,19 @@ +public struct ContactFact: Equatable { + public init( + fact: String, + type: Int + ) { + self.fact = fact + self.type = type + } + + public var fact: String + public var type: Int +} + +extension ContactFact: Codable { + enum CodingKeys: String, CodingKey { + case fact = "Fact" + case type = "Type" + } +} diff --git a/Tests/ElixxirDAppsSDKTests/ContactFactTests.swift b/Tests/ElixxirDAppsSDKTests/ContactFactTests.swift new file mode 100644 index 00000000..a95b0b9e --- /dev/null +++ b/Tests/ElixxirDAppsSDKTests/ContactFactTests.swift @@ -0,0 +1,30 @@ +import CustomDump +import XCTest +@testable import ElixxirDAppsSDK + +final class ContactFactTests: XCTestCase { + func testCoding() throws { + let jsonString = """ + { + "Fact": "Zezima", + "Type": 0 + } + """ + let jsonData = jsonString.data(using: .utf8)! + let decoder = JSONDecoder() + decoder.dataDecodingStrategy = .base64 + let fact = try decoder.decode(ContactFact.self, from: jsonData) + + XCTAssertNoDifference(fact, ContactFact( + fact: "Zezima", + type: 0 + )) + + let encoder = JSONEncoder() + encoder.dataEncodingStrategy = .base64 + let encodedFact = try encoder.encode(fact) + let decodedFact = try decoder.decode(ContactFact.self, from: encodedFact) + + XCTAssertNoDifference(decodedFact, fact) + } +} -- GitLab From 90d138212a3a14cdb7bba327ec29eb5645b2a467 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 12:27:49 +0200 Subject: [PATCH 07/11] Add Message codable model --- Sources/ElixxirDAppsSDK/Message.swift | 49 +++++++++++++++++++ Tests/ElixxirDAppsSDKTests/MessageTests.swift | 48 ++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/Message.swift create mode 100644 Tests/ElixxirDAppsSDKTests/MessageTests.swift diff --git a/Sources/ElixxirDAppsSDK/Message.swift b/Sources/ElixxirDAppsSDK/Message.swift new file mode 100644 index 00000000..b6fc6c4c --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Message.swift @@ -0,0 +1,49 @@ +import Foundation + +public struct Message: Equatable { + public init( + messageType: Int, + id: Data, + payload: Data, + sender: Data, + recipientId: Data, + ephemeralId: Int, + timestamp: Int, + encrypted: Bool, + roundId: Int + ) { + self.messageType = messageType + self.id = id + self.payload = payload + self.sender = sender + self.recipientId = recipientId + self.ephemeralId = ephemeralId + self.timestamp = timestamp + self.encrypted = encrypted + self.roundId = roundId + } + + public var messageType: Int + public var id: Data + public var payload: Data + public var sender: Data + public var recipientId: Data + public var ephemeralId: Int + public var timestamp: Int + public var encrypted: Bool + public var roundId: Int +} + +extension Message: Codable { + enum CodingKeys: String, CodingKey { + case messageType = "MessageType" + case id = "ID" + case payload = "Payload" + case sender = "Sender" + case recipientId = "RecipientID" + case ephemeralId = "EphemeralID" + case timestamp = "Timestamp" + case encrypted = "Encrypted" + case roundId = "RoundId" + } +} diff --git a/Tests/ElixxirDAppsSDKTests/MessageTests.swift b/Tests/ElixxirDAppsSDKTests/MessageTests.swift new file mode 100644 index 00000000..c01a880f --- /dev/null +++ b/Tests/ElixxirDAppsSDKTests/MessageTests.swift @@ -0,0 +1,48 @@ +import CustomDump +import XCTest +@testable import ElixxirDAppsSDK + +final class MessageTests: XCTestCase { + func testCoding() throws { + let id = secureRandomData(count: 32) + let payload = secureRandomData(count: 32) + let sender = secureRandomData(count: 32) + let recipientId = secureRandomData(count: 32) + let jsonString = """ + { + "MessageType": 1, + "ID": \(id.jsonEncodedBase64()), + "Payload": \(payload.jsonEncodedBase64()), + "Sender": \(sender.jsonEncodedBase64()), + "RecipientID": \(recipientId.jsonEncodedBase64()), + "EphemeralID": 17, + "Timestamp": 1653580439357351000, + "Encrypted": false, + "RoundId": 19 + } + """ + let jsonData = jsonString.data(using: .utf8)! + let decoder = JSONDecoder() + decoder.dataDecodingStrategy = .base64 + let message = try decoder.decode(Message.self, from: jsonData) + + XCTAssertNoDifference(message, Message( + messageType: 1, + id: id, + payload: payload, + sender: sender, + recipientId: recipientId, + ephemeralId: 17, + timestamp: 1_653_580_439_357_351_000, + encrypted: false, + roundId: 19 + )) + + let encoder = JSONEncoder() + encoder.dataEncodingStrategy = .base64 + let encodedMessage = try encoder.encode(message) + let decodedMessage = try decoder.decode(Message.self, from: encodedMessage) + + XCTAssertNoDifference(decodedMessage, message) + } +} -- GitLab From 58bbf5f7493ff32e09e7b0c77f78e97c39737c01 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 12:33:30 +0200 Subject: [PATCH 08/11] Add RestlikeMessage codable model --- Sources/ElixxirDAppsSDK/RestlikeMessage.swift | 37 +++++++++++++++++ .../RestlikeMessageTests.swift | 40 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/RestlikeMessage.swift create mode 100644 Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift diff --git a/Sources/ElixxirDAppsSDK/RestlikeMessage.swift b/Sources/ElixxirDAppsSDK/RestlikeMessage.swift new file mode 100644 index 00000000..48b0e5ef --- /dev/null +++ b/Sources/ElixxirDAppsSDK/RestlikeMessage.swift @@ -0,0 +1,37 @@ +import Foundation + +public struct RestlikeMessage: Equatable { + public init( + version: Int, + headers: Data, + content: Data, + method: Int, + uri: String, + error: String + ) { + self.version = version + self.headers = headers + self.content = content + self.method = method + self.uri = uri + self.error = error + } + + public var version: Int + public var headers: Data + public var content: Data + public var method: Int + public var uri: String + public var error: String +} + +extension RestlikeMessage: Codable { + enum CodingKeys: String, CodingKey { + case version = "Version" + case headers = "Headers" + case content = "Content" + case method = "Method" + case uri = "URI" + case error = "Error" + } +} diff --git a/Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift b/Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift new file mode 100644 index 00000000..3471119a --- /dev/null +++ b/Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift @@ -0,0 +1,40 @@ +import CustomDump +import XCTest +@testable import ElixxirDAppsSDK + +final class RestlikeMessageTests: XCTestCase { + func testCoding() throws { + let headers = secureRandomData(count: 32) + let content = secureRandomData(count: 32) + let jsonString = """ + { + "Version": 1, + "Headers": \(headers.jsonEncodedBase64()), + "Content": \(content.jsonEncodedBase64()), + "Method": 2, + "URI": "xx://CmixRestlike/rest", + "Error": "" + } + """ + let jsonData = jsonString.data(using: .utf8)! + let decoder = JSONDecoder() + decoder.dataDecodingStrategy = .base64 + let message = try decoder.decode(RestlikeMessage.self, from: jsonData) + + XCTAssertNoDifference(message, RestlikeMessage( + version: 1, + headers: headers, + content: content, + method: 2, + uri: "xx://CmixRestlike/rest", + error: "" + )) + + let encoder = JSONEncoder() + encoder.dataEncodingStrategy = .base64 + let encodedMessage = try encoder.encode(message) + let decodedMessage = try decoder.decode(RestlikeMessage.self, from: encodedMessage) + + XCTAssertNoDifference(decodedMessage, message) + } +} -- GitLab From 21cfba1af09c6e8b19971d42308d09a628ba9a75 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 12:37:05 +0200 Subject: [PATCH 09/11] Rename ContactFact model to Fact --- Sources/ElixxirDAppsSDK/{ContactFact.swift => Fact.swift} | 4 ++-- .../{ContactFactTests.swift => FactTests.swift} | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) rename Sources/ElixxirDAppsSDK/{ContactFact.swift => Fact.swift} (77%) rename Tests/ElixxirDAppsSDKTests/{ContactFactTests.swift => FactTests.swift} (74%) diff --git a/Sources/ElixxirDAppsSDK/ContactFact.swift b/Sources/ElixxirDAppsSDK/Fact.swift similarity index 77% rename from Sources/ElixxirDAppsSDK/ContactFact.swift rename to Sources/ElixxirDAppsSDK/Fact.swift index f4401028..fa4a277b 100644 --- a/Sources/ElixxirDAppsSDK/ContactFact.swift +++ b/Sources/ElixxirDAppsSDK/Fact.swift @@ -1,4 +1,4 @@ -public struct ContactFact: Equatable { +public struct Fact: Equatable { public init( fact: String, type: Int @@ -11,7 +11,7 @@ public struct ContactFact: Equatable { public var type: Int } -extension ContactFact: Codable { +extension Fact: Codable { enum CodingKeys: String, CodingKey { case fact = "Fact" case type = "Type" diff --git a/Tests/ElixxirDAppsSDKTests/ContactFactTests.swift b/Tests/ElixxirDAppsSDKTests/FactTests.swift similarity index 74% rename from Tests/ElixxirDAppsSDKTests/ContactFactTests.swift rename to Tests/ElixxirDAppsSDKTests/FactTests.swift index a95b0b9e..6c5abbf3 100644 --- a/Tests/ElixxirDAppsSDKTests/ContactFactTests.swift +++ b/Tests/ElixxirDAppsSDKTests/FactTests.swift @@ -13,9 +13,9 @@ final class ContactFactTests: XCTestCase { let jsonData = jsonString.data(using: .utf8)! let decoder = JSONDecoder() decoder.dataDecodingStrategy = .base64 - let fact = try decoder.decode(ContactFact.self, from: jsonData) + let fact = try decoder.decode(Fact.self, from: jsonData) - XCTAssertNoDifference(fact, ContactFact( + XCTAssertNoDifference(fact, Fact( fact: "Zezima", type: 0 )) @@ -23,7 +23,7 @@ final class ContactFactTests: XCTestCase { let encoder = JSONEncoder() encoder.dataEncodingStrategy = .base64 let encodedFact = try encoder.encode(fact) - let decodedFact = try decoder.decode(ContactFact.self, from: encodedFact) + let decodedFact = try decoder.decode(Fact.self, from: encodedFact) XCTAssertNoDifference(decodedFact, fact) } -- GitLab From a722a34e321553aca64ec1cb2011e17e1b48ede1 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 12:38:33 +0200 Subject: [PATCH 10/11] Refactor --- Tests/ElixxirDAppsSDKTests/FactTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/ElixxirDAppsSDKTests/FactTests.swift b/Tests/ElixxirDAppsSDKTests/FactTests.swift index 6c5abbf3..21820a78 100644 --- a/Tests/ElixxirDAppsSDKTests/FactTests.swift +++ b/Tests/ElixxirDAppsSDKTests/FactTests.swift @@ -2,7 +2,7 @@ import CustomDump import XCTest @testable import ElixxirDAppsSDK -final class ContactFactTests: XCTestCase { +final class FactTests: XCTestCase { func testCoding() throws { let jsonString = """ { -- GitLab From 7230cd07a534cb92065bdb8ecddc32a8599c7c74 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 3 Jun 2022 12:52:27 +0200 Subject: [PATCH 11/11] Update codable models test data Use example JSONs from Bindings documentation --- .../ElixxirDAppsSDKTests/IdentityTests.swift | 20 ++++++++----------- .../MessageSendReportTests.swift | 5 ++--- Tests/ElixxirDAppsSDKTests/MessageTests.swift | 20 ++++++++----------- .../RestlikeMessageTests.swift | 10 ++++------ Tests/ElixxirDAppsSDKTests/TestHelpers.swift | 17 ---------------- 5 files changed, 22 insertions(+), 50 deletions(-) delete mode 100644 Tests/ElixxirDAppsSDKTests/TestHelpers.swift diff --git a/Tests/ElixxirDAppsSDKTests/IdentityTests.swift b/Tests/ElixxirDAppsSDKTests/IdentityTests.swift index 1a4fb85f..b5176345 100644 --- a/Tests/ElixxirDAppsSDKTests/IdentityTests.swift +++ b/Tests/ElixxirDAppsSDKTests/IdentityTests.swift @@ -4,16 +4,12 @@ import XCTest final class IdentityTests: XCTestCase { func testCoding() throws { - let userId = secureRandomData(count: 32) - let rsaPrivateKey = secureRandomData(count: 32) - let salt = secureRandomData(count: 32) - let dhKeyPrivate = secureRandomData(count: 32) let jsonString = """ { - "ID": \(userId.jsonEncodedBase64()), - "RSAPrivatePem": \(rsaPrivateKey.jsonEncodedBase64()), - "Salt": \(salt.jsonEncodedBase64()), - "DHKeyPrivate": \(dhKeyPrivate.jsonEncodedBase64()) + "ID": "emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "RSAPrivatePem": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBNU15dTdhYjBJOS9UL1BFUUxtd2x3ejZHV3FjMUNYemVIVXhoVEc4bmg1WWRWSXMxCmJ2THpBVjNOMDJxdXN6K2s4TVFEWjBtejMzdkswUmhPczZIY0NUSFdzTEpXRkE5WWpzWWlCRi9qTDd1bmd1ckIKL2tvK1JJSnNrWGFWaEZaazRGdERoRXhTNWY4RnR0Qmk1NmNLZmdJQlVKT3ozZi9qQllTMkxzMlJ6cWV5YXM3SApjV2RaME9TclBTT3BiYlViU1FPbS9LWnlweGZHU21yZ2oxRUZuU1dZZ2xGZTdUOTRPbHF5MG14QTV5clVXbHorCk9sK3hHbXpCNUp4WUFSMU9oMFQrQTk4RWMrTUZHNm43L1MraDdzRDgybGRnVnJmbStFTzRCdmFKeTRESGZGMWgKNnp6QnVnY25NUVFGc0dLeDFYWC9COTVMdUpPVjdyeXlDbzZGbHdJREFRQUJBb0lCQVFDaUh6OGNlcDZvQk9RTAphUzBVRitHeU5VMnlVcVRNTWtTWThoUkh1c09CMmFheXoybHZVb3RLUHBPbjZRSWRWVTJrcE4vY2dtY0lSb2x5CkhBMDRUOHJBWVNaRlVqaVlRajkzKzRFREpJYXd2Z0YyVEs1bFoyb3oxVTdreStncU82V0RMR2Z0Q0wvODVQWEIKa210aXhnUXpRV3g1RWcvemtHdm03eURBalQxeDloNytsRjJwNFlBam5kT2xTS0dmQjFZeTR1RXBQd0kwc1lWdgpKQWc0MEFxbllZUmt4emJPbmQxWGNjdEJFN2Z1VDdrWXhoeSs3WXYrUTJwVy9BYmh6NGlHOEY1MW9GMGZwV0czCmlISDhsVXZFTkp2SUZEVHZ0UEpESlFZalBRN3lUbGlGZUdrMXZUQkcyQkpQNExzVzhpbDZOeUFuRktaY1hOQ24KeHVCendiSlJBb0dCQVBUK0dGTVJGRHRHZVl6NmwzZmg3UjJ0MlhrMysvUmpvR3BDUWREWDhYNERqR1pVd1RGVQpOS2tQTTNjS29ia2RBYlBDb3FpL0tOOVBibk9QVlZ3R3JkSE9vSnNibFVHYmJGamFTUzJQMFZnNUVhTC9rT2dUCmxMMUdoVFpIUWk1VUlMM0p4M1Z3T0ZRQ3RQOU1UQlQ0UEQvcEFLbDg3VTJXN3JTY1dGV1ZGbFNkQW9HQkFPOFUKVmhHWkRpVGFKTWVtSGZIdVYrNmtzaUlsam9aUVVzeGpmTGNMZ2NjV2RmTHBqS0ZWTzJNN3NqcEJEZ0w4NmFnegorVk14ZkQzZ1l0SmNWN01aMVcwNlZ6TlNVTHh3a1dRY1hXUWdDaXc5elpyYlhCUmZRNUVjMFBlblVoWWVwVzF5CkpkTC8rSlpQeDJxSzVrQytiWU5EdmxlNWdpcjlDSGVzTlR5enVyckRBb0dCQUl0cTJnN1RaazhCSVFUUVNrZ24Kb3BkRUtzRW4wZExXcXlBdENtVTlyaWpHL2l2eHlXczMveXZDQWNpWm5VVEp0QUZISHVlbXVTeXplQ2g5QmRkegoyWkRPNUdqQVBxVHlQS3NudFlNZkY4UDczZ1NES1VSWWVFbHFDejdET0c5QzRzcitPK3FoN1B3cCtqUmFoK1ZiCkNuWllNMDlBVDQ3YStJYUJmbWRkaXpLbEFvR0JBSmo1dkRDNmJIQnNISWlhNUNJL1RZaG5YWXUzMkVCYytQM0sKMHF3VThzOCtzZTNpUHBla2Y4RjVHd3RuUU4zc2tsMk1GQWFGYldmeVFZazBpUEVTb0p1cGJzNXA1enNNRkJ1bwpncUZrVnQ0RUZhRDJweTVwM2tQbDJsZjhlZXVwWkZScGE0WmRQdVIrMjZ4eWYrNEJhdlZJeld3NFNPL1V4Q3crCnhqbTNEczRkQW9HQWREL0VOa1BjU004c1BCM3JSWW9MQ2twcUV2U0MzbVZSbjNJd3c1WFAwcDRRVndhRmR1ckMKYUhtSE1EekNrNEUvb0haQVhFdGZ2S2tRaUI4MXVYM2c1aVo4amdYUVhXUHRteTVIcVVhcWJYUTlENkxWc3B0egpKL3R4SWJLMXp5c1o2bk9IY1VoUUwyVVF6SlBBRThZNDdjYzVzTThEN3kwZjJ0QURTQUZNMmN3PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ==", + "Salt": "4kk02v0NIcGtlobZ/xkxqWz8uH/ams/gjvQm14QT0dI=", + "DHKeyPrivate": "eyJWYWx1ZSI6NDU2MDgzOTEzMjA0OTIyODA5Njg2MDI3MzQ0MzM3OTA0MzAyODYwMjM2NDk2NDM5NDI4NTcxMTMwNDMzOTQwMzgyMTIyMjY4OTQzNTMyMjIyMzc1MTkzNTEzMjU4MjA4MDA0NTczMDY4MjEwNzg2NDI5NjA1MjA0OTA3MjI2ODI5OTc3NTczMDkxODY0NTY3NDExMDExNjQxNCwiRmluZ2VycHJpbnQiOjE2ODAxNTQxNTExMjMzMDk4MzYzfQ==" } """ let jsonData = jsonString.data(using: .utf8)! @@ -22,10 +18,10 @@ final class IdentityTests: XCTestCase { let identity = try decoder.decode(Identity.self, from: jsonData) XCTAssertNoDifference(identity, Identity( - id: userId, - rsaPrivatePem: rsaPrivateKey, - salt: salt, - dhKeyPrivate: dhKeyPrivate + id: Data(base64Encoded: "emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD")!, + rsaPrivatePem: Data(base64Encoded: "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBNU15dTdhYjBJOS9UL1BFUUxtd2x3ejZHV3FjMUNYemVIVXhoVEc4bmg1WWRWSXMxCmJ2THpBVjNOMDJxdXN6K2s4TVFEWjBtejMzdkswUmhPczZIY0NUSFdzTEpXRkE5WWpzWWlCRi9qTDd1bmd1ckIKL2tvK1JJSnNrWGFWaEZaazRGdERoRXhTNWY4RnR0Qmk1NmNLZmdJQlVKT3ozZi9qQllTMkxzMlJ6cWV5YXM3SApjV2RaME9TclBTT3BiYlViU1FPbS9LWnlweGZHU21yZ2oxRUZuU1dZZ2xGZTdUOTRPbHF5MG14QTV5clVXbHorCk9sK3hHbXpCNUp4WUFSMU9oMFQrQTk4RWMrTUZHNm43L1MraDdzRDgybGRnVnJmbStFTzRCdmFKeTRESGZGMWgKNnp6QnVnY25NUVFGc0dLeDFYWC9COTVMdUpPVjdyeXlDbzZGbHdJREFRQUJBb0lCQVFDaUh6OGNlcDZvQk9RTAphUzBVRitHeU5VMnlVcVRNTWtTWThoUkh1c09CMmFheXoybHZVb3RLUHBPbjZRSWRWVTJrcE4vY2dtY0lSb2x5CkhBMDRUOHJBWVNaRlVqaVlRajkzKzRFREpJYXd2Z0YyVEs1bFoyb3oxVTdreStncU82V0RMR2Z0Q0wvODVQWEIKa210aXhnUXpRV3g1RWcvemtHdm03eURBalQxeDloNytsRjJwNFlBam5kT2xTS0dmQjFZeTR1RXBQd0kwc1lWdgpKQWc0MEFxbllZUmt4emJPbmQxWGNjdEJFN2Z1VDdrWXhoeSs3WXYrUTJwVy9BYmh6NGlHOEY1MW9GMGZwV0czCmlISDhsVXZFTkp2SUZEVHZ0UEpESlFZalBRN3lUbGlGZUdrMXZUQkcyQkpQNExzVzhpbDZOeUFuRktaY1hOQ24KeHVCendiSlJBb0dCQVBUK0dGTVJGRHRHZVl6NmwzZmg3UjJ0MlhrMysvUmpvR3BDUWREWDhYNERqR1pVd1RGVQpOS2tQTTNjS29ia2RBYlBDb3FpL0tOOVBibk9QVlZ3R3JkSE9vSnNibFVHYmJGamFTUzJQMFZnNUVhTC9rT2dUCmxMMUdoVFpIUWk1VUlMM0p4M1Z3T0ZRQ3RQOU1UQlQ0UEQvcEFLbDg3VTJXN3JTY1dGV1ZGbFNkQW9HQkFPOFUKVmhHWkRpVGFKTWVtSGZIdVYrNmtzaUlsam9aUVVzeGpmTGNMZ2NjV2RmTHBqS0ZWTzJNN3NqcEJEZ0w4NmFnegorVk14ZkQzZ1l0SmNWN01aMVcwNlZ6TlNVTHh3a1dRY1hXUWdDaXc5elpyYlhCUmZRNUVjMFBlblVoWWVwVzF5CkpkTC8rSlpQeDJxSzVrQytiWU5EdmxlNWdpcjlDSGVzTlR5enVyckRBb0dCQUl0cTJnN1RaazhCSVFUUVNrZ24Kb3BkRUtzRW4wZExXcXlBdENtVTlyaWpHL2l2eHlXczMveXZDQWNpWm5VVEp0QUZISHVlbXVTeXplQ2g5QmRkegoyWkRPNUdqQVBxVHlQS3NudFlNZkY4UDczZ1NES1VSWWVFbHFDejdET0c5QzRzcitPK3FoN1B3cCtqUmFoK1ZiCkNuWllNMDlBVDQ3YStJYUJmbWRkaXpLbEFvR0JBSmo1dkRDNmJIQnNISWlhNUNJL1RZaG5YWXUzMkVCYytQM0sKMHF3VThzOCtzZTNpUHBla2Y4RjVHd3RuUU4zc2tsMk1GQWFGYldmeVFZazBpUEVTb0p1cGJzNXA1enNNRkJ1bwpncUZrVnQ0RUZhRDJweTVwM2tQbDJsZjhlZXVwWkZScGE0WmRQdVIrMjZ4eWYrNEJhdlZJeld3NFNPL1V4Q3crCnhqbTNEczRkQW9HQWREL0VOa1BjU004c1BCM3JSWW9MQ2twcUV2U0MzbVZSbjNJd3c1WFAwcDRRVndhRmR1ckMKYUhtSE1EekNrNEUvb0haQVhFdGZ2S2tRaUI4MXVYM2c1aVo4amdYUVhXUHRteTVIcVVhcWJYUTlENkxWc3B0egpKL3R4SWJLMXp5c1o2bk9IY1VoUUwyVVF6SlBBRThZNDdjYzVzTThEN3kwZjJ0QURTQUZNMmN3PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ==")!, + salt: Data(base64Encoded: "4kk02v0NIcGtlobZ/xkxqWz8uH/ams/gjvQm14QT0dI=")!, + dhKeyPrivate: Data(base64Encoded: "eyJWYWx1ZSI6NDU2MDgzOTEzMjA0OTIyODA5Njg2MDI3MzQ0MzM3OTA0MzAyODYwMjM2NDk2NDM5NDI4NTcxMTMwNDMzOTQwMzgyMTIyMjY4OTQzNTMyMjIyMzc1MTkzNTEzMjU4MjA4MDA0NTczMDY4MjEwNzg2NDI5NjA1MjA0OTA3MjI2ODI5OTc3NTczMDkxODY0NTY3NDExMDExNjQxNCwiRmluZ2VycHJpbnQiOjE2ODAxNTQxNTExMjMzMDk4MzYzfQ==")! )) let encoder = JSONEncoder() diff --git a/Tests/ElixxirDAppsSDKTests/MessageSendReportTests.swift b/Tests/ElixxirDAppsSDKTests/MessageSendReportTests.swift index 9adb1f2b..d78a7eea 100644 --- a/Tests/ElixxirDAppsSDKTests/MessageSendReportTests.swift +++ b/Tests/ElixxirDAppsSDKTests/MessageSendReportTests.swift @@ -4,13 +4,12 @@ import XCTest final class MessageSendReportTests: XCTestCase { func testCoding() throws { - let messageId = secureRandomData(count: 32) let jsonString = """ { "RoundList": { "Rounds": [1,5,9] }, - "MessageID": \(messageId.jsonEncodedBase64()), + "MessageID": "51Yy47uZbP0o2Y9B/kkreDLTB6opUol3M3mYiY2dcdQ=", "Timestamp": 1653582683183384000 } """ @@ -21,7 +20,7 @@ final class MessageSendReportTests: XCTestCase { XCTAssertNoDifference(report, MessageSendReport( roundList: [1, 5, 9], - messageId: messageId, + messageId: Data(base64Encoded: "51Yy47uZbP0o2Y9B/kkreDLTB6opUol3M3mYiY2dcdQ=")!, timestamp: 1_653_582_683_183_384_000 )) diff --git a/Tests/ElixxirDAppsSDKTests/MessageTests.swift b/Tests/ElixxirDAppsSDKTests/MessageTests.swift index c01a880f..14831459 100644 --- a/Tests/ElixxirDAppsSDKTests/MessageTests.swift +++ b/Tests/ElixxirDAppsSDKTests/MessageTests.swift @@ -4,17 +4,13 @@ import XCTest final class MessageTests: XCTestCase { func testCoding() throws { - let id = secureRandomData(count: 32) - let payload = secureRandomData(count: 32) - let sender = secureRandomData(count: 32) - let recipientId = secureRandomData(count: 32) let jsonString = """ { "MessageType": 1, - "ID": \(id.jsonEncodedBase64()), - "Payload": \(payload.jsonEncodedBase64()), - "Sender": \(sender.jsonEncodedBase64()), - "RecipientID": \(recipientId.jsonEncodedBase64()), + "ID": "EB/70R5HYEw5htZ4Hg9ondrn3+cAc/lH2G0mjQMja3w=", + "Payload": "7TzZKgNphT5UooNM7mDSwtVcIs8AIu4vMKm4ld6GSR8YX5GrHirixUBAejmsgdroRJyo06TkIVef7UM9FN8YfQ==", + "Sender": "emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", + "RecipientID": "amFrZXh4MzYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", "EphemeralID": 17, "Timestamp": 1653580439357351000, "Encrypted": false, @@ -28,10 +24,10 @@ final class MessageTests: XCTestCase { XCTAssertNoDifference(message, Message( messageType: 1, - id: id, - payload: payload, - sender: sender, - recipientId: recipientId, + id: Data(base64Encoded: "EB/70R5HYEw5htZ4Hg9ondrn3+cAc/lH2G0mjQMja3w=")!, + payload: Data(base64Encoded: "7TzZKgNphT5UooNM7mDSwtVcIs8AIu4vMKm4ld6GSR8YX5GrHirixUBAejmsgdroRJyo06TkIVef7UM9FN8YfQ==")!, + sender: Data(base64Encoded: "emV6aW1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD")!, + recipientId: Data(base64Encoded: "amFrZXh4MzYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD")!, ephemeralId: 17, timestamp: 1_653_580_439_357_351_000, encrypted: false, diff --git a/Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift b/Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift index 3471119a..164fce5b 100644 --- a/Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift +++ b/Tests/ElixxirDAppsSDKTests/RestlikeMessageTests.swift @@ -4,13 +4,11 @@ import XCTest final class RestlikeMessageTests: XCTestCase { func testCoding() throws { - let headers = secureRandomData(count: 32) - let content = secureRandomData(count: 32) let jsonString = """ { "Version": 1, - "Headers": \(headers.jsonEncodedBase64()), - "Content": \(content.jsonEncodedBase64()), + "Headers": "Y29udGVudHM6YXBwbGljYXRpb24vanNvbg==", + "Content": "VGhpcyBpcyBhIHJlc3RsaWtlIG1lc3NhZ2U=", "Method": 2, "URI": "xx://CmixRestlike/rest", "Error": "" @@ -23,8 +21,8 @@ final class RestlikeMessageTests: XCTestCase { XCTAssertNoDifference(message, RestlikeMessage( version: 1, - headers: headers, - content: content, + headers: Data(base64Encoded: "Y29udGVudHM6YXBwbGljYXRpb24vanNvbg==")!, + content: Data(base64Encoded: "VGhpcyBpcyBhIHJlc3RsaWtlIG1lc3NhZ2U=")!, method: 2, uri: "xx://CmixRestlike/rest", error: "" diff --git a/Tests/ElixxirDAppsSDKTests/TestHelpers.swift b/Tests/ElixxirDAppsSDKTests/TestHelpers.swift deleted file mode 100644 index ff545db0..00000000 --- a/Tests/ElixxirDAppsSDKTests/TestHelpers.swift +++ /dev/null @@ -1,17 +0,0 @@ -import Foundation - -func secureRandomData(count: Int) -> Data { - var bytes = [Int8](repeating: 0, count: count) - let status = SecRandomCopyBytes(kSecRandomDefault, count, &bytes) - assert(status == errSecSuccess) - return Data(bytes: bytes, count: count) -} - -extension Data { - func jsonEncodedBase64() -> String { - let encoder = JSONEncoder() - encoder.dataEncodingStrategy = .base64 - let data = try! encoder.encode(self) - return String(data: data, encoding: .utf8)! - } -} -- GitLab