Skip to content

Commit 65da44e

Browse files
authored
fix(Logging): adding internal configure auth hub event listener to fix logging race condition (#3899)
1 parent 619867b commit 65da44e

File tree

4 files changed

+47
-5
lines changed

4 files changed

+47
-5
lines changed

AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/Operations/AuthConfigureOperation.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ class AuthConfigureOperation: ConfigureOperation {
3737
override public func main() {
3838
if isCancelled {
3939
finish()
40+
dispatch(result: .failure(AuthError.configuration(
41+
"Configuration operation was cancelled",
42+
"", nil)))
4043
return
4144
}
4245

@@ -51,6 +54,7 @@ class AuthConfigureOperation: ConfigureOperation {
5154
for await state in stateSequences {
5255
if case .configured = state {
5356
finish()
57+
dispatch(result: .success(()))
5458
break
5559
}
5660
}

AmplifyPlugins/Auth/Tests/AWSCognitoAuthPluginUnitTests/ConfigurationTests/AWSCognitoAuthPluginConfigTests.swift

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,4 +236,45 @@ class AWSCognitoAuthPluginConfigTests: XCTestCase {
236236
}
237237
}
238238

239+
/// Test that the Auth plugin emits `InternalConfigureAuth` that is used by the Logging Category
240+
///
241+
/// - Given: Given a valid config
242+
/// - When:
243+
/// - I configure auth with the given configuration
244+
/// - Then:
245+
/// - I should receive `InternalConfigureAuth` Hub event
246+
///
247+
func testEmittingInternalConfigureAuthHubEvent() throws {
248+
let expectation = expectation(description: "conifguration should complete")
249+
let subscription = Amplify.Hub.publisher(for: .auth).sink { payload in
250+
251+
if payload.eventName == "InternalConfigureAuth" {
252+
expectation.fulfill()
253+
}
254+
}
255+
let plugin = AWSCognitoAuthPlugin()
256+
try Amplify.add(plugin: plugin)
257+
258+
let categoryConfig = AuthCategoryConfiguration(plugins: [
259+
"awsCognitoAuthPlugin": [
260+
"CredentialsProvider": [
261+
"CognitoIdentity": [
262+
"Default": [
263+
"PoolId": "cc",
264+
"Region": "us-east-1"
265+
]
266+
]
267+
]
268+
]
269+
])
270+
let amplifyConfig = AmplifyConfiguration(auth: categoryConfig)
271+
do {
272+
try Amplify.configure(amplifyConfig)
273+
} catch {
274+
XCTFail("Should not throw error. \(error)")
275+
}
276+
wait(for: [expectation], timeout: 5.0)
277+
subscription.cancel()
278+
}
279+
239280
}

AmplifyPlugins/Logging/Sources/AWSCloudWatchLoggingPlugin/AWSCloudWatchLoggingCategoryClient.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,10 @@ final class AWSCloudWatchLoggingCategoryClient {
8787
enum CognitoEventName: String {
8888
case signInAPI = "Auth.signInAPI"
8989
case signOutAPI = "Auth.signOutAPI"
90+
case configured = "InternalConfigureAuth"
9091
}
9192
switch payload.eventName {
92-
case HubPayload.EventName.Auth.signedIn, CognitoEventName.signInAPI.rawValue:
93+
case HubPayload.EventName.Auth.signedIn, CognitoEventName.signInAPI.rawValue, CognitoEventName.configured.rawValue:
9394
takeUserIdentifierFromCurrentUser()
9495
case HubPayload.EventName.Auth.signedOut, CognitoEventName.signOutAPI.rawValue:
9596
self.userIdentifier = nil

AmplifyPlugins/Logging/Sources/AWSCloudWatchLoggingPlugin/AWSCloudWatchLoggingPlugin.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,6 @@ public class AWSCloudWatchLoggingPlugin: LoggingCategoryPlugin {
154154
let localStore: LoggingConstraintsLocalStore = UserDefaults.standard
155155
localStore.reset()
156156
}
157-
158-
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(500)) {
159-
self.loggingClient.takeUserIdentifierFromCurrentUser()
160-
}
161157
}
162158
}
163159

0 commit comments

Comments
 (0)