Skip to content
Merged
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
15 changes: 12 additions & 3 deletions LeanCloudTests/BaseTestCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,22 @@ class BaseTestCase: XCTestCase {
LCApplication.default.unregister()
super.tearDown()
}
}

extension BaseTestCase {

var className: String {
return "\(type(of: self))"
}

func object(_ objectId: LCStringConvertible? = nil) -> LCObject {
let className = "\(type(of: self))"
if let objectId = objectId {
return LCObject(className: className, objectId: objectId)
return LCObject(
className: self.className,
objectId: objectId)
} else {
return LCObject(className: className)
return LCObject(
className: self.className)
}
}
}
Expand Down
150 changes: 81 additions & 69 deletions LeanCloudTests/IMClientTestCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -104,35 +104,41 @@ class IMClientTestCase: RTMBaseTestCase {

func testOpenWithSignature() {
let user = LCUser()
user.username = UUID().uuidString.lcString
user.password = UUID().uuidString.lcString

user.username = self.uuid.lcString
user.password = self.uuid.lcString
XCTAssertTrue(user.signUp().isSuccess)

if let objectID = user.objectId?.value, let sessionToken = user.sessionToken?.value {

var clientWithUser: IMClient! = try! IMClient(user: user, options: [])
expecting { (exp) in
clientWithUser.open(completion: { (result) in
XCTAssertTrue(result.isSuccess)
XCTAssertNil(result.error)
exp.fulfill()
})
}

clientWithUser = nil
delay()

let signatureDelegator = SignatureDelegator()
signatureDelegator.sessionToken = sessionToken
let clientWithID = try! IMClient(ID: objectID, options: [], signatureDelegate: signatureDelegator)
expecting { (exp) in
clientWithID.open(completion: { (result) in
XCTAssertTrue(result.isSuccess)
XCTAssertNil(result.error)
exp.fulfill()
})
}
guard let objectID = user.objectId?.value,
let sessionToken = user.sessionToken?.value else {
XCTFail()
return
}

var clientFromUser: IMClient! = try! IMClient(
user: user,
options: [])
expecting { (exp) in
clientFromUser.open(completion: { (result) in
XCTAssertTrue(result.isSuccess)
XCTAssertNil(result.error)
exp.fulfill()
})
}
clientFromUser = nil
delay()

let signatureDelegator = SignatureDelegator()
signatureDelegator.sessionToken = sessionToken
let clientFromID = try! IMClient(
ID: objectID,
options: [],
signatureDelegate: signatureDelegator)
expecting { (exp) in
clientFromID.open(completion: { (result) in
XCTAssertTrue(result.isSuccess)
XCTAssertNil(result.error)
exp.fulfill()
})
}
}

Expand Down Expand Up @@ -306,24 +312,29 @@ class IMClientTestCase: RTMBaseTestCase {
}

func testSessionTokenExpired() {
let client: IMClient = try! IMClient(ID: uuid, options: [])
let delegator: Delegator = Delegator()
client.delegate = delegator
let delegator = Delegator()
let client = try! IMClient(
ID: self.uuid,
options: [],
delegate: delegator)

let openExp = expectation(description: "open")
client.open { (result) in
XCTAssertTrue(result.isSuccess)
openExp.fulfill()
expecting { (exp) in
client.open { (result) in
XCTAssertTrue(result.isSuccess)
XCTAssertNil(result.error)
exp.fulfill()
}
}
wait(for: [openExp], timeout: timeout)

client.test_change(sessionToken: uuid, sessionTokenExpiration: Date(timeIntervalSinceNow: 36000))
client.sessionToken = self.uuid
client.sessionTokenExpiration = Date(timeIntervalSinceNow: 36000)

let exp = expectation(description: "Pause, Resume, First Reopen Then Session Token Expired and Second Reopen Success")
exp.expectedFulfillmentCount = 4
exp.assertForOverFulfill = true
delegator.clientEvent = { c, event in
if c === client {
expecting(
description: "Pause -> Resume -> First-Reopen Then session token expired, Final Second-Reopen success",
count: 4)
{ (exp) in
delegator.clientEvent = { c, event in
XCTAssertTrue(c === client)
switch event {
case .sessionDidPause(error: _):
exp.fulfill()
Expand All @@ -335,22 +346,19 @@ class IMClientTestCase: RTMBaseTestCase {
XCTFail()
}
}
let _ = NotificationCenter.default.addObserver(
forName: IMClient.TestSessionTokenExpiredNotification,
object: client,
queue: .main
) { (notification) in
XCTAssertEqual(
(notification.userInfo?["error"] as? LCError)?.code,
LCError.ServerErrorCode.sessionTokenExpired.rawValue)
exp.fulfill()
}
client.connection.disconnect()
client.connection.connect()
}
let _ = NotificationCenter.default.addObserver(
forName: IMClient.TestSessionTokenExpiredNotification,
object: client,
queue: OperationQueue.main
) { (notification) in
let error = notification.userInfo?["error"] as? LCError
XCTAssertEqual(
error?.code,
LCError.ServerErrorCode.sessionTokenExpired.rawValue
)
exp.fulfill()
}
client.connection.disconnect()
client.connection.connect()
wait(for: [exp], timeout: timeout)
}

func testReportDeviceToken() {
Expand Down Expand Up @@ -624,24 +632,29 @@ extension IMClientTestCase {

func getOpenSignature(client: IMClient, completion: @escaping (IMSignature) -> Void) {
guard let sessionToken = self.sessionToken else {
XCTFail()
return
}
let application = client.application
let httpClient: HTTPClient = application.httpClient
let url = application.v2router.route(path: "rtm/clients/sign", module: .api)!
let parameters: [String: Any] = ["session_token": sessionToken]
_ = httpClient.request(url: url, method: .get, parameters: parameters) { (response) in
guard
let value = response.value as? [String: Any],
_ = client.application.httpClient.request(
url: client.application.v2router.route(
path: "rtm/clients/sign",
module: .api)!,
method: .get,
parameters: ["session_token": sessionToken])
{ (response) in
guard let value = response.value as? [String: Any],
let client_id = value["client_id"] as? String,
client_id == client.ID,
let signature = value["signature"] as? String,
let timestamp = value["timestamp"] as? Int64,
let nonce = value["nonce"] as? String else
{
return
let nonce = value["nonce"] as? String else {
XCTFail()
return
}
completion(IMSignature(signature: signature, timestamp: timestamp, nonce: nonce))
completion(IMSignature(
signature: signature,
timestamp: timestamp,
nonce: nonce))
}
}

Expand All @@ -653,9 +666,8 @@ extension IMClientTestCase {
signatureHandler(client, signature)
}
default:
break
XCTFail()
}
}
}

}
Loading