ModtimeScanningTests.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. #pragma once
  9. #include <tests/assetmanager/AssetProcessorManagerTest.h>
  10. namespace UnitTests
  11. {
  12. struct ModtimeScanningTest : AssetProcessorManagerTest
  13. {
  14. void SetUpAssetProcessorManager();
  15. void PopulateDatabase() override;
  16. void SetUp() override;
  17. void TearDown() override;
  18. void ProcessAssetJobs();
  19. void SimulateAssetScanner(QSet<AssetProcessor::AssetFileInfo> filePaths);
  20. QSet<AssetProcessor::AssetFileInfo> BuildFileSet();
  21. void ExpectWork(int createJobs, int processJobs);
  22. void ExpectNoWork();
  23. void SetFileContents(QString filePath, QString contents);
  24. struct StaticData
  25. {
  26. AZStd::vector<AssetProcessor::SourceAssetReference> m_sourcePaths;
  27. AZStd::vector<AssetProcessor::JobDetails> m_processResults;
  28. AZStd::unordered_multimap<AZStd::string, QString> m_productPaths;
  29. AZStd::vector<AssetProcessor::SourceAssetReference> m_deletedSources;
  30. AZStd::shared_ptr<AssetProcessor::InternalMockBuilder> m_builderTxtBuilder;
  31. MockMultiBuilderInfoHandler m_mockBuilderInfoHandler;
  32. };
  33. AZStd::unique_ptr<StaticData> m_data;
  34. };
  35. struct DeleteTest : ModtimeScanningTest
  36. {
  37. void SetUp() override;
  38. };
  39. struct LockedFileTest
  40. : ModtimeScanningTest
  41. , AssetProcessor::ConnectionBus::Handler
  42. {
  43. MOCK_METHOD3(SendRaw, size_t(unsigned, unsigned, const QByteArray&));
  44. MOCK_METHOD3(SendPerPlatform, size_t(unsigned, const AzFramework::AssetSystem::BaseAssetProcessorMessage&, const QString&));
  45. MOCK_METHOD4(SendRawPerPlatform, size_t(unsigned, unsigned, const QByteArray&, const QString&));
  46. MOCK_METHOD2(SendRequest, unsigned(const AzFramework::AssetSystem::BaseAssetProcessorMessage&, const ResponseCallback&));
  47. MOCK_METHOD2(SendResponse, size_t(unsigned, const AzFramework::AssetSystem::BaseAssetProcessorMessage&));
  48. MOCK_METHOD1(RemoveResponseHandler, void(unsigned));
  49. size_t Send(unsigned, const AzFramework::AssetSystem::BaseAssetProcessorMessage& message) override
  50. {
  51. using SourceFileNotificationMessage = AzToolsFramework::AssetSystem::SourceFileNotificationMessage;
  52. switch (message.GetMessageType())
  53. {
  54. case SourceFileNotificationMessage::MessageType:
  55. if (const auto sourceFileMessage = azrtti_cast<const SourceFileNotificationMessage*>(&message);
  56. sourceFileMessage != nullptr &&
  57. sourceFileMessage->m_type == SourceFileNotificationMessage::NotificationType::FileRemoved)
  58. {
  59. // The File Remove message will occur before an attempt to delete the file
  60. // Wait for more than 1 File Remove message.
  61. // This indicates the AP has attempted to delete the file once, failed to do so and is now retrying
  62. ++m_deleteCounter;
  63. if (m_deleteCounter > 1 && m_callback)
  64. {
  65. m_callback();
  66. m_callback = {}; // Unset it to be safe, we only intend to run the callback once
  67. }
  68. }
  69. break;
  70. default:
  71. break;
  72. }
  73. return 0;
  74. }
  75. void SetUp() override
  76. {
  77. ModtimeScanningTest::SetUp();
  78. AssetProcessor::ConnectionBus::Handler::BusConnect(0);
  79. }
  80. void TearDown() override
  81. {
  82. AssetProcessor::ConnectionBus::Handler::BusDisconnect();
  83. ModtimeScanningTest::TearDown();
  84. }
  85. AZStd::atomic_int m_deleteCounter{ 0 };
  86. AZStd::function<void()> m_callback;
  87. };
  88. }