AWSClientAuthSystemComponentTest.cpp 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  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 <AzTest/AzTest.h>
  9. #include <AzTest/Utils.h>
  10. #include <AzCore/UnitTest/TestTypes.h>
  11. #include <AWSClientAuthSystemComponent.h>
  12. #include <AzCore/Component/Entity.h>
  13. #include <AzFramework/IO/LocalFileIO.h>
  14. #include <AWSClientAuthGemMock.h>
  15. #include <AWSClientAuthResourceMappingConstants.h>
  16. namespace AWSClientAuthUnitTest
  17. {
  18. class AWSClientAuthSystemComponentMock
  19. : public AWSClientAuth::AWSClientAuthSystemComponent
  20. {
  21. public:
  22. AZ_CLASS_ALLOCATOR(AWSClientAuthSystemComponentMock, AZ::SystemAllocator)
  23. using AWSClientAuth::AWSClientAuthSystemComponent::GetCognitoIDPClient;
  24. using AWSClientAuth::AWSClientAuthSystemComponent::GetCognitoIdentityClient;
  25. void InitMock()
  26. {
  27. AWSClientAuth::AWSClientAuthSystemComponent::Init();
  28. }
  29. void ActivateMock()
  30. {
  31. AWSClientAuth::AWSClientAuthSystemComponent::Activate();
  32. }
  33. void DeactivateMock()
  34. {
  35. AWSClientAuth::AWSClientAuthSystemComponent::Deactivate();
  36. }
  37. AWSClientAuthSystemComponentMock()
  38. {
  39. ON_CALL(*this, Init()).WillByDefault(testing::Invoke(this, &AWSClientAuthSystemComponentMock::InitMock));
  40. ON_CALL(*this, Activate()).WillByDefault(testing::Invoke(this, &AWSClientAuthSystemComponentMock::ActivateMock));
  41. ON_CALL(*this, Deactivate()).WillByDefault(testing::Invoke(this, &AWSClientAuthSystemComponentMock::DeactivateMock));
  42. }
  43. MOCK_METHOD0(Init, void());
  44. MOCK_METHOD0(Activate, void());
  45. MOCK_METHOD0(Deactivate, void());
  46. using AWSClientAuth::AWSClientAuthSystemComponent::m_enabledProviderNames;
  47. };
  48. class AWSCoreSystemComponentMock
  49. : public AZ::Component
  50. {
  51. public:
  52. AZ_COMPONENT(AWSCoreSystemComponentMock, "{5F48030D-EB59-4820-BC65-69EC7CC6C119}");
  53. static void Reflect(AZ::ReflectContext* context)
  54. {
  55. if (AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context))
  56. {
  57. serialize->Class<AWSCoreSystemComponentMock, AZ::Component>()
  58. ->Version(0)
  59. ;
  60. if (AZ::EditContext* ec = serialize->GetEditContext())
  61. {
  62. ec->Class<AWSCoreSystemComponentMock>("AWSCoreMock", "Adds core support for working with AWS")
  63. ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
  64. ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
  65. ;
  66. }
  67. }
  68. }
  69. static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
  70. {
  71. provided.push_back(AZ_CRC_CE("AWSCoreService"));
  72. }
  73. static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
  74. {
  75. AZ_UNUSED(incompatible);
  76. }
  77. static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
  78. {
  79. AZ_UNUSED(required);
  80. }
  81. static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent)
  82. {
  83. AZ_UNUSED(dependent);
  84. }
  85. void ActivateMock()
  86. {
  87. AWSCore::AWSCoreNotificationsBus::Broadcast(&AWSCore::AWSCoreNotifications::OnSDKInitialized);
  88. }
  89. AWSCoreSystemComponentMock()
  90. {
  91. ON_CALL(*this, Activate()).WillByDefault(testing::Invoke(this, &AWSCoreSystemComponentMock::ActivateMock));
  92. }
  93. ~AWSCoreSystemComponentMock() = default;
  94. MOCK_METHOD0(Init, void());
  95. MOCK_METHOD0(Activate, void());
  96. MOCK_METHOD0(Deactivate, void());
  97. };
  98. }
  99. class AWSClientAuthSystemComponentTest
  100. : public AWSClientAuthUnitTest::AWSClientAuthGemAllocatorFixture
  101. {
  102. public:
  103. AWSClientAuthSystemComponentTest()
  104. : AWSClientAuthUnitTest::AWSClientAuthGemAllocatorFixture(false), m_awsClientAuthSystemsComponent(nullptr),
  105. m_awsCoreSystemsComponent(nullptr)
  106. {
  107. }
  108. protected:
  109. AZStd::unique_ptr<AZ::ComponentDescriptor> m_componentDescriptor;
  110. AZStd::unique_ptr<AZ::ComponentDescriptor> m_awsCoreComponentDescriptor;
  111. void SetUp() override
  112. {
  113. AWSClientAuthUnitTest::AWSClientAuthGemAllocatorFixture::SetUp();
  114. m_componentDescriptor.reset(AWSClientAuth::AWSClientAuthSystemComponent::CreateDescriptor());
  115. m_awsCoreComponentDescriptor.reset(AWSClientAuthUnitTest::AWSCoreSystemComponentMock::CreateDescriptor());
  116. m_componentDescriptor->Reflect(m_serializeContext.get());
  117. m_awsCoreComponentDescriptor->Reflect(m_serializeContext.get());
  118. m_entity = aznew AZ::Entity();
  119. m_awsClientAuthSystemsComponent = aznew testing::NiceMock<AWSClientAuthUnitTest::AWSClientAuthSystemComponentMock>();
  120. m_awsCoreSystemsComponent = aznew testing::NiceMock<AWSClientAuthUnitTest::AWSCoreSystemComponentMock>();
  121. m_entity->AddComponent(m_awsCoreSystemsComponent);
  122. m_entity->AddComponent(m_awsClientAuthSystemsComponent);
  123. }
  124. void TearDown() override
  125. {
  126. m_entity->RemoveComponent(m_awsClientAuthSystemsComponent);
  127. m_entity->RemoveComponent(m_awsCoreSystemsComponent);
  128. delete m_awsCoreSystemsComponent;
  129. delete m_awsClientAuthSystemsComponent;
  130. delete m_entity;
  131. m_componentDescriptor.reset();
  132. m_awsCoreComponentDescriptor.reset();
  133. AWSClientAuthUnitTest::AWSClientAuthGemAllocatorFixture::TearDown();
  134. }
  135. public:
  136. testing::NiceMock<AWSClientAuthUnitTest::AWSClientAuthSystemComponentMock> *m_awsClientAuthSystemsComponent;
  137. testing::NiceMock<AWSClientAuthUnitTest::AWSCoreSystemComponentMock> *m_awsCoreSystemsComponent;
  138. testing::NiceMock<AWSClientAuthUnitTest::AWSResourceMappingRequestBusMock> m_awsResourceMappingRequestBusMock;
  139. testing::NiceMock<AWSClientAuthUnitTest::AWSCoreRequestBusMock> m_awsCoreRequestBusMock;
  140. AZ::Entity* m_entity = nullptr;
  141. };
  142. TEST_F(AWSClientAuthSystemComponentTest, ActivateDeactivate_Success)
  143. {
  144. m_awsClientAuthSystemsComponent->m_enabledProviderNames.push_back(AWSClientAuth::ProviderNameEnum::LoginWithAmazon);
  145. m_awsClientAuthSystemsComponent->m_enabledProviderNames.push_back(AWSClientAuth::ProviderNameEnum::AWSCognitoIDP);
  146. testing::Sequence s1, s2;
  147. EXPECT_CALL(*m_awsCoreSystemsComponent, Init()).Times(1).InSequence(s1);
  148. EXPECT_CALL(*m_awsClientAuthSystemsComponent, Init()).Times(1).InSequence(s1);
  149. EXPECT_CALL(*m_awsCoreSystemsComponent, Activate()).Times(1).InSequence(s1);
  150. EXPECT_CALL(m_awsCoreRequestBusMock, GetDefaultConfig()).Times(1).InSequence(s1);
  151. EXPECT_CALL(m_awsResourceMappingRequestBusMock, GetDefaultRegion()).Times(1).InSequence(s1);
  152. EXPECT_CALL(*m_awsClientAuthSystemsComponent, Activate()).Times(1).InSequence(s1);
  153. EXPECT_CALL(*m_awsClientAuthSystemsComponent, Deactivate()).Times(1).InSequence(s2);
  154. EXPECT_CALL(*m_awsCoreSystemsComponent, Deactivate()).Times(1).InSequence(s2);
  155. // activate component
  156. m_entity->Init();
  157. m_entity->Activate();
  158. // deactivate component
  159. m_entity->Deactivate();
  160. }
  161. TEST_F(AWSClientAuthSystemComponentTest, GetCognitoClients_Success)
  162. {
  163. m_awsClientAuthSystemsComponent->m_enabledProviderNames.push_back(AWSClientAuth::ProviderNameEnum::LoginWithAmazon);
  164. m_awsClientAuthSystemsComponent->m_enabledProviderNames.push_back(AWSClientAuth::ProviderNameEnum::AWSCognitoIDP);
  165. // activate component
  166. m_entity->Init();
  167. m_entity->Activate();
  168. EXPECT_TRUE(AZ::Interface<IAWSClientAuthRequests>::Get()->HasCognitoControllers());
  169. EXPECT_TRUE(AZ::Interface<IAWSClientAuthRequests>::Get()->GetCognitoIdentityClient() != nullptr);
  170. EXPECT_TRUE(AZ::Interface<IAWSClientAuthRequests>::Get()->GetCognitoIDPClient() != nullptr);
  171. // deactivate component
  172. m_entity->Deactivate();
  173. }
  174. TEST_F(AWSClientAuthSystemComponentTest, SkipCognitoControllers_Success)
  175. {
  176. EXPECT_CALL(m_awsResourceMappingRequestBusMock, HasResource(AZStd::string(CognitoUserPoolIdResourceMappingKey)))
  177. .Times(1)
  178. .WillOnce(testing::Return(false));
  179. EXPECT_CALL(m_awsResourceMappingRequestBusMock, HasResource(AZStd::string(CognitoIdentityPoolIdResourceMappingKey)))
  180. .Times(1)
  181. .WillOnce(testing::Return(false));
  182. // activate component
  183. m_entity->Init();
  184. m_entity->Activate();
  185. // Expect controllers are not configured
  186. EXPECT_FALSE(AZ::Interface<IAWSClientAuthRequests>::Get()->HasCognitoControllers());
  187. // These should still be available
  188. EXPECT_TRUE(AZ::Interface<IAWSClientAuthRequests>::Get()->GetCognitoIdentityClient() != nullptr);
  189. EXPECT_TRUE(AZ::Interface<IAWSClientAuthRequests>::Get()->GetCognitoIDPClient() != nullptr);
  190. // deactivate component
  191. m_entity->Deactivate();
  192. }