Skip to content

Commit ac86f59

Browse files
authored
Merge pull request #172 from 0xsequence/Tests/sessionManagement
Tests/session management
2 parents 1b7c9ed + d5843ea commit ac86f59

4 files changed

Lines changed: 250 additions & 0 deletions

File tree

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#include "FederateAuthTest.h"
2+
#include "Engine/World.h"
3+
#include "Tests/AutomationCommon.h"
4+
#include "Tests/AutomationEditorCommon.h"
5+
6+
IMPLEMENT_COMPLEX_AUTOMATION_TEST(FWaaSFederatedAuthTests, "SequencePlugin.EndToEnd.SessionManagement.FederateAuthTest", EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter | EAutomationTestFlags::ClientContext)
7+
8+
void FWaaSFederatedAuthTests::GetTests(TArray<FString>& OutBeautifiedNames, TArray<FString>& OutTestCommands) const
9+
{
10+
OutBeautifiedNames.Add(TEXT("Test Account Association"));
11+
OutTestCommands.Add(TEXT(""));
12+
}
13+
14+
bool FWaaSFederatedAuthTests::RunTest(const FString& Parameters)
15+
{
16+
AddInfo(TEXT("Starting Federated Auth Test"));
17+
18+
// Start PIE
19+
ADD_LATENT_AUTOMATION_COMMAND(FStartPIECommand(true));
20+
21+
// Wait for PIE to initialize
22+
ADD_LATENT_AUTOMATION_COMMAND(FEngineWaitLatentCommand(1.0f));
23+
24+
// Run the actual test
25+
ADD_LATENT_AUTOMATION_COMMAND(FFunctionLatentCommand([this]()
26+
{
27+
UWaaSFederatedAuthTestsHelper* TestHelper = NewObject<UWaaSFederatedAuthTestsHelper>();
28+
TestHelper->ParentTest = this;
29+
TestHelper->RunTest();
30+
31+
ADD_LATENT_AUTOMATION_COMMAND(FWaitForFederationToComplete(TestHelper));
32+
return true;
33+
}));
34+
35+
return true;
36+
}
37+
38+
void UWaaSFederatedAuthTestsHelper::RunTest()
39+
{
40+
Authenticator = NewObject<USequenceAuthenticator>();
41+
Email = FString::Printf(TEXT("test-%lld@example.com"), FDateTime::UtcNow().ToUnixTimestamp());
42+
Username = FString::Printf(TEXT("testuser%lld"), FDateTime::UtcNow().ToUnixTimestamp());
43+
Password = "testpassword";
44+
45+
Authenticator->FederateSuccess.AddDynamic(this, &UWaaSFederatedAuthTestsHelper::OnFederateSuccess);
46+
Authenticator->FederateFailure.AddDynamic(this, &UWaaSFederatedAuthTestsHelper::OnFederateFailure);
47+
Authenticator->AuthSuccess.AddDynamic(this, &UWaaSFederatedAuthTestsHelper::OnAuthSuccess);
48+
Authenticator->AuthFailure.AddDynamic(this, &UWaaSFederatedAuthTestsHelper::OnAuthFailure);
49+
50+
Authenticator->GuestLogin(false);
51+
}
52+
53+
void UWaaSFederatedAuthTestsHelper::OnFederateSuccess()
54+
{
55+
bTestComplete = true;
56+
ParentTest->AddInfo(TEXT("Successfully federated auth"));
57+
}
58+
59+
void UWaaSFederatedAuthTestsHelper::OnFederateFailure(const FString& Error)
60+
{
61+
bTestComplete = true;
62+
ParentTest->AddError(FString::Printf(TEXT("Federation failed: %s"), *Error));
63+
}
64+
65+
void UWaaSFederatedAuthTestsHelper::OnAuthSuccess()
66+
{
67+
Authenticator->FederatePlayFabNewAccount(Username, Email, Password);
68+
}
69+
70+
void UWaaSFederatedAuthTestsHelper::OnAuthFailure(const FString& Error)
71+
{
72+
bTestComplete = true;
73+
ParentTest->AddError(FString::Printf(TEXT("Login failed: %s"), *Error));
74+
}
75+
76+
bool FWaitForFederationToComplete::Update()
77+
{
78+
return TestHelper->IsTestComplete();
79+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// FederateAuthTest.h
2+
#pragma once
3+
4+
#include "CoreMinimal.h"
5+
#include "Misc/AutomationTest.h"
6+
#include "SequencePlugin/Public/Sequence/SequenceAPI.h"
7+
#include "SequencePlugin/Public/SequenceAuthenticator.h"
8+
#include "FederateAuthTest.generated.h"
9+
10+
class FWaaSFederatedAuthTests;
11+
12+
UCLASS()
13+
class UWaaSFederatedAuthTestsHelper : public UObject
14+
{
15+
GENERATED_BODY()
16+
17+
public:
18+
UFUNCTION()
19+
void OnFederateSuccess();
20+
21+
UFUNCTION()
22+
void OnFederateFailure(const FString& Error);
23+
24+
UFUNCTION()
25+
void OnAuthSuccess();
26+
27+
UFUNCTION()
28+
void OnAuthFailure(const FString& Error);
29+
30+
void RunTest();
31+
bool IsTestComplete() const { return bTestComplete; }
32+
33+
FWaaSFederatedAuthTests* ParentTest;
34+
35+
private:
36+
bool bTestComplete = false;
37+
USequenceAuthenticator* Authenticator = nullptr;
38+
FString Username;
39+
FString Email;
40+
FString Password;
41+
};
42+
43+
// Remove the FWaaSFederatedAuthTests class declaration from here
44+
45+
DEFINE_LATENT_AUTOMATION_COMMAND_ONE_PARAMETER(FWaitForFederationToComplete, UWaaSFederatedAuthTestsHelper*, TestHelper);
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#include "SignInOutRepeatedlyTest.h"
2+
#include "Engine/World.h"
3+
#include "Sequence/SequenceAPI.h"
4+
#include "Tests/AutomationCommon.h"
5+
#include "Tests/AutomationEditorCommon.h"
6+
7+
IMPLEMENT_COMPLEX_AUTOMATION_TEST(FSignInOutRepeatedlyTest, "SequencePlugin.EndToEnd.SessionManagement.SignInOutRepeatedlyTest", EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter | EAutomationTestFlags::ClientContext)
8+
9+
void FSignInOutRepeatedlyTest::GetTests(TArray<FString>& OutBeautifiedNames, TArray<FString>& OutTestCommands) const
10+
{
11+
OutBeautifiedNames.Add(TEXT("Sign In and Out Repeatedly Test"));
12+
OutTestCommands.Add(TEXT(""));
13+
}
14+
15+
bool FSignInOutRepeatedlyTest::RunTest(const FString& Parameters)
16+
{
17+
AddInfo(TEXT("Starting Sign In and Out Repeatedly Test"));
18+
19+
ADD_LATENT_AUTOMATION_COMMAND(FStartPIECommand(true));
20+
ADD_LATENT_AUTOMATION_COMMAND(FEngineWaitLatentCommand(1.0f));
21+
22+
ADD_LATENT_AUTOMATION_COMMAND(FFunctionLatentCommand([this]()
23+
{
24+
USignInOutRepeatedlyTestHelper* TestHelper = NewObject<USignInOutRepeatedlyTestHelper>();
25+
TestHelper->ParentTest = this;
26+
TestHelper->RunTest();
27+
28+
ADD_LATENT_AUTOMATION_COMMAND(FWaitForSignInOutCompletion(TestHelper));
29+
return true;
30+
}));
31+
32+
return true;
33+
}
34+
35+
void USignInOutRepeatedlyTestHelper::RunTest()
36+
{
37+
38+
Authenticator = NewObject<USequenceAuthenticator>();
39+
if (!Authenticator)
40+
{
41+
ParentTest->AddError(TEXT("Error creating authenticator"));
42+
bTestComplete = true;
43+
return;
44+
}
45+
46+
Authenticator->AuthSuccess.AddDynamic(this, &USignInOutRepeatedlyTestHelper::OnAuthSuccess);
47+
Authenticator->AuthFailure.AddDynamic(this, &USignInOutRepeatedlyTestHelper::OnAuthFailure);
48+
49+
ConnectAsGuest();
50+
}
51+
52+
void USignInOutRepeatedlyTestHelper::ConnectAsGuest()
53+
{
54+
Authenticator->GuestLogin(false);
55+
}
56+
57+
void USignInOutRepeatedlyTestHelper::OnAuthSuccess()
58+
{
59+
if (Repetitions < MaxRepetitions)
60+
{
61+
Repetitions++;
62+
if (TOptional<USequenceWallet*> OptionalSequenceWallet = USequenceWallet::Get(); OptionalSequenceWallet.IsSet() && OptionalSequenceWallet.GetValue())
63+
{
64+
OptionalSequenceWallet.GetValue()->SignOut();
65+
}
66+
else
67+
{
68+
bTestComplete = true;
69+
ParentTest->AddError(TEXT("Failed to get SequenceWallet"));
70+
return;
71+
}
72+
ConnectAsGuest();
73+
}
74+
else
75+
{
76+
bTestComplete = true;
77+
ParentTest->AddInfo(FString::Printf(TEXT("Successfully signed in and out %d times"), MaxRepetitions));
78+
}
79+
}
80+
81+
void USignInOutRepeatedlyTestHelper::OnAuthFailure(const FString& Error)
82+
{
83+
bTestComplete = true;
84+
ParentTest->AddError(FString::Printf(TEXT("Authentication failed: %s"), *Error));
85+
}
86+
87+
bool FWaitForSignInOutCompletion::Update()
88+
{
89+
return TestHelper->IsTestComplete();
90+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#pragma once
2+
3+
#include "CoreMinimal.h"
4+
#include "Misc/AutomationTest.h"
5+
#include "SequencePlugin/Public/SequenceAuthenticator.h"
6+
#include "SignInOutRepeatedlyTest.generated.h"
7+
8+
class FSignInOutRepeatedlyTest;
9+
10+
UCLASS()
11+
class USignInOutRepeatedlyTestHelper : public UObject
12+
{
13+
GENERATED_BODY()
14+
15+
public:
16+
UFUNCTION()
17+
void OnAuthSuccess();
18+
19+
UFUNCTION()
20+
void OnAuthFailure(const FString& Error);
21+
22+
void RunTest();
23+
bool IsTestComplete() const { return bTestComplete; }
24+
25+
FSignInOutRepeatedlyTest* ParentTest;
26+
27+
private:
28+
bool bTestComplete = false;
29+
USequenceAuthenticator* Authenticator = nullptr;
30+
int32 Repetitions = 0;
31+
static const int32 MaxRepetitions = 3;
32+
33+
void ConnectAsGuest();
34+
};
35+
36+
DEFINE_LATENT_AUTOMATION_COMMAND_ONE_PARAMETER(FWaitForSignInOutCompletion, USignInOutRepeatedlyTestHelper*, TestHelper);

0 commit comments

Comments
 (0)