Skip to content

Commit

Permalink
fix(Logging): adding internal configure auth hub event listener to fi…
Browse files Browse the repository at this point in the history
…x logging race condition (#3899)
  • Loading branch information
harsh62 authored Oct 18, 2024
1 parent 619867b commit 65da44e
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ class AuthConfigureOperation: ConfigureOperation {
override public func main() {
if isCancelled {
finish()
dispatch(result: .failure(AuthError.configuration(
"Configuration operation was cancelled",
"", nil)))
return
}

Expand All @@ -51,6 +54,7 @@ class AuthConfigureOperation: ConfigureOperation {
for await state in stateSequences {
if case .configured = state {
finish()
dispatch(result: .success(()))
break
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,4 +236,45 @@ class AWSCognitoAuthPluginConfigTests: XCTestCase {
}
}

/// Test that the Auth plugin emits `InternalConfigureAuth` that is used by the Logging Category
///
/// - Given: Given a valid config
/// - When:
/// - I configure auth with the given configuration
/// - Then:
/// - I should receive `InternalConfigureAuth` Hub event
///
func testEmittingInternalConfigureAuthHubEvent() throws {
let expectation = expectation(description: "conifguration should complete")
let subscription = Amplify.Hub.publisher(for: .auth).sink { payload in

if payload.eventName == "InternalConfigureAuth" {
expectation.fulfill()
}
}
let plugin = AWSCognitoAuthPlugin()
try Amplify.add(plugin: plugin)

let categoryConfig = AuthCategoryConfiguration(plugins: [
"awsCognitoAuthPlugin": [
"CredentialsProvider": [
"CognitoIdentity": [
"Default": [
"PoolId": "cc",
"Region": "us-east-1"
]
]
]
]
])
let amplifyConfig = AmplifyConfiguration(auth: categoryConfig)
do {
try Amplify.configure(amplifyConfig)
} catch {
XCTFail("Should not throw error. \(error)")
}
wait(for: [expectation], timeout: 5.0)
subscription.cancel()
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,10 @@ final class AWSCloudWatchLoggingCategoryClient {
enum CognitoEventName: String {
case signInAPI = "Auth.signInAPI"
case signOutAPI = "Auth.signOutAPI"
case configured = "InternalConfigureAuth"
}
switch payload.eventName {
case HubPayload.EventName.Auth.signedIn, CognitoEventName.signInAPI.rawValue:
case HubPayload.EventName.Auth.signedIn, CognitoEventName.signInAPI.rawValue, CognitoEventName.configured.rawValue:
takeUserIdentifierFromCurrentUser()
case HubPayload.EventName.Auth.signedOut, CognitoEventName.signOutAPI.rawValue:
self.userIdentifier = nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,6 @@ public class AWSCloudWatchLoggingPlugin: LoggingCategoryPlugin {
let localStore: LoggingConstraintsLocalStore = UserDefaults.standard
localStore.reset()
}

DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(500)) {
self.loggingClient.takeUserIdentifierFromCurrentUser()
}
}
}

Expand Down

0 comments on commit 65da44e

Please sign in to comment.