You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Gems/AWSCore/Code/Tests/AWSCoreSystemComponentTest.cpp

137 lines
4.3 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#include <AzCore/Jobs/JobManager.h>
#include <AzCore/Jobs/JobContext.h>
#include <AzCore/Jobs/JobManagerBus.h>
#include <AzCore/Jobs/JobCancelGroup.h>
#include <AzCore/Component/ComponentApplication.h>
#include <AzCore/Serialization/SerializeContext.h>
#include <AzCore/Serialization/EditContext.h>
#include <AzCore/std/smart_ptr/unique_ptr.h>
#include <AzTest/AzTest.h>
#include <AWSCoreSystemComponent.h>
#include <Configuration/AWSCoreConfiguration.h>
#include <Credential/AWSCredentialManager.h>
#include <Framework/AWSApiJob.h>
#include <ResourceMapping/AWSResourceMappingManager.h>
#include <TestFramework/AWSCoreFixture.h>
using namespace AWSCore;
class AWSCoreNotificationsBusMock
: protected AWSCoreNotificationsBus::Handler
{
public:
AZ_CLASS_ALLOCATOR(AWSCoreNotificationsBusMock, AZ::SystemAllocator, 0);
AWSCoreNotificationsBusMock()
: m_sdkInitialized(0)
, m_sdkShutdownStarted(0)
{
AWSCoreNotificationsBus::Handler::BusConnect();
}
~AWSCoreNotificationsBusMock()
{
AWSCoreNotificationsBus::Handler::BusDisconnect();
}
//////////////////////////////////////////////////////////////////////////
// handles AWSCoreNotificationsBus
void OnSDKInitialized() override { m_sdkInitialized++; }
void OnSDKShutdownStarted() override { m_sdkShutdownStarted++; }
int m_sdkInitialized;
int m_sdkShutdownStarted;
};
class AWSCoreSystemComponentTest
: public AWSCoreFixture
{
protected:
AZStd::unique_ptr<AZ::SerializeContext> m_serializeContext;
AZStd::unique_ptr<AZ::BehaviorContext> m_behaviorContext;
AZStd::unique_ptr<AZ::ComponentDescriptor> m_componentDescriptor;
void SetUp() override
{
AWSCoreFixture::SetUp();
m_serializeContext = AZStd::make_unique<AZ::SerializeContext>();
m_serializeContext->CreateEditContext();
m_behaviorContext = AZStd::make_unique<AZ::BehaviorContext>();
m_componentDescriptor.reset(AWSCoreSystemComponent::CreateDescriptor());
m_componentDescriptor->Reflect(m_serializeContext.get());
m_componentDescriptor->Reflect(m_behaviorContext.get());
m_settingsRegistry->SetContext(m_serializeContext.get());
m_entity = aznew AZ::Entity();
m_coreSystemsComponent.reset(m_entity->CreateComponent<AWSCoreSystemComponent>());
}
void TearDown() override
{
m_entity->RemoveComponent(m_coreSystemsComponent.get());
m_coreSystemsComponent.reset();
delete m_entity;
m_entity = nullptr;
m_coreSystemsComponent.reset();
m_componentDescriptor.reset();
m_behaviorContext.reset();
m_serializeContext.reset();
AWSCoreFixture::TearDown();
}
public:
AZStd::unique_ptr<AWSCoreSystemComponent> m_coreSystemsComponent;
AZ::Entity* m_entity;
AWSCoreNotificationsBusMock m_notifications;
};
TEST_F(AWSCoreSystemComponentTest, ComponentActivateTest)
{
EXPECT_FALSE(m_coreSystemsComponent->IsAWSApiInitialized());
// activate component
AZ_TEST_START_TRACE_SUPPRESSION;
m_entity->Init();
AZ_TEST_STOP_TRACE_SUPPRESSION(1); // expect the above have thrown an AZ_Error
m_entity->Activate();
EXPECT_EQ(m_notifications.m_sdkInitialized, 1);
EXPECT_TRUE(m_coreSystemsComponent->IsAWSApiInitialized());
// deactivate component
m_entity->Deactivate();
EXPECT_EQ(m_notifications.m_sdkShutdownStarted, 1);
EXPECT_FALSE(m_coreSystemsComponent->IsAWSApiInitialized());
}
TEST_F(AWSCoreSystemComponentTest, GetDefaultJobContext_Call_JobContextIsNotNullptr)
{
auto actualContext = m_coreSystemsComponent->GetDefaultJobContext();
EXPECT_TRUE(actualContext);
}
TEST_F(AWSCoreSystemComponentTest, GetDefaultConfig_Call_GetConfigWithExpectedValue)
{
auto actualDefaultConfig = m_coreSystemsComponent->GetDefaultConfig();
EXPECT_TRUE(actualDefaultConfig->userAgent == "/O3DE_AwsApiJob");
EXPECT_TRUE(actualDefaultConfig->requestTimeoutMs == 30000);
EXPECT_TRUE(actualDefaultConfig->connectTimeoutMs == 30000);
AWSCoreNotificationsBus::Broadcast(&AWSCoreNotifications::OnSDKShutdownStarted);
}