3
0

SaveDataTest.cpp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <SaveDataSystemComponent.h>
  9. #include <AzTest/AzTest.h>
  10. #include <AzCore/Component/TickBus.h>
  11. #include <AzCore/Memory/OSAllocator.h>
  12. #include <AzCore/Memory/SystemAllocator.h>
  13. #include <AzCore/Serialization/SerializeContext.h>
  14. #include <AzCore/std/smart_ptr/make_shared.h>
  15. #include <AzCore/std/smart_ptr/unique_ptr.h>
  16. #include <AzCore/UnitTest/TestTypes.h>
  17. #include "SaveDataTest.h"
  18. #if !AZ_TRAIT_DISABLE_ALL_SAVE_DATA_TESTS
  19. void SaveDataTest::SetUp()
  20. {
  21. LeakDetectionFixture::SetUp();
  22. m_saveDataSystemComponent = AZStd::make_unique<SaveData::SaveDataSystemComponent>();
  23. m_saveDataSystemComponent->Activate();
  24. SetupInternal();
  25. }
  26. void SaveDataTest::TearDown()
  27. {
  28. TearDownInternal();
  29. m_saveDataSystemComponent->Deactivate();
  30. m_saveDataSystemComponent.reset();
  31. LeakDetectionFixture::TearDown();
  32. }
  33. class OnSavedHandler : public SaveData::SaveDataNotificationBus::Handler
  34. {
  35. public:
  36. OnSavedHandler()
  37. {
  38. BusConnect();
  39. }
  40. void OnDataBufferSaved(const DataBufferSavedParams& dataBufferSavedParams) override
  41. {
  42. lastSavedParams = dataBufferSavedParams;
  43. notificationReceived = true;
  44. }
  45. void OnDataBufferLoaded([[maybe_unused]] const DataBufferLoadedParams& dataBufferLoadedParams) override {}
  46. DataBufferSavedParams lastSavedParams;
  47. bool notificationReceived = false;
  48. };
  49. class OnLoadedHandler : public SaveData::SaveDataNotificationBus::Handler
  50. {
  51. public:
  52. OnLoadedHandler()
  53. {
  54. BusConnect();
  55. }
  56. void OnDataBufferSaved([[maybe_unused]] const DataBufferSavedParams& dataBufferSavedParams) override {}
  57. void OnDataBufferLoaded(const DataBufferLoadedParams& dataBufferLoadedParams) override
  58. {
  59. lastLoadedParams = dataBufferLoadedParams;
  60. notificationReceived = true;
  61. }
  62. DataBufferLoadedParams lastLoadedParams;
  63. bool notificationReceived = false;
  64. };
  65. const AZ::u64 testSaveDataSize = 9;
  66. const char* testSaveDataName = "TestSaveData";
  67. char testSaveData[testSaveDataSize] = {'a', 'b', 'c', '1', '2', '3', 'x', 'y', 'z'};
  68. AZStd::string GetTestSaveDataCustomDirectoryNameRelative()
  69. {
  70. return "Amazon/O3DE/SaveDataTest";
  71. }
  72. #if defined(AZ_PLATFORM_WINDOWS)
  73. # include <windows.h>
  74. AZStd::string GetTestSaveDataCustomDirectoryNameAbsolute()
  75. {
  76. const DWORD bufferSize = 256;
  77. char buffer[bufferSize] = {0};
  78. GetTempPathA(bufferSize, buffer);
  79. return buffer;
  80. }
  81. #else
  82. AZStd::string GetTestSaveDataCustomDirectoryNameAbsolute()
  83. {
  84. return "/tmp";
  85. }
  86. #endif // defined(AZ_PLATFORM_WINDOWS)
  87. void SaveTestDataBuffer(const AzFramework::LocalUserId& localUserId = AzFramework::LocalUserIdNone,
  88. bool useDataBufferDeleterAzFree = false)
  89. {
  90. // Setup the save data params
  91. SaveData::SaveDataRequests::SaveDataBufferParams params;
  92. if (useDataBufferDeleterAzFree)
  93. {
  94. // The default deleter is DataBufferDeleterNone, which cannot be changed when calling unique_ptr::reset,
  95. // but we are able to reset the pointer and assign a new deleter at the same time using move assignment.
  96. void* testSaveDataAllocated = azmalloc(testSaveDataSize);
  97. memcpy(testSaveDataAllocated, testSaveData, testSaveDataSize);
  98. params.dataBuffer = SaveData::SaveDataRequests::DataBuffer(testSaveDataAllocated,
  99. &SaveData::SaveDataRequests::DataBufferDeleterAzFree);
  100. }
  101. else
  102. {
  103. // The default deleter is DataBufferDeleterNone, so if we don't need to change it we can just call reset
  104. params.dataBuffer.reset(testSaveData);
  105. }
  106. params.dataBufferSize = testSaveDataSize;
  107. params.dataBufferName = testSaveDataName;
  108. params.localUserId = localUserId;
  109. params.callback = [localUserId](const SaveData::SaveDataNotifications::DataBufferSavedParams& onSavedParams)
  110. {
  111. #if AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  112. if (localUserId == AzFramework::LocalUserIdNone)
  113. {
  114. EXPECT_TRUE(onSavedParams.result == SaveData::SaveDataNotifications::Result::ErrorUnknownUser);
  115. return;
  116. }
  117. #endif // AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  118. EXPECT_TRUE(onSavedParams.dataBufferName == testSaveDataName);
  119. EXPECT_TRUE(onSavedParams.localUserId == localUserId);
  120. EXPECT_TRUE(onSavedParams.result == SaveData::SaveDataNotifications::Result::Success);
  121. };
  122. // Create the notification handler and send the save data request
  123. OnSavedHandler onSavedHandler;
  124. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SaveDataBuffer, params);
  125. // Execute queued tick bus events until we receive the notification
  126. while (!onSavedHandler.notificationReceived)
  127. {
  128. AZ::TickBus::ExecuteQueuedEvents();
  129. }
  130. #if AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  131. if (localUserId == AzFramework::LocalUserIdNone)
  132. {
  133. EXPECT_TRUE(onSavedHandler.lastSavedParams.result == SaveData::SaveDataNotifications::Result::ErrorUnknownUser);
  134. return;
  135. }
  136. #endif // AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  137. EXPECT_TRUE(onSavedHandler.lastSavedParams.dataBufferName == testSaveDataName);
  138. EXPECT_TRUE(onSavedHandler.lastSavedParams.localUserId == localUserId);
  139. EXPECT_TRUE(onSavedHandler.lastSavedParams.result == SaveData::SaveDataNotifications::Result::Success);
  140. }
  141. void LoadTestDataBuffer(const AzFramework::LocalUserId& localUserId = AzFramework::LocalUserIdNone)
  142. {
  143. // Setup the load data params
  144. SaveData::SaveDataRequests::LoadDataBufferParams params;
  145. params.dataBufferName = testSaveDataName;
  146. params.localUserId = localUserId;
  147. params.callback = [localUserId](const SaveData::SaveDataNotifications::DataBufferLoadedParams& onLoadedParams)
  148. {
  149. #if AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  150. if (localUserId == AzFramework::LocalUserIdNone)
  151. {
  152. EXPECT_TRUE(onLoadedParams.result == SaveData::SaveDataNotifications::Result::ErrorUnknownUser);
  153. return;
  154. }
  155. #endif // AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  156. EXPECT_TRUE(onLoadedParams.dataBuffer != nullptr);
  157. EXPECT_TRUE(onLoadedParams.dataBufferName == testSaveDataName);
  158. EXPECT_TRUE(onLoadedParams.dataBufferSize == testSaveDataSize);
  159. EXPECT_TRUE(onLoadedParams.localUserId == localUserId);
  160. EXPECT_TRUE(onLoadedParams.result == SaveData::SaveDataNotifications::Result::Success);
  161. if (onLoadedParams.result == SaveData::SaveDataNotifications::Result::Success)
  162. {
  163. EXPECT_TRUE(memcmp(testSaveData, onLoadedParams.dataBuffer.get(), testSaveDataSize) == 0);
  164. }
  165. };
  166. // Create the notification handler and send the load data request
  167. OnLoadedHandler onLoadedHandler;
  168. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::LoadDataBuffer, params);
  169. // Execute queued tick bus events until we receive the notification
  170. while (!onLoadedHandler.notificationReceived)
  171. {
  172. AZ::TickBus::ExecuteQueuedEvents();
  173. }
  174. #if AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  175. if (localUserId == AzFramework::LocalUserIdNone)
  176. {
  177. EXPECT_TRUE(onLoadedHandler.lastLoadedParams.result == SaveData::SaveDataNotifications::Result::ErrorUnknownUser);
  178. return;
  179. }
  180. #endif // AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  181. EXPECT_TRUE(onLoadedHandler.lastLoadedParams.dataBuffer != nullptr);
  182. EXPECT_TRUE(onLoadedHandler.lastLoadedParams.dataBufferName == testSaveDataName);
  183. EXPECT_TRUE(onLoadedHandler.lastLoadedParams.dataBufferSize == testSaveDataSize);
  184. EXPECT_TRUE(onLoadedHandler.lastLoadedParams.localUserId == localUserId);
  185. EXPECT_TRUE(onLoadedHandler.lastLoadedParams.result == SaveData::SaveDataNotifications::Result::Success);
  186. if (onLoadedHandler.lastLoadedParams.result == SaveData::SaveDataNotifications::Result::Success)
  187. {
  188. EXPECT_TRUE(memcmp(testSaveData, onLoadedHandler.lastLoadedParams.dataBuffer.get(), testSaveDataSize) == 0);
  189. }
  190. }
  191. TEST_F(SaveDataTest, SaveDataBuffer)
  192. {
  193. SaveTestDataBuffer();
  194. }
  195. TEST_F(SaveDataTest, LoadDataBuffer)
  196. {
  197. LoadTestDataBuffer();
  198. }
  199. TEST_F(SaveDataTest, SaveDataBufferForUser)
  200. {
  201. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  202. SaveTestDataBuffer(userId);
  203. }
  204. TEST_F(SaveDataTest, LoadDataBufferForUser)
  205. {
  206. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  207. LoadTestDataBuffer(userId);
  208. }
  209. TEST_F(SaveDataTest, SaveDataBufferToCustomDirectoryRelative)
  210. {
  211. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  212. GetTestSaveDataCustomDirectoryNameRelative().c_str());
  213. SaveTestDataBuffer();
  214. }
  215. TEST_F(SaveDataTest, LoadDataBufferFromCustomDirectoryRelative)
  216. {
  217. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  218. GetTestSaveDataCustomDirectoryNameRelative().c_str());
  219. LoadTestDataBuffer();
  220. }
  221. #if AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  222. TEST_F(SaveDataTest, DISABLED_SaveDataBufferToCustomDirectoryAbsolute)
  223. #else
  224. TEST_F(SaveDataTest, SaveDataBufferToCustomDirectoryAbsolute)
  225. #endif // AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  226. {
  227. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  228. GetTestSaveDataCustomDirectoryNameAbsolute().c_str());
  229. SaveTestDataBuffer();
  230. }
  231. #if AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  232. TEST_F(SaveDataTest, DISABLED_LoadDataBufferFromCustomDirectoryAbsolute)
  233. #else
  234. TEST_F(SaveDataTest, LoadDataBufferFromCustomDirectoryAbsolute)
  235. #endif // AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  236. {
  237. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  238. GetTestSaveDataCustomDirectoryNameAbsolute().c_str());
  239. LoadTestDataBuffer();
  240. }
  241. TEST_F(SaveDataTest, SaveDataBufferForUserToCustomDirectoryRelative)
  242. {
  243. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  244. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  245. GetTestSaveDataCustomDirectoryNameRelative().c_str());
  246. SaveTestDataBuffer(userId);
  247. }
  248. TEST_F(SaveDataTest, LoadDataBufferForUserFromCustomDirectoryRelative)
  249. {
  250. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  251. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  252. GetTestSaveDataCustomDirectoryNameRelative().c_str());
  253. LoadTestDataBuffer(userId);
  254. }
  255. #if AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  256. TEST_F(SaveDataTest, DISABLED_SaveDataBufferForUserToCustomDirectoryAbsolute)
  257. #else
  258. TEST_F(SaveDataTest, SaveDataBufferForUserToCustomDirectoryAbsolute)
  259. #endif // AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  260. {
  261. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  262. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  263. GetTestSaveDataCustomDirectoryNameAbsolute().c_str());
  264. SaveTestDataBuffer(userId);
  265. }
  266. #if AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  267. TEST_F(SaveDataTest, DISABLED_LoadDataBufferForUserFromCustomDirectoryAbsolute)
  268. #else
  269. TEST_F(SaveDataTest, LoadDataBufferForUserFromCustomDirectoryAbsolute)
  270. #endif // AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  271. {
  272. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  273. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  274. GetTestSaveDataCustomDirectoryNameAbsolute().c_str());
  275. LoadTestDataBuffer(userId);
  276. }
  277. TEST_F(SaveDataTest, SaveDataBufferUsingDataBufferDeleterAzFree)
  278. {
  279. SaveTestDataBuffer(AzFramework::LocalUserIdNone, true);
  280. }
  281. class TestObject
  282. {
  283. public:
  284. virtual ~TestObject() = default;
  285. static constexpr const char* DataBufferName = "TestSaveObject";
  286. AZ_TYPE_INFO(TestObject, "{9CE29971-8FE2-41FF-AD5B-CB15F1B92834}");
  287. static void Reflect(AZ::SerializeContext& sc)
  288. {
  289. sc.Class<TestObject>()
  290. ->Version(1)
  291. ->Field("testString", &TestObject::testString)
  292. ->Field("testFloat", &TestObject::testFloat)
  293. ->Field("testInt", &TestObject::testInt)
  294. ->Field("testBool", &TestObject::testBool)
  295. ;
  296. }
  297. bool operator==(const TestObject& other) const
  298. {
  299. return (testString == other.testString) &&
  300. (testFloat == other.testFloat) &&
  301. (testInt == other.testInt) &&
  302. (testBool == other.testBool);
  303. }
  304. void SetNonDefaultValues()
  305. {
  306. testString = "NonDefaultString";
  307. testFloat = 9.9f;
  308. testInt = 1234567890;
  309. testBool = true;
  310. }
  311. AZStd::string testString;
  312. float testFloat = 0.0f;
  313. int testInt = 0;
  314. bool testBool = false;
  315. };
  316. void SaveTestObject(const AzFramework::LocalUserId& localUserId = AzFramework::LocalUserIdNone)
  317. {
  318. // Reflect the test object.
  319. AZ::SerializeContext serializeContext;
  320. TestObject::Reflect(serializeContext);
  321. // Create a test object and change the default values.
  322. TestObject defaultTestObject;
  323. AZStd::shared_ptr<TestObject> testObject = AZStd::make_shared<TestObject>();
  324. EXPECT_TRUE(*testObject == defaultTestObject);
  325. testObject->SetNonDefaultValues();
  326. EXPECT_FALSE(*testObject == defaultTestObject);
  327. // Setup the save data params
  328. SaveData::SaveDataRequests::SaveOrLoadObjectParams<TestObject> params;
  329. params.serializableObject = testObject;
  330. params.serializeContext = &serializeContext;
  331. params.dataBufferName = TestObject::DataBufferName;
  332. params.localUserId = localUserId;
  333. params.callback = [params](const SaveData::SaveDataRequests::SaveOrLoadObjectParams<TestObject>& callbackParams,
  334. SaveData::SaveDataNotifications::Result callbackResult)
  335. {
  336. #if AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  337. if (params.localUserId == AzFramework::LocalUserIdNone)
  338. {
  339. EXPECT_TRUE(callbackResult == SaveData::SaveDataNotifications::Result::ErrorUnknownUser);
  340. return;
  341. }
  342. #endif // AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  343. EXPECT_TRUE(callbackResult == SaveData::SaveDataNotifications::Result::Success);
  344. EXPECT_TRUE(*(callbackParams.serializableObject) == *(params.serializableObject));
  345. EXPECT_TRUE(callbackParams.serializableObject == params.serializableObject);
  346. EXPECT_TRUE(callbackParams.serializeContext == params.serializeContext);
  347. EXPECT_TRUE(callbackParams.dataBufferName == params.dataBufferName);
  348. EXPECT_TRUE(callbackParams.localUserId == params.localUserId);
  349. };
  350. // Create the notification handler and send the save data request
  351. OnSavedHandler onSavedHandler;
  352. SaveData::SaveDataRequests::SaveObject(params);
  353. // Execute queued tick bus events until we receive the notification
  354. while (!onSavedHandler.notificationReceived)
  355. {
  356. AZ::TickBus::ExecuteQueuedEvents();
  357. }
  358. #if AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  359. if (params.localUserId == AzFramework::LocalUserIdNone)
  360. {
  361. EXPECT_TRUE(onSavedHandler.lastSavedParams.result == SaveData::SaveDataNotifications::Result::ErrorUnknownUser);
  362. return;
  363. }
  364. #endif // AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  365. EXPECT_TRUE(onSavedHandler.lastSavedParams.dataBufferName == TestObject::DataBufferName);
  366. EXPECT_TRUE(onSavedHandler.lastSavedParams.localUserId == localUserId);
  367. EXPECT_TRUE(onSavedHandler.lastSavedParams.result == SaveData::SaveDataNotifications::Result::Success);
  368. }
  369. void LoadTestObject(const AzFramework::LocalUserId& localUserId = AzFramework::LocalUserIdNone)
  370. {
  371. // Reflect the test object.
  372. AZ::SerializeContext serializeContext;
  373. TestObject::Reflect(serializeContext);
  374. // Create a test object to load.
  375. TestObject defaultTestObject;
  376. TestObject nonDefaultTestObject;
  377. nonDefaultTestObject.SetNonDefaultValues();
  378. AZStd::shared_ptr<TestObject> testObject = AZStd::make_shared<TestObject>();
  379. EXPECT_TRUE(*testObject == defaultTestObject);
  380. EXPECT_FALSE(*testObject == nonDefaultTestObject);
  381. // Setup the load data params
  382. SaveData::SaveDataRequests::SaveOrLoadObjectParams<TestObject> params;
  383. params.serializableObject = testObject;
  384. params.serializeContext = &serializeContext;
  385. params.dataBufferName = TestObject::DataBufferName;
  386. params.localUserId = localUserId;
  387. params.callback = [params, defaultTestObject, nonDefaultTestObject]
  388. (const SaveData::SaveDataRequests::SaveOrLoadObjectParams<TestObject>& callbackParams,
  389. SaveData::SaveDataNotifications::Result callbackResult)
  390. {
  391. #if AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  392. if (params.localUserId == AzFramework::LocalUserIdNone)
  393. {
  394. EXPECT_TRUE(callbackResult == SaveData::SaveDataNotifications::Result::ErrorUnknownUser);
  395. return;
  396. }
  397. #endif // AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  398. EXPECT_TRUE(callbackResult == SaveData::SaveDataNotifications::Result::Success);
  399. EXPECT_TRUE(*(callbackParams.serializableObject) == *(params.serializableObject));
  400. EXPECT_FALSE(*(callbackParams.serializableObject) == defaultTestObject);
  401. EXPECT_TRUE(*(callbackParams.serializableObject) == nonDefaultTestObject);
  402. EXPECT_TRUE(callbackParams.serializableObject == params.serializableObject);
  403. EXPECT_TRUE(callbackParams.serializeContext == params.serializeContext);
  404. EXPECT_TRUE(callbackParams.dataBufferName == params.dataBufferName);
  405. EXPECT_TRUE(callbackParams.localUserId == params.localUserId);
  406. };
  407. // Create the notification handler and send the load data request
  408. OnLoadedHandler onLoadedHandler;
  409. SaveData::SaveDataRequests::LoadObject(params);
  410. // Execute queued tick bus events until we receive the notification
  411. while (!onLoadedHandler.notificationReceived)
  412. {
  413. AZ::TickBus::ExecuteQueuedEvents();
  414. }
  415. #if AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  416. if (params.localUserId == AzFramework::LocalUserIdNone)
  417. {
  418. EXPECT_TRUE(onLoadedHandler.lastLoadedParams.result == SaveData::SaveDataNotifications::Result::ErrorUnknownUser);
  419. return;
  420. }
  421. #endif // AZ_TRAIT_SAVEDATA_TEST_REQUIRES_SPECIFIC_USER_ID
  422. EXPECT_TRUE(onLoadedHandler.lastLoadedParams.dataBuffer != nullptr);
  423. EXPECT_TRUE(onLoadedHandler.lastLoadedParams.dataBufferName == TestObject::DataBufferName);
  424. EXPECT_TRUE(onLoadedHandler.lastLoadedParams.localUserId == localUserId);
  425. EXPECT_TRUE(onLoadedHandler.lastLoadedParams.result == SaveData::SaveDataNotifications::Result::Success);
  426. }
  427. TEST_F(SaveDataTest, SaveObject)
  428. {
  429. SaveTestObject();
  430. }
  431. TEST_F(SaveDataTest, LoadObject)
  432. {
  433. LoadTestObject();
  434. }
  435. TEST_F(SaveDataTest, SaveObjectForUser)
  436. {
  437. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  438. SaveTestObject(userId);
  439. }
  440. TEST_F(SaveDataTest, LoadObjectForUser)
  441. {
  442. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  443. LoadTestObject(userId);
  444. }
  445. TEST_F(SaveDataTest, SaveObjectToCustomDirectoryRelative)
  446. {
  447. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  448. GetTestSaveDataCustomDirectoryNameRelative().c_str());
  449. SaveTestObject();
  450. }
  451. TEST_F(SaveDataTest, LoadObjectFromCustomDirectoryRelative)
  452. {
  453. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  454. GetTestSaveDataCustomDirectoryNameRelative().c_str());
  455. LoadTestObject();
  456. }
  457. #if AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  458. TEST_F(SaveDataTest, DISABLED_SaveObjectToCustomDirectoryAbsolute)
  459. #else
  460. TEST_F(SaveDataTest, SaveObjectToCustomDirectoryAbsolute)
  461. #endif // AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  462. {
  463. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  464. GetTestSaveDataCustomDirectoryNameAbsolute().c_str());
  465. SaveTestObject();
  466. }
  467. #if AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  468. TEST_F(SaveDataTest, DISABLED_LoadObjectFromCustomDirectoryAbsolute)
  469. #else
  470. TEST_F(SaveDataTest, LoadObjectFromCustomDirectoryAbsolute)
  471. #endif // AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  472. {
  473. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  474. GetTestSaveDataCustomDirectoryNameAbsolute().c_str());
  475. LoadTestObject();
  476. }
  477. TEST_F(SaveDataTest, SaveObjectForUserToCustomDirectoryRelative)
  478. {
  479. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  480. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  481. GetTestSaveDataCustomDirectoryNameRelative().c_str());
  482. SaveTestObject(userId);
  483. }
  484. TEST_F(SaveDataTest, LoadObjectForUserFromCustomDirectoryRelative)
  485. {
  486. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  487. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  488. GetTestSaveDataCustomDirectoryNameRelative().c_str());
  489. LoadTestObject(userId);
  490. }
  491. #if AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  492. TEST_F(SaveDataTest, DISABLED_SaveObjectForUserToCustomDirectoryAbsolute)
  493. #else
  494. TEST_F(SaveDataTest, SaveObjectForUserToCustomDirectoryAbsolute)
  495. #endif // AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  496. {
  497. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  498. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  499. GetTestSaveDataCustomDirectoryNameAbsolute().c_str());
  500. SaveTestObject(userId);
  501. }
  502. #if AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  503. TEST_F(SaveDataTest, DISABLED_LoadObjectForUserFromCustomDirectoryAbsolute)
  504. #else
  505. TEST_F(SaveDataTest, LoadObjectForUserFromCustomDirectoryAbsolute)
  506. #endif // AZ_TRAIT_DISABLE_FAILED_SAVE_DATA_TESTS
  507. {
  508. AzFramework::LocalUserId userId = SaveDataTest::GetDefaultTestUserId();
  509. SaveData::SaveDataRequestBus::Broadcast(&SaveData::SaveDataRequests::SetSaveDataDirectoryPath,
  510. GetTestSaveDataCustomDirectoryNameAbsolute().c_str());
  511. LoadTestObject(userId);
  512. }
  513. #endif // !AZ_TRAIT_DISABLE_ALL_SAVE_DATA_TESTS
  514. AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV);