Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Section 3 (Message Focused) Unit Tests #176

Open
wants to merge 17 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 27 additions & 7 deletions sphinx/Crypter/SphinxOnionManager+ChatExtension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -206,10 +206,11 @@ extension SphinxOnionManager {
replyUUID: String?,
invoiceString: String? = nil,
tribeKickMember: String? = nil,
paidAttachmentMediaToken: String? = nil
paidAttachmentMediaToken: String? = nil,
mnemonic:String?=nil
) -> (TransactionMessage?, String?) {

guard let seed = getAccountSeed() else {
guard let seed = getAccountSeed(mnemonic: mnemonic) else {
return (nil, "Account seed not found")
}

Expand Down Expand Up @@ -1058,6 +1059,11 @@ extension SphinxOnionManager {
newMessage.amount = NSDecimalNumber(value: msgAmount / 1000)
newMessage.amountMsat = NSDecimalNumber(value: msgAmount)

if type == TransactionMessage.TransactionMessageType.invoice.rawValue,
let invoice = message.invoice{
newMessage.invoice = invoice
}

if type == TransactionMessage.TransactionMessageType.payment.rawValue,
let ph = message.paymentHash,
let _ = TransactionMessage.getInvoiceWith(paymentHash: ph)
Expand All @@ -1071,6 +1077,12 @@ extension SphinxOnionManager {

newMessage.setAsLastMessage()

if (self.isUnitTestMode) {
let userInfo = ["message": newMessage]
NotificationCenter.default.post(name: .newOnionMessageWasReceived, object: nil, userInfo: userInfo)
}


return newMessage
}

Expand Down Expand Up @@ -1338,7 +1350,8 @@ extension SphinxOnionManager {
func sendBoostReply(
params: [String: AnyObject],
chat: Chat,
completion: @escaping (TransactionMessage?) -> ()
completion: @escaping (TransactionMessage?) -> (),
mnemonic:String?=nil
) {
let pubkey = chat.getContact()?.publicKey ?? chat.ownerPubkey
let routeHint = chat.getContact()?.routeHint
Expand Down Expand Up @@ -1370,7 +1383,8 @@ extension SphinxOnionManager {
if success {
let message = self.finalizeSendBoostReply(
params: params,
chat: chat
chat: chat,
mnemonic: mnemonic
)
completion(message)
} else {
Expand Down Expand Up @@ -1407,7 +1421,8 @@ extension SphinxOnionManager {

func finalizeSendBoostReply(
params: [String: AnyObject],
chat:Chat
chat:Chat,
mnemonic:String?=nil
) -> TransactionMessage? {
guard let text = params["text"] as? String,
let amount = params["amount"] as? Int else{
Expand All @@ -1422,7 +1437,8 @@ extension SphinxOnionManager {
amount: amount,
msgType: UInt8(TransactionMessage.TransactionMessageType.boost.rawValue),
threadUUID: nil,
replyUUID: params["reply_uuid"] as? String
replyUUID: params["reply_uuid"] as? String,
mnemonic: mnemonic
)

return sentMessage
Expand All @@ -1433,6 +1449,7 @@ extension SphinxOnionManager {
muid: String?,
content: String?,
chat: Chat,
mnemonic:String?=nil,
completion: @escaping (Bool, TransactionMessage?) -> ()
){
guard let contact = chat.getContact(),
Expand All @@ -1452,6 +1469,7 @@ extension SphinxOnionManager {
muid: muid,
content: content,
chat: chat,
mnemonic: mnemonic,
completion: { success, message in
completion(success,message)
}
Expand All @@ -1467,6 +1485,7 @@ extension SphinxOnionManager {
muid: String?,
content: String?,
chat: Chat,
mnemonic:String?=nil,
completion: @escaping (Bool, TransactionMessage?) -> ()
){
guard let contact = chat.getContact() else {
Expand All @@ -1483,7 +1502,8 @@ extension SphinxOnionManager {
muid: muid,
mediaType: "image/png",
threadUUID: nil,
replyUUID: nil
replyUUID: nil,
mnemonic: mnemonic
).0 {
SphinxOnionManager.sharedInstance.assignReceiverId(localMsg: sentMessage)
sentMessage.managedObjectContext?.saveContext()
Expand Down
14 changes: 8 additions & 6 deletions sphinx/Crypter/SphinxOnionManager+InvoicesExtension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,11 @@ extension SphinxOnionManager {
///invoices related
func createInvoice(
amountMsat: Int,
description: String? = nil
description: String? = nil,
mnemonic:String? = nil
) -> String? {

guard let seed = getAccountSeed(), let selfContact = UserContact.getOwner(), let _ = selfContact.nickname else {
guard let seed = getAccountSeed(mnemonic: mnemonic), let selfContact = UserContact.getOwner(), let _ = selfContact.nickname else {
return nil
}

Expand Down Expand Up @@ -200,7 +201,7 @@ extension SphinxOnionManager {
}
}

func payInvoiceMessage(message: TransactionMessage) {
func payInvoiceMessage(message: TransactionMessage,mnemonic:String?=nil) {
guard let invoiceDict = getInvoiceDetails(invoice: message.invoice ?? ""),
let owner = UserContact.getOwner(),
let _ = owner.nickname,
Expand All @@ -216,7 +217,7 @@ extension SphinxOnionManager {
amtMsat: Int(UInt64(amount))
) { success in
if success {
self.finalizePayInvoiceMessage(message: message)
self.finalizePayInvoiceMessage(message: message,mnemnoic: mnemonic)
} else {
///error getting route info
AlertHelper.showAlert(
Expand All @@ -228,11 +229,12 @@ extension SphinxOnionManager {
}

func finalizePayInvoiceMessage(
message: TransactionMessage
message: TransactionMessage,
mnemnoic:String?=nil
) {
guard message.type == TransactionMessage.TransactionMessageType.invoice.rawValue,
let invoice = message.invoice,
let seed = getAccountSeed(),
let seed = getAccountSeed(mnemonic:mnemnoic),
let owner = UserContact.getOwner(),
let nickname = owner.nickname else
{
Expand Down
33 changes: 24 additions & 9 deletions sphinx/Crypter/SphinxOnionManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class SphinxOnionManager : NSObject {
}

let walletBalanceService = WalletBalanceService()
var isUnitTestMode:Bool = false

///Invite
var pendingInviteLookupByTag : [String:String] = [String:String]()
Expand Down Expand Up @@ -109,7 +110,10 @@ class SphinxOnionManager : NSObject {
//MARK: Hardcoded Values!
var serverIP: String {
get {
if let storedServerIP: String = UserDefaults.Keys.serverIP.get() {
if isUnitTestMode{
return "127.0.0.1"
}
else if let storedServerIP: String = UserDefaults.Keys.serverIP.get() {
return storedServerIP
}
return kTestServerIP
Expand All @@ -118,7 +122,10 @@ class SphinxOnionManager : NSObject {

var serverPORT: UInt16 {
get {
if let storedServerPORT: Int = UserDefaults.Keys.serverPORT.get() {
if isUnitTestMode{
return 1883
}
else if let storedServerPORT: Int = UserDefaults.Keys.serverPORT.get() {
return UInt16(storedServerPORT)
}
return kTestServerPort
Expand Down Expand Up @@ -500,19 +507,20 @@ class SphinxOnionManager : NSObject {
func subscribeAndPublishMyTopics(
pubkey: String,
idx: Int,
inviteCode: String? = nil
inviteCode: String? = nil,
mnemonic: String? = nil
) {
do {
let ret = try sphinx.setNetwork(network: network)
let _ = handleRunReturn(rr: ret)

guard let seed = getAccountSeed() else{
guard let seed = getAccountSeed(mnemonic: mnemonic) else{
return
}

mqtt.didReceiveMessage = { mqtt, receivedMessage, id in
self.isConnected = true
self.processMqttMessages(message: receivedMessage)
self.processMqttMessages(message: receivedMessage,mnemonic: mnemonic)
}

let ret3 = try sphinx.initialSetup(
Expand All @@ -534,7 +542,9 @@ class SphinxOnionManager : NSObject {
self.mqtt.subscribe([
(tribeMgmtTopic, CocoaMQTTQoS.qos1)
])
} catch {}
} catch {
print("failed to subscribe to my topics")
}
}

func fetchMyAccountFromState() {
Expand Down Expand Up @@ -677,15 +687,20 @@ class SphinxOnionManager : NSObject {
self.subscribeAndPublishMyTopics(
pubkey: pubkey,
idx: idx,
inviteCode: inviteCode
inviteCode: inviteCode,
mnemonic: mnemonic
)
}
}
return success
}

func processMqttMessages(message: CocoaMQTTMessage) {
guard let seed = getAccountSeed() else {
func setupMqttCallbacks(mqtt:CocoaMQTT){

}

func processMqttMessages(message: CocoaMQTTMessage, mnemonic:String? = nil) {
guard let seed = getAccountSeed(mnemonic: mnemonic) else {
return
}
if !readyForPing && message.topic.contains("ping") {
Expand Down
2 changes: 2 additions & 0 deletions sphinxTests/sphinxOnionAccountCreateUnitTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import XCTest
@testable import sphinx

class sphinxOnionAccountCreateUnitTests: XCTestCase {

static let shared = sphinxOnionAccountCreateUnitTests()
var sphinxOnionManager = SphinxOnionManager.sharedInstance
let test_mnemonic1 = "artist globe myself huge wing drive bright build agree fork media gentle"
let test_mnemonic1_expected_seed = "dea65b969cd1b0926889f35699586ff7e19469c64e7a944d0c6b68342158a1a8"
Expand Down
29 changes: 24 additions & 5 deletions sphinxTests/sphinxOnionAddContactTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ class sphinxOnionAddContactTests: XCTestCase {
let test_mnemonic1_expected_seed = "dea65b969cd1b0926889f35699586ff7e19469c64e7a944d0c6b68342158a1a8"
let test_mnemonic1_expected_okKey = "02c24c838266d07cbde76642e08a62a4b5c750e3ba318a9fbbf97f8ec0ff66b134"
let test_mnemonic1_expected_xpub = "tpubDAGRb7j9yEF51RrPBjxYk6inEyxzX9oZEqRfWGGtnhEaux2xsma2eQFNBYeRgEHLC5pc4Cif4KPJXXRqS1aTErvhvTiZGaGggq9UoTZdEsH"
let test_server_ip = "34.229.52.200"
let test_server_pubkey = "0343f9e2945b232c5c0e7833acef052d10acf80d1e8a168d86ccb588e63cd962cd"
let test_contact_info = "023be900c195aee419e5f68bf4b7bc156597da7649a9103b1afec949d233e4d1aa_02adccd7f574d17d627541b447f47493916e78e33c1583ba9936607b35ca99c392_529771090653741056"
let test_server_ip = "127.0.0.1"
let test_server_pubkey = "02162c52716637fb8120ab0261e410b185d268d768cc6f6227c58102d194ad0bc2"
let test_contact_info = "023be900c195aee419e5f68bf4b7bc156597da7649a9103b1afec949d233e4d1aa_02162c52716637fb8120ab0261e410b185d268d768cc6f6227c58102d194ad0bc2_1099615698944"

//MARK: specific to key exchange
let test_key_exchange_response_message_json : [String: Any] = [
Expand All @@ -30,6 +30,7 @@ class sphinxOnionAddContactTests: XCTestCase {

let test_key_exchange_response_prompt = "IMPORTANT - run the following command from sphinx/wasm/test/cli within the next 60 seconds: yarn cli bob friend alice 03a898d978e42c9feaa25ca103d70b27a2a83472b3b00cd11bbf2a9b3be14460f4_0343f9e2945b232c5c0e7833acef052d10acf80d1e8a168d86ccb588e63cd962cd_529771090671435780"

var originalServerIP:String?=nil
var server : Server? = nil
var balance: String? = nil
var hopsJSON: [[String: String]]? = nil
Expand Down Expand Up @@ -71,14 +72,32 @@ class sphinxOnionAddContactTests: XCTestCase {

override func setUp() {
// Put setup code here. This method is called before the invocation of each test method in the class.
UserData.sharedInstance.save(walletMnemonic: test_mnemonic1)
guard let mnemonic = SphinxOnionManager.sharedInstance.generateMnemonic() else{
XCTFail("couldn't generate mnemonic")
return
}
UserData.sharedInstance.save(walletMnemonic: mnemonic)
sphinxOnionManager.isUnitTestMode = true
updateToTestServer()
}

override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
server = nil
expectation = nil
}

func updateToTestServer(){
originalServerIP = sphinxOnionManager.serverIP
UserDefaults.Keys.serverIP.set(test_server_ip)
}

func resetToOriginalServer(){
guard let originalServerIP = originalServerIP else{
return
}
UserDefaults.Keys.serverIP.set(originalServerIP)
}

func test_seed_generation(){
guard let seed = sphinxOnionManager.getAccountSeed(mnemonic: test_mnemonic1) else{
Expand Down Expand Up @@ -258,7 +277,7 @@ class sphinxOnionAddContactTests: XCTestCase {
fulfillExpectationAfterDelay(expectation, delayInSeconds: delayTime)
// Wait for the expectation to be fulfilled.
wait(for: [expectation], timeout: delayTime + 1.0) // Adjust the timeout as needed
print("\n\n\n\n WARNING: Must run yarn cli alice from inside the wasm tests folder in the Sphinx repo in order to ensure the receiver is online & available to respond with the correct data!")
print("\n\n\n\n WARNING: Must run yarn auto from inside the wasm tests folder in the Sphinx repo in order to ensure the receiver is online & available to respond with the correct data!")
guard let contact = UserContact.getAll().filter({$0.isOwner == false}).first else{
XCTFail("Failed contact registration")
return
Expand Down
Loading