[LYN-4915] [iOS] [Android] awscoreconfiguration.setreg, awsMetricsClientConfigurationsetreg and authenticationProvider.setreg couldn't be loaded when the application starts (#1716)

[LYN-4915] [iOS] [Android] awscoreconfiguration.setreg, awsMetricsClientConfiguration.setreg and authenticationProvider.setreg couldn't be loaded when the application starts
main
Junbo Liang 5 years ago committed by GitHub
parent dfef909b51
commit 9f2b31e077
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -22,7 +22,7 @@ namespace AWSClientAuth
virtual ~AWSCognitoAuthenticationProvider() = default; virtual ~AWSCognitoAuthenticationProvider() = default;
// AuthenticationProviderInterface overrides // AuthenticationProviderInterface overrides
bool Initialize(AZStd::weak_ptr<AZ::SettingsRegistryInterface> settingsRegistry) override; bool Initialize() override;
void PasswordGrantSingleFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override; void PasswordGrantSingleFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override;
void PasswordGrantMultiFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override; void PasswordGrantMultiFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override;
void PasswordGrantMultiFactorConfirmSignInAsync(const AZStd::string& username, const AZStd::string& confirmationCode) override; void PasswordGrantMultiFactorConfirmSignInAsync(const AZStd::string& username, const AZStd::string& confirmationCode) override;

@ -22,9 +22,8 @@ namespace AWSClientAuth
virtual ~AuthenticationProviderInterface() = default; virtual ~AuthenticationProviderInterface() = default;
//! Extract required settings for the provider from setting registry. //! Extract required settings for the provider from setting registry.
//! @param settingsRegistry Passed in initialized settings registry object.
//! @return bool True: if provider can parse required settings and validate. False: fails to parse required settings. //! @return bool True: if provider can parse required settings and validate. False: fails to parse required settings.
virtual bool Initialize(AZStd::weak_ptr<AZ::SettingsRegistryInterface> settingsRegistry) = 0; virtual bool Initialize() = 0;
//! Call sign in endpoint for provider password grant flow. //! Call sign in endpoint for provider password grant flow.
//! @param username Username to use to for sign in. //! @param username Username to use to for sign in.

@ -29,7 +29,7 @@ namespace AWSClientAuth
protected: protected:
// AuthenticationProviderRequestsBus Interface // AuthenticationProviderRequestsBus Interface
bool Initialize(const AZStd::vector<ProviderNameEnum>& providerNames, const AZStd::string& settingsRegistryPath) override; bool Initialize(const AZStd::vector<ProviderNameEnum>& providerNames) override;
void PasswordGrantSingleFactorSignInAsync(const ProviderNameEnum& providerName, const AZStd::string& username, const AZStd::string& password) override; void PasswordGrantSingleFactorSignInAsync(const ProviderNameEnum& providerName, const AZStd::string& username, const AZStd::string& password) override;
void PasswordGrantMultiFactorSignInAsync(const ProviderNameEnum& providerName, const AZStd::string& username, const AZStd::string& password) override; void PasswordGrantMultiFactorSignInAsync(const ProviderNameEnum& providerName, const AZStd::string& username, const AZStd::string& password) override;
void PasswordGrantMultiFactorConfirmSignInAsync(const ProviderNameEnum& providerName, const AZStd::string& username, const AZStd::string& confirmationCode) override; void PasswordGrantMultiFactorConfirmSignInAsync(const ProviderNameEnum& providerName, const AZStd::string& username, const AZStd::string& confirmationCode) override;
@ -42,7 +42,7 @@ namespace AWSClientAuth
AuthenticationTokens GetAuthenticationTokens(const ProviderNameEnum& providerName) override; AuthenticationTokens GetAuthenticationTokens(const ProviderNameEnum& providerName) override;
// AuthenticationProviderScriptCanvasRequest interface // AuthenticationProviderScriptCanvasRequest interface
bool Initialize(const AZStd::vector<AZStd::string>& providerNames, const AZStd::string& settingsRegistryPath) override; bool Initialize(const AZStd::vector<AZStd::string>& providerNames) override;
void PasswordGrantSingleFactorSignInAsync( void PasswordGrantSingleFactorSignInAsync(
const AZStd::string& providerName, const AZStd::string& username, const AZStd::string& password) override; const AZStd::string& providerName, const AZStd::string& username, const AZStd::string& password) override;
void PasswordGrantMultiFactorSignInAsync( void PasswordGrantMultiFactorSignInAsync(
@ -64,8 +64,6 @@ namespace AWSClientAuth
bool IsProviderInitialized(const ProviderNameEnum& providerName); bool IsProviderInitialized(const ProviderNameEnum& providerName);
void ResetProviders(); void ResetProviders();
ProviderNameEnum GetProviderNameEnum(AZStd::string name); ProviderNameEnum GetProviderNameEnum(AZStd::string name);
AZStd::shared_ptr<AZ::SettingsRegistryInterface> m_settingsRegistry;
}; };
} // namespace AWSClientAuth } // namespace AWSClientAuth

@ -20,9 +20,8 @@ namespace AWSClientAuth
//! Parse the settings file for required settings for authentication providers. Instantiate and initialize authentication providers //! Parse the settings file for required settings for authentication providers. Instantiate and initialize authentication providers
//! @param providerNames List of provider names to instantiate and initialize for Authentication. //! @param providerNames List of provider names to instantiate and initialize for Authentication.
//! @param settingsRegistryPath Path for the settings registry file to use to configure providers.
//! @return bool True: if all providers initialized successfully. False: If any provider fails initialization. //! @return bool True: if all providers initialized successfully. False: If any provider fails initialization.
virtual bool Initialize(const AZStd::vector<AZStd::string>& providerNames, const AZStd::string& settingsRegistryPath) = 0; virtual bool Initialize(const AZStd::vector<AZStd::string>& providerNames) = 0;
//! Checks if user is signed in. //! Checks if user is signed in.
//! If access tokens are available and not expired. //! If access tokens are available and not expired.

@ -21,7 +21,7 @@ namespace AWSClientAuth
virtual ~GoogleAuthenticationProvider(); virtual ~GoogleAuthenticationProvider();
// AuthenticationProviderInterface overrides // AuthenticationProviderInterface overrides
bool Initialize(AZStd::weak_ptr<AZ::SettingsRegistryInterface> settingsRegistry) override; bool Initialize() override;
void PasswordGrantSingleFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override; void PasswordGrantSingleFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override;
void PasswordGrantMultiFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override; void PasswordGrantMultiFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override;
void PasswordGrantMultiFactorConfirmSignInAsync(const AZStd::string& username, const AZStd::string& confirmationCode) override; void PasswordGrantMultiFactorConfirmSignInAsync(const AZStd::string& username, const AZStd::string& confirmationCode) override;

@ -21,7 +21,7 @@ namespace AWSClientAuth
virtual ~LWAAuthenticationProvider(); virtual ~LWAAuthenticationProvider();
// AuthenticationProviderInterface overrides // AuthenticationProviderInterface overrides
bool Initialize(AZStd::weak_ptr<AZ::SettingsRegistryInterface> settingsRegistry) override; bool Initialize() override;
void PasswordGrantSingleFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override; void PasswordGrantSingleFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override;
void PasswordGrantMultiFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override; void PasswordGrantMultiFactorSignInAsync(const AZStd::string& username, const AZStd::string& password) override;
void PasswordGrantMultiFactorConfirmSignInAsync(const AZStd::string& username, const AZStd::string& confirmationCode) override; void PasswordGrantMultiFactorConfirmSignInAsync(const AZStd::string& username, const AZStd::string& confirmationCode) override;

@ -19,9 +19,8 @@ namespace AWSClientAuth
//! Parse the settings file for required settings for authentication providers. Instantiate and initialize authentication providers //! Parse the settings file for required settings for authentication providers. Instantiate and initialize authentication providers
//! @param providerNames List of provider names to instantiate and initialize for Authentication. //! @param providerNames List of provider names to instantiate and initialize for Authentication.
//! @param settingsRegistryPath Path for the settings registry file to use to configure providers.
//! @return bool True: if all providers initialized successfully. False: If any provider fails initialization. //! @return bool True: if all providers initialized successfully. False: If any provider fails initialization.
virtual bool Initialize(const AZStd::vector<ProviderNameEnum>& providerNames, const AZStd::string& settingsRegistryPath) = 0; virtual bool Initialize(const AZStd::vector<ProviderNameEnum>& providerNames) = 0;
//! Checks if user is signed in. //! Checks if user is signed in.
//! If access tokens are available and not expired. //! If access tokens are available and not expired.

@ -30,9 +30,8 @@ namespace AWSClientAuth
constexpr char CognitoRefreshTokenAuthParamKey[] = "REFRESH_TOKEN"; constexpr char CognitoRefreshTokenAuthParamKey[] = "REFRESH_TOKEN";
constexpr char CognitoSmsMfaCodeKey[] = "SMS_MFA_CODE"; constexpr char CognitoSmsMfaCodeKey[] = "SMS_MFA_CODE";
bool AWSCognitoAuthenticationProvider::Initialize(AZStd::weak_ptr<AZ::SettingsRegistryInterface> settingsRegistry) bool AWSCognitoAuthenticationProvider::Initialize()
{ {
AZ_UNUSED(settingsRegistry);
AWSCore::AWSResourceMappingRequestBus::BroadcastResult( AWSCore::AWSResourceMappingRequestBus::BroadcastResult(
m_cognitoAppClientId, &AWSCore::AWSResourceMappingRequests::GetResourceNameId, CognitoAppClientIdResourceMappingKey); m_cognitoAppClientId, &AWSCore::AWSResourceMappingRequests::GetResourceNameId, CognitoAppClientIdResourceMappingKey);
AZ_Warning("AWSCognitoAuthenticationProvider", !m_cognitoAppClientId.empty(), "Missing Cognito App Client Id from resource mappings. Calls to Cognito will fail."); AZ_Warning("AWSCognitoAuthenticationProvider", !m_cognitoAppClientId.empty(), "Missing Cognito App Client Id from resource mappings. Calls to Cognito will fail.");

@ -6,7 +6,6 @@
*/ */
#include <AzCore/std/smart_ptr/make_shared.h> #include <AzCore/std/smart_ptr/make_shared.h>
#include <AzCore/Settings/SettingsRegistryImpl.h>
#include <AzCore/IO/FileIO.h> #include <AzCore/IO/FileIO.h>
#include <Authentication/AuthenticationProviderTypes.h> #include <Authentication/AuthenticationProviderTypes.h>
@ -27,37 +26,21 @@ namespace AWSClientAuth
AuthenticationProviderManager::~AuthenticationProviderManager() AuthenticationProviderManager::~AuthenticationProviderManager()
{ {
ResetProviders(); ResetProviders();
m_settingsRegistry.reset();
AuthenticationProviderScriptCanvasRequestBus::Handler::BusDisconnect(); AuthenticationProviderScriptCanvasRequestBus::Handler::BusDisconnect();
AuthenticationProviderRequestBus::Handler::BusDisconnect(); AuthenticationProviderRequestBus::Handler::BusDisconnect();
AZ::Interface<IAuthenticationProviderRequests>::Unregister(this); AZ::Interface<IAuthenticationProviderRequests>::Unregister(this);
} }
bool AuthenticationProviderManager::Initialize(const AZStd::vector<ProviderNameEnum>& providerNames, const AZStd::string& settingsRegistryPath) bool AuthenticationProviderManager::Initialize(const AZStd::vector<ProviderNameEnum>& providerNames)
{ {
ResetProviders(); ResetProviders();
AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance();
AZ_Assert(fileIO, "File IO is not initialized.");
m_settingsRegistry.reset();
m_settingsRegistry = AZStd::make_shared<AZ::SettingsRegistryImpl>();
AZStd::array<char, AZ::IO::MaxPathLength> resolvedPath{};
fileIO->ResolvePath(settingsRegistryPath.data(), resolvedPath.data(), resolvedPath.size());
if (!m_settingsRegistry->MergeSettingsFile(resolvedPath.data(), AZ::SettingsRegistryInterface::Format::JsonMergePatch))
{
AZ_Error("AuthenticationProviderManager", false, "Error merging settings registry for path: %s", resolvedPath.data());
return false;
}
bool initializeSuccess = true; bool initializeSuccess = true;
for (auto providerName : providerNames) for (auto providerName : providerNames)
{ {
m_authenticationProvidersMap[providerName] = CreateAuthenticationProviderObject(providerName); m_authenticationProvidersMap[providerName] = CreateAuthenticationProviderObject(providerName);
initializeSuccess = initializeSuccess && m_authenticationProvidersMap[providerName]->Initialize(m_settingsRegistry); initializeSuccess = initializeSuccess && m_authenticationProvidersMap[providerName]->Initialize();
} }
return initializeSuccess; return initializeSuccess;
@ -199,14 +182,14 @@ namespace AWSClientAuth
} }
bool AuthenticationProviderManager::Initialize( bool AuthenticationProviderManager::Initialize(
const AZStd::vector<AZStd::string>& providerNames, const AZStd::string& settingsRegistryPath) const AZStd::vector<AZStd::string>& providerNames)
{ {
AZStd::vector<ProviderNameEnum> providerNamesEnum; AZStd::vector<ProviderNameEnum> providerNamesEnum;
for (auto name : providerNames) for (auto name : providerNames)
{ {
providerNamesEnum.push_back(GetProviderNameEnum(name)); providerNamesEnum.push_back(GetProviderNameEnum(name));
} }
return Initialize(providerNamesEnum, settingsRegistryPath); return Initialize(providerNamesEnum);
} }
void AuthenticationProviderManager::PasswordGrantSingleFactorSignInAsync(const AZStd::string& providerName, const AZStd::string& username, const AZStd::string& password) void AuthenticationProviderManager::PasswordGrantSingleFactorSignInAsync(const AZStd::string& providerName, const AZStd::string& username, const AZStd::string& password)

@ -30,9 +30,16 @@ namespace AWSClientAuth
m_settings.reset(); m_settings.reset();
} }
bool GoogleAuthenticationProvider::Initialize(AZStd::weak_ptr<AZ::SettingsRegistryInterface> settingsRegistry) bool GoogleAuthenticationProvider::Initialize()
{ {
if (!settingsRegistry.lock()->GetObject(m_settings.get(), azrtti_typeid(m_settings.get()), GoogleSettingsPath)) AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get();
if (!settingsRegistry)
{
AZ_Warning("AWSCognitoAuthenticationProvider", false, "Failed to load the setting registry");
return false;
}
if (!settingsRegistry->GetObject(m_settings.get(), azrtti_typeid(m_settings.get()), GoogleSettingsPath))
{ {
AZ_Warning("AWSCognitoAuthenticationProvider", false, "Failed to get Google settings object for path %s", GoogleSettingsPath); AZ_Warning("AWSCognitoAuthenticationProvider", false, "Failed to get Google settings object for path %s", GoogleSettingsPath);
return false; return false;

@ -29,9 +29,16 @@ namespace AWSClientAuth
m_settings.reset(); m_settings.reset();
} }
bool LWAAuthenticationProvider::Initialize(AZStd::weak_ptr<AZ::SettingsRegistryInterface> settingsRegistry) bool LWAAuthenticationProvider::Initialize()
{ {
if (!settingsRegistry.lock()->GetObject(m_settings.get(), azrtti_typeid(m_settings.get()), LwaSettingsPath)) AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get();
if (!settingsRegistry)
{
AZ_Warning("AWSCognitoAuthenticationProvider", false, "Failed to load the setting registry");
return false;
}
if (!settingsRegistry->GetObject(m_settings.get(), azrtti_typeid(m_settings.get()), LwaSettingsPath))
{ {
AZ_Warning("AWSCognitoAuthenticationProvider", false, "Failed to get login with Amazon settings object for path %s", LwaSettingsPath); AZ_Warning("AWSCognitoAuthenticationProvider", false, "Failed to get login with Amazon settings object for path %s", LwaSettingsPath);
return false; return false;

@ -351,12 +351,12 @@ namespace AWSClientAuthUnitTest
AuthenticationProviderMock() AuthenticationProviderMock()
{ {
ON_CALL(*this, Initialize(testing::_)).WillByDefault(testing::Return(true)); ON_CALL(*this, Initialize()).WillByDefault(testing::Return(true));
} }
virtual ~AuthenticationProviderMock() = default; virtual ~AuthenticationProviderMock() = default;
MOCK_METHOD1(Initialize, bool(AZStd::weak_ptr<AZ::SettingsRegistryInterface> settingsRegistry)); MOCK_METHOD0(Initialize, bool());
MOCK_METHOD2(PasswordGrantSingleFactorSignInAsync, void(const AZStd::string& username, const AZStd::string& password)); MOCK_METHOD2(PasswordGrantSingleFactorSignInAsync, void(const AZStd::string& username, const AZStd::string& password));
MOCK_METHOD2(PasswordGrantMultiFactorSignInAsync, void(const AZStd::string& username, const AZStd::string& password)); MOCK_METHOD2(PasswordGrantMultiFactorSignInAsync, void(const AZStd::string& username, const AZStd::string& password));
MOCK_METHOD2(PasswordGrantMultiFactorConfirmSignInAsync, void(const AZStd::string& username, const AZStd::string& confirmationCode)); MOCK_METHOD2(PasswordGrantMultiFactorConfirmSignInAsync, void(const AZStd::string& username, const AZStd::string& confirmationCode));
@ -495,6 +495,8 @@ namespace AWSClientAuthUnitTest
m_settingsRegistry->SetContext(m_serializeContext.get()); m_settingsRegistry->SetContext(m_serializeContext.get());
m_settingsRegistry->SetContext(m_registrationContext.get()); m_settingsRegistry->SetContext(m_registrationContext.get());
AZ::SettingsRegistry::Register(m_settingsRegistry.get());
AZ::ComponentApplicationBus::Handler::BusConnect(); AZ::ComponentApplicationBus::Handler::BusConnect();
AZ::Interface<AZ::ComponentApplicationRequests>::Register(this); AZ::Interface<AZ::ComponentApplicationRequests>::Register(this);
@ -555,6 +557,8 @@ namespace AWSClientAuthUnitTest
AWSClientAuth::AWSClientAuthRequestBus::Handler::BusDisconnect(); AWSClientAuth::AWSClientAuthRequestBus::Handler::BusDisconnect();
} }
AZ::SettingsRegistry::Unregister(m_settingsRegistry.get());
m_testFolder.reset(); m_testFolder.reset();
m_settingsRegistry.reset(); m_settingsRegistry.reset();
m_serializeContext.reset(); m_serializeContext.reset();
@ -660,8 +664,5 @@ namespace AWSClientAuthUnitTest
m_testFolderCreated = true; m_testFolderCreated = true;
return path; return path;
} }
};
};
} }

@ -31,7 +31,7 @@ class AWSCognitoAuthenticationProviderTest
{ {
AWSClientAuthUnitTest::AWSClientAuthGemAllocatorFixture::SetUp(); AWSClientAuthUnitTest::AWSClientAuthGemAllocatorFixture::SetUp();
m_cognitoAuthenticationProviderMock.Initialize(m_settingsRegistry); m_cognitoAuthenticationProviderMock.Initialize();
AWSCore::AWSCoreRequestBus::Handler::BusConnect(); AWSCore::AWSCoreRequestBus::Handler::BusConnect();
@ -98,7 +98,7 @@ TEST_F(AWSCognitoAuthenticationProviderTest, Initialize_Success)
{ {
EXPECT_CALL(m_awsResourceMappingRequestBusMock, GetResourceNameId(testing::_)).Times(1); EXPECT_CALL(m_awsResourceMappingRequestBusMock, GetResourceNameId(testing::_)).Times(1);
AWSClientAuthUnitTest::AWSCognitoAuthenticationProviderrLocalMock mock; AWSClientAuthUnitTest::AWSCognitoAuthenticationProviderrLocalMock mock;
ASSERT_TRUE(mock.Initialize(m_settingsRegistry)); ASSERT_TRUE(mock.Initialize());
ASSERT_EQ(mock.m_cognitoAppClientId, AWSClientAuthUnitTest::TEST_RESOURCE_NAME_ID); ASSERT_EQ(mock.m_cognitoAppClientId, AWSClientAuthUnitTest::TEST_RESOURCE_NAME_ID);
} }
@ -260,5 +260,5 @@ TEST_F(AWSCognitoAuthenticationProviderTest, Initialize_Fail_EmptyResourceName)
{ {
AWSClientAuthUnitTest::AWSCognitoAuthenticationProviderrLocalMock mock; AWSClientAuthUnitTest::AWSCognitoAuthenticationProviderrLocalMock mock;
EXPECT_CALL(m_awsResourceMappingRequestBusMock, GetResourceNameId(testing::_)).Times(1).WillOnce(testing::Return("")); EXPECT_CALL(m_awsResourceMappingRequestBusMock, GetResourceNameId(testing::_)).Times(1).WillOnce(testing::Return(""));
ASSERT_FALSE(mock.Initialize(m_settingsRegistry)); ASSERT_FALSE(mock.Initialize());
} }

@ -28,7 +28,8 @@ protected:
AWSClientAuth::LWAProviderSetting::Reflect(*m_serializeContext); AWSClientAuth::LWAProviderSetting::Reflect(*m_serializeContext);
AWSClientAuth::GoogleProviderSetting::Reflect(*m_serializeContext); AWSClientAuth::GoogleProviderSetting::Reflect(*m_serializeContext);
m_settingspath = AZStd::string::format("%s/%s/authenticationProvider.setreg", AZStd::string settingspath = AZStd::string::format(
"%s/%s/authenticationProvider.setreg",
m_testFolder->c_str(), AZ::SettingsRegistryInterface::RegistryFolder); m_testFolder->c_str(), AZ::SettingsRegistryInterface::RegistryFolder);
CreateTestFile("authenticationProvider.setreg" CreateTestFile("authenticationProvider.setreg"
, R"({ , R"({
@ -54,6 +55,7 @@ protected:
} }
} }
})"); })");
m_settingsRegistry->MergeSettingsFile(settingspath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_mockController = AZStd::make_unique<testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderManagerLocalMock>>(); m_mockController = AZStd::make_unique<testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderManagerLocalMock>>();
} }
@ -66,20 +68,19 @@ protected:
public: public:
AZStd::unique_ptr<testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderManagerLocalMock>> m_mockController; AZStd::unique_ptr<testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderManagerLocalMock>> m_mockController;
AZStd::string m_settingspath;
AZStd::vector<AZStd::string> m_enabledProviderNames { AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP, AZStd::vector<AZStd::string> m_enabledProviderNames { AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP,
AWSClientAuth::ProvideNameEnumStringLoginWithAmazon, AWSClientAuth::ProvideNameEnumStringGoogle}; AWSClientAuth::ProvideNameEnumStringLoginWithAmazon, AWSClientAuth::ProvideNameEnumStringGoogle};
}; };
TEST_F(AuthenticationProviderManagerScriptCanvasTest, Initialize_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, Initialize_Success)
{ {
ASSERT_TRUE(m_mockController->Initialize(m_enabledProviderNames, m_settingspath)); ASSERT_TRUE(m_mockController->Initialize(m_enabledProviderNames));
ASSERT_TRUE(m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP] != nullptr); ASSERT_TRUE(m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP] != nullptr);
} }
TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantSingleFactorSignInAsync_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantSingleFactorSignInAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
EXPECT_CALL(*cognitoProviderMock, PasswordGrantSingleFactorSignInAsync(testing::_, testing::_)).Times(1); EXPECT_CALL(*cognitoProviderMock, PasswordGrantSingleFactorSignInAsync(testing::_, testing::_)).Times(1);
@ -96,7 +97,7 @@ TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantSingleFactorS
TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantMultiFactorSignInAsync_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantMultiFactorSignInAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
@ -111,7 +112,7 @@ TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantMultiFactorSi
TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantMultiFactorConfirmSignInAsync_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantMultiFactorConfirmSignInAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
@ -126,7 +127,7 @@ TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantMultiFactorCo
TEST_F(AuthenticationProviderManagerScriptCanvasTest, DeviceCodeGrantSignInAsync_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, DeviceCodeGrantSignInAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
@ -142,7 +143,7 @@ TEST_F(AuthenticationProviderManagerScriptCanvasTest, DeviceCodeGrantSignInAsync
TEST_F(AuthenticationProviderManagerScriptCanvasTest, DeviceCodeGrantConfirmSignInAsync_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, DeviceCodeGrantConfirmSignInAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
@ -157,7 +158,7 @@ TEST_F(AuthenticationProviderManagerScriptCanvasTest, DeviceCodeGrantConfirmSign
TEST_F(AuthenticationProviderManagerScriptCanvasTest, RefreshTokenAsync_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, RefreshTokenAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
@ -172,7 +173,7 @@ TEST_F(AuthenticationProviderManagerScriptCanvasTest, RefreshTokenAsync_Success)
TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokensWithRefreshAsync_ValidToken_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokensWithRefreshAsync_ValidToken_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
AWSClientAuth::AuthenticationTokens tokens( AWSClientAuth::AuthenticationTokens tokens(
@ -188,7 +189,7 @@ TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokensWithRefreshAsync_
TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokensWithRefreshAsync_InvalidToken_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokensWithRefreshAsync_InvalidToken_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
AWSClientAuth::AuthenticationTokens tokens; AWSClientAuth::AuthenticationTokens tokens;
EXPECT_CALL(*cognitoProviderMock, GetAuthenticationTokens()).Times(1).WillOnce(testing::Return(tokens)); EXPECT_CALL(*cognitoProviderMock, GetAuthenticationTokens()).Times(1).WillOnce(testing::Return(tokens));
@ -209,7 +210,7 @@ TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokensWithRefreshAsync_
TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokens_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokens_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
AWSClientAuth::AuthenticationTokens tokens( AWSClientAuth::AuthenticationTokens tokens(
@ -224,7 +225,7 @@ TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokens_Success)
TEST_F(AuthenticationProviderManagerScriptCanvasTest, IsSignedIn_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, IsSignedIn_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
AWSClientAuth::AuthenticationTokens tokens( AWSClientAuth::AuthenticationTokens tokens(
@ -238,7 +239,7 @@ TEST_F(AuthenticationProviderManagerScriptCanvasTest, IsSignedIn_Success)
TEST_F(AuthenticationProviderManagerScriptCanvasTest, SignOut_Success) TEST_F(AuthenticationProviderManagerScriptCanvasTest, SignOut_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* googleProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::Google].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* googleProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::Google].get();
EXPECT_CALL(*googleProviderMock, SignOut()).Times(1); EXPECT_CALL(*googleProviderMock, SignOut()).Times(1);
@ -248,9 +249,3 @@ TEST_F(AuthenticationProviderManagerScriptCanvasTest, SignOut_Success)
googleProviderMock = nullptr; googleProviderMock = nullptr;
} }
TEST_F(AuthenticationProviderManagerScriptCanvasTest, Initialize_Fail_InvalidPath)
{
AZ_TEST_START_TRACE_SUPPRESSION;
ASSERT_FALSE(m_mockController->Initialize(m_enabledProviderNames, ""));
AZ_TEST_STOP_TRACE_SUPPRESSION(2);
}

@ -27,7 +27,8 @@ protected:
AWSClientAuth::LWAProviderSetting::Reflect(*m_serializeContext); AWSClientAuth::LWAProviderSetting::Reflect(*m_serializeContext);
AWSClientAuth::GoogleProviderSetting::Reflect(*m_serializeContext); AWSClientAuth::GoogleProviderSetting::Reflect(*m_serializeContext);
m_settingspath = AZStd::string::format("%s/%s/authenticationProvider.setreg", AZStd::string settingspath = AZStd::string::format(
"%s/%s/authenticationProvider.setreg",
m_testFolder->c_str(), AZ::SettingsRegistryInterface::RegistryFolder); m_testFolder->c_str(), AZ::SettingsRegistryInterface::RegistryFolder);
CreateTestFile("authenticationProvider.setreg" CreateTestFile("authenticationProvider.setreg"
, R"({ , R"({
@ -53,6 +54,7 @@ protected:
} }
} }
})"); })");
m_settingsRegistry->MergeSettingsFile(settingspath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_mockController = AZStd::make_unique<testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderManagerLocalMock>>(); m_mockController = AZStd::make_unique<testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderManagerLocalMock>>();
} }
@ -65,20 +67,19 @@ protected:
public: public:
AZStd::unique_ptr<testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderManagerLocalMock>> m_mockController; AZStd::unique_ptr<testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderManagerLocalMock>> m_mockController;
AZStd::string m_settingspath;
AZStd::vector<AWSClientAuth::ProviderNameEnum> m_enabledProviderNames {AWSClientAuth::ProviderNameEnum::AWSCognitoIDP, AZStd::vector<AWSClientAuth::ProviderNameEnum> m_enabledProviderNames {AWSClientAuth::ProviderNameEnum::AWSCognitoIDP,
AWSClientAuth::ProviderNameEnum::LoginWithAmazon, AWSClientAuth::ProviderNameEnum::Google}; AWSClientAuth::ProviderNameEnum::LoginWithAmazon, AWSClientAuth::ProviderNameEnum::Google};
}; };
TEST_F(AuthenticationProviderManagerTest, Initialize_Success) TEST_F(AuthenticationProviderManagerTest, Initialize_Success)
{ {
ASSERT_TRUE(m_mockController->Initialize(m_enabledProviderNames, m_settingspath)); ASSERT_TRUE(m_mockController->Initialize(m_enabledProviderNames));
ASSERT_TRUE(m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP] != nullptr); ASSERT_TRUE(m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP] != nullptr);
} }
TEST_F(AuthenticationProviderManagerTest, PasswordGrantSingleFactorSignInAsync_Success) TEST_F(AuthenticationProviderManagerTest, PasswordGrantSingleFactorSignInAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
EXPECT_CALL(*cognitoProviderMock, PasswordGrantSingleFactorSignInAsync(testing::_, testing::_)).Times(1); EXPECT_CALL(*cognitoProviderMock, PasswordGrantSingleFactorSignInAsync(testing::_, testing::_)).Times(1);
@ -95,7 +96,7 @@ TEST_F(AuthenticationProviderManagerTest, PasswordGrantSingleFactorSignInAsync_F
TEST_F(AuthenticationProviderManagerTest, PasswordGrantMultiFactorSignInAsync_Success) TEST_F(AuthenticationProviderManagerTest, PasswordGrantMultiFactorSignInAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
@ -110,7 +111,7 @@ TEST_F(AuthenticationProviderManagerTest, PasswordGrantMultiFactorSignInAsync_Su
TEST_F(AuthenticationProviderManagerTest, PasswordGrantMultiFactorConfirmSignInAsync_Success) TEST_F(AuthenticationProviderManagerTest, PasswordGrantMultiFactorConfirmSignInAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
@ -125,7 +126,7 @@ TEST_F(AuthenticationProviderManagerTest, PasswordGrantMultiFactorConfirmSignInA
TEST_F(AuthenticationProviderManagerTest, DeviceCodeGrantSignInAsync_Success) TEST_F(AuthenticationProviderManagerTest, DeviceCodeGrantSignInAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
@ -141,7 +142,7 @@ TEST_F(AuthenticationProviderManagerTest, DeviceCodeGrantSignInAsync_Success)
TEST_F(AuthenticationProviderManagerTest, DeviceCodeGrantConfirmSignInAsync_Success) TEST_F(AuthenticationProviderManagerTest, DeviceCodeGrantConfirmSignInAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
@ -156,7 +157,7 @@ TEST_F(AuthenticationProviderManagerTest, DeviceCodeGrantConfirmSignInAsync_Succ
TEST_F(AuthenticationProviderManagerTest, RefreshTokenAsync_Success) TEST_F(AuthenticationProviderManagerTest, RefreshTokenAsync_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
@ -171,7 +172,7 @@ TEST_F(AuthenticationProviderManagerTest, RefreshTokenAsync_Success)
TEST_F(AuthenticationProviderManagerTest, GetTokensWithRefreshAsync_ValidToken_Success) TEST_F(AuthenticationProviderManagerTest, GetTokensWithRefreshAsync_ValidToken_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
AWSClientAuth::AuthenticationTokens tokens( AWSClientAuth::AuthenticationTokens tokens(
@ -187,7 +188,7 @@ TEST_F(AuthenticationProviderManagerTest, GetTokensWithRefreshAsync_ValidToken_S
TEST_F(AuthenticationProviderManagerTest, GetTokensWithRefreshAsync_InvalidToken_Success) TEST_F(AuthenticationProviderManagerTest, GetTokensWithRefreshAsync_InvalidToken_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
AWSClientAuth::AuthenticationTokens tokens; AWSClientAuth::AuthenticationTokens tokens;
EXPECT_CALL(*cognitoProviderMock, GetAuthenticationTokens()).Times(1).WillOnce(testing::Return(tokens)); EXPECT_CALL(*cognitoProviderMock, GetAuthenticationTokens()).Times(1).WillOnce(testing::Return(tokens));
@ -208,7 +209,7 @@ TEST_F(AuthenticationProviderManagerTest, GetTokensWithRefreshAsync_NotInitializ
TEST_F(AuthenticationProviderManagerTest, GetTokens_Success) TEST_F(AuthenticationProviderManagerTest, GetTokens_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
AWSClientAuth::AuthenticationTokens tokens( AWSClientAuth::AuthenticationTokens tokens(
@ -223,7 +224,7 @@ TEST_F(AuthenticationProviderManagerTest, GetTokens_Success)
TEST_F(AuthenticationProviderManagerTest, IsSignedIn_Success) TEST_F(AuthenticationProviderManagerTest, IsSignedIn_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
AWSClientAuth::AuthenticationTokens tokens( AWSClientAuth::AuthenticationTokens tokens(
@ -237,7 +238,7 @@ TEST_F(AuthenticationProviderManagerTest, IsSignedIn_Success)
TEST_F(AuthenticationProviderManagerTest, SignOut_Success) TEST_F(AuthenticationProviderManagerTest, SignOut_Success)
{ {
m_mockController->Initialize(m_enabledProviderNames, m_settingspath); m_mockController->Initialize(m_enabledProviderNames);
testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* googleProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::Google].get(); testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* googleProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::Google].get();
EXPECT_CALL(*googleProviderMock, SignOut()).Times(1); EXPECT_CALL(*googleProviderMock, SignOut()).Times(1);
@ -247,9 +248,3 @@ TEST_F(AuthenticationProviderManagerTest, SignOut_Success)
googleProviderMock = nullptr; googleProviderMock = nullptr;
} }
TEST_F(AuthenticationProviderManagerTest, Initialize_Fail_InvalidPath)
{
AZ_TEST_START_TRACE_SUPPRESSION;
ASSERT_FALSE(m_mockController->Initialize(m_enabledProviderNames, ""));
AZ_TEST_STOP_TRACE_SUPPRESSION(2);
}

@ -47,7 +47,7 @@ class GoogleAuthenticationProviderTest
})"); })");
m_settingsRegistry->MergeSettingsFile(path, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {}); m_settingsRegistry->MergeSettingsFile(path, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_googleAuthenticationProviderLocalMock.Initialize(m_settingsRegistry); m_googleAuthenticationProviderLocalMock.Initialize();
} }
void TearDown() override void TearDown() override
@ -63,7 +63,7 @@ public:
TEST_F(GoogleAuthenticationProviderTest, Initialize_Success) TEST_F(GoogleAuthenticationProviderTest, Initialize_Success)
{ {
AWSClientAuthUnitTest::GoogleAuthenticationProviderLocalMock mock; AWSClientAuthUnitTest::GoogleAuthenticationProviderLocalMock mock;
ASSERT_TRUE(mock.Initialize(m_settingsRegistry)); ASSERT_TRUE(mock.Initialize());
ASSERT_EQ(mock.m_settings->m_appClientId, "TestGoogleClientId"); ASSERT_EQ(mock.m_settings->m_appClientId, "TestGoogleClientId");
} }
@ -117,14 +117,19 @@ TEST_F(GoogleAuthenticationProviderTest, RefreshTokensAsync_Fail_RequestHttpErro
TEST_F(GoogleAuthenticationProviderTest, Initialize_Fail_EmptyRegistry) TEST_F(GoogleAuthenticationProviderTest, Initialize_Fail_EmptyRegistry)
{ {
AZ::SettingsRegistry::Unregister(m_settingsRegistry.get());
AZStd::shared_ptr<AZ::SettingsRegistryImpl> registry = AZStd::make_shared<AZ::SettingsRegistryImpl>(); AZStd::shared_ptr<AZ::SettingsRegistryImpl> registry = AZStd::make_shared<AZ::SettingsRegistryImpl>();
registry->SetContext(m_serializeContext.get()); registry->SetContext(m_serializeContext.get());
AZ::SettingsRegistry::Register(registry.get());
AWSClientAuthUnitTest::GoogleAuthenticationProviderLocalMock mock; AWSClientAuthUnitTest::GoogleAuthenticationProviderLocalMock mock;
ASSERT_FALSE(mock.Initialize(registry)); ASSERT_FALSE(mock.Initialize());
ASSERT_EQ(mock.m_settings->m_appClientId, ""); ASSERT_EQ(mock.m_settings->m_appClientId, "");
AZ::SettingsRegistry::Unregister(registry.get());
registry.reset(); registry.reset();
// Restore // Restore
mock.Initialize(m_settingsRegistry); AZ::SettingsRegistry::Register(m_settingsRegistry.get());
mock.Initialize();
} }

@ -47,7 +47,7 @@ class LWAAuthenticationProviderTest
})"); })");
m_settingsRegistry->MergeSettingsFile(path, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {}); m_settingsRegistry->MergeSettingsFile(path, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_lwaAuthenticationProviderLocalMock.Initialize(m_settingsRegistry); m_lwaAuthenticationProviderLocalMock.Initialize();
} }
void TearDown() override void TearDown() override
@ -63,7 +63,7 @@ public:
TEST_F(LWAAuthenticationProviderTest, Initialize_Success) TEST_F(LWAAuthenticationProviderTest, Initialize_Success)
{ {
AWSClientAuthUnitTest::LWAAuthenticationProviderLocalMock mock; AWSClientAuthUnitTest::LWAAuthenticationProviderLocalMock mock;
ASSERT_TRUE(mock.Initialize(m_settingsRegistry)); ASSERT_TRUE(mock.Initialize());
ASSERT_EQ(mock.m_settings->m_appClientId, "TestLWAClientId"); ASSERT_EQ(mock.m_settings->m_appClientId, "TestLWAClientId");
} }
@ -117,14 +117,19 @@ TEST_F(LWAAuthenticationProviderTest, RefreshTokensAsync_Fail_RequestHttpError)
TEST_F(LWAAuthenticationProviderTest, Initialize_Fail_EmptyRegistry) TEST_F(LWAAuthenticationProviderTest, Initialize_Fail_EmptyRegistry)
{ {
AZ::SettingsRegistry::Unregister(m_settingsRegistry.get());
AZStd::shared_ptr<AZ::SettingsRegistryImpl> registry = AZStd::make_shared<AZ::SettingsRegistryImpl>(); AZStd::shared_ptr<AZ::SettingsRegistryImpl> registry = AZStd::make_shared<AZ::SettingsRegistryImpl>();
registry->SetContext(m_serializeContext.get()); registry->SetContext(m_serializeContext.get());
AZ::SettingsRegistry::Register(registry.get());
AWSClientAuthUnitTest::LWAAuthenticationProviderLocalMock mock; AWSClientAuthUnitTest::LWAAuthenticationProviderLocalMock mock;
ASSERT_FALSE(mock.Initialize(registry)); ASSERT_FALSE(mock.Initialize());
ASSERT_EQ(mock.m_settings->m_appClientId, ""); ASSERT_EQ(mock.m_settings->m_appClientId, "");
AZ::SettingsRegistry::Unregister(registry.get());
registry.reset(); registry.reset();
// Restore // Restore
mock.Initialize(m_settingsRegistry); AZ::SettingsRegistry::Register(m_settingsRegistry.get());
mock.Initialize();
} }

@ -7,7 +7,6 @@
#pragma once #pragma once
#include <AzCore/Settings/SettingsRegistryImpl.h>
#include <AzCore/std/string/string.h> #include <AzCore/std/string/string.h>
#include <AWSCoreInternalBus.h> #include <AWSCoreInternalBus.h>
@ -35,8 +34,10 @@ namespace AWSCore
"Failed to get profile name, return default value instead."; "Failed to get profile name, return default value instead.";
static constexpr const char ResourceMappingFileNameNotFoundErrorMessage[] = static constexpr const char ResourceMappingFileNameNotFoundErrorMessage[] =
"Failed to get resource mapping config file name, return empty value instead."; "Failed to get resource mapping config file name, return empty value instead.";
static constexpr const char SettingsRegistryLoadFailureErrorMessage[] = static constexpr const char SettingsRegistryFileLoadFailureErrorMessage[] =
"Failed to load AWSCore settings registry file."; "Failed to load AWSCore settings registry file.";
static constexpr const char GlobalSettingsRegistryLoadFailureErrorMessage[] =
"Failed to load AWSCore configurations from global settings registry.";
AWSCoreConfiguration(); AWSCoreConfiguration();
@ -53,9 +54,6 @@ namespace AWSCore
void ReloadConfiguration() override; void ReloadConfiguration() override;
private: private:
// Initialize settings registry reference by loading for project .setreg file
void InitSettingsRegistry();
// Initialize source project folder path // Initialize source project folder path
void InitSourceProjectFolderPath(); void InitSourceProjectFolderPath();
@ -66,7 +64,6 @@ namespace AWSCore
void ResetSettingsRegistryData(); void ResetSettingsRegistryData();
AZStd::string m_sourceProjectFolder; AZStd::string m_sourceProjectFolder;
AZ::SettingsRegistryImpl m_settingsRegistry;
AZStd::string m_profileName; AZStd::string m_profileName;
AZStd::string m_resourceMappingConfigFileName; AZStd::string m_resourceMappingConfigFileName;
}; };

@ -6,6 +6,8 @@
*/ */
#include <AzCore/IO/FileIO.h> #include <AzCore/IO/FileIO.h>
#include <AzCore/IO/Path/Path.h>
#include <AzCore/Settings/SettingsRegistryImpl.h>
#include <AzCore/Settings/SettingsRegistryMergeUtils.h> #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
#include <AzFramework/StringFunc/StringFunc.h> #include <AzFramework/StringFunc/StringFunc.h>
@ -69,27 +71,6 @@ namespace AWSCore
void AWSCoreConfiguration::InitConfig() void AWSCoreConfiguration::InitConfig()
{ {
InitSourceProjectFolderPath(); InitSourceProjectFolderPath();
InitSettingsRegistry();
}
void AWSCoreConfiguration::InitSettingsRegistry()
{
if (m_sourceProjectFolder.empty())
{
AZ_Warning(AWSCoreConfigurationName, false, ProjectSourceFolderNotFoundErrorMessage);
return;
}
AZStd::string settingsRegistryPath = AZStd::string::format("%s/%s/%s",
m_sourceProjectFolder.c_str(), AZ::SettingsRegistryInterface::RegistryFolder, AWSCoreConfiguration::AWSCoreConfigurationFileName);
AzFramework::StringFunc::Path::Normalize(settingsRegistryPath);
if (!m_settingsRegistry.MergeSettingsFile(settingsRegistryPath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, ""))
{
AZ_Warning(AWSCoreConfigurationName, false, SettingsRegistryLoadFailureErrorMessage);
return;
}
ParseSettingsRegistryValues(); ParseSettingsRegistryValues();
} }
@ -108,10 +89,17 @@ namespace AWSCore
void AWSCoreConfiguration::ParseSettingsRegistryValues() void AWSCoreConfiguration::ParseSettingsRegistryValues()
{ {
AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get();
if (!settingsRegistry)
{
AZ_Warning(AWSCoreConfigurationName, false, GlobalSettingsRegistryLoadFailureErrorMessage);
return;
}
m_resourceMappingConfigFileName.clear(); m_resourceMappingConfigFileName.clear();
auto resourceMappingConfigFileNamePath = AZStd::string::format("%s%s", auto resourceMappingConfigFileNamePath = AZStd::string::format("%s%s",
AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreResourceMappingConfigFileNameKey); AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreResourceMappingConfigFileNameKey);
if (!m_settingsRegistry.Get(m_resourceMappingConfigFileName, resourceMappingConfigFileNamePath)) if (!settingsRegistry->Get(m_resourceMappingConfigFileName, resourceMappingConfigFileNamePath))
{ {
AZ_Warning(AWSCoreConfigurationName, false, ResourceMappingFileNameNotFoundErrorMessage); AZ_Warning(AWSCoreConfigurationName, false, ResourceMappingFileNameNotFoundErrorMessage);
} }
@ -119,7 +107,7 @@ namespace AWSCore
m_profileName.clear(); m_profileName.clear();
auto profileNamePath = AZStd::string::format( auto profileNamePath = AZStd::string::format(
"%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreProfileNameKey); "%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreProfileNameKey);
if (!m_settingsRegistry.Get(m_profileName, profileNamePath)) if (!settingsRegistry->Get(m_profileName, profileNamePath))
{ {
AZ_Warning(AWSCoreConfigurationName, false, ProfileNameNotFoundErrorMessage); AZ_Warning(AWSCoreConfigurationName, false, ProfileNameNotFoundErrorMessage);
m_profileName = AWSCoreDefaultProfileName; m_profileName = AWSCoreDefaultProfileName;
@ -128,20 +116,43 @@ namespace AWSCore
void AWSCoreConfiguration::ResetSettingsRegistryData() void AWSCoreConfiguration::ResetSettingsRegistryData()
{ {
AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get();
if (!settingsRegistry)
{
AZ_Warning(AWSCoreConfigurationName, false, GlobalSettingsRegistryLoadFailureErrorMessage);
return;
}
auto profileNamePath = AZStd::string::format("%s%s", auto profileNamePath = AZStd::string::format("%s%s",
AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreProfileNameKey); AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreProfileNameKey);
m_settingsRegistry.Remove(profileNamePath); settingsRegistry->Remove(profileNamePath);
m_profileName = AWSCoreDefaultProfileName; m_profileName = AWSCoreDefaultProfileName;
auto resourceMappingConfigFileNamePath = AZStd::string::format("%s%s", auto resourceMappingConfigFileNamePath = AZStd::string::format("%s%s",
AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreResourceMappingConfigFileNameKey); AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSCoreResourceMappingConfigFileNameKey);
m_settingsRegistry.Remove(resourceMappingConfigFileNamePath); settingsRegistry->Remove(resourceMappingConfigFileNamePath);
m_resourceMappingConfigFileName.clear(); m_resourceMappingConfigFileName.clear();
// Reload the AWSCore setting registry file from disk.
if (m_sourceProjectFolder.empty())
{
AZ_Warning(AWSCoreConfigurationName, false, SettingsRegistryFileLoadFailureErrorMessage);
return;
}
auto settingsRegistryPath = AZ::IO::FixedMaxPath(AZStd::string_view{ m_sourceProjectFolder }) /
AZ::SettingsRegistryInterface::RegistryFolder /
AWSCoreConfiguration::AWSCoreConfigurationFileName;
if (!settingsRegistry->MergeSettingsFile(settingsRegistryPath.c_str(), AZ::SettingsRegistryInterface::Format::JsonMergePatch, ""))
{
AZ_Warning(AWSCoreConfigurationName, false, SettingsRegistryFileLoadFailureErrorMessage);
return;
}
} }
void AWSCoreConfiguration::ReloadConfiguration() void AWSCoreConfiguration::ReloadConfiguration()
{ {
ResetSettingsRegistryData(); ResetSettingsRegistryData();
InitSettingsRegistry(); ParseSettingsRegistryValues();
} }
} // namespace AWSCore } // namespace AWSCore

@ -31,7 +31,7 @@ namespace AWSCore
void AWSResourceMappingManager::ActivateManager() void AWSResourceMappingManager::ActivateManager()
{ {
ReloadConfigFile(true); ReloadConfigFile();
AWSResourceMappingRequestBus::Handler::BusConnect(); AWSResourceMappingRequestBus::Handler::BusConnect();
} }

@ -67,10 +67,13 @@ protected:
m_serializeContext = AZStd::make_unique<AZ::SerializeContext>(); m_serializeContext = AZStd::make_unique<AZ::SerializeContext>();
m_serializeContext->CreateEditContext(); m_serializeContext->CreateEditContext();
m_behaviorContext = AZStd::make_unique<AZ::BehaviorContext>(); m_behaviorContext = AZStd::make_unique<AZ::BehaviorContext>();
m_componentDescriptor.reset(AWSCoreSystemComponent::CreateDescriptor()); m_componentDescriptor.reset(AWSCoreSystemComponent::CreateDescriptor());
m_componentDescriptor->Reflect(m_serializeContext.get()); m_componentDescriptor->Reflect(m_serializeContext.get());
m_componentDescriptor->Reflect(m_behaviorContext.get()); m_componentDescriptor->Reflect(m_behaviorContext.get());
m_settingsRegistry->SetContext(m_serializeContext.get());
m_entity = aznew AZ::Entity(); m_entity = aznew AZ::Entity();
m_coreSystemsComponent.reset(m_entity->CreateComponent<AWSCoreSystemComponent>()); m_coreSystemsComponent.reset(m_entity->CreateComponent<AWSCoreSystemComponent>());
} }

@ -60,6 +60,8 @@ public:
AzFramework::StringFunc::Path::Normalize(m_normalizedSetRegFolderPath); AzFramework::StringFunc::Path::Normalize(m_normalizedSetRegFolderPath);
m_localFileIO->SetAlias("@devassets@", m_normalizedSourceProjectFolder.c_str()); m_localFileIO->SetAlias("@devassets@", m_normalizedSourceProjectFolder.c_str());
CreateTestSetRegFile(TEST_VALID_RESOURCE_MAPPING_SETREG);
} }
void TearDown() override void TearDown() override
@ -73,11 +75,11 @@ public:
} }
AZStd::unique_ptr<AWSCore::AWSCoreConfiguration> m_awsCoreConfiguration; AZStd::unique_ptr<AWSCore::AWSCoreConfiguration> m_awsCoreConfiguration;
AZStd::string m_normalizedSetRegFilePath;
private: private:
AZStd::string m_normalizedSourceProjectFolder; AZStd::string m_normalizedSourceProjectFolder;
AZStd::string m_normalizedSetRegFolderPath; AZStd::string m_normalizedSetRegFolderPath;
AZStd::string m_normalizedSetRegFilePath;
void CreateTestFile(const AZStd::string& filePath, const AZStd::string& fileContent) void CreateTestFile(const AZStd::string& filePath, const AZStd::string& fileContent)
{ {
@ -118,17 +120,9 @@ private:
TEST_F(AWSCoreConfigurationTest, InitConfig_NoSourceProjectFolderFound_ReturnEmptyConfigFilePath) TEST_F(AWSCoreConfigurationTest, InitConfig_NoSourceProjectFolderFound_ReturnEmptyConfigFilePath)
{ {
m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_localFileIO->ClearAlias("@devassets@"); m_localFileIO->ClearAlias("@devassets@");
AZ_TEST_START_TRACE_SUPPRESSION;
m_awsCoreConfiguration->InitConfig();
AZ_TEST_STOP_TRACE_SUPPRESSION(1); // expect the above have thrown an AZ_Error
auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath();
EXPECT_TRUE(actualConfigFilePath.empty());
}
TEST_F(AWSCoreConfigurationTest, InitConfig_NoSettingsRegistryFileFound_ReturnEmptyConfigFilePath)
{
AZ_TEST_START_TRACE_SUPPRESSION; AZ_TEST_START_TRACE_SUPPRESSION;
m_awsCoreConfiguration->InitConfig(); m_awsCoreConfiguration->InitConfig();
AZ_TEST_STOP_TRACE_SUPPRESSION(1); // expect the above have thrown an AZ_Error AZ_TEST_STOP_TRACE_SUPPRESSION(1); // expect the above have thrown an AZ_Error
@ -140,6 +134,7 @@ TEST_F(AWSCoreConfigurationTest, InitConfig_NoSettingsRegistryFileFound_ReturnEm
TEST_F(AWSCoreConfigurationTest, InitConfig_SettingsRegistryIsEmpty_ReturnEmptyConfigFilePath) TEST_F(AWSCoreConfigurationTest, InitConfig_SettingsRegistryIsEmpty_ReturnEmptyConfigFilePath)
{ {
CreateTestSetRegFile(TEST_INVALID_RESOURCE_MAPPING_SETREG); CreateTestSetRegFile(TEST_INVALID_RESOURCE_MAPPING_SETREG);
m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_awsCoreConfiguration->InitConfig(); m_awsCoreConfiguration->InitConfig();
auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath(); auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath();
@ -148,7 +143,7 @@ TEST_F(AWSCoreConfigurationTest, InitConfig_SettingsRegistryIsEmpty_ReturnEmptyC
TEST_F(AWSCoreConfigurationTest, InitConfig_LoadValidSettingsRegistry_ReturnNonEmptyConfigFilePath) TEST_F(AWSCoreConfigurationTest, InitConfig_LoadValidSettingsRegistry_ReturnNonEmptyConfigFilePath)
{ {
CreateTestSetRegFile(TEST_VALID_RESOURCE_MAPPING_SETREG); m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_awsCoreConfiguration->InitConfig(); m_awsCoreConfiguration->InitConfig();
auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath(); auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath();
@ -157,6 +152,7 @@ TEST_F(AWSCoreConfigurationTest, InitConfig_LoadValidSettingsRegistry_ReturnNonE
TEST_F(AWSCoreConfigurationTest, ReloadConfiguration_NoSourceProjectFolderFound_ReturnEmptyConfigFilePath) TEST_F(AWSCoreConfigurationTest, ReloadConfiguration_NoSourceProjectFolderFound_ReturnEmptyConfigFilePath)
{ {
m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_localFileIO->ClearAlias("@devassets@"); m_localFileIO->ClearAlias("@devassets@");
m_awsCoreConfiguration->ReloadConfiguration(); m_awsCoreConfiguration->ReloadConfiguration();
@ -167,6 +163,7 @@ TEST_F(AWSCoreConfigurationTest, ReloadConfiguration_NoSourceProjectFolderFound_
TEST_F(AWSCoreConfigurationTest, ReloadConfiguration_LoadValidSettingsRegistryAfterInvalidOne_ReturnNonEmptyConfigFilePath) TEST_F(AWSCoreConfigurationTest, ReloadConfiguration_LoadValidSettingsRegistryAfterInvalidOne_ReturnNonEmptyConfigFilePath)
{ {
CreateTestSetRegFile(TEST_INVALID_RESOURCE_MAPPING_SETREG); CreateTestSetRegFile(TEST_INVALID_RESOURCE_MAPPING_SETREG);
m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_awsCoreConfiguration->InitConfig(); m_awsCoreConfiguration->InitConfig();
auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath(); auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath();
@ -185,7 +182,7 @@ TEST_F(AWSCoreConfigurationTest, ReloadConfiguration_LoadValidSettingsRegistryAf
TEST_F(AWSCoreConfigurationTest, ReloadConfiguration_LoadInvalidSettingsRegistryAfterValidOne_ReturnEmptyConfigFilePath) TEST_F(AWSCoreConfigurationTest, ReloadConfiguration_LoadInvalidSettingsRegistryAfterValidOne_ReturnEmptyConfigFilePath)
{ {
CreateTestSetRegFile(TEST_VALID_RESOURCE_MAPPING_SETREG); m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_awsCoreConfiguration->InitConfig(); m_awsCoreConfiguration->InitConfig();
auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath(); auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath();

@ -14,7 +14,6 @@
#include <AzCore/std/smart_ptr/make_shared.h> #include <AzCore/std/smart_ptr/make_shared.h>
#include <AzCore/base.h> #include <AzCore/base.h>
#include <AzCore/Settings/SettingsRegistry.h> #include <AzCore/Settings/SettingsRegistry.h>
#include <AzCore/Settings/SettingsRegistryImpl.h>
#include <AzCore/Settings/SettingsRegistryMergeUtils.h> #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
#include <AzCore/Serialization/Json/JsonSystemComponent.h> #include <AzCore/Serialization/Json/JsonSystemComponent.h>
#include <AzCore/Serialization/Json/RegistrationContext.h> #include <AzCore/Serialization/Json/RegistrationContext.h>
@ -161,7 +160,6 @@ namespace AWSAttributionUnitTest
protected: protected:
AZStd::shared_ptr<AZ::SerializeContext> m_serializeContext; AZStd::shared_ptr<AZ::SerializeContext> m_serializeContext;
AZStd::unique_ptr<AZ::JsonRegistrationContext> m_registrationContext; AZStd::unique_ptr<AZ::JsonRegistrationContext> m_registrationContext;
AZStd::shared_ptr<AZ::SettingsRegistryImpl> m_settingsRegistry;
AZStd::unique_ptr<AZ::JobContext> m_jobContext; AZStd::unique_ptr<AZ::JobContext> m_jobContext;
AZStd::unique_ptr<AZ::JobCancelGroup> m_jobCancelGroup; AZStd::unique_ptr<AZ::JobCancelGroup> m_jobCancelGroup;
AZStd::unique_ptr<AZ::JobManager> m_jobManager; AZStd::unique_ptr<AZ::JobManager> m_jobManager;
@ -186,13 +184,9 @@ namespace AWSAttributionUnitTest
AZ::JsonSystemComponent::Reflect(m_registrationContext.get()); AZ::JsonSystemComponent::Reflect(m_registrationContext.get());
m_settingsRegistry = AZStd::make_unique<AZ::SettingsRegistryImpl>();
m_settingsRegistry->SetContext(m_serializeContext.get()); m_settingsRegistry->SetContext(m_serializeContext.get());
m_settingsRegistry->SetContext(m_registrationContext.get()); m_settingsRegistry->SetContext(m_registrationContext.get());
AZ::SettingsRegistry::Register(m_settingsRegistry.get());
AZ::JobManagerDesc jobManagerDesc; AZ::JobManagerDesc jobManagerDesc;
AZ::JobManagerThreadDesc threadDesc; AZ::JobManagerThreadDesc threadDesc;
@ -210,9 +204,6 @@ namespace AWSAttributionUnitTest
m_jobCancelGroup.reset(); m_jobCancelGroup.reset();
m_jobManager.reset(); m_jobManager.reset();
AZ::SettingsRegistry::Unregister(m_settingsRegistry.get());
m_settingsRegistry.reset();
m_serializeContext.reset(); m_serializeContext.reset();
m_registrationContext.reset(); m_registrationContext.reset();

@ -8,7 +8,6 @@
#include <AzCore/Serialization/SerializeContext.h> #include <AzCore/Serialization/SerializeContext.h>
#include <AzCore/Serialization/EditContext.h> #include <AzCore/Serialization/EditContext.h>
#include <AzCore/std/smart_ptr/unique_ptr.h> #include <AzCore/std/smart_ptr/unique_ptr.h>
#include <AzCore/Settings/SettingsRegistryImpl.h>
#include <AzCore/Serialization/Json/JsonSystemComponent.h> #include <AzCore/Serialization/Json/JsonSystemComponent.h>
#include <AzCore/Serialization/Json/RegistrationContext.h> #include <AzCore/Serialization/Json/RegistrationContext.h>
#include <AzTest/AzTest.h> #include <AzTest/AzTest.h>
@ -87,13 +86,9 @@ namespace AWSCoreUnitTest
m_componentDescriptor->Reflect(m_serializeContext.get()); m_componentDescriptor->Reflect(m_serializeContext.get());
m_componentDescriptor->Reflect(m_behaviorContext.get()); m_componentDescriptor->Reflect(m_behaviorContext.get());
m_settingsRegistry = AZStd::make_unique<AZ::SettingsRegistryImpl>();
m_settingsRegistry->SetContext(m_serializeContext.get()); m_settingsRegistry->SetContext(m_serializeContext.get());
m_settingsRegistry->SetContext(m_registrationContext.get()); m_settingsRegistry->SetContext(m_registrationContext.get());
AZ::SettingsRegistry::Register(m_settingsRegistry.get());
m_entity = aznew AZ::Entity(); m_entity = aznew AZ::Entity();
m_awsCoreSystemComponentMock = aznew testing::NiceMock<AWSCoreSystemComponentMock>(); m_awsCoreSystemComponentMock = aznew testing::NiceMock<AWSCoreSystemComponentMock>();
m_entity->AddComponent(m_awsCoreSystemComponentMock); m_entity->AddComponent(m_awsCoreSystemComponentMock);
@ -113,7 +108,6 @@ namespace AWSCoreUnitTest
m_awsCoreComponentDescriptor.reset(); m_awsCoreComponentDescriptor.reset();
m_componentDescriptor.reset(); m_componentDescriptor.reset();
m_behaviorContext.reset(); m_behaviorContext.reset();
m_settingsRegistry.reset();
m_registrationContext.reset(); m_registrationContext.reset();
m_serializeContext.reset(); m_serializeContext.reset();
AWSCoreFixture::TearDown(); AWSCoreFixture::TearDown();
@ -130,7 +124,6 @@ namespace AWSCoreUnitTest
AZStd::unique_ptr<AZ::JsonRegistrationContext> m_registrationContext; AZStd::unique_ptr<AZ::JsonRegistrationContext> m_registrationContext;
AZStd::unique_ptr<AZ::ComponentDescriptor> m_componentDescriptor; AZStd::unique_ptr<AZ::ComponentDescriptor> m_componentDescriptor;
AZStd::unique_ptr<AZ::ComponentDescriptor> m_awsCoreComponentDescriptor; AZStd::unique_ptr<AZ::ComponentDescriptor> m_awsCoreComponentDescriptor;
AZStd::shared_ptr<AZ::SettingsRegistryImpl> m_settingsRegistry;
}; };
TEST_F(AWSAttributionSystemComponentTest, SystemComponentInitActivate_Success) TEST_F(AWSAttributionSystemComponentTest, SystemComponentInitActivate_Success)

@ -171,7 +171,7 @@ TEST_F(AWSResourceMappingManagerTest, ActivateManager_ParseInvalidConfigFile_Con
AZStd::string actualRegion; AZStd::string actualRegion;
AWSResourceMappingRequestBus::BroadcastResult(actualAccountId, &AWSResourceMappingRequests::GetDefaultAccountId); AWSResourceMappingRequestBus::BroadcastResult(actualAccountId, &AWSResourceMappingRequests::GetDefaultAccountId);
AWSResourceMappingRequestBus::BroadcastResult(actualRegion, &AWSResourceMappingRequests::GetDefaultRegion); AWSResourceMappingRequestBus::BroadcastResult(actualRegion, &AWSResourceMappingRequests::GetDefaultRegion);
EXPECT_EQ(m_reloadConfigurationCounter, 1); EXPECT_EQ(m_reloadConfigurationCounter, 0);
EXPECT_TRUE(actualAccountId.empty()); EXPECT_TRUE(actualAccountId.empty());
EXPECT_TRUE(actualRegion.empty()); EXPECT_TRUE(actualRegion.empty());
EXPECT_TRUE(m_resourceMappingManager->GetStatus() == AWSResourceMappingManager::Status::Error); EXPECT_TRUE(m_resourceMappingManager->GetStatus() == AWSResourceMappingManager::Status::Error);
@ -186,7 +186,7 @@ TEST_F(AWSResourceMappingManagerTest, ActivateManager_ParseValidConfigFile_Confi
AZStd::string actualRegion; AZStd::string actualRegion;
AWSResourceMappingRequestBus::BroadcastResult(actualAccountId, &AWSResourceMappingRequests::GetDefaultAccountId); AWSResourceMappingRequestBus::BroadcastResult(actualAccountId, &AWSResourceMappingRequests::GetDefaultAccountId);
AWSResourceMappingRequestBus::BroadcastResult(actualRegion, &AWSResourceMappingRequests::GetDefaultRegion); AWSResourceMappingRequestBus::BroadcastResult(actualRegion, &AWSResourceMappingRequests::GetDefaultRegion);
EXPECT_EQ(m_reloadConfigurationCounter, 1); EXPECT_EQ(m_reloadConfigurationCounter, 0);
EXPECT_FALSE(actualAccountId.empty()); EXPECT_FALSE(actualAccountId.empty());
EXPECT_FALSE(actualRegion.empty()); EXPECT_FALSE(actualRegion.empty());
EXPECT_TRUE(m_resourceMappingManager->GetStatus() == AWSResourceMappingManager::Status::Ready); EXPECT_TRUE(m_resourceMappingManager->GetStatus() == AWSResourceMappingManager::Status::Ready);
@ -413,7 +413,7 @@ TEST_F(AWSResourceMappingManagerTest, ReloadConfigFile_ParseValidConfigFileAfter
AZStd::string actualRegion; AZStd::string actualRegion;
AWSResourceMappingRequestBus::BroadcastResult(actualAccountId, &AWSResourceMappingRequests::GetDefaultAccountId); AWSResourceMappingRequestBus::BroadcastResult(actualAccountId, &AWSResourceMappingRequests::GetDefaultAccountId);
AWSResourceMappingRequestBus::BroadcastResult(actualRegion, &AWSResourceMappingRequests::GetDefaultRegion); AWSResourceMappingRequestBus::BroadcastResult(actualRegion, &AWSResourceMappingRequests::GetDefaultRegion);
EXPECT_EQ(m_reloadConfigurationCounter, 1); EXPECT_EQ(m_reloadConfigurationCounter, 0);
EXPECT_TRUE(actualAccountId.empty()); EXPECT_TRUE(actualAccountId.empty());
EXPECT_TRUE(actualRegion.empty()); EXPECT_TRUE(actualRegion.empty());
EXPECT_TRUE(m_resourceMappingManager->GetStatus() == AWSResourceMappingManager::Status::Error); EXPECT_TRUE(m_resourceMappingManager->GetStatus() == AWSResourceMappingManager::Status::Error);
@ -423,7 +423,7 @@ TEST_F(AWSResourceMappingManagerTest, ReloadConfigFile_ParseValidConfigFileAfter
AWSResourceMappingRequestBus::BroadcastResult(actualAccountId, &AWSResourceMappingRequests::GetDefaultAccountId); AWSResourceMappingRequestBus::BroadcastResult(actualAccountId, &AWSResourceMappingRequests::GetDefaultAccountId);
AWSResourceMappingRequestBus::BroadcastResult(actualRegion, &AWSResourceMappingRequests::GetDefaultRegion); AWSResourceMappingRequestBus::BroadcastResult(actualRegion, &AWSResourceMappingRequests::GetDefaultRegion);
EXPECT_EQ(m_reloadConfigurationCounter, 1); EXPECT_EQ(m_reloadConfigurationCounter, 0);
EXPECT_FALSE(actualAccountId.empty()); EXPECT_FALSE(actualAccountId.empty());
EXPECT_FALSE(actualRegion.empty()); EXPECT_FALSE(actualRegion.empty());
EXPECT_TRUE(m_resourceMappingManager->GetStatus() == AWSResourceMappingManager::Status::Ready); EXPECT_TRUE(m_resourceMappingManager->GetStatus() == AWSResourceMappingManager::Status::Ready);

@ -9,6 +9,7 @@
#include <AzCore/Memory/PoolAllocator.h> #include <AzCore/Memory/PoolAllocator.h>
#include <AzCore/UnitTest/TestTypes.h> #include <AzCore/UnitTest/TestTypes.h>
#include <AzCore/Settings/SettingsRegistryImpl.h>
#include <AzFramework/IO/LocalFileIO.h> #include <AzFramework/IO/LocalFileIO.h>
#include <Framework/JsonObjectHandler.h> #include <Framework/JsonObjectHandler.h>
@ -117,10 +118,16 @@ public:
m_otherFileIO = AZ::IO::FileIOBase::GetInstance(); m_otherFileIO = AZ::IO::FileIOBase::GetInstance();
AZ::IO::FileIOBase::SetInstance(nullptr); AZ::IO::FileIOBase::SetInstance(nullptr);
AZ::IO::FileIOBase::SetInstance(m_localFileIO); AZ::IO::FileIOBase::SetInstance(m_localFileIO);
m_settingsRegistry = AZStd::make_unique<AZ::SettingsRegistryImpl>();
AZ::SettingsRegistry::Register(m_settingsRegistry.get());
} }
void TearDown() override void TearDown() override
{ {
AZ::SettingsRegistry::Unregister(m_settingsRegistry.get());
m_settingsRegistry.reset();
AZ::IO::FileIOBase::SetInstance(nullptr); AZ::IO::FileIOBase::SetInstance(nullptr);
if (m_otherFileIO) if (m_otherFileIO)
@ -160,4 +167,7 @@ public:
private: private:
AZ::IO::FileIOBase* m_otherFileIO = nullptr; AZ::IO::FileIOBase* m_otherFileIO = nullptr;
protected:
AZStd::unique_ptr<AZ::SettingsRegistryImpl> m_settingsRegistry;
}; };

@ -17,12 +17,16 @@ namespace AWSMetrics
class ClientConfiguration class ClientConfiguration
{ {
public: public:
static constexpr const char AWSMetricsMaxQueueSizeInMbKey[] = "/Gems/AWSMetrics/MaxQueueSizeInMb";
static constexpr const char AWSMetricsQueueFlushPeriodInSecondsKey[] = "/Gems/AWSMetrics/QueueFlushPeriodInSeconds";
static constexpr const char AWSMetricsOfflineRecordingEnabledKey[] = "/Gems/AWSMetrics/OfflineRecording";
static constexpr const char AWSMetricsMaxNumRetriesKey[] = "/Gems/AWSMetrics/MaxNumRetries";
ClientConfiguration(); ClientConfiguration();
//! Reset the client settings based on the provided configuration file. //! Initialize the client settings based on the global setting registry.
//! @param settingsRegistryPath Full path to the configuration file.
//! @return whether the operation is successful //! @return whether the operation is successful
bool ResetClientConfiguration(const AZStd::string& settingsRegistryPath); bool InitClientConfiguration();
//! Retrieve the max queue size setting. //! Retrieve the max queue size setting.
//! @return Max queue size in bytes. //! @return Max queue size in bytes.

@ -33,9 +33,8 @@ namespace AWSMetrics
~MetricsManager(); ~MetricsManager();
//! Initializing the metrics manager //! Initializing the metrics manager
//! @param settingsRegistryPath Path to the settings registry file.
//! @return Whether the operation is successful. //! @return Whether the operation is successful.
bool Init(const AZStd::string& settingsRegistryPath = ""); bool Init();
//! Start sending metircs to the backend or a local file. //! Start sending metircs to the backend or a local file.
void StartMetrics(); void StartMetrics();
//! Stop sending metircs to the backend or a local file. //! Stop sending metircs to the backend or a local file.

@ -192,11 +192,7 @@ namespace AWSMetrics
void AWSMetricsSystemComponent::Init() void AWSMetricsSystemComponent::Init()
{ {
AZStd::string priorAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devroot@"); m_metricsManager->Init();
AZStd::string configFilePath = priorAlias + "\\Gems\\AWSMetrics\\Code\\" + AZ::SettingsRegistryInterface::RegistryFolder + "\\awsMetricsClientConfiguration.setreg";
AzFramework::StringFunc::Path::Normalize(configFilePath);
m_metricsManager->Init(configFilePath);
} }
void AWSMetricsSystemComponent::Activate() void AWSMetricsSystemComponent::Activate()

@ -9,6 +9,7 @@
#include <AzCore/IO/FileIO.h> #include <AzCore/IO/FileIO.h>
#include <AzCore/Settings/SettingsRegistryImpl.h> #include <AzCore/Settings/SettingsRegistryImpl.h>
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
#include <AzCore/std/smart_ptr/unique_ptr.h> #include <AzCore/std/smart_ptr/unique_ptr.h>
#include <AzFramework/StringFunc/StringFunc.h> #include <AzFramework/StringFunc/StringFunc.h>
@ -23,38 +24,44 @@ namespace AWSMetrics
{ {
} }
bool ClientConfiguration::ResetClientConfiguration(const AZStd::string& settingsRegistryPath) bool ClientConfiguration::InitClientConfiguration()
{ {
AZStd::unique_ptr<AZ::SettingsRegistryInterface> settingsRegistry = AZStd::make_unique<AZ::SettingsRegistryImpl>(); AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get();
if (!settingsRegistry)
AZ_Printf("AWSMetrics", "Reset client settings using the confiugration file %s", settingsRegistryPath.c_str());
if (!settingsRegistry->MergeSettingsFile(settingsRegistryPath, AZ::SettingsRegistryInterface::Format::JsonMergePatch))
{ {
AZ_Warning("AWSMetrics", false, "Failed to merge the configuration file"); AZ_Warning("AWSMetrics", false, "Failed to load the setting registry");
return false; return false;
} }
if (!settingsRegistry->Get(m_maxQueueSizeInMb, "/Amazon/Gems/AWSMetrics/MaxQueueSizeInMb")) if (!settingsRegistry->Get(
m_maxQueueSizeInMb,
AZStd::string::format("%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSMetricsMaxQueueSizeInMbKey)))
{ {
AZ_Warning("AWSMetrics", false, "Failed to read the maximum queue size setting in the configuration file"); AZ_Warning("AWSMetrics", false, "Failed to read the maximum queue size setting from the setting registry");
return false; return false;
} }
if (!settingsRegistry->Get(m_queueFlushPeriodInSeconds, "/Amazon/Gems/AWSMetrics/QueueFlushPeriodInSeconds")) if (!settingsRegistry->Get(
m_queueFlushPeriodInSeconds,
AZStd::string::format("%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSMetricsQueueFlushPeriodInSecondsKey)))
{ {
AZ_Warning("AWSMetrics", false, "Failed to read the queue flush period setting in the configuration file"); AZ_Warning("AWSMetrics", false, "Failed to read the queue flush period setting from the setting registry");
return false; return false;
} }
bool enableOfflineRecording = false; bool enableOfflineRecording = false;
if (!settingsRegistry->Get(enableOfflineRecording, "/Amazon/Gems/AWSMetrics/OfflineRecording")) if (!settingsRegistry->Get(
enableOfflineRecording,
AZStd::string::format("%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSMetricsOfflineRecordingEnabledKey)))
{ {
AZ_Warning("AWSMetrics", false, "Failed to read the submission target setting in the configuration file"); AZ_Warning("AWSMetrics", false, "Failed to read the submission target setting from the setting registry");
return false; return false;
} }
m_offlineRecordingEnabled = enableOfflineRecording; m_offlineRecordingEnabled = enableOfflineRecording;
if (!settingsRegistry->Get(m_maxNumRetries, "/Amazon/Gems/AWSMetrics/MaxNumRetries")) if (!settingsRegistry->Get(
m_maxNumRetries,
AZStd::string::format("%s%s", AZ::SettingsRegistryMergeUtils::OrganizationRootKey, AWSMetricsMaxNumRetriesKey)))
{ {
AZ_Warning("AWSMetrics", false, "Failed to read the maximum number of retries setting in the configuration file"); AZ_Warning("AWSMetrics", false, "Failed to read the maximum number of retries setting in the configuration file");
return false; return false;

@ -34,9 +34,9 @@ namespace AWSMetrics
ShutdownMetrics(); ShutdownMetrics();
} }
bool MetricsManager::Init(const AZStd::string& settingsRegistryPath) bool MetricsManager::Init()
{ {
if (!m_clientConfiguration->ResetClientConfiguration(settingsRegistryPath)) if (!m_clientConfiguration->InitClientConfiguration())
{ {
return false; return false;
} }

@ -52,10 +52,14 @@ namespace AWSMetrics
m_settingsRegistry->SetContext(m_serializeContext.get()); m_settingsRegistry->SetContext(m_serializeContext.get());
m_settingsRegistry->SetContext(m_registrationContext.get()); m_settingsRegistry->SetContext(m_registrationContext.get());
AZ::SettingsRegistry::Register(m_settingsRegistry.get());
} }
void TearDown() override void TearDown() override
{ {
AZ::SettingsRegistry::Unregister(m_settingsRegistry.get());
m_registrationContext->EnableRemoveReflection(); m_registrationContext->EnableRemoveReflection();
AZ::JsonSystemComponent::Reflect(m_registrationContext.get()); AZ::JsonSystemComponent::Reflect(m_registrationContext.get());
m_registrationContext->DisableRemoveReflection(); m_registrationContext->DisableRemoveReflection();
@ -130,7 +134,7 @@ namespace AWSMetrics
AZStd::unique_ptr<AZ::SerializeContext> m_serializeContext; AZStd::unique_ptr<AZ::SerializeContext> m_serializeContext;
AZStd::unique_ptr<AZ::JsonRegistrationContext> m_registrationContext; AZStd::unique_ptr<AZ::JsonRegistrationContext> m_registrationContext;
AZStd::shared_ptr<AZ::SettingsRegistryImpl> m_settingsRegistry; AZStd::unique_ptr<AZ::SettingsRegistryImpl> m_settingsRegistry;
private: private:
AZStd::string GetTestFolderPath() AZStd::string GetTestFolderPath()

@ -135,7 +135,8 @@ namespace AWSMetrics
m_metricsManager = AZStd::make_unique<MetricsManager>(); m_metricsManager = AZStd::make_unique<MetricsManager>();
AZStd::string configFilePath = CreateClientConfigFile(true, (double) TestMetricsEventSizeInBytes / MbToBytes * 2, DefaultFlushPeriodInSeconds, 0); AZStd::string configFilePath = CreateClientConfigFile(true, (double) TestMetricsEventSizeInBytes / MbToBytes * 2, DefaultFlushPeriodInSeconds, 0);
m_metricsManager->Init(configFilePath); m_settingsRegistry->MergeSettingsFile(configFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_metricsManager->Init();
RemoveFile(m_metricsManager->GetMetricsFilePath()); RemoveFile(m_metricsManager->GetMetricsFilePath());
@ -161,7 +162,8 @@ namespace AWSMetrics
RevertMockIOToLocalFileIO(); RevertMockIOToLocalFileIO();
AZStd::string configFilePath = CreateClientConfigFile(offlineRecordingEnabled, maxQueueSizeInMb, queueFlushPeriodInSeconds, MaxNumRetries); AZStd::string configFilePath = CreateClientConfigFile(offlineRecordingEnabled, maxQueueSizeInMb, queueFlushPeriodInSeconds, MaxNumRetries);
m_metricsManager->Init(configFilePath); m_settingsRegistry->MergeSettingsFile(configFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
m_metricsManager->Init();
ReplaceLocalFileIOWithMockIO(); ReplaceLocalFileIOWithMockIO();
} }
@ -555,10 +557,11 @@ namespace AWSMetrics
AZStd::unique_ptr<ClientConfiguration> m_clientConfiguration; AZStd::unique_ptr<ClientConfiguration> m_clientConfiguration;
}; };
TEST_F(ClientConfigurationTest, ResetClientConfiguration_ValidConfigurationFile_Success) TEST_F(ClientConfigurationTest, ResetClientConfiguration_ValidClientConfiguration_Success)
{ {
AZStd::string configFilePath = CreateClientConfigFile(true, DEFAULT_MAX_QUEUE_SIZE_IN_MB, DefaultFlushPeriodInSeconds, DEFAULT_MAX_NUM_RETRIES); AZStd::string configFilePath = CreateClientConfigFile(true, DEFAULT_MAX_QUEUE_SIZE_IN_MB, DefaultFlushPeriodInSeconds, DEFAULT_MAX_NUM_RETRIES);
ASSERT_TRUE(m_clientConfiguration->ResetClientConfiguration(configFilePath)); m_settingsRegistry->MergeSettingsFile(configFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
ASSERT_TRUE(m_clientConfiguration->InitClientConfiguration());
ASSERT_TRUE(m_clientConfiguration->OfflineRecordingEnabled()); ASSERT_TRUE(m_clientConfiguration->OfflineRecordingEnabled());
ASSERT_EQ(m_clientConfiguration->GetMaxQueueSizeInBytes(), DEFAULT_MAX_QUEUE_SIZE_IN_MB * 1000000); ASSERT_EQ(m_clientConfiguration->GetMaxQueueSizeInBytes(), DEFAULT_MAX_QUEUE_SIZE_IN_MB * 1000000);
@ -573,12 +576,4 @@ namespace AWSMetrics
ASSERT_EQ(strcmp(m_clientConfiguration->GetMetricsFileDir(), resolvedPath), 0); ASSERT_EQ(strcmp(m_clientConfiguration->GetMetricsFileDir(), resolvedPath), 0);
ASSERT_EQ(m_clientConfiguration->GetMetricsFileFullPath(), expectedMetricsFilePath); ASSERT_EQ(m_clientConfiguration->GetMetricsFileFullPath(), expectedMetricsFilePath);
} }
TEST_F(ClientConfigurationTest, ResetClientConfiguration_InvalidConfigurationFile_Fail)
{
AZStd::string configFilePath = "invalidConfig";
AZ_TEST_START_TRACE_SUPPRESSION;
ASSERT_FALSE(m_clientConfiguration->ResetClientConfiguration(configFilePath));
AZ_TEST_STOP_TRACE_SUPPRESSION(1);
}
} }

Loading…
Cancel
Save