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-identity-management-tests/auth/PersistentCognitoIdentityProvider_JsonFileImplTest.cpp

153 lines
6.4 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/testing/MemoryTesting.h>
#include <aws/identity-management/auth/PersistentCognitoIdentityProvider.h>
#include <aws/core/platform/FileSystem.h>
#include <aws/core/utils/json/JsonSerializer.h>
#include <aws/core/utils/DateTime.h>
#include <aws/core/platform/Platform.h>
#include <fstream>
using namespace Aws::Auth;
using namespace Aws::Utils;
using namespace Aws::Utils::Json;
class PersistentCognitoIdentityProvider_JsonImpl_Test : public ::testing::Test
{
public:
void SetUp()
{
Aws::String dateTime = DateTime::Now().CalculateGmtTimestampAsString("%H_%M_%S_%Y_%m_%d");
#ifdef __ANDROID__
tempFile = Aws::Platform::GetCacheDirectory() + dateTime;
#else
tempFile = dateTime;
#endif // __ANDROID__
}
void TearDown()
{
Aws::FileSystem::RemoveFileIfExists(tempFile.c_str());
}
Aws::String tempFile;
};
TEST_F(PersistentCognitoIdentityProvider_JsonImpl_Test, TestConstructorWhenNoFileIsAvailable)
{
PersistentCognitoIdentityProvider_JsonFileImpl identityProvider("identityPoolId", "accountId", tempFile.c_str());
ASSERT_FALSE(identityProvider.HasIdentityId());
ASSERT_FALSE(identityProvider.HasLogins());
ASSERT_EQ("identityPoolId", identityProvider.GetIdentityPoolId());
ASSERT_EQ("accountId", identityProvider.GetAccountId());
Aws::String filePath = tempFile;
std::ifstream shouldNotExist(filePath.c_str());
ASSERT_FALSE(shouldNotExist.good());
}
TEST_F(PersistentCognitoIdentityProvider_JsonImpl_Test, TestConstructorWhenFileIsAvaiable)
{
JsonValue theIdentityPoolWeWant;
theIdentityPoolWeWant.WithString("IdentityId", "TheIdentityWeWant");
//this should test the legacy case.
//the next test case will cover the current spec in detail.
JsonValue logins;
logins.WithString("TestLoginName", "TestLoginValue");
theIdentityPoolWeWant.WithObject("Logins", logins);
JsonValue someOtherIdentityPool;
someOtherIdentityPool.WithString("IdentityId", "SomeOtherIdentity");
JsonValue identityDoc;
identityDoc.WithObject("IdentityPoolWeWant", theIdentityPoolWeWant);
identityDoc.WithObject("SomeOtherIdentityPool", someOtherIdentityPool);
Aws::String filePath = tempFile;
std::ofstream identityFile(filePath.c_str());
identityFile << identityDoc.View().WriteReadable();
identityFile.flush();
identityFile.close();
PersistentCognitoIdentityProvider_JsonFileImpl identityProvider("IdentityPoolWeWant", "accountId", filePath.c_str());
Aws::FileSystem::RemoveFileIfExists(filePath.c_str());
ASSERT_TRUE(identityProvider.HasIdentityId());
ASSERT_EQ(theIdentityPoolWeWant.View().GetString("IdentityId"), identityProvider.GetIdentityId());
ASSERT_TRUE(identityProvider.HasLogins());
ASSERT_EQ(1u, identityProvider.GetLogins().size());
ASSERT_EQ("TestLoginName", identityProvider.GetLogins().begin()->first);
ASSERT_EQ("TestLoginValue", identityProvider.GetLogins().begin()->second.accessToken);
}
TEST_F(PersistentCognitoIdentityProvider_JsonImpl_Test, TestPersistance)
{
JsonValue someOtherIdentityPool;
someOtherIdentityPool.WithString("IdentityId", "SomeOtherIdentity");
JsonValue identityDoc;
identityDoc.WithObject("SomeOtherIdentityPool", someOtherIdentityPool);
Aws::String filePath = tempFile;
Aws::FileSystem::RemoveFileIfExists(filePath.c_str());
std::ofstream identityFile(filePath.c_str());
identityFile << identityDoc.View().WriteReadable();
identityFile.close();
Aws::Map<Aws::String, LoginAccessTokens> loginsMap;
LoginAccessTokens loginAccessTokens;
loginAccessTokens.accessToken = "LoginValue";
loginAccessTokens.longTermTokenExpiry = 1001;
loginAccessTokens.longTermToken = "LongTermToken";
loginsMap["LoginName"] = loginAccessTokens;
//scope it to kill the cache and force it to reload from file.
{
PersistentCognitoIdentityProvider_JsonFileImpl identityProvider("IdentityPoolWeWant", "accountId", filePath.c_str());
EXPECT_FALSE(identityProvider.HasIdentityId());
EXPECT_FALSE(identityProvider.HasLogins());
bool identityCallbackFired = false;
bool loginsCallbackFired = false;
identityProvider.SetIdentityIdUpdatedCallback( [&](const PersistentCognitoIdentityProvider&){ identityCallbackFired = true; });
identityProvider.SetLoginsUpdatedCallback([&](const PersistentCognitoIdentityProvider&){ loginsCallbackFired = true; });
identityProvider.PersistIdentityId("IdentityWeWant");
identityProvider.PersistLogins(loginsMap);
ASSERT_TRUE(identityCallbackFired);
ASSERT_TRUE(loginsCallbackFired);
}
PersistentCognitoIdentityProvider_JsonFileImpl identityProvider("IdentityPoolWeWant", "accountId", filePath.c_str());
EXPECT_EQ("IdentityWeWant", identityProvider.GetIdentityId());
EXPECT_EQ("LoginName", identityProvider.GetLogins().begin()->first);
EXPECT_EQ(loginAccessTokens.accessToken, identityProvider.GetLogins().begin()->second.accessToken);
EXPECT_EQ(loginAccessTokens.longTermToken, identityProvider.GetLogins().begin()->second.longTermToken);
EXPECT_EQ(loginAccessTokens.longTermTokenExpiry, identityProvider.GetLogins().begin()->second.longTermTokenExpiry);
std::ifstream identityFileInput(filePath.c_str());
JsonValue finalIdentityDocJson(identityFileInput);
auto finalIdentityDoc = finalIdentityDocJson.View();
identityFileInput.close();
Aws::FileSystem::RemoveFileIfExists(filePath.c_str());
ASSERT_TRUE(finalIdentityDoc.ValueExists("SomeOtherIdentityPool"));
ASSERT_TRUE(finalIdentityDoc.ValueExists("IdentityPoolWeWant"));
auto ourIdentityPool = finalIdentityDoc.GetObject("IdentityPoolWeWant");
ASSERT_EQ("IdentityWeWant", ourIdentityPool.GetString("IdentityId"));
ASSERT_EQ("LoginName", ourIdentityPool.GetObject("Logins").GetAllObjects().begin()->first);
ASSERT_EQ(loginAccessTokens.accessToken, ourIdentityPool.GetObject("Logins").GetAllObjects().begin()->second.GetString("AccessToken"));
ASSERT_EQ(loginAccessTokens.longTermToken, ourIdentityPool.GetObject("Logins").GetAllObjects().begin()->second.GetString("LongTermToken"));
ASSERT_EQ(loginAccessTokens.longTermTokenExpiry, ourIdentityPool.GetObject("Logins").GetAllObjects().begin()->second.GetInt64("Expiry"));
}