AuthenticationProviderManagerScriptCanvasBusTest.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzCore/std/smart_ptr/unique_ptr.h>
  9. #include <AzCore/std/smart_ptr/make_shared.h>
  10. #include <AzCore/std/utils.h>
  11. #include <Authentication/AuthenticationProviderManager.h>
  12. #include <Authentication/AWSCognitoAuthenticationProvider.h>
  13. #include <Authentication/LWAAuthenticationProvider.h>
  14. #include <Authentication/AuthenticationTokens.h>
  15. #include <Authentication/AuthenticationProviderTypes.h>
  16. #include <AWSClientAuthGemMock.h>
  17. #include <Authentication/AuthenticationProviderManagerMock.h>
  18. class AuthenticationProviderManagerScriptCanvasTest
  19. : public AWSClientAuthUnitTest::AWSClientAuthGemAllocatorFixture
  20. {
  21. protected:
  22. void SetUp() override
  23. {
  24. AWSClientAuthUnitTest::AWSClientAuthGemAllocatorFixture::SetUp();
  25. AWSClientAuth::LWAProviderSetting::Reflect(*m_serializeContext);
  26. AWSClientAuth::GoogleProviderSetting::Reflect(*m_serializeContext);
  27. AZStd::string settingspath = AZStd::string::format(
  28. "%s/%s/authenticationProvider.setreg",
  29. m_testFolder->c_str(), AZ::SettingsRegistryInterface::RegistryFolder);
  30. CreateTestFile("authenticationProvider.setreg"
  31. , R"({
  32. "AWS":
  33. {
  34. "LoginWithAmazon":
  35. {
  36. "AppClientId": "TestLWAClientId",
  37. "GrantType": "device_code",
  38. "Scope": "profile",
  39. "ResponseType": "device_code",
  40. "OAuthCodeURL": "https://api.amazon.com/auth/o2/create/codepair",
  41. "OAuthTokensURL": "https://oauth2.googleapis.com/token"
  42. },
  43. "Google":
  44. {
  45. "AppClientId": "TestGoogleClientId",
  46. "ClientSecret": "123",
  47. "GrantType": "urn:ietf:params:oauth:grant-type:device_code",
  48. "Scope": "profile",
  49. "OAuthCodeURL": "https://oauth2.googleapis.com/device/code",
  50. "OAuthTokensURL": "https://oauth2.googleapis.com/token"
  51. }
  52. }
  53. })");
  54. m_settingsRegistry->MergeSettingsFile(settingspath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {});
  55. m_mockController = AZStd::make_unique<testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderManagerLocalMock>>();
  56. }
  57. void TearDown() override
  58. {
  59. m_mockController.reset();
  60. AWSClientAuthUnitTest::AWSClientAuthGemAllocatorFixture::TearDown();
  61. }
  62. public:
  63. AZStd::unique_ptr<testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderManagerLocalMock>> m_mockController;
  64. AZStd::vector<AZStd::string> m_enabledProviderNames { AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP,
  65. AWSClientAuth::ProvideNameEnumStringLoginWithAmazon, AWSClientAuth::ProvideNameEnumStringGoogle};
  66. };
  67. TEST_F(AuthenticationProviderManagerScriptCanvasTest, Initialize_Success)
  68. {
  69. ASSERT_TRUE(m_mockController->Initialize(m_enabledProviderNames));
  70. ASSERT_TRUE(m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP] != nullptr);
  71. }
  72. TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantSingleFactorSignInAsync_Success)
  73. {
  74. m_mockController->Initialize(m_enabledProviderNames);
  75. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
  76. EXPECT_CALL(*cognitoProviderMock, PasswordGrantSingleFactorSignInAsync(testing::_, testing::_)).Times(1);
  77. m_mockController->PasswordGrantSingleFactorSignInAsync(AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP, AWSClientAuthUnitTest::TEST_USERNAME, AWSClientAuthUnitTest::TEST_PASSWORD);
  78. cognitoProviderMock = nullptr;
  79. }
  80. TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantSingleFactorSignInAsync_Fail_NonConfiguredProviderError)
  81. {
  82. AZ_TEST_START_TRACE_SUPPRESSION;
  83. m_mockController->PasswordGrantSingleFactorSignInAsync(AWSClientAuth::ProvideNameEnumStringApple, AWSClientAuthUnitTest::TEST_USERNAME, AWSClientAuthUnitTest::TEST_PASSWORD);
  84. AZ_TEST_STOP_TRACE_SUPPRESSION(1);
  85. }
  86. TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantMultiFactorSignInAsync_Success)
  87. {
  88. m_mockController->Initialize(m_enabledProviderNames);
  89. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
  90. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
  91. EXPECT_CALL(*cognitoProviderMock, PasswordGrantMultiFactorSignInAsync(testing::_, testing::_)).Times(1);
  92. m_mockController->PasswordGrantMultiFactorSignInAsync(AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP, AWSClientAuthUnitTest::TEST_USERNAME, AWSClientAuthUnitTest::TEST_PASSWORD);
  93. EXPECT_CALL(*lwaProviderMock, PasswordGrantMultiFactorSignInAsync(testing::_, testing::_)).Times(1);
  94. m_mockController->PasswordGrantMultiFactorSignInAsync(AWSClientAuth::ProvideNameEnumStringLoginWithAmazon, AWSClientAuthUnitTest::TEST_USERNAME, AWSClientAuthUnitTest::TEST_PASSWORD);
  95. cognitoProviderMock = nullptr;
  96. }
  97. TEST_F(AuthenticationProviderManagerScriptCanvasTest, PasswordGrantMultiFactorConfirmSignInAsync_Success)
  98. {
  99. m_mockController->Initialize(m_enabledProviderNames);
  100. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
  101. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
  102. EXPECT_CALL(*cognitoProviderMock, PasswordGrantMultiFactorConfirmSignInAsync(testing::_, testing::_)).Times(1);
  103. m_mockController->PasswordGrantMultiFactorConfirmSignInAsync(AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP, AWSClientAuthUnitTest::TEST_USERNAME, AWSClientAuthUnitTest::TEST_PASSWORD);
  104. EXPECT_CALL(*lwaProviderMock, PasswordGrantMultiFactorConfirmSignInAsync(testing::_, testing::_)).Times(1);
  105. m_mockController->PasswordGrantMultiFactorConfirmSignInAsync(AWSClientAuth::ProvideNameEnumStringLoginWithAmazon, AWSClientAuthUnitTest::TEST_USERNAME, AWSClientAuthUnitTest::TEST_PASSWORD);
  106. cognitoProviderMock = nullptr;
  107. }
  108. TEST_F(AuthenticationProviderManagerScriptCanvasTest, DeviceCodeGrantSignInAsync_Success)
  109. {
  110. m_mockController->Initialize(m_enabledProviderNames);
  111. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
  112. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
  113. EXPECT_CALL(*cognitoProviderMock, DeviceCodeGrantSignInAsync()).Times(1);
  114. m_mockController->DeviceCodeGrantSignInAsync(AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP);
  115. EXPECT_CALL(*lwaProviderMock, DeviceCodeGrantSignInAsync()).Times(1);
  116. m_mockController->DeviceCodeGrantSignInAsync(AWSClientAuth::ProvideNameEnumStringLoginWithAmazon);
  117. cognitoProviderMock = nullptr;
  118. }
  119. TEST_F(AuthenticationProviderManagerScriptCanvasTest, DeviceCodeGrantConfirmSignInAsync_Success)
  120. {
  121. m_mockController->Initialize(m_enabledProviderNames);
  122. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
  123. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
  124. EXPECT_CALL(*cognitoProviderMock, DeviceCodeGrantConfirmSignInAsync()).Times(1);
  125. m_mockController->DeviceCodeGrantConfirmSignInAsync(AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP);
  126. EXPECT_CALL(*lwaProviderMock, DeviceCodeGrantConfirmSignInAsync()).Times(1);
  127. m_mockController->DeviceCodeGrantConfirmSignInAsync(AWSClientAuth::ProvideNameEnumStringLoginWithAmazon);
  128. cognitoProviderMock = nullptr;
  129. }
  130. TEST_F(AuthenticationProviderManagerScriptCanvasTest, RefreshTokenAsync_Success)
  131. {
  132. m_mockController->Initialize(m_enabledProviderNames);
  133. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
  134. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock> *lwaProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::LoginWithAmazon].get();
  135. EXPECT_CALL(*cognitoProviderMock, RefreshTokensAsync()).Times(1);
  136. m_mockController->RefreshTokensAsync(AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP);
  137. EXPECT_CALL(*lwaProviderMock, RefreshTokensAsync()).Times(1);
  138. m_mockController->RefreshTokensAsync(AWSClientAuth::ProvideNameEnumStringLoginWithAmazon);
  139. cognitoProviderMock = nullptr;
  140. }
  141. TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokensWithRefreshAsync_ValidToken_Success)
  142. {
  143. m_mockController->Initialize(m_enabledProviderNames);
  144. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
  145. AWSClientAuth::AuthenticationTokens tokens(
  146. AWSClientAuthUnitTest::TEST_ACCESS_TOKEN, AWSClientAuthUnitTest::TEST_REFRESH_TOKEN, AWSClientAuthUnitTest::TEST_ID_TOKEN,
  147. AWSClientAuth::ProviderNameEnum::AWSCognitoIDP, 600);
  148. EXPECT_CALL(*cognitoProviderMock, GetAuthenticationTokens()).Times(1).WillOnce(testing::Return(tokens));
  149. EXPECT_CALL(*cognitoProviderMock, RefreshTokensAsync()).Times(0);
  150. EXPECT_CALL(m_authenticationProviderNotificationsBusMock, OnRefreshTokensSuccess(testing::_)).Times(1);
  151. m_mockController->GetTokensWithRefreshAsync(AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP);
  152. cognitoProviderMock = nullptr;
  153. }
  154. TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokensWithRefreshAsync_InvalidToken_Success)
  155. {
  156. m_mockController->Initialize(m_enabledProviderNames);
  157. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
  158. AWSClientAuth::AuthenticationTokens tokens;
  159. EXPECT_CALL(*cognitoProviderMock, GetAuthenticationTokens()).Times(1).WillOnce(testing::Return(tokens));
  160. EXPECT_CALL(*cognitoProviderMock, RefreshTokensAsync()).Times(1);
  161. m_mockController->GetTokensWithRefreshAsync(AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP);
  162. cognitoProviderMock = nullptr;
  163. }
  164. TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokensWithRefreshAsync_NotInitializedProvider_Fail)
  165. {
  166. AZ_TEST_START_TRACE_SUPPRESSION;
  167. EXPECT_CALL(m_authenticationProviderNotificationsBusMock, OnRefreshTokensSuccess(testing::_)).Times(0);
  168. EXPECT_CALL(m_authenticationProviderNotificationsBusMock, OnRefreshTokensFail(testing::_)).Times(1);
  169. m_mockController->GetTokensWithRefreshAsync(AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP);
  170. AZ_TEST_STOP_TRACE_SUPPRESSION(1);
  171. }
  172. TEST_F(AuthenticationProviderManagerScriptCanvasTest, GetTokens_Success)
  173. {
  174. m_mockController->Initialize(m_enabledProviderNames);
  175. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
  176. AWSClientAuth::AuthenticationTokens tokens(
  177. AWSClientAuthUnitTest::TEST_ACCESS_TOKEN, AWSClientAuthUnitTest::TEST_REFRESH_TOKEN, AWSClientAuthUnitTest::TEST_ID_TOKEN,
  178. AWSClientAuth::ProviderNameEnum::AWSCognitoIDP, 60);
  179. EXPECT_CALL(*cognitoProviderMock, GetAuthenticationTokens()).Times(1).WillOnce(testing::Return(tokens));
  180. m_mockController->GetAuthenticationTokens(AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP);
  181. cognitoProviderMock = nullptr;
  182. }
  183. TEST_F(AuthenticationProviderManagerScriptCanvasTest, IsSignedIn_Success)
  184. {
  185. m_mockController->Initialize(m_enabledProviderNames);
  186. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* cognitoProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::AWSCognitoIDP].get();
  187. AWSClientAuth::AuthenticationTokens tokens(
  188. AWSClientAuthUnitTest::TEST_ACCESS_TOKEN, AWSClientAuthUnitTest::TEST_REFRESH_TOKEN, AWSClientAuthUnitTest::TEST_ID_TOKEN,
  189. AWSClientAuth::ProviderNameEnum::AWSCognitoIDP, 60);
  190. EXPECT_CALL(*cognitoProviderMock, GetAuthenticationTokens()).Times(1).WillOnce(testing::Return(tokens));
  191. m_mockController->IsSignedIn(AWSClientAuth::ProvideNameEnumStringAWSCognitoIDP);
  192. cognitoProviderMock = nullptr;
  193. }
  194. TEST_F(AuthenticationProviderManagerScriptCanvasTest, SignOut_Success)
  195. {
  196. m_mockController->Initialize(m_enabledProviderNames);
  197. testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>* googleProviderMock = (testing::NiceMock<AWSClientAuthUnitTest::AuthenticationProviderMock>*)m_mockController->m_authenticationProvidersMap[AWSClientAuth::ProviderNameEnum::Google].get();
  198. EXPECT_CALL(*googleProviderMock, SignOut()).Times(1);
  199. EXPECT_CALL(m_authenticationProviderNotificationsBusMock, OnSignOut(testing::_)).Times(1);
  200. m_mockController->SignOut(AWSClientAuth::ProvideNameEnumStringGoogle);
  201. googleProviderMock = nullptr;
  202. }