feat: pass URLRequest instead of URL to interfaces (#110)
* feat: pass URLRequest instead of URL to interfaces * return error on missing URL * fix integration tests * fix RTConnectionProvider URLRequest should not be updated on connect
This commit is contained in:
parent
779f548d97
commit
0d22315436
|
@ -15,7 +15,7 @@ public class RealtimeConnectionProvider: ConnectionProvider {
|
|||
/// message before we consider it stale and force a disconnect
|
||||
static let staleConnectionTimeout: TimeInterval = 5 * 60
|
||||
|
||||
private let url: URL
|
||||
private let urlRequest: URLRequest
|
||||
var listeners: [String: ConnectionProviderCallback]
|
||||
|
||||
let websocket: AppSyncWebsocketProvider
|
||||
|
@ -58,12 +58,12 @@ public class RealtimeConnectionProvider: ConnectionProvider {
|
|||
return iLimitExceededSubject as! PassthroughSubject<ConnectionProviderError, Never> // swiftlint:disable:this force_cast line_length
|
||||
}
|
||||
|
||||
public convenience init(for url: URL, websocket: AppSyncWebsocketProvider) {
|
||||
self.init(url: url, websocket: websocket)
|
||||
public convenience init(for urlRequest: URLRequest, websocket: AppSyncWebsocketProvider) {
|
||||
self.init(urlRequest: urlRequest, websocket: websocket)
|
||||
}
|
||||
|
||||
init(
|
||||
url: URL,
|
||||
urlRequest: URLRequest,
|
||||
websocket: AppSyncWebsocketProvider,
|
||||
connectionQueue: DispatchQueue = DispatchQueue(
|
||||
label: "com.amazonaws.AppSyncRealTimeConnectionProvider.serialQueue"
|
||||
|
@ -73,7 +73,7 @@ public class RealtimeConnectionProvider: ConnectionProvider {
|
|||
),
|
||||
connectivityMonitor: ConnectivityMonitor = ConnectivityMonitor()
|
||||
) {
|
||||
self.url = url
|
||||
self.urlRequest = urlRequest
|
||||
self.websocket = websocket
|
||||
self.listeners = [:]
|
||||
self.status = .notConnected
|
||||
|
@ -103,13 +103,25 @@ public class RealtimeConnectionProvider: ConnectionProvider {
|
|||
self.updateCallback(event: .connection(self.status))
|
||||
return
|
||||
}
|
||||
|
||||
guard let url = self.urlRequest.url else {
|
||||
self.updateCallback(event: .error(ConnectionProviderError.unknown(
|
||||
message: "Missing URL",
|
||||
payload: nil
|
||||
)))
|
||||
return
|
||||
}
|
||||
self.status = .inProgress
|
||||
self.updateCallback(event: .connection(self.status))
|
||||
let request = AppSyncConnectionRequest(url: self.url)
|
||||
let signedRequest = self.interceptConnection(request, for: self.url)
|
||||
|
||||
let request = AppSyncConnectionRequest(url: url)
|
||||
let signedRequest = self.interceptConnection(request, for: url)
|
||||
var urlRequest = self.urlRequest
|
||||
urlRequest.url = signedRequest.url
|
||||
|
||||
DispatchQueue.global().async {
|
||||
self.websocket.connect(
|
||||
url: signedRequest.url,
|
||||
urlRequest: urlRequest,
|
||||
protocols: ["graphql-ws"],
|
||||
delegate: self
|
||||
)
|
||||
|
@ -123,8 +135,14 @@ public class RealtimeConnectionProvider: ConnectionProvider {
|
|||
guard let self = self else {
|
||||
return
|
||||
}
|
||||
|
||||
let signedMessage = self.interceptMessage(message, for: self.url)
|
||||
guard let url = self.urlRequest.url else {
|
||||
self.updateCallback(event: .error(ConnectionProviderError.unknown(
|
||||
message: "Missing URL",
|
||||
payload: nil
|
||||
)))
|
||||
return
|
||||
}
|
||||
let signedMessage = self.interceptMessage(message, for: url)
|
||||
let jsonEncoder = JSONEncoder()
|
||||
do {
|
||||
let jsonData = try jsonEncoder.encode(signedMessage)
|
||||
|
|
|
@ -18,7 +18,7 @@ public class RealtimeConnectionProviderAsync: ConnectionProvider {
|
|||
/// message before we consider it stale and force a disconnect
|
||||
static let staleConnectionTimeout: TimeInterval = 5 * 60
|
||||
|
||||
let url: URL
|
||||
let urlRequest: URLRequest
|
||||
var listeners: [String: ConnectionProviderCallback]
|
||||
|
||||
let websocket: AppSyncWebsocketProvider
|
||||
|
@ -63,7 +63,7 @@ public class RealtimeConnectionProviderAsync: ConnectionProvider {
|
|||
}
|
||||
|
||||
init(
|
||||
url: URL,
|
||||
urlRequest: URLRequest,
|
||||
websocket: AppSyncWebsocketProvider,
|
||||
|
||||
serialCallbackQueue: DispatchQueue = DispatchQueue(
|
||||
|
@ -71,7 +71,7 @@ public class RealtimeConnectionProviderAsync: ConnectionProvider {
|
|||
),
|
||||
connectivityMonitor: ConnectivityMonitor = ConnectivityMonitor()
|
||||
) {
|
||||
self.url = url
|
||||
self.urlRequest = urlRequest
|
||||
self.websocket = websocket
|
||||
self.listeners = [:]
|
||||
self.status = .notConnected
|
||||
|
@ -84,8 +84,8 @@ public class RealtimeConnectionProviderAsync: ConnectionProvider {
|
|||
subscribeToLimitExceededThrottle()
|
||||
}
|
||||
|
||||
public convenience init(for url: URL, websocket: AppSyncWebsocketProvider) {
|
||||
self.init(url: url, websocket: websocket)
|
||||
public convenience init(for urlRequest: URLRequest, websocket: AppSyncWebsocketProvider) {
|
||||
self.init(urlRequest: urlRequest, websocket: websocket)
|
||||
}
|
||||
|
||||
// MARK: - ConnectionProvider methods
|
||||
|
@ -99,13 +99,21 @@ public class RealtimeConnectionProviderAsync: ConnectionProvider {
|
|||
self.updateCallback(event: .connection(self.status))
|
||||
return
|
||||
}
|
||||
guard let url = self.urlRequest.url else {
|
||||
self.updateCallback(event: .error(ConnectionProviderError.unknown(
|
||||
message: "Missing URL",
|
||||
payload: nil
|
||||
)))
|
||||
return
|
||||
}
|
||||
self.status = .inProgress
|
||||
self.updateCallback(event: .connection(self.status))
|
||||
let request = AppSyncConnectionRequest(url: self.url)
|
||||
|
||||
let signedRequest = await self.interceptConnection(request, for: self.url)
|
||||
let request = AppSyncConnectionRequest(url: url)
|
||||
let signedRequest = await self.interceptConnection(request, for: url)
|
||||
var urlRequest = self.urlRequest
|
||||
urlRequest.url = signedRequest.url
|
||||
self.websocket.connect(
|
||||
url: signedRequest.url,
|
||||
urlRequest: urlRequest,
|
||||
protocols: ["graphql-ws"],
|
||||
delegate: self
|
||||
)
|
||||
|
@ -117,8 +125,14 @@ public class RealtimeConnectionProviderAsync: ConnectionProvider {
|
|||
guard let self = self else {
|
||||
return
|
||||
}
|
||||
|
||||
let signedMessage = await self.interceptMessage(message, for: self.url)
|
||||
guard let url = self.urlRequest.url else {
|
||||
self.updateCallback(event: .error(ConnectionProviderError.unknown(
|
||||
message: "Missing URL",
|
||||
payload: nil
|
||||
)))
|
||||
return
|
||||
}
|
||||
let signedMessage = await self.interceptMessage(message, for: url)
|
||||
|
||||
let jsonEncoder = JSONEncoder()
|
||||
do {
|
||||
|
|
|
@ -11,7 +11,7 @@ import Foundation
|
|||
public enum ConnectionProviderFactory {
|
||||
|
||||
public static func createConnectionProvider(
|
||||
for url: URL,
|
||||
for urlRequest: URLRequest,
|
||||
authInterceptor: AuthInterceptor,
|
||||
connectionType: SubscriptionConnectionType
|
||||
) -> ConnectionProvider {
|
||||
|
@ -20,7 +20,7 @@ public enum ConnectionProviderFactory {
|
|||
switch connectionType {
|
||||
case .appSyncRealtime:
|
||||
let websocketProvider = StarscreamAdapter()
|
||||
provider = RealtimeConnectionProvider(for: url, websocket: websocketProvider)
|
||||
provider = RealtimeConnectionProvider(for: urlRequest, websocket: websocketProvider)
|
||||
}
|
||||
|
||||
if let messageInterceptable = provider as? MessageInterceptable {
|
||||
|
@ -37,7 +37,7 @@ public enum ConnectionProviderFactory {
|
|||
#if swift(>=5.5.2)
|
||||
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
|
||||
public static func createConnectionProviderAsync(
|
||||
for url: URL,
|
||||
for urlRequest: URLRequest,
|
||||
authInterceptor: AuthInterceptorAsync,
|
||||
connectionType: SubscriptionConnectionType
|
||||
) -> ConnectionProvider {
|
||||
|
@ -46,7 +46,7 @@ public enum ConnectionProviderFactory {
|
|||
switch connectionType {
|
||||
case .appSyncRealtime:
|
||||
let websocketProvider = StarscreamAdapter()
|
||||
provider = RealtimeConnectionProviderAsync(for: url, websocket: websocketProvider)
|
||||
provider = RealtimeConnectionProviderAsync(for: urlRequest, websocket: websocketProvider)
|
||||
}
|
||||
|
||||
if let messageInterceptable = provider as? MessageInterceptableAsync {
|
||||
|
|
|
@ -14,7 +14,7 @@ public protocol AppSyncWebsocketProvider {
|
|||
///
|
||||
/// This is an async call. After the connection is succesfully established, the delegate
|
||||
/// will receive the callback on `websocketDidConnect(:)`
|
||||
func connect(url: URL, protocols: [String], delegate: AppSyncWebsocketDelegate?)
|
||||
func connect(urlRequest: URLRequest, protocols: [String], delegate: AppSyncWebsocketDelegate?)
|
||||
|
||||
/// Disconnects the websocket.
|
||||
func disconnect()
|
||||
|
|
|
@ -34,10 +34,11 @@ public class StarscreamAdapter: AppSyncWebsocketProvider {
|
|||
self.callbackQueue = callbackQueue
|
||||
}
|
||||
|
||||
public func connect(url: URL, protocols: [String], delegate: AppSyncWebsocketDelegate?) {
|
||||
public func connect(urlRequest: URLRequest, protocols: [String], delegate: AppSyncWebsocketDelegate?) {
|
||||
serialQueue.async {
|
||||
AppSyncLogger.verbose("[StarscreamAdapter] connect. Connecting to url")
|
||||
var urlRequest = URLRequest(url: url)
|
||||
var urlRequest = urlRequest
|
||||
|
||||
urlRequest.setValue("no-store", forHTTPHeaderField: "Cache-Control")
|
||||
|
||||
let protocolHeaderValue = protocols.joined(separator: ", ")
|
||||
|
|
|
@ -16,7 +16,7 @@ class AppSyncRealTimeClientAsyncFailureTests: AppSyncRealTimeClientTestBase {
|
|||
subscribeSuccess.expectedFulfillmentCount = 100
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProviderAsync(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
@ -91,7 +91,7 @@ class AppSyncRealTimeClientAsyncFailureTests: AppSyncRealTimeClientTestBase {
|
|||
subscribeSuccess.expectedFulfillmentCount = 100
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProviderAsync(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
|
|
@ -23,7 +23,7 @@ class AppSyncRealTimeClientAsyncIntegrationTests: AppSyncRealTimeClientTestBase
|
|||
let subscribeSuccess = expectation(description: "subscribe successfully")
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProviderAsync(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
@ -75,7 +75,7 @@ class AppSyncRealTimeClientAsyncIntegrationTests: AppSyncRealTimeClientTestBase
|
|||
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProviderAsync(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
@ -170,7 +170,7 @@ class AppSyncRealTimeClientAsyncIntegrationTests: AppSyncRealTimeClientTestBase
|
|||
func testSubscribeUnsubscribeRepeat() {
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProviderAsync(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
@ -197,7 +197,7 @@ class AppSyncRealTimeClientAsyncIntegrationTests: AppSyncRealTimeClientTestBase
|
|||
func testMultipleThreadsSubscribeUnsubscribe() {
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProviderAsync(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
|
|
@ -16,7 +16,7 @@ class AppSyncRealTimeClientFailureTests: AppSyncRealTimeClientTestBase {
|
|||
subscribeSuccess.expectedFulfillmentCount = 100
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProvider(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
@ -91,7 +91,7 @@ class AppSyncRealTimeClientFailureTests: AppSyncRealTimeClientTestBase {
|
|||
subscribeSuccess.expectedFulfillmentCount = 100
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProvider(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
@ -171,7 +171,7 @@ class AppSyncRealTimeClientFailureTests: AppSyncRealTimeClientTestBase {
|
|||
let subscribeFailed = expectation(description: "subscribe failed")
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProvider(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
|
|
@ -23,7 +23,7 @@ class AppSyncRealTimeClientIntegrationTests: AppSyncRealTimeClientTestBase {
|
|||
let subscribeSuccess = expectation(description: "subscribe successfully")
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProvider(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
@ -75,7 +75,7 @@ class AppSyncRealTimeClientIntegrationTests: AppSyncRealTimeClientTestBase {
|
|||
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProvider(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
@ -170,7 +170,7 @@ class AppSyncRealTimeClientIntegrationTests: AppSyncRealTimeClientTestBase {
|
|||
func testSubscribeUnsubscribeRepeat() {
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProvider(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
@ -197,7 +197,7 @@ class AppSyncRealTimeClientIntegrationTests: AppSyncRealTimeClientTestBase {
|
|||
func testMultipleThreadsSubscribeUnsubscribe() {
|
||||
let authInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let connectionProvider = ConnectionProviderFactory.createConnectionProvider(
|
||||
for: url,
|
||||
for: urlRequest,
|
||||
authInterceptor: authInterceptor,
|
||||
connectionType: .appSyncRealtime
|
||||
)
|
||||
|
|
|
@ -10,7 +10,7 @@ import XCTest
|
|||
|
||||
class AppSyncRealTimeClientTestBase: XCTestCase {
|
||||
|
||||
var url: URL!
|
||||
var urlRequest: URLRequest!
|
||||
var apiKey: String!
|
||||
let requestString = """
|
||||
subscription onCreate {
|
||||
|
@ -35,7 +35,8 @@ class AppSyncRealTimeClientTestBase: XCTestCase {
|
|||
let endpoint = apiName["endpoint"] as? String,
|
||||
let apiKey = apiName["apiKey"] as? String {
|
||||
|
||||
url = URL(string: endpoint)
|
||||
urlRequest = URLRequest(url: URL(string: endpoint)!)
|
||||
|
||||
self.apiKey = apiKey
|
||||
} else {
|
||||
throw "Could not retrieve endpoint"
|
||||
|
|
|
@ -14,13 +14,14 @@ class StarscreamAdapterTests: AppSyncRealTimeClientTestBase {
|
|||
func testConnectDisconnect() throws {
|
||||
let starscreamAdapter = StarscreamAdapter()
|
||||
let apiKeyAuthInterceptor = APIKeyAuthInterceptor(apiKey)
|
||||
let request = AppSyncConnectionRequest(url: url)
|
||||
let signedRequest = apiKeyAuthInterceptor.interceptConnection(request, for: url)
|
||||
let request = AppSyncConnectionRequest(url: urlRequest.url!)
|
||||
let signedRequest = apiKeyAuthInterceptor.interceptConnection(request, for: urlRequest.url!)
|
||||
urlRequest.url = signedRequest.url
|
||||
let expectedPerforms = expectation(description: "total performs")
|
||||
expectedPerforms.expectedFulfillmentCount = 1_000
|
||||
DispatchQueue.concurrentPerform(iterations: 1_000) { _ in
|
||||
starscreamAdapter.connect(
|
||||
url: signedRequest.url,
|
||||
urlRequest: urlRequest,
|
||||
protocols: ["graphql-ws"],
|
||||
delegate: nil
|
||||
)
|
||||
|
|
|
@ -10,7 +10,7 @@ import XCTest
|
|||
|
||||
class RealtimeConnectionProviderAsyncTestBase: XCTestCase {
|
||||
|
||||
let url = URL(string: "https://www.appsyncrealtimeclient.test/")!
|
||||
let urlRequest = URLRequest(url: URL(string: "https://www.appsyncrealtimeclient.test/")!)
|
||||
|
||||
var websocket: MockWebsocketProvider!
|
||||
|
||||
|
@ -47,7 +47,7 @@ class RealtimeConnectionProviderAsyncTestBase: XCTestCase {
|
|||
connectivityMonitor: ConnectivityMonitor = ConnectivityMonitor()
|
||||
) -> RealtimeConnectionProvider {
|
||||
let provider = RealtimeConnectionProvider(
|
||||
url: url,
|
||||
urlRequest: urlRequest,
|
||||
websocket: websocket,
|
||||
serialCallbackQueue: serialCallbackQueue,
|
||||
connectivityMonitor: connectivityMonitor
|
||||
|
|
|
@ -9,13 +9,13 @@ import XCTest
|
|||
@testable import AppSyncRealTimeClient
|
||||
|
||||
class ConnectionProviderHandleErrorTests: XCTestCase {
|
||||
let url = URL(string: "https://www.appsyncrealtimeclient.test/")!
|
||||
let urlRequest = URLRequest(url: URL(string: "https://www.appsyncrealtimeclient.test/")!)
|
||||
var websocket = MockWebsocketProvider()
|
||||
|
||||
/// Error response is limit exceeded with id
|
||||
/// Should receive ConnectionProviderError.limitExceeded with id
|
||||
func testLimitExceededWithId() {
|
||||
let provider = RealtimeConnectionProvider(url: url, websocket: websocket)
|
||||
let provider = RealtimeConnectionProvider(urlRequest: urlRequest, websocket: websocket)
|
||||
|
||||
let subscriptionEvent = expectation(description: "Receieved subscription event")
|
||||
provider.addListener(identifier: "id") { event in
|
||||
|
@ -42,7 +42,7 @@ class ConnectionProviderHandleErrorTests: XCTestCase {
|
|||
/// Should throttle and receive a fraction of ConnectionProviderError.limitExceeded event without id
|
||||
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
|
||||
func testLimitExceededMissingIdThrottled() {
|
||||
let provider = RealtimeConnectionProvider(url: url, websocket: websocket)
|
||||
let provider = RealtimeConnectionProvider(urlRequest: urlRequest, websocket: websocket)
|
||||
let limitExceededThrottle = expectation(description: "received limit exceeded")
|
||||
limitExceededThrottle.expectedFulfillmentCount = 100
|
||||
let sink = provider.limitExceededSubject.sink { error in
|
||||
|
@ -86,7 +86,7 @@ class ConnectionProviderHandleErrorTests: XCTestCase {
|
|||
/// Error response is max subscription with subscription id
|
||||
/// Should receive ConnectionProviderError.limitExceeded with id
|
||||
func testMaxSubscriptionReached() {
|
||||
let provider = RealtimeConnectionProvider(url: url, websocket: websocket)
|
||||
let provider = RealtimeConnectionProvider(urlRequest: urlRequest, websocket: websocket)
|
||||
|
||||
let subscriptionEvent = expectation(description: "Receieved subscription event")
|
||||
provider.addListener(identifier: "id") { event in
|
||||
|
@ -112,7 +112,7 @@ class ConnectionProviderHandleErrorTests: XCTestCase {
|
|||
/// Error response with no indication for which subscription and missing payload
|
||||
/// Should receive ConnectionProviderError.other
|
||||
func testMissingId() throws {
|
||||
let provider = RealtimeConnectionProvider(url: url, websocket: websocket)
|
||||
let provider = RealtimeConnectionProvider(urlRequest: urlRequest, websocket: websocket)
|
||||
|
||||
let subscriptionEvent = expectation(description: "Receieved subscription event")
|
||||
provider.addListener(identifier: "id") { event in
|
||||
|
@ -137,7 +137,7 @@ class ConnectionProviderHandleErrorTests: XCTestCase {
|
|||
/// Error response subscription id and payload
|
||||
/// Should receive ConnectionProviderError.subscription(id, payload)
|
||||
func testWithSubscriptionId() throws {
|
||||
let provider = RealtimeConnectionProvider(url: url, websocket: websocket)
|
||||
let provider = RealtimeConnectionProvider(urlRequest: urlRequest, websocket: websocket)
|
||||
|
||||
let subscriptionEvent = expectation(description: "Receieved subscription event")
|
||||
provider.addListener(identifier: "id") { event in
|
||||
|
|
|
@ -10,7 +10,7 @@ import XCTest
|
|||
|
||||
class RealtimeConnectionProviderTestBase: XCTestCase {
|
||||
|
||||
let url = URL(string: "https://www.appsyncrealtimeclient.test/")!
|
||||
let urlRequest = URLRequest(url: URL(string: "https://www.appsyncrealtimeclient.test/")!)
|
||||
|
||||
var websocket: MockWebsocketProvider!
|
||||
|
||||
|
@ -50,7 +50,7 @@ class RealtimeConnectionProviderTestBase: XCTestCase {
|
|||
connectivityMonitor: ConnectivityMonitor = ConnectivityMonitor()
|
||||
) -> RealtimeConnectionProvider {
|
||||
let provider = RealtimeConnectionProvider(
|
||||
url: url,
|
||||
urlRequest: urlRequest,
|
||||
websocket: websocket,
|
||||
connectionQueue: connectionQueue,
|
||||
serialCallbackQueue: serialCallbackQueue,
|
||||
|
|
|
@ -9,7 +9,7 @@ import Foundation
|
|||
import AppSyncRealTimeClient
|
||||
|
||||
class MockWebsocketProvider: AppSyncWebsocketProvider {
|
||||
typealias OnConnect = (URL, [String], AppSyncWebsocketDelegate?) -> Void
|
||||
typealias OnConnect = (URLRequest, [String], AppSyncWebsocketDelegate?) -> Void
|
||||
typealias OnDisconnect = () -> Void
|
||||
typealias OnWrite = (String) -> Void
|
||||
|
||||
|
@ -30,8 +30,8 @@ class MockWebsocketProvider: AppSyncWebsocketProvider {
|
|||
self.onWrite = onWrite
|
||||
}
|
||||
|
||||
func connect(url: URL, protocols: [String], delegate: AppSyncWebsocketDelegate?) {
|
||||
onConnect?(url, protocols, delegate)
|
||||
func connect(urlRequest: URLRequest, protocols: [String], delegate: AppSyncWebsocketDelegate?) {
|
||||
onConnect?(urlRequest, protocols, delegate)
|
||||
}
|
||||
|
||||
func disconnect() {
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
dependencies = (
|
||||
);
|
||||
name = SwiftFormat;
|
||||
productName = SwiftFormat;
|
||||
};
|
||||
52B60EC2A583F24ACBB69C113F5488B9 /* SwiftLint */ = {
|
||||
isa = PBXAggregateTarget;
|
||||
|
@ -25,7 +24,6 @@
|
|||
dependencies = (
|
||||
);
|
||||
name = SwiftLint;
|
||||
productName = SwiftLint;
|
||||
};
|
||||
/* End PBXAggregateTarget section */
|
||||
|
||||
|
@ -205,7 +203,7 @@
|
|||
999D7A0732B0168D9EB631C456DEC8A3 /* Pods-AppSyncRealTimeClient-AppSyncRealTimeClientTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AppSyncRealTimeClient-AppSyncRealTimeClientTests.release.xcconfig"; sourceTree = "<group>"; };
|
||||
9B273836AFE7E07EE713B29F94B54285 /* Starscream.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.release.xcconfig; sourceTree = "<group>"; };
|
||||
9D2BCC3D81009251CF149E4E6A0C224E /* StringHTTPHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringHTTPHandler.swift; path = Sources/Framer/StringHTTPHandler.swift; sourceTree = "<group>"; };
|
||||
9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; };
|
||||
9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
|
||||
9FF7D529C51D3F1B0D444B08C40EE3AD /* Pods-AppSyncRTCSample-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AppSyncRTCSample-frameworks.sh"; sourceTree = "<group>"; };
|
||||
A26BD722B33E83A41BD4A44DD2BDC4E3 /* Pods-AppSyncRTCSample-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AppSyncRTCSample-umbrella.h"; sourceTree = "<group>"; };
|
||||
A31447240FB4AA22B5D3E1287DAF4DCB /* Pods-HostApp-AppSyncRealTimeClientIntegrationTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-HostApp-AppSyncRealTimeClientIntegrationTests-acknowledgements.markdown"; sourceTree = "<group>"; };
|
||||
|
@ -329,6 +327,7 @@
|
|||
F07B207CD9F5DF97C2D649C58C619BB7 /* WSEngine.swift */,
|
||||
83681F15B53C4D30045511A41B8A97FD /* Support Files */,
|
||||
);
|
||||
name = Starscream;
|
||||
path = Starscream;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
|
@ -444,6 +443,7 @@
|
|||
children = (
|
||||
37E4C763E3D1AD54AEBD3E13FA588594 /* Support Files */,
|
||||
);
|
||||
name = SwiftLint;
|
||||
path = SwiftLint;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
|
@ -469,6 +469,7 @@
|
|||
children = (
|
||||
120316207F6661A29A01BB8F9BBEF8F1 /* Support Files */,
|
||||
);
|
||||
name = SwiftFormat;
|
||||
path = SwiftFormat;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
|
@ -1172,7 +1173,7 @@
|
|||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
|
@ -1295,7 +1296,7 @@
|
|||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
|
|
Loading…
Reference in New Issue