This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
pxz-hos-client-cpp-module/support/aws-sdk-cpp-master/aws-cpp-sdk-logs-integration-tests/CloudWatchLogsTests.cpp

142 lines
5.5 KiB
C++

/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include <aws/external/gtest.h>
#include <aws/core/utils/UUID.h>
#include <aws/core/utils/DateTime.h>
#include <aws/core/utils/Outcome.h>
#include <aws/core/auth/AWSCredentialsProviderChain.h>
#include <aws/core/utils/memory/AWSMemory.h>
#include <aws/logs/CloudWatchLogsClient.h>
#include <aws/logs/model/CreateLogGroupRequest.h>
#include <aws/logs/model/CreateLogStreamRequest.h>
#include <aws/logs/model/GetLogEventsRequest.h>
#include <aws/logs/model/PutLogEventsRequest.h>
#include <aws/logs/model/DeleteLogGroupRequest.h>
#include <aws/testing/TestingEnvironment.h>
#include <chrono>
#include <thread>
using namespace Aws::Auth;
using namespace Aws::Http;
using namespace Aws::Client;
using namespace Aws::CloudWatchLogs;
using namespace Aws::CloudWatchLogs::Model;
namespace
{
static const char ALLOCATION_TAG[] = "CloudWatchLogsTest";
static const char BASE_CLOUD_WATCH_LOGS_GROUP[] = "CppSDKIntegrationTestCWLGroup";
static const char BASE_CLOUD_WATCH_LOGS_STREAM[] = "testLogs";
class CloudWatchLogsOperationTest : public ::testing::Test
{
protected:
Aws::UniquePtr<Aws::CloudWatchLogs::CloudWatchLogsClient> m_client;
Aws::String m_UUID;
Aws::String BuildResourceName(const char *baseName)
{
return Aws::Testing::GetAwsResourcePrefix() + baseName + m_UUID;
}
void SetUp()
{
m_UUID = Aws::Utils::UUID::RandomUUID();
ClientConfiguration config;
config.scheme = Scheme::HTTPS;
config.region = Aws::Region::US_WEST_2;
m_client = Aws::MakeUnique<Aws::CloudWatchLogs::CloudWatchLogsClient>(ALLOCATION_TAG, config);
CreateLogsGroup(BuildResourceName(BASE_CLOUD_WATCH_LOGS_GROUP));
}
void TearDown()
{
DeleteLogsGroup(BuildResourceName(BASE_CLOUD_WATCH_LOGS_GROUP));
}
void DeleteLogsGroup(const Aws::String& groupName)
{
DeleteLogGroupRequest deleteRequest;
deleteRequest.SetLogGroupName(groupName);
auto deleteOutcome = m_client->DeleteLogGroup(deleteRequest);
ASSERT_TRUE(deleteOutcome.IsSuccess());
}
void CreateLogsGroup(const Aws::String& groupName)
{
CreateLogGroupRequest createRequest;
createRequest.SetLogGroupName(groupName);
auto createOutcome = m_client->CreateLogGroup(createRequest);
ASSERT_TRUE(createOutcome.IsSuccess());
}
};
TEST_F(CloudWatchLogsOperationTest, PutLogEventsTests)
{
CreateLogStreamRequest createStreamRequest;
createStreamRequest.WithLogGroupName(BuildResourceName(BASE_CLOUD_WATCH_LOGS_GROUP))
.WithLogStreamName(BuildResourceName(BASE_CLOUD_WATCH_LOGS_STREAM));
auto createStreamOutcome = m_client->CreateLogStream(createStreamRequest);
ASSERT_TRUE(createStreamOutcome.IsSuccess());
PutLogEventsRequest putRequest;
putRequest.WithLogGroupName(BuildResourceName(BASE_CLOUD_WATCH_LOGS_GROUP))
.WithLogStreamName(BuildResourceName(BASE_CLOUD_WATCH_LOGS_STREAM));
InputLogEvent e1;
e1.WithTimestamp(Aws::Utils::DateTime::Now().Millis()).WithMessage("Test Message 1");
InputLogEvent e2;
// Make sure the timestamp of e2 is greater than that of e1.
e2.WithTimestamp(Aws::Utils::DateTime::Now().Millis()+1).WithMessage("Test Message 2");
putRequest.AddLogEvents(e1).AddLogEvents(e2);
auto putOutcome = m_client->PutLogEvents(putRequest);
ASSERT_TRUE(putOutcome.IsSuccess());
auto nextSeqToken = putOutcome.GetResult().GetNextSequenceToken();
InputLogEvent e3;
e3.WithTimestamp(Aws::Utils::DateTime::Now().Millis()).WithMessage("Test Message 3");
InputLogEvent e4;
// Make sure the timestamp of e4 is greater than that of e3.
e4.WithTimestamp(Aws::Utils::DateTime::Now().Millis()+1).WithMessage("Test Message 4");
putRequest.AddLogEvents(e3).AddLogEvents(e4);
putRequest.WithSequenceToken(nextSeqToken);
putOutcome = m_client->PutLogEvents(putRequest);
ASSERT_TRUE(putOutcome.IsSuccess());
//There should be in total 6 events in the stream. with messages ended with 1,2,1,2,3,4;
GetLogEventsRequest getRequest;
getRequest.WithLogGroupName(BuildResourceName(BASE_CLOUD_WATCH_LOGS_GROUP))
.WithLogStreamName(BuildResourceName(BASE_CLOUD_WATCH_LOGS_STREAM))
.WithStartFromHead(true);
size_t eventsCount = 0;
int retry = 0;
while (retry++ < 10)
{
auto getOutcome = m_client->GetLogEvents(getRequest);
ASSERT_TRUE(getOutcome.IsSuccess());
auto outputEvents = getOutcome.GetResult().GetEvents();
eventsCount = outputEvents.size();
if (eventsCount == 6)
{
Aws::Vector<Aws::String> msgs = {"Test Message 1", "Test Message 1", "Test Message 2",
"Test Message 2","Test Message 3","Test Message 4",};
for (int i = 0; i < 6; i++)
{
ASSERT_STREQ(msgs[i].c_str(), outputEvents[i].GetMessage().c_str());
}
break;
}
std::this_thread::sleep_for(std::chrono::seconds(1));
}
ASSERT_EQ(6u, eventsCount);
}
}