Files
UnrealEngine/Engine/Source/Runtime/Analytics/TelemetryUtils/Tests/TelemetryRouterTests.cpp
2025-05-18 13:04:45 +08:00

111 lines
3.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#if WITH_LOW_LEVEL_TESTS
#include "TelemetryRouter.h"
#include "TestHarness.h"
struct FTestTelemetryData
{
int32 Count = 0;
static constexpr inline FGuid TelemetryID = FGuid(0x4830c7cf, 0x2c184669, 0x89b299c2, 0x3134f2b3);
};
TEST_CASE("TelemetryUtils::Router::Single", "[Smoke]")
{
FTelemetryRouter Router;
int32 Increment = 4;
FTestTelemetryData DataReceived;
FDelegateHandle Handle = Router.OnTelemetry<FTestTelemetryData>(
[&DataReceived](const FTestTelemetryData& In) {
DataReceived.Count += In.Count;
});
Router.ProvideTelemetry<FTestTelemetryData>(FTestTelemetryData{
.Count = Increment
});
CHECK_EQUAL(DataReceived.Count, Increment);
Router.UnregisterTelemetrySink<FTestTelemetryData>(Handle);
Router.ProvideTelemetry<FTestTelemetryData>(FTestTelemetryData{
.Count = Increment
});
CHECK_EQUAL(DataReceived.Count, Increment);
}
TEST_CASE("TelemetryUtils::Router::Multiple", "[Smoke]")
{
FTelemetryRouter Router;
FTestTelemetryData ReceivedA;
FTestTelemetryData ReceivedB;
FDelegateHandle HandleA = Router.OnTelemetry<FTestTelemetryData>(
[&ReceivedA](const FTestTelemetryData& In) {
ReceivedA.Count += In.Count;
});
FDelegateHandle HandleB = Router.OnTelemetry<FTestTelemetryData>(
[&ReceivedB](const FTestTelemetryData& In) {
ReceivedB.Count += In.Count;
});
Router.ProvideTelemetry<FTestTelemetryData>(FTestTelemetryData{
.Count = 1
});
CHECK_EQUAL(ReceivedA.Count, 1);
CHECK_EQUAL(ReceivedB.Count, 1);
Router.UnregisterTelemetrySink<FTestTelemetryData>(HandleA);
Router.ProvideTelemetry<FTestTelemetryData>(FTestTelemetryData{
.Count = 1
});
CHECK_EQUAL(ReceivedA.Count, 1);
CHECK_EQUAL(ReceivedB.Count, 2);
}
TEST_CASE("TelemetryUtils::Router::WeakBinding", "[Smoke]")
{
FTelemetryRouter Router;
struct FCallee
{
FCallee()
{
}
~FCallee()
{
}
void ReceiveTelemetry(const FTestTelemetryData& In)
{
ReceivedData.Count += In.Count;
}
FTestTelemetryData ReceivedData;
};
int32 Increment = 4;
TWeakPtr<FCallee> WeakCallee;
{
TSharedRef<FCallee> Callee = MakeShared<FCallee>();
FDelegateHandle Handle = Router.OnTelemetry<FTestTelemetryData>(
TDelegate<void(const FTestTelemetryData&)>::CreateSP(Callee, &FCallee::ReceiveTelemetry)
);
Router.ProvideTelemetry<FTestTelemetryData>(FTestTelemetryData{
.Count = Increment
});
CHECK_EQUAL(Callee->ReceivedData.Count, Increment);
// Delete object without unregistering data sink
WeakCallee = Callee;
CHECK(WeakCallee.Pin().IsValid());
}
Router.ProvideTelemetry<FTestTelemetryData>(FTestTelemetryData{
.Count = Increment
});
CHECK(!WeakCallee.Pin().IsValid());
}
#endif