Kaynağa Gözat

Add pair of unit tests for verifying scan skipping processes files after startup scan is complete

Signed-off-by: amzn-mike <[email protected]>
amzn-mike 2 yıl önce
ebeveyn
işleme
6c6feedb9f

+ 1 - 0
Code/Tools/AssetProcessor/assetprocessor_test_files.cmake

@@ -46,6 +46,7 @@ set(FILES
     native/tests/assetmanager/DelayRelocationTests.h
     native/tests/assetmanager/SourceDependencyTests.cpp
     native/tests/assetmanager/SourceDependencyTests.h
+    native/tests/assetmanager/InitialScanSkippingTests.cpp
     native/tests/assetmanager/Validators/LfsPointerFileValidatorTests.cpp
     native/tests/assetmanager/Validators/LfsPointerFileValidatorTests.h
     native/tests/utilities/assetUtilsTest.cpp

+ 77 - 0
Code/Tools/AssetProcessor/native/tests/assetmanager/InitialScanSkippingTests.cpp

@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) Contributors to the Open 3D Engine Project.
+ * For complete copyright and license terms please see the LICENSE at the root of this distribution.
+ *
+ * SPDX-License-Identifier: Apache-2.0 OR MIT
+ *
+ */
+
+#include <tests/assetmanager/AssetManagerTestingBase.h>
+#include <AzCore/Utils/Utils.h>
+#include <native/AssetManager/assetScanFolderInfo.h>
+
+namespace UnitTests
+{
+    using InitialScanSkipTests = AssetManagerTestingBase;
+
+    TEST_F(InitialScanSkipTests, SanityTest_SkippingDisabled_ProcessesAFile)
+    {
+        using namespace AssetProcessor;
+        // This pair of tests are regression tests for an issue where having scan skipping turned on would result in AP never processing
+        // files This particular test verifies everything works when scan skipping is off
+
+        QSet<AssetProcessor::AssetFileInfo> filePaths = {};
+
+        // Simulate running through the scanning phase
+        QMetaObject::invokeMethod(
+            m_assetProcessorManager.get(),
+            "OnAssetScannerStatusChange",
+            Qt::QueuedConnection,
+            Q_ARG(AssetProcessor::AssetScanningStatus, AssetProcessor::AssetScanningStatus::Started));
+        QMetaObject::invokeMethod(
+            m_assetProcessorManager.get(), "AssessFilesFromScanner", Qt::QueuedConnection, Q_ARG(QSet<AssetFileInfo>, filePaths));
+        QMetaObject::invokeMethod(
+            m_assetProcessorManager.get(),
+            "OnAssetScannerStatusChange",
+            Qt::QueuedConnection,
+            Q_ARG(AssetProcessor::AssetScanningStatus, AssetProcessor::AssetScanningStatus::Completed));
+
+        CreateBuilder("stage1", "*.stage1", "stage2", false, AssetBuilderSDK::ProductOutputFlags::ProductAsset);
+
+        // Test with scan skipping off
+        m_assetProcessorManager->SetInitialScanSkippingFeature(false);
+
+        // Update the file
+        AZ::Utils::WriteFile("unit test file", m_testFilePath.c_str());
+
+        // Process the file
+        ProcessFileMultiStage(1, true);
+    }
+
+    TEST_F(InitialScanSkipTests, SkippingEnabled_ProcessesAFile)
+    {
+        using namespace AssetProcessor;
+        // This pair of tests are regression tests for an issue where having scan skipping turned on would result in AP never processing
+        // files This particular test verifies files can be processed after scanning is done when scan skipping is enabled
+
+        QSet<AssetProcessor::AssetFileInfo> filePaths = {};
+        QMetaObject::invokeMethod(
+            m_assetProcessorManager.get(),
+            "OnAssetScannerStatusChange",
+            Qt::QueuedConnection,
+            Q_ARG(AssetProcessor::AssetScanningStatus, AssetProcessor::AssetScanningStatus::Started));
+        QMetaObject::invokeMethod(
+            m_assetProcessorManager.get(), "AssessFilesFromScanner", Qt::QueuedConnection, Q_ARG(QSet<AssetFileInfo>, filePaths));
+        QMetaObject::invokeMethod(
+            m_assetProcessorManager.get(),
+            "OnAssetScannerStatusChange",
+            Qt::QueuedConnection,
+            Q_ARG(AssetProcessor::AssetScanningStatus, AssetProcessor::AssetScanningStatus::Completed));
+
+        CreateBuilder("stage1", "*.stage1", "stage2", false, AssetBuilderSDK::ProductOutputFlags::ProductAsset);
+
+        m_assetProcessorManager->SetInitialScanSkippingFeature(true);
+        AZ::Utils::WriteFile("unit test file", m_testFilePath.c_str());
+        ProcessFileMultiStage(1, true);
+    }
+} // namespace UnitTests