Helios spec-6686 decouple tests (#978)
* * Remove test repository references * * Update asset_builder_tests.py docstring to include test steps * * Update test docstrings in asset_bundler_batch_tests.py to include test steps * * Update asset_processor_batch_dependency_tests.py docstrings to contain test steps * * Update asset_processor_batch_dependency_tests2.py docstrings to have test steps * * Update asset_processor_batch_tests.py docstring to include test steps * * Update asset_processor_batch_tests_2.py docstrings to include test steps * Removed a references to a JIRA ticket ID * * Update asset_processor_guit_tests.py docstrings to include test steps * * Update asset_processor_gui_tests_2.py docstrings to have Test Steps * * Update asset_relocator_tests.py docstrings to include test steps * * update missing_dependency_tests.py docstrings to have test steps * * Update auxiliary_content_tests.py docstrings to have test steps * * Update fbx_tests.py docstrings to have test steps. * * Update bank_info_parser_tests.py docstrings to have test steps * * Removed Jira issue ids from Asset Pipline owned code * * Undid two errornous code changes. * * Addressed dbbronso PR-978 feedback. * Steps declared and not populated. 1 - Removed errornous. 2 - Added missing step * Fixed line formatting by removing bad blank line in Docstring * Addressed PR-978 feedback from AMZN-stankowi * Removed commented out entry from cmakefile * Fixed several casing and spelling/typo issues caught in review * Added a missing test step in asset_bundler_batch_tests.py * Removed a test dealing with external projects, cut LYN-4116 to replace * Calarfied test steps in asset_processor_gui_tests.py * Noted test in asset_processor_gui_tests that cannot be ran manually * Clarified test steps for fbx_tests * Added in a comment and whitespace to a disguised operation. Co-authored-by: stankowi <stankowi@amazon.com>
This commit is contained in:
@@ -128,16 +128,5 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||
RUNTIME_DEPENDENCIES
|
||||
AZ::AssetProcessorBatch
|
||||
)
|
||||
|
||||
# Need performance improvements LYN-1218
|
||||
# ly_add_pytest(
|
||||
# NAME AssetPipelineTests.AssetRelocator
|
||||
# PATH ${CMAKE_CURRENT_LIST_DIR}/asset_relocator_tests.py
|
||||
# EXCLUDE_TEST_RUN_TARGET_FROM_IDE
|
||||
# TEST_SUITE periodic
|
||||
# TEST_SERIAL
|
||||
# RUNTIME_DEPENDENCIES
|
||||
# AZ::AssetProcessorBatch
|
||||
# )
|
||||
|
||||
endif()
|
||||
|
||||
+9
@@ -64,6 +64,15 @@ class TestsAssetBuilder_WindowsAndMac(object):
|
||||
):
|
||||
"""
|
||||
Verifying -debug parameter for AssetBuilder
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary workspace
|
||||
2. Launch Asset Processor GUI
|
||||
3. Add test assets to workspace
|
||||
4. Run Asset Builder with debug on an intact slice
|
||||
5. Check Asset Builder didn't fail to build
|
||||
6. Run Asset Builder with debug on a corrupted slice
|
||||
7. Verify corrupted slice produced an error
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
intact_slice_failed = False
|
||||
|
||||
+107
-1
@@ -80,6 +80,8 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
def test_WindowsAndMac_RunHelpCmd_ZeroExitCode(self, workspace, bundler_batch_helper):
|
||||
"""
|
||||
Simple calls to all AssetBundlerBatch --help to make sure a non-zero exit codes are returned.
|
||||
|
||||
Test will call each Asset Bundler Batch sub-command with help and will error on a non-0 exit code
|
||||
"""
|
||||
bundler_batch_helper.call_bundlerbatch(help="")
|
||||
bundler_batch_helper.call_seeds(help="")
|
||||
@@ -98,6 +100,12 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
r"""
|
||||
Tests that an asset list created maps dependencies correctly.
|
||||
testdependencieslevel\level.pak and lists of known dependencies are used for validation
|
||||
|
||||
Test Steps:
|
||||
1. Create an asset list from the level.pak
|
||||
2. Create Lists of expected assets in the level.pak
|
||||
3. Add lists of expected assets to a single list
|
||||
4. Compare list of expected assets to actual assets
|
||||
"""
|
||||
helper = bundler_batch_helper
|
||||
|
||||
@@ -300,6 +308,15 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
"""
|
||||
Validates destructive overwriting for asset lists and
|
||||
that generating debug information does not affect asset list creation
|
||||
|
||||
1. Create an asset list from seed_list
|
||||
2. Validate asset list was created
|
||||
3. Read and store contents of asset list into memory
|
||||
4. Attempt to create a new asset list in without using --allowOverwrites
|
||||
5. Verify that Asset Bundler returns false
|
||||
6. Verify that file contents of the orignally created asset list did not change from what was stored in memory
|
||||
7. Attempt to create a new asset list without debug while allowing overwrites
|
||||
8. Verify that file contents of the orignally created asset list changed from what was stored in memory
|
||||
"""
|
||||
helper = bundler_batch_helper
|
||||
seed_list = os.path.join(workspace.paths.engine_root(), "Assets", "Engine", "SeedAssetList.seed") # Engine seed list
|
||||
@@ -375,6 +392,14 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
"""
|
||||
Validates bundle creation both through the 'bundles' and 'bundlesettings'
|
||||
subcommands.
|
||||
|
||||
Test Steps:
|
||||
1. Create an asset list
|
||||
2. Create a bundle with the asset list and without a bundle settings file
|
||||
3. Create a bundle with the asset list and a bundle settings file
|
||||
4. Validate calling bundle doesn't perform destructive overwrite without --allowOverwrites
|
||||
5. Calling bundle again with --alowOverwrites performs destructive overwrite
|
||||
6. Validate contents of original bundle and overwritten bundle
|
||||
"""
|
||||
helper = bundler_batch_helper
|
||||
seed_list = os.path.join(workspace.paths.engine_root(), "Assets", "Engine", "SeedAssetList.seed") # Engine seed list
|
||||
@@ -457,6 +482,16 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
"""
|
||||
Creates bundles using the same asset list and compares that they are created equally. Also
|
||||
validates that platform bundles exclude/include an expected file. (excluded for WIN, included for MAC)
|
||||
|
||||
Test Steps:
|
||||
1. Create an asset list
|
||||
2. Create bundles for both PC & Mac
|
||||
3. Validate that bundles were created
|
||||
4. Verify that expected missing file is not in windows bundle
|
||||
5. Verify that expected file is in the mac bundle
|
||||
6. Create duplicate bundles with allowOverwrites
|
||||
7. Verify that files were generated
|
||||
8. Verify original bundle checksums are equal to new bundle checksums
|
||||
"""
|
||||
helper = bundler_batch_helper
|
||||
# fmt:off
|
||||
@@ -571,6 +606,24 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
"""
|
||||
Validates that the 'seeds' subcommand can add and remove seeds and seed platforms properly.
|
||||
Also checks that destructive overwrites require the --allowOverwrites flag
|
||||
|
||||
Test Steps:
|
||||
|
||||
1. Create a PC Seed List from a test asset
|
||||
2. Validate that seed list was generated with proper platform flag
|
||||
3. Add Mac & PC as platforms to the seed list
|
||||
4. Verify that seed has both Mac & PC platform flags
|
||||
5. Remove Mac as a platform from the seed list
|
||||
6. Verify that seed only has PC as a platform flag
|
||||
7. Attempt to add a platform without using the --platform argument
|
||||
8. Verify that asset bundler returns False and file contents did not change
|
||||
9. Add Mac platform via --addPlatformToSeeds
|
||||
10. Validate that seed has both Mac & PC platform flags
|
||||
11. Attempt to remove platform without specifying a platform
|
||||
12. Validate that seed has both Mac & PC platform flags
|
||||
13. Validate that seed list contents did not change
|
||||
14. Remove seed
|
||||
15. Validate that seed was removed from the seed list
|
||||
"""
|
||||
helper = bundler_batch_helper
|
||||
|
||||
@@ -692,6 +745,12 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
"""
|
||||
Tests asset list comparison, both by file and by comparison type. Uses a set
|
||||
of controlled test assets to compare resulting output asset lists
|
||||
|
||||
1. Create comparison rules files
|
||||
2. Create seed files for different sets of test assets
|
||||
3. Create assetlist files for seed files
|
||||
4. Validate assetlists were created properly
|
||||
5. Compare using comparison rules files and just command line arguments
|
||||
"""
|
||||
helper = bundler_batch_helper
|
||||
env = ap_setup_fixture
|
||||
@@ -1021,6 +1080,16 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
"""
|
||||
Tests that assetlists are created equivalent to the output while being created, and
|
||||
makes sure overwriting an existing file without the --allowOverwrites fails
|
||||
|
||||
Test Steps:
|
||||
1. Check that Asset List creation requires PC platform flag
|
||||
2. Create a PC Asset List using asset info file and default seed lists using --print
|
||||
3. Validate all assets output are present in the asset list
|
||||
4. Create a seed file
|
||||
5. Attempt to overwrite Asset List without using --allowOverwrites
|
||||
6. Validate that command returned an error and file contents did not change
|
||||
7. Specifying platform but not "add" or "remove" should fail
|
||||
8. Verify file Has changed
|
||||
"""
|
||||
helper = bundler_batch_helper
|
||||
|
||||
@@ -1102,7 +1171,16 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
def test_WindowsAndMac_AP_BundleProcessing_BundleProcessedAtRuntime(self, workspace, bundler_batch_helper,
|
||||
asset_processor, request):
|
||||
# fmt:on
|
||||
"""Test to make sure the AP GUI will process a newly created bundle file"""
|
||||
"""
|
||||
Test to make sure the AP GUI will process a newly created bundle file
|
||||
|
||||
Test Steps:
|
||||
1. Make asset list file (used for bundle creation)
|
||||
2. Start Asset Processor GUI
|
||||
3. Make bundle in <project_folder>/Bundles
|
||||
4. Validate file was created in Bundles folder
|
||||
5. Make sure bundle now exists in cache
|
||||
"""
|
||||
# Set up helpers and variables
|
||||
helper = bundler_batch_helper
|
||||
|
||||
@@ -1131,6 +1209,8 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
addSeed=level_pak,
|
||||
assetListFile=helper["asset_info_file_request"],
|
||||
)
|
||||
|
||||
# Run Asset Processor GUI
|
||||
result, _ = asset_processor.gui_process()
|
||||
assert result, "AP GUI failed"
|
||||
|
||||
@@ -1155,6 +1235,12 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
# fmt:off
|
||||
def test_WindowsAndMac_FilesMarkedSkip_FilesAreSkipped(self, workspace, bundler_batch_helper):
|
||||
"""
|
||||
Test Steps:
|
||||
1. Create an asset list with a file marked as skip
|
||||
2. Verify file was created
|
||||
3. Verify that only the expected assets are present in the created asset list
|
||||
"""
|
||||
expected_assets = [
|
||||
"ui/canvases/lyshineexamples/animation/multiplesequences.uicanvas",
|
||||
"ui/textures/prefab/button_normal.sprite"
|
||||
@@ -1178,6 +1264,12 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
# fmt:off
|
||||
def test_WindowsAndMac_AssetListSkipOneOfTwoParents_SharedDependencyIsIncluded(self, workspace,
|
||||
bundler_batch_helper):
|
||||
"""
|
||||
Test Steps:
|
||||
1. Create Asset List with a parent asset that is skipped
|
||||
2. Verify that Asset List was created
|
||||
3. Verify that only the expected assets are present in the asset list
|
||||
"""
|
||||
expected_assets = [
|
||||
"testassets/bundlerskiptest_grandparent.dynamicslice",
|
||||
"testassets/bundlerskiptest_parenta.dynamicslice",
|
||||
@@ -1206,6 +1298,13 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
# fmt:off
|
||||
def test_WindowsAndMac_AssetLists_SkipRoot_ExcludesAll(self, workspace, bundler_batch_helper):
|
||||
"""
|
||||
Negative scenario test that skips the same file being used as the parent seed.
|
||||
|
||||
Test Steps:
|
||||
1. Create an asset list that skips the root asset
|
||||
2. Verify that asset list was not generated
|
||||
"""
|
||||
|
||||
result, _ = bundler_batch_helper.call_assetLists(
|
||||
assetListFile=bundler_batch_helper['asset_info_file_request'],
|
||||
@@ -1222,6 +1321,13 @@ class TestsAssetBundlerBatch_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
# fmt:off
|
||||
def test_WindowsAndMac_AssetLists_SkipUniversalWildcard_ExcludesAll(self, workspace, bundler_batch_helper):
|
||||
"""
|
||||
Negative scenario test that uses the all wildcard when generating an asset list.
|
||||
|
||||
Test Steps:
|
||||
1. Create an Asset List while using the universal all wildcard "*"
|
||||
2. Verify that asset list was not generated
|
||||
"""
|
||||
|
||||
result, _ = bundler_batch_helper.call_assetLists(
|
||||
assetListFile=bundler_batch_helper['asset_info_file_request'],
|
||||
|
||||
+17
@@ -67,7 +67,19 @@ class TestsAssetProcessorBatch_DependenycyTests(object):
|
||||
libs/materialeffects/surfacetypes.xml is listed as an entry engine_dependencies.xml
|
||||
libs/materialeffects/surfacetypes.xml is not listed as a missing dependency
|
||||
in the 'assetprocessorbatch' console output
|
||||
|
||||
Test Steps:
|
||||
1. Assets are pre-processed
|
||||
2. Verify that engine_dependencies.xml exists
|
||||
3. Verify engine_dependencies.xml has surfacetypes.xml present
|
||||
4. Run Missing Dependency scanner against the engine_dependenciese.xml
|
||||
5. Verify that Surfacetypes.xml is NOT in the missing depdencies output
|
||||
6. Add the schema file which allows our xml parser to understand dependencies for our engine_dependencies file
|
||||
7. Process assets
|
||||
8. Run Missing Dependency scanner against the engine_dependenciese.xml
|
||||
9. Verify that surfacetypes.xml is in the missing dependencies out
|
||||
"""
|
||||
|
||||
env = ap_setup_fixture
|
||||
BATCH_LOG_PATH = env["ap_batch_log_file"]
|
||||
asset_processor.create_temp_asset_root()
|
||||
@@ -137,6 +149,11 @@ class TestsAssetProcessorBatch_DependenycyTests(object):
|
||||
def test_WindowsMacPlatforms_BatchCheckSchema_ValidateErrorChecking(self, workspace, asset_processor,
|
||||
ap_setup_fixture, folder, schema):
|
||||
# fmt:on
|
||||
"""
|
||||
Test Steps:
|
||||
1. Run the Missing Dependency Scanner against everything
|
||||
2. Verify that there are no missing dependencies.
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
|
||||
def missing_dependency_log_lines(log) -> [str]:
|
||||
|
||||
+9
@@ -60,6 +60,15 @@ class TestsAssetProcessorBatch_DependenycyTests(object):
|
||||
Verify that Schemas can be loaded via Gems utilizing the fonts schema
|
||||
|
||||
:returns: None
|
||||
|
||||
Test Steps:
|
||||
1. Run Missing Dependency Scanner against %fonts%.xml when no fonts are present
|
||||
2. Verify fonts are scanned
|
||||
3. Verify that missing dependencies are found for fonts
|
||||
4. Add fonts to game project
|
||||
5. Run Missing Dependency Scanner against %fonts%.xml when fonts are present
|
||||
6. Verify that same amount of fonts are scanned
|
||||
7. Verify that there are no missing dependencies.
|
||||
"""
|
||||
schema_name = "Font.xmlschema"
|
||||
asset_processor.create_temp_asset_root()
|
||||
|
||||
+155
@@ -100,6 +100,14 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
@pytest.mark.BAT
|
||||
@pytest.mark.assetpipeline
|
||||
def test_RunAPBatch_TwoPlatforms_ExitCodeZero(self, asset_processor):
|
||||
"""
|
||||
Tests Process assets for PC & Mac and verifies that processing exited without error
|
||||
|
||||
Test Steps:
|
||||
1. Add Mac and PC as enabled platforms
|
||||
2. Process Assets
|
||||
3. Validate that AP exited cleanly
|
||||
"""
|
||||
asset_processor.create_temp_asset_root()
|
||||
asset_processor.enable_asset_processor_platform("pc")
|
||||
asset_processor.enable_asset_processor_platform("mac")
|
||||
@@ -111,6 +119,14 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id('C1571826')
|
||||
def test_RunAPBatch_OnlyIncludeInvalidAssets_NoAssetsAdded(self, asset_processor, ap_setup_fixture):
|
||||
"""
|
||||
Tests processing invalid assets and validating that no assets were moved to the cache
|
||||
|
||||
Test Steps:
|
||||
1. Create a test environment with invalid assets
|
||||
2. Run asset processor
|
||||
3. Validate that no assets were found in the cache
|
||||
"""
|
||||
asset_processor.prepare_test_environment(ap_setup_fixture["tests_dir"], "test_ProcessAssets_OnlyIncludeInvalidAssets_NoAssetsAdded")
|
||||
|
||||
result, _ = asset_processor.batch_process()
|
||||
@@ -127,6 +143,16 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
"recognized as failing in the logs. There appears to be a window where the AutoFailJob doesn't complete"
|
||||
"before the shutdown completes and the failure doesn't end up counting")
|
||||
def test_ProcessAssets_IncludeTwoAssetsWithSameProduct_FailingOnSecondAsset(self, asset_processor, ap_setup_fixture):
|
||||
"""
|
||||
Tests processing two source assets with the same product file and validates that the second source will error
|
||||
|
||||
Test Steps:
|
||||
1. Create a test environment that has two source files with the same product
|
||||
2. Run asset processor
|
||||
3. Validate that 1 asset failed to process
|
||||
4. Validate that only one product file with the expected name is found in the cache
|
||||
"""
|
||||
|
||||
asset_processor.prepare_test_environment(ap_setup_fixture["tests_dir"], "test_ProcessAssets_IncludeTwoAssetsWithSameProduct_FailingOnSecondAsset")
|
||||
result, output = asset_processor.batch_process(capture_output = True, expect_failure = True)
|
||||
|
||||
@@ -143,6 +169,17 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id('C1587615')
|
||||
def test_ProcessAndDeleteCache_APBatchShouldReprocess(self, asset_processor, ap_setup_fixture):
|
||||
"""
|
||||
Tests processing once, deleting the generated cache, then processing again and validates the cache is created
|
||||
|
||||
Test Steps:
|
||||
1. Run asset processor
|
||||
2. Compare the cache with expected output
|
||||
3. Delete Cache
|
||||
4. Compare the cache with expected output to verify that cache is gone
|
||||
5. Run asset processor with fastscan disabled
|
||||
6. Compare the cache with expected output
|
||||
"""
|
||||
# Deleting assets from Cache will make them re-processed in AP (after start)
|
||||
|
||||
# Copying test assets to project folder and deleting them from cache to make sure APBatch will process them
|
||||
@@ -174,6 +211,18 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id('C1591564')
|
||||
def test_ProcessAndChangeSource_APBatchShouldReprocess(self, asset_processor, ap_setup_fixture):
|
||||
"""
|
||||
Tests reprocessing of a modified asset and verifies that it was reprocessed
|
||||
|
||||
Test Steps:
|
||||
1. Prepare test environment and copy test asset over
|
||||
2. Run asset processor
|
||||
3. Verify asset processed
|
||||
4. Verify asset is in cache
|
||||
4. Modify asset
|
||||
5. Re-run asset processor
|
||||
6. Verify asset was processed
|
||||
"""
|
||||
# AP Batch Processing changed files (after start)
|
||||
|
||||
# Copying test assets to project folder and deleting them from cache to make sure APBatch will process them
|
||||
@@ -208,6 +257,18 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
@pytest.mark.BAT
|
||||
@pytest.mark.assetpipeline
|
||||
def test_ProcessByBothApAndBatch_Md5ShouldMatch(self, asset_processor, ap_setup_fixture):
|
||||
"""
|
||||
Tests that a cache generated by AP GUI is the same as AP Batch
|
||||
|
||||
Test Steps:
|
||||
1. Create test environment with test assets
|
||||
2. Call asset processor batch
|
||||
3. Get checksum for file cache
|
||||
4. Clean up test environment
|
||||
5. Call asset processor gui with quitonidle
|
||||
6. Get checksum for file cache
|
||||
7. Verify that checksums are equal
|
||||
"""
|
||||
# AP Batch and AP app processed assets MD5 sums should be the same
|
||||
|
||||
# Copying test assets to project folder and deleting them from cache to make sure APBatch will process them
|
||||
@@ -240,6 +301,16 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id('C1612446')
|
||||
def test_AddSameAssetsDifferentNames_ShouldProcess(self, asset_processor, ap_setup_fixture):
|
||||
"""
|
||||
Tests Asset Processing of duplicate assets with different names and verifies that both assets are processed
|
||||
|
||||
Test Steps:
|
||||
1. Create test environment with two identical source assets with different names
|
||||
2. Run asset processor
|
||||
3. Verify that assets didn't fail to process
|
||||
4. Verify the correct number of jobs were performed
|
||||
5. Verify that product files are in the cache
|
||||
"""
|
||||
# Feed two similar slices and texture with different names - should process without any issues
|
||||
|
||||
# Copying test assets to project folder and deleting them from cache to make sure APBatch will process them
|
||||
@@ -277,6 +348,19 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
"recognized as failing in the logs. There appears to be a window where the AutoFailJob doesn't complete"
|
||||
"before the shutdown completes and the failure doesn't end up counting")
|
||||
def test_AddTwoTexturesWithSameName_ShouldProcessAfterRename(self, asset_processor, ap_setup_fixture):
|
||||
"""
|
||||
Tests processing of two textures with the same name then verifies that AP will successfully process after
|
||||
renaming one of the textures
|
||||
|
||||
Test Steps:
|
||||
1. Create test environment with two textures that have the same name
|
||||
2. Launch Asset Processor
|
||||
3. Validate that Asset Processor generates an error
|
||||
4. Rename texture files
|
||||
5. Run asset processor
|
||||
6. Verify that asset processor does not error
|
||||
7. Verify that expected product files are in the cache
|
||||
"""
|
||||
# Feed two different textures with same name (but different extensions) - ap will fail
|
||||
# Rename one of textures and failure should go away
|
||||
|
||||
@@ -312,6 +396,15 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
@pytest.mark.BAT
|
||||
@pytest.mark.assetpipeline
|
||||
def test_InvalidServerAddress_Warning_Logs(self, asset_processor):
|
||||
"""
|
||||
Tests running Asset Processor with an invalid server address and verifies that AP returns a warning about
|
||||
an invalid server address
|
||||
|
||||
Test Steps:
|
||||
1. Launch asset processor while providing an invalid server address
|
||||
2. Verify asset processor does not fail
|
||||
3. Verify that asset processor generated a warning informing the user about an invalid server address
|
||||
"""
|
||||
|
||||
asset_processor.create_temp_asset_root()
|
||||
# Launching AP and making sure that the warning exists
|
||||
@@ -327,6 +420,12 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
def test_AllSupportedPlatforms_IncludeValidAssets_AssetsProcessed(self, asset_processor, ap_setup_fixture):
|
||||
"""
|
||||
AssetProcessorBatch is successfully processing newly added assets
|
||||
|
||||
Test Steps:
|
||||
1. Create a test environment with test assets
|
||||
2. Launch Asset Processor
|
||||
3. Verify that asset processor does not fail to process
|
||||
4. Verify assets are not missing from the cache
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
|
||||
@@ -350,6 +449,14 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
def test_AllSupportedPlatforms_DeletedAssets_DeletedFromCache(self, asset_processor, ap_setup_fixture):
|
||||
"""
|
||||
AssetProcessor successfully deletes cached items when removed from project
|
||||
|
||||
Test Steps:
|
||||
1. Create a test environment with test assets
|
||||
2. Run asset processor
|
||||
3. Verify expected assets are in the cache
|
||||
4. Delete test assets
|
||||
5. Run asset processor
|
||||
6. Verify expected assets are in the cache
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
|
||||
@@ -385,6 +492,10 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
"""
|
||||
Tests that when cache is deleted (no cache) and AssetProcessorBatch runs,
|
||||
it successfully starts and processes assets.
|
||||
|
||||
Test Steps:
|
||||
1. Run asset processor
|
||||
2. Verify asset processor exits cleanly
|
||||
"""
|
||||
asset_processor.create_temp_asset_root()
|
||||
|
||||
@@ -402,6 +513,14 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
# fmt:on
|
||||
"""
|
||||
AssetProcessor successfully recovers assets from cache when deleted.
|
||||
|
||||
Test Steps:
|
||||
1. Create test enviornment with test assets
|
||||
2. Run Asset Processor and verify it exits cleanly
|
||||
3. Make sure cache folder was generated
|
||||
4. Delete temp cache assets but leave database behind
|
||||
5. Run asset processor and verify it exits cleanly
|
||||
6. Verify expected files were generated in the cache
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
|
||||
@@ -434,6 +553,14 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
@pytest.mark.assetpipeline
|
||||
# fmt:off
|
||||
def test_AllSupportedPlatforms_RunFastScanOnEmptyCache_FullScanRuns(self, ap_setup_fixture, asset_processor):
|
||||
"""
|
||||
Tests fast scan processing on an empty cache and verifies that a full analyis will be peformed
|
||||
|
||||
Test Steps:
|
||||
1. Create a test environment
|
||||
2. Execute asset processor batch with fast scan enabled
|
||||
3. Verify that a full analysis is performed
|
||||
"""
|
||||
# fmt:on
|
||||
env = ap_setup_fixture
|
||||
asset_processor.create_temp_asset_root()
|
||||
@@ -455,6 +582,11 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
"""
|
||||
After running the APBatch and AP GUI, Logs directory should exist (C1564055),
|
||||
JobLogs, Batch log, and GUI log should exist in the logs directory (C1564056)
|
||||
|
||||
Test Steps:
|
||||
1. Run asset processor batch
|
||||
2. Run asset processor gui with quit on idle
|
||||
3. Verify that logs exist for both AP Batch & AP GUI
|
||||
"""
|
||||
asset_processor.create_temp_asset_root()
|
||||
LOG_PATH = {
|
||||
@@ -536,6 +668,11 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
"""
|
||||
Utilizing corrupted test assets, run the batch process to verify the
|
||||
AP logs the failure to process the corrupted file.
|
||||
|
||||
Test Steps:
|
||||
1. Create test environment with corrupted slice
|
||||
2. Launch Asset Processor
|
||||
3. Verify that asset processor fails to process corrupted slice
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
error_line_found = False
|
||||
@@ -552,6 +689,15 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
@pytest.mark.BAT
|
||||
@pytest.mark.assetpipeline
|
||||
def test_validateDirectPreloadDependency_Found(self, asset_processor, ap_setup_fixture, workspace):
|
||||
"""
|
||||
Tests processing an asset with a circular dependency and verifies that Asset Processor will return an error
|
||||
notifying the user about a circular dependency.
|
||||
|
||||
Test Steps:
|
||||
1. Create test environment with an asset that has a circular dependency
|
||||
2. Launch asset processor
|
||||
3. Verify that error is returned informing the user that the asset has a circular dependency
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
error_line_found = False
|
||||
|
||||
@@ -567,6 +713,15 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
@pytest.mark.BAT
|
||||
@pytest.mark.assetpipeline
|
||||
def test_validateNestedPreloadDependency_Found(self, asset_processor, ap_setup_fixture, workspace):
|
||||
"""
|
||||
Tests processing of a nested circular dependency and verifies that Asset Processor will return an error
|
||||
notifying the user about a circular depdency
|
||||
|
||||
Test Steps:
|
||||
1. Create test environment with an asset that has a nested circular dependency
|
||||
2. Launch asset processor
|
||||
3. Verify that error is returned informing the user that the asset has a circular dependency
|
||||
"""
|
||||
|
||||
env = ap_setup_fixture
|
||||
error_line_found = False
|
||||
|
||||
+33
-64
@@ -80,6 +80,15 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
# fmt:on
|
||||
"""
|
||||
Tests that fast scan mode can be used and is faster than full scan mode.
|
||||
|
||||
Test Steps:
|
||||
1. Ensure all assets are processed
|
||||
2. Run Asset Processor without fast scan and measure the time it takes to run
|
||||
3. Capture Full Analysis was performed and number of assets processed
|
||||
4. Run Asset Processor with full scan and measure the time it takes to run
|
||||
5. Capture Full Analysis wans't performed and number of assets processed
|
||||
6. Verify that fast scan was faster than full scan
|
||||
7. Verify that full scan scanned more assets
|
||||
"""
|
||||
|
||||
asset_processor.create_temp_asset_root()
|
||||
@@ -111,76 +120,23 @@ class TestsAssetProcessorBatch_AllPlatforms(object):
|
||||
assert full_scan_time > fast_scan_time, "Fast scan was slower that full scan"
|
||||
assert full_scan_analysis[0] > fast_scan_analysis[0], "Full scan did not process more assets than fast scan"
|
||||
|
||||
@pytest.mark.test_case_id("C18787404")
|
||||
@pytest.mark.BAT
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.skip(reason="External project is currently broken.") # LY-119863
|
||||
def test_AllSupportedPlatforms_ExternalProject_APRuns(self, workspace, ap_external_project_setup_fixture):
|
||||
|
||||
external_resources = ap_external_project_setup_fixture
|
||||
logger.info(f"Running external project test at path {external_resources['project_dir']}")
|
||||
# Delete existing "external project" build if it exists
|
||||
if os.path.exists(external_resources["project_dir"]):
|
||||
fs.delete([external_resources["project_dir"]], True, True)
|
||||
|
||||
# fmt:off
|
||||
assert not os.path.exists(external_resources["project_dir"]), \
|
||||
f'{external_resources["project_dir"]} was not deleted'
|
||||
# fmt:on
|
||||
|
||||
lmbr_cmd = [
|
||||
workspace.paths.lmbr(),
|
||||
"projects",
|
||||
"create",
|
||||
external_resources["project_name"],
|
||||
"--template",
|
||||
"EmptyTemplate",
|
||||
"--app-root",
|
||||
external_resources["project_dir"],
|
||||
]
|
||||
|
||||
logger.info(f"Running lmbr projects create command '{lmbr_cmd}'")
|
||||
|
||||
try:
|
||||
subprocess.check_call(lmbr_cmd)
|
||||
except subprocess.CalledProcessError as e:
|
||||
assert False, f"lmbr projects create failed\n{e.stderr}"
|
||||
|
||||
logger.info("...lmbr finished")
|
||||
assert os.path.exists(external_resources["project_dir"]), "Project folder was not created"
|
||||
|
||||
# AssetProcessor for new External project. Uses mock workspace to emulate external project workspace
|
||||
external_ap = AssetProcessor(external_resources["external_workspace"])
|
||||
|
||||
# fmt:off
|
||||
assert external_ap.batch_process(fastscan=False), \
|
||||
"Asset Processor Batch failed on external project"
|
||||
# fmt:on
|
||||
|
||||
# Parse log looking for errors or failures
|
||||
log = APLogParser(workspace.paths.ap_batch_log())
|
||||
failures, errors = log.runs[-1]["Failures"], log.runs[-1]["Errors"]
|
||||
assert failures == 0, f"There were {failures} asset processing failures"
|
||||
assert errors == 0, f"There were {errors} asset processing errors"
|
||||
|
||||
# Check that project cache was created (DNE until AP makes it)
|
||||
project_cache = os.path.join(external_resources["project_dir"], "Cache")
|
||||
assert os.path.exists(project_cache), f"{project_cache} was not created by AP"
|
||||
|
||||
# Clean up external project
|
||||
fs.delete([external_resources["project_dir"]], True, True)
|
||||
|
||||
# fmt:off
|
||||
assert not os.path.exists(external_resources["project_dir"]), \
|
||||
f"{external_resources['project_dir']} was not deleted"
|
||||
# fmt:on
|
||||
|
||||
@pytest.mark.test_case_id("C4874121")
|
||||
@pytest.mark.BAT
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.parametrize("clear_type", ["rewrite", "delete_asset", "delete_dir"])
|
||||
def test_AllSupportedPlatforms_DeleteBadAssets_BatchFailedJobsCleared(
|
||||
self, workspace, request, ap_setup_fixture, asset_processor, clear_type):
|
||||
"""
|
||||
Tests the ability of Asset Processor to recover from processing of bad assets by removing them from scan folder
|
||||
|
||||
Test Steps:
|
||||
1. Create testing environment with good and multiple bad assets
|
||||
2. Run Asset Processor
|
||||
3. Verify that bad assets fail to process
|
||||
4. Fix a bad asset & delete the others
|
||||
5. Run Asset Processor
|
||||
6. Verify Asset Processor does not have any asset failues
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
error_search_terms = ["WWWWWWWWWWWW"]
|
||||
|
||||
@@ -250,6 +206,14 @@ class TestsAssetProcessorBatch_Windows(object):
|
||||
Verify the AP batch and Gui can run and process assets independent of the Editor
|
||||
We do not want or need to kill running Editors here as they can be involved in other tests
|
||||
or simply being run locally in this branch or another
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Run asset processor GUI
|
||||
3. Verify AP GUI doesn't error
|
||||
4. Stop AP GUI
|
||||
5. Run Asset Processor Batch with Fast Scan
|
||||
5. Verify Asset Processor Batch exits cleanly
|
||||
"""
|
||||
|
||||
asset_processor.create_temp_asset_root()
|
||||
@@ -272,6 +236,11 @@ class TestsAssetProcessorBatch_Windows(object):
|
||||
"""
|
||||
Request a run for an invalid platform
|
||||
"AssetProcessor: Error: Platform in config file or command line 'notaplatform'" should be present in the logs
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Run Asset Processor with an invalid platform
|
||||
3. Check that asset processor returns an Error notifying the user that the invalid platform is not supported
|
||||
"""
|
||||
asset_processor.create_temp_asset_root()
|
||||
error_search_terms = 'AssetProcessor: Error: The list of enabled platforms in the settings registry does not contain platform ' \
|
||||
|
||||
+75
-4
@@ -77,6 +77,13 @@ class TestsAssetProcessorGUI_Windows(object):
|
||||
def test_SendInputOnControlChannel_ReceivedAndResponded(self, asset_processor):
|
||||
"""
|
||||
Test that the control channel connects and that communication works both directions
|
||||
|
||||
Test Steps:
|
||||
1. Start Asset Processor
|
||||
2. Send a Ping message to Asset Processor
|
||||
3. Listen for Asset Processor response
|
||||
4. Verify Asset Processor responds
|
||||
5. Stop asset Processor
|
||||
"""
|
||||
|
||||
asset_processor.create_temp_asset_root()
|
||||
@@ -129,7 +136,15 @@ class TestsAssetProcessorGUI_Windows(object):
|
||||
# fmt:on
|
||||
"""
|
||||
Asset Processor Deletes processed assets when source is removed from project folder (while running)
|
||||
|
||||
Test Steps:
|
||||
1. Create a temporary test environment
|
||||
2. Run Asset Processor GUI set to stay open on idle and verify that it does not fail
|
||||
3. Verify that assets were copied to the cache
|
||||
4. Delete the source test asset directory
|
||||
5. Verify assets are deleted from the cache
|
||||
"""
|
||||
|
||||
env = ap_setup_fixture
|
||||
|
||||
# Copy test assets to project folder and verify test assets folder exists
|
||||
@@ -170,7 +185,18 @@ class TestsAssetProcessorGUI_Windows(object):
|
||||
# fmt:on
|
||||
"""
|
||||
Processing changed files (while running)
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary test environment with test assets
|
||||
2. Open Asset Processor GUI with set to stay open after idle and verify it does not fail
|
||||
3. Verify contents of source asset for later comparison
|
||||
4. Verify contents of product asset for later comparison
|
||||
5. Modify contents of source asset
|
||||
6. Wait for Asset Processor to go back to idle state
|
||||
7. Verify contents of source asset are the modified version
|
||||
8. Verify contents of product asset are the modified version
|
||||
"""
|
||||
|
||||
env = ap_setup_fixture
|
||||
|
||||
# Copy test assets to project folder and verify test assets folder exists
|
||||
@@ -184,7 +210,7 @@ class TestsAssetProcessorGUI_Windows(object):
|
||||
result, _ = asset_processor.gui_process(quitonidle=False)
|
||||
assert result, "AP GUI failed"
|
||||
|
||||
# Verify contents of test asset in project folder before modication
|
||||
# Verify contents of test asset in project folder before modification
|
||||
with open(project_asset_path, "r") as project_asset_file:
|
||||
assert project_asset_file.read() == "before_state"
|
||||
|
||||
@@ -217,7 +243,14 @@ class TestsAssetProcessorGUI_Windows(object):
|
||||
def test_WindowsPlatforms_RunAP_ProcessesIdle(self, asset_processor):
|
||||
"""
|
||||
Asset Processor goes idle
|
||||
|
||||
Test Steps:
|
||||
1. Create a temporary testing evnironment
|
||||
2. Run Asset Processor GUI without quitonidle
|
||||
3. Verify AP Goes Idle
|
||||
4. Verify AP goes below 1% CPU usage
|
||||
"""
|
||||
|
||||
CPU_USAGE_THRESHOLD = 1.0 # CPU usage percentage delimiting idle from active
|
||||
CPU_USAGE_WIND_DOWN = 10 # Time allowed in seconds for idle processes to stop using CPU
|
||||
|
||||
@@ -245,7 +278,16 @@ class TestsAssetProcessorGUI_Windows(object):
|
||||
):
|
||||
"""
|
||||
Processing newly added files to project folder (while running)
|
||||
|
||||
Test Steps:
|
||||
1. Create a temporary testing environment with test assets
|
||||
2. Create a secondary set of testing assets that have not been copied into the the testing environment
|
||||
3. Start Asset Processor without quitonidle
|
||||
4. While Asset Processor is running add secondary set of testing assets to the testing environment
|
||||
5. Wait for Asset Processor to go idle
|
||||
6. Verify that all assets are in the cache
|
||||
"""
|
||||
|
||||
env = ap_setup_fixture
|
||||
level_name = "C1564064_level"
|
||||
new_asset = "C1564064.scriptcanvas"
|
||||
@@ -316,7 +358,14 @@ class TestsAssetProcessorGUI_Windows(object):
|
||||
def test_WindowsPlatforms_LaunchAP_LogReportsIdle(self, asset_processor, workspace, ap_idle):
|
||||
"""
|
||||
Asset Processor creates a log entry when it goes idle
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Run Asset Processor batch to pre-process assets
|
||||
3. Run Asset Processor GUI
|
||||
4. Check if Asset Processor GUI reports that it has gone idle
|
||||
"""
|
||||
|
||||
asset_processor.create_temp_asset_root()
|
||||
# Run batch process to ensure project assets are processed
|
||||
assert asset_processor.batch_process(), "AP Batch failed"
|
||||
@@ -331,6 +380,17 @@ class TestsAssetProcessorGUI_Windows(object):
|
||||
|
||||
@pytest.mark.assetpipeline
|
||||
def test_APStopTimesOut_ExceptionThrown(self, ap_setup_fixture, asset_processor):
|
||||
"""
|
||||
Tests whether or not Asset Processor will Time Out
|
||||
|
||||
Test Steps:
|
||||
1. Create a temporary testing environment
|
||||
2. Start the Asset Processor
|
||||
3. Copy in assets to the test environment
|
||||
4. Try to stop the Asset Processor with a timeout of 1 second (This cannot be done manually).
|
||||
5. Verify that Asset Processor times out and returns the expected error
|
||||
"""
|
||||
|
||||
asset_processor.create_temp_asset_root()
|
||||
asset_processor.start()
|
||||
|
||||
@@ -347,9 +407,20 @@ class TestsAssetProcessorGUI_Windows(object):
|
||||
|
||||
@pytest.mark.assetpipeline
|
||||
def test_APStopDefaultTimeout_NoException(self, asset_processor):
|
||||
# If this test fails, it means other tests using the default timeout may have issues.
|
||||
# In that case, either the default timeout should either be raised, or the performance
|
||||
# of AP launching should be improved.
|
||||
"""
|
||||
Tests the default timeout of the Asset Processor
|
||||
|
||||
If this test fails, it means other tests using the default timeout may have issues.
|
||||
In that case, either the default timeout should either be raised, or the performance
|
||||
of AP launching should be improved.
|
||||
|
||||
Test Steps:
|
||||
1. Create a temporary testing environment
|
||||
2. Start the Asset Processor
|
||||
3. Stop the asset Processor without sending a timeout to it
|
||||
4. Verify that the asset processor times out and returns the expected error
|
||||
"""
|
||||
|
||||
asset_processor.create_temp_asset_root()
|
||||
asset_processor.start()
|
||||
ap_quit_timed_out = False
|
||||
|
||||
+47
-1
@@ -75,10 +75,17 @@ class TestsAssetProcessorGUI_WindowsAndMac(object):
|
||||
@pytest.mark.test_case_id("C3540434")
|
||||
@pytest.mark.BAT
|
||||
@pytest.mark.assetpipeline
|
||||
def test_WindowsAndMacPlatforms_AP_GUI_FastScanSettingCreated(self, asset_processor, fast_scan_backup):
|
||||
def test_WindowsAndMacPlatforms_GUIFastScanNoSettingSet_FastScanSettingCreated(self, asset_processor, fast_scan_backup):
|
||||
"""
|
||||
Tests that a fast scan settings entry gets created for the AP if it does not exist
|
||||
and ensures that the entry is defaulted to fast-scan enabled
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Delete existing fast scan setting if exists
|
||||
3. Run Asset Processor GUI without setting FastScan setting (default:true) and without quitonidle
|
||||
4. Wait and check to see if Windows Registry fast scan setting is created
|
||||
5. Verify that Fast Scan setting is set to true
|
||||
"""
|
||||
|
||||
asset_processor.create_temp_asset_root()
|
||||
@@ -119,6 +126,14 @@ class TestsAssetProcessorGUI_WindowsAndMac(object):
|
||||
Make sure game launcher working with Asset Processor set to turbo mode
|
||||
Validate that no fatal errors (crashes) are reported within a certain
|
||||
time frame for the AP and the GameLauncher
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Set fast scan to true
|
||||
3. Verify fast scan is set to true
|
||||
4. Launch game launcher
|
||||
5. Verify launcher has launched without error
|
||||
6. Verify that asset processor has launched
|
||||
"""
|
||||
CHECK_ALIVE_SECONDS = 15
|
||||
|
||||
@@ -166,6 +181,14 @@ class TestsAssetProcessorGUI_AllPlatforms(object):
|
||||
# fmt:on
|
||||
"""
|
||||
Deleting slices and uicanvases while AP is running
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment with test assets
|
||||
2. Launch Asset Processor and wait for it to go idle
|
||||
3. Verify product assets were created in the cache
|
||||
4. Delete test assets from the cache
|
||||
5. Wait for Asset Processor to go idle
|
||||
6. Verify product assets were regenerated in the cache
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
|
||||
@@ -201,6 +224,15 @@ class TestsAssetProcessorGUI_AllPlatforms(object):
|
||||
):
|
||||
"""
|
||||
Process slice files and uicanvas files from the additional scanfolder
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Run asset processor batch
|
||||
3. Validate that product assets were generated in the cache
|
||||
4. Create an additional scan folder with assets
|
||||
5. Create additional scan folder params to pass to Asset Processor
|
||||
6. Run Asset Processor GUI with QuitOnIdle and pass in params for the additional scan folder settings
|
||||
7. Verify additional product assets from additional scan folder are present in the cache
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
# Copy test assets to new folder in dev folder
|
||||
@@ -250,6 +282,12 @@ class TestsAssetProcessorGUI_AllPlatforms(object):
|
||||
"""
|
||||
Launch AP with invalid address in bootstrap.cfg
|
||||
Assets should process regardless of the new address
|
||||
|
||||
Test Steps:
|
||||
1. Create a temporary testing environment
|
||||
2. Set an invalid ip address in Asset Processor settings file
|
||||
3. Launch Asset Processor GUI
|
||||
4. Verify that it processes assets and exits cleanly even though it has an invalid IP.
|
||||
"""
|
||||
test_ip_address = "1.1.1.1" # an IP address without Asset Processor
|
||||
|
||||
@@ -269,6 +307,14 @@ class TestsAssetProcessorGUI_AllPlatforms(object):
|
||||
def test_AllSupportedPlatforms_ModifyAssetInfo_AssetsReprocessed(self, ap_setup_fixture, asset_processor):
|
||||
"""
|
||||
Modifying assetinfo files triggers file reprocessing
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment with test assets
|
||||
2. Run Asset Processor GUI
|
||||
3. Verify that Asset Processor exited cleanly and product assets are in the cache
|
||||
4. Modify the .assetinfo file by adding a newline
|
||||
5. Wait for Asset Processor to go idle
|
||||
6. Verify that product files were regenerated (Time Stamp compare)
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
|
||||
|
||||
+89
-3
@@ -85,6 +85,18 @@ class TestsAssetRelocator_WindowsAndMac(object):
|
||||
def test_WindowsMacPlatforms_RelocatorMoveFileWithConfirm_MoveSuccess(self, request, workspace, asset_processor,
|
||||
ap_setup_fixture, testId, readonly, confirm,
|
||||
success):
|
||||
"""
|
||||
Tests whether tests with Move File Confirm are successful
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Set move location
|
||||
3. Determine if confirm flag is set
|
||||
4. Attempt to move the files
|
||||
5. If confirm flag set:
|
||||
* Validate Move was successful
|
||||
* Else: Validate move was not successful
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
copied_asset = ''
|
||||
|
||||
@@ -141,6 +153,11 @@ class TestsAssetRelocator_WindowsAndMac(object):
|
||||
User should be warned that LeaveEmptyFolders needs to be used with the move or delete command
|
||||
|
||||
:return: None
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Attempt to move with --LeaveEmptyFolders set
|
||||
3. Verify user is given a message that command requires to be used with --move or --delete
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
expected_message = "Command --leaveEmptyFolders must be used with command --move or --delete"
|
||||
@@ -162,6 +179,11 @@ class TestsAssetRelocator_WindowsAndMac(object):
|
||||
Asset with UUID/AssetId reference in non-standard format is
|
||||
successfully scanned and relocated to the MoveOutput folder.
|
||||
This test uses a pre-corrupted .slice file.
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment with a corrupted slice
|
||||
2. Attempt to move the corrupted slice
|
||||
3. Verify that corrupted slice was moved successfully
|
||||
"""
|
||||
|
||||
env = ap_setup_fixture
|
||||
@@ -194,6 +216,11 @@ class TestsAssetRelocator_WindowsAndMac(object):
|
||||
def test_WindowsMacPlatforms_UpdateReferences_MoveCommandMessage(self, ap_setup_fixture, asset_processor):
|
||||
"""
|
||||
UpdateReferences without move or delete
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Attempt to move with UpdateReferences but without move or delete flags
|
||||
3. Verify that message is returned to the user that additional flags are required
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
expected_message = "Command --updateReferences must be used with command --move"
|
||||
@@ -215,6 +242,11 @@ class TestsAssetRelocator_WindowsAndMac(object):
|
||||
"""
|
||||
When running the relocator command --AllowBrokenDependencies without the move or delete flags, the user should
|
||||
be warned that the flags are necessary for the functionality to be used
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Attempt to move with AllowBrokenDependencies without the move or delete flag
|
||||
3. Verify that message is returned to the user that additional flags are required
|
||||
"""
|
||||
|
||||
env = ap_setup_fixture
|
||||
@@ -302,10 +334,19 @@ class TestsAssetRelocator_WindowsAndMac(object):
|
||||
project
|
||||
):
|
||||
"""
|
||||
Dynamic data test for deleting a file with Asset Relocator:
|
||||
|
||||
C21968355 Delete a file with confirm
|
||||
C21968356 Delete a file without confirm
|
||||
C21968359 Delete a file that is marked as ReadOnly
|
||||
C21968360 Delete a file that is not marked as ReadOnly
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Set the read-only status of the file based on the test case
|
||||
3. Run asset relocator with --delete and the confirm status based on the test case
|
||||
4. Assert file existence or nonexistence based on the test case
|
||||
5. Validate the relocation report based on expected and unexpected messages
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
test_file = "testFile.txt"
|
||||
@@ -430,6 +471,15 @@ class TestsAssetRelocator_WindowsAndMac(object):
|
||||
Test the LeaveEmptyFolders flag in various configurations
|
||||
|
||||
:returns: None
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Build the various move/delete commands here based on test data
|
||||
3. Run the move command with the various triggers based on test data
|
||||
4. Verify the original assets folder still exists based on test data
|
||||
5. Verify the files successfully moved to new location based on test data
|
||||
6. Verify that the files were removed from original location based on test data
|
||||
7. Verify the files have not been deleted or moved from original location based on test data
|
||||
"""
|
||||
# # Start test setup # #
|
||||
env = ap_setup_fixture
|
||||
@@ -517,6 +567,12 @@ class TestsAssetRelocator_WindowsAndMac(object):
|
||||
"""
|
||||
The test will attempt to move test assets that are not tracked under P4 source control using the EnableSCM flag
|
||||
Because the files are not tracked by source control, the relocation should fail
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Set ReadOnly or Not-ReadOnly for the test files based on test data
|
||||
3. Generate and run the enableSCM command
|
||||
4. Verify the move failed and expected messages are present
|
||||
"""
|
||||
# Move the test assets into the project folder
|
||||
env = ap_setup_fixture
|
||||
@@ -1037,6 +1093,13 @@ class TestsAssetRelocator_WindowsAndMac(object):
|
||||
C21968370 AllowBrokenDependencies with move and confirm
|
||||
C21968371 AllowBrokenDependencies with move and without confirm
|
||||
C21968375 AllowBrokenDependencies with delete
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Run Asset Processor to Process Assets
|
||||
3. Build primary AP Batch parameter value and destination paths
|
||||
4. Validate resulting file paths in source and output directories
|
||||
5. Validate the log based on expected and unexpected messages
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
all_test_asset_rel_paths = [
|
||||
@@ -1254,6 +1317,18 @@ class TestsAssetRelocator_WindowsAndMac(object):
|
||||
@pytest.mark.parametrize("test", tests)
|
||||
def test_WindowsAndMac_MoveMetadataFiles_PathExistenceAndMessage(self, workspace, request, ap_setup_fixture,
|
||||
asset_processor, test):
|
||||
"""
|
||||
Tests whether moving metadata files can be moved
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Determine if using wildcards on paths or not
|
||||
3. Determine if excludeMetaDataFiles is set or not
|
||||
4. Build primary AP Batch parameter value and destination paths
|
||||
5. Build and run the AP Batch command with parameters
|
||||
6. Validate resulting file paths in source and output directories
|
||||
7. Validate the log based on expected and unexpected messages
|
||||
"""
|
||||
env = ap_setup_fixture
|
||||
|
||||
def teardown():
|
||||
@@ -1342,7 +1417,7 @@ class TestsAssetRelocator_WindowsAndMac(object):
|
||||
|
||||
@dataclass
|
||||
class MoveTest:
|
||||
description: str # test case title directly copied from Testrail
|
||||
description: str # test case title
|
||||
asset_folder: str # which folder in ./assets will be used for this test
|
||||
encoded_command: str # the command to execute
|
||||
encoded_output_dir: str # the destination directory to validate
|
||||
@@ -1350,7 +1425,7 @@ class MoveTest:
|
||||
name_change_map: dict = None
|
||||
files_that_stay: List[str] = field(default_factory=lambda: [])
|
||||
output_messages: List[str] = field(default_factory=lambda: [])
|
||||
step: str = None # the step of the test from Testrail
|
||||
step: str = None # the step of the test from test repository
|
||||
prefix_commands: List[str] = field(default_factory=lambda: ["AssetProcessorBatch", "--zeroAnalysisMode"])
|
||||
suffix_commands: List[str] = field(default_factory=lambda: ["--confirm"])
|
||||
env: dict = field(init=False, default=None) # inject the ap_setup_fixture at runtime
|
||||
@@ -3718,7 +3793,18 @@ class TestsAssetProcessorMove_WindowsAndMac:
|
||||
# -k C19462747
|
||||
|
||||
@pytest.mark.parametrize("test", move_a_file_tests + move_a_folder_tests)
|
||||
def test_WindowsMacPlatforms_MoveCommand(self, asset_processor, ap_setup_fixture, test: MoveTest, project):
|
||||
def test_WindowsMacPlatforms_MoveCommand_CommandResult(self, asset_processor, ap_setup_fixture, test: MoveTest, project):
|
||||
"""
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment based on test data
|
||||
2. Validate that temporary testing environment was created successfully
|
||||
3. Execute the move command based upon the test data
|
||||
4. Validate that files are where they're expected according to the test data
|
||||
5. Validate unexpected files are not found according to the test data
|
||||
6. Validate output messages according to the test data
|
||||
7. Validate move status according to the test data
|
||||
"""
|
||||
|
||||
source_folder, _ = asset_processor.prepare_test_environment(ap_setup_fixture["tests_dir"], test.asset_folder)
|
||||
test.map_env(ap_setup_fixture, source_folder)
|
||||
|
||||
+129
-13
@@ -75,6 +75,15 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
def do_missing_dependency_test(self, source_product, expected_dependencies,
|
||||
dsp_param,
|
||||
platforms=None, max_iterations=0):
|
||||
"""
|
||||
Test Steps:
|
||||
1. Determine what platforms to run against
|
||||
2. Process assets for that platform
|
||||
3. Determine the missing dependency params to set
|
||||
4. Set the max iteration param
|
||||
5. Run missing dependency scanner against target platforms and search params based on test data
|
||||
6. Validate missing dependencies against test data
|
||||
"""
|
||||
|
||||
platforms = platforms or ASSET_PROCESSOR_PLATFORM_MAP[self._workspace.asset_processor_platform]
|
||||
if not isinstance(platforms, list):
|
||||
@@ -104,7 +113,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id("C17226567")
|
||||
def test_WindowsAndMac_ValidUUIDNotDependency_ReportsMissingDependency(self):
|
||||
"""Tests that a valid UUID referenced in a file will report any missing dependencies"""
|
||||
"""
|
||||
Tests that a valid UUID referenced in a file will report any missing dependencies
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
# Relative path to the txt file with missing dependencies
|
||||
expected_product = f"testassets\\validuuidsnotdependency.txt"
|
||||
@@ -141,7 +157,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id("C17226567")
|
||||
def test_WindowsAndMac_InvalidUUIDsNotDependencies_NoReportedMessage(self):
|
||||
"""Tests that invalid UUIDs do not count as missing dependencies"""
|
||||
"""
|
||||
Tests that invalid UUIDs do not count as missing dependencies
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
# Relative path to the txt file with invalid UUIDs
|
||||
expected_product = f"testassets\\invaliduuidnoreport.txt"
|
||||
expected_dependencies = [] # No expected missing dependencies
|
||||
@@ -153,7 +176,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id("C17226567")
|
||||
def test_WindowsAndMac_ValidAssetIdsNotDependencies_ReportsMissingDependency(self):
|
||||
"""Tests that valid asset IDs but not dependencies, show missing dependencies"""
|
||||
"""
|
||||
Tests that valid asset IDs but not dependencies, show missing dependencies
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
# Relative path to the txt file with valid asset ids but not dependencies
|
||||
expected_product = f"testassets\\validassetidnotdependency.txt"
|
||||
@@ -173,7 +203,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id("C17226567")
|
||||
def test_WindowsAndMac_InvalidAssetsIDNotDependencies_NoReportedMessage(self):
|
||||
"""Tests that invalid asset IDs do not count as missing dependencies"""
|
||||
"""
|
||||
Tests that invalid asset IDs do not count as missing dependencies
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
# Relative path to the txt file with invalid asset IDs
|
||||
expected_product = f"testassets\\invalidassetidnoreport.txt"
|
||||
@@ -188,7 +225,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
# fmt:off
|
||||
def test_WindowsAndMac_ValidSourcePathsNotDependencies_ReportsMissingDependencies(self):
|
||||
# fmt:on
|
||||
"""Tests that valid source paths can translate to missing dependencies"""
|
||||
"""
|
||||
Tests that valid source paths can translate to missing dependencies
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
# Relative path to the txt file with missing dependencies as source paths
|
||||
expected_product = f"testassets\\relativesourcepathsnotdependencies.txt"
|
||||
@@ -212,7 +256,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id("C17226567")
|
||||
def test_WindowsAndMac_InvalidARelativePathsNotDependencies_NoReportedMessage(self):
|
||||
"""Tests that invalid relative paths do not resolve to missing dependencies"""
|
||||
"""
|
||||
Tests that invalid relative paths do not resolve to missing dependencies
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
# Relative path to the txt file with invalid relative paths
|
||||
expected_product = f"testassets\\invalidrelativepathsnoreport.txt"
|
||||
@@ -227,7 +278,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
# fmt:off
|
||||
def test_WindowsAndMac_ValidProductPathsNotDependencies_ReportsMissingDependencies(self):
|
||||
# fmt:on
|
||||
"""Tests that valid product paths can resolve to missing dependencies"""
|
||||
"""
|
||||
Tests that valid product paths can resolve to missing dependencies
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
self._asset_processor.add_source_folder_assets(f"Gems\\LyShineExamples\\Assets\\UI\\Fonts\\LyShineExamples")
|
||||
self._asset_processor.add_scan_folder(f"Gems\\LyShineExamples\\Assets")
|
||||
@@ -260,7 +318,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id("C17226567")
|
||||
def test_WindowsAndMac_WildcardScan_FindsAllExpectedFiles(self):
|
||||
"""Tests that the wildcard scanning will pick up multiple files"""
|
||||
"""
|
||||
Tests that the wildcard scanning will pick up multiple files
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
helper = self._missing_dep_helper
|
||||
|
||||
@@ -291,6 +356,11 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
For these references that are valid, all but one have available, matching dependencies. This test is
|
||||
primarily meant to verify that the missing dependency reporter checks the product dependency table before
|
||||
emitting missing dependencies.
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
# Relative path to target test file
|
||||
expected_product = f"testassets\\reportonemissingdependency.txt"
|
||||
@@ -305,7 +375,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id("C17226567")
|
||||
def test_WindowsAndMac_ReferencesSelfPath_NoReportedMessage(self):
|
||||
"""Tests that a file that references itself via relative path does not report itself as a missing dependency"""
|
||||
"""
|
||||
Tests that a file that references itself via relative path does not report itself as a missing dependency
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
# Relative path to file that references itself via relative path
|
||||
expected_product = f"testassets\\selfreferencepath.txt"
|
||||
expected_dependencies = []
|
||||
@@ -317,7 +394,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id("C17226567")
|
||||
def test_WindowsAndMac_ReferencesSelfUUID_NoReportedMessage(self):
|
||||
"""Tests that a file that references itself via its UUID does not report itself as a missing dependency"""
|
||||
"""
|
||||
Tests that a file that references itself via its UUID does not report itself as a missing dependency
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
# Relative path to file that references itself via its UUID
|
||||
expected_product = f"testassets\\selfreferenceuuid.txt"
|
||||
@@ -330,7 +414,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
@pytest.mark.assetpipeline
|
||||
@pytest.mark.test_case_id("C17226567")
|
||||
def test_WindowsAndMac_ReferencesSelfAssetID_NoReportedMessage(self):
|
||||
"""Tests that a file that references itself via its Asset ID does not report itself as a missing dependency"""
|
||||
"""
|
||||
Tests that a file that references itself via its Asset ID does not report itself as a missing dependency
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
# Relative path to file that references itself via its Asset ID
|
||||
expected_product = f"testassets\\selfreferenceassetid.txt"
|
||||
@@ -347,6 +438,11 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
Tests that the scan limit fails to find a missing dependency that is out of reach.
|
||||
The max iteration count is set to just under where a valid missing dependency is on a line in the file,
|
||||
so this will not report any missing dependencies.
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
# Relative path to file that has a missing dependency at 31 iterations deep
|
||||
@@ -364,7 +460,13 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
Tests that the scan limit succeeds in finding a missing dependency that is barely in reach.
|
||||
In the previous test, the scanner was set to stop recursion just before a missing dependency was found.
|
||||
This test runs with the recursion limit set deep enough to actually find the missing dependency.
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
# Relative path to file that has a missing dependency at 31 iterations deep
|
||||
expected_product = f"testassets\\maxiteration31deep.txt"
|
||||
|
||||
@@ -383,7 +485,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
# fmt:off
|
||||
def test_WindowsAndMac_PotentialMatchesLongerThanUUIDString_OnlyReportsCorrectLengthUUIDs(self):
|
||||
# fmt:on
|
||||
"""Tests that dependency references that are longer than expected are ignored"""
|
||||
"""
|
||||
Tests that dependency references that are longer than expected are ignored
|
||||
|
||||
Test Steps:
|
||||
1. Set the expected product
|
||||
2. Set the expected missing dependencies
|
||||
3. Execute test
|
||||
"""
|
||||
|
||||
# Relative path to text file with varying length UUID references
|
||||
expected_product = f"testassets\\onlymatchescorrectlengthuuids.txt"
|
||||
@@ -408,7 +517,14 @@ class TestsMissingDependencies_WindowsAndMac(object):
|
||||
def test_WindowsAndMac_MissingDependencyScanner_GradImageSuccess(
|
||||
self, ap_setup_fixture
|
||||
):
|
||||
"""Tests the Missing Dependency Scanner can scan gradimage files"""
|
||||
"""
|
||||
Tests the Missing Dependency Scanner can scan gradimage files
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary testing environment
|
||||
2. Run the move dependency scanner against the gradimage
|
||||
2. Validate that the expected product files and and expected depdencies match
|
||||
"""
|
||||
|
||||
env = ap_setup_fixture
|
||||
helper = self._missing_dep_helper
|
||||
|
||||
+10
@@ -51,6 +51,11 @@ class TestAuxiliaryContent:
|
||||
def test_CreateAuxiliaryContent_DontSkipLevelPaks(self, workspace, level):
|
||||
"""
|
||||
This test ensure that Auxiliary Content contain level.pak files
|
||||
|
||||
Test Steps:
|
||||
1. Run auxiliary content against project under test
|
||||
2. Validate auxiliary content exists
|
||||
3. Verifies that level.pak exists
|
||||
"""
|
||||
|
||||
path_to_dev = workspace.paths.engine_root()
|
||||
@@ -70,6 +75,11 @@ class TestAuxiliaryContent:
|
||||
def test_CreateAuxiliaryContent_SkipLevelPaks(self, workspace, level):
|
||||
"""
|
||||
This test ensure that Auxiliary Content contain no level.pak file
|
||||
|
||||
Test Steps:
|
||||
1. Run auxiliary content against project under test with skiplevelPaks flag
|
||||
2. Validate auxiliary content exists
|
||||
3. Validate level.pak was added to auxiliary content
|
||||
"""
|
||||
|
||||
path_to_dev = workspace.paths.engine_root()
|
||||
|
||||
@@ -533,6 +533,14 @@ class TestsFBX_AllPlatforms(object):
|
||||
def test_FBXBlackboxTest_SourceFiles_Processed_ResultInExpectedProducts(self, workspace,
|
||||
ap_setup_fixture, asset_processor, project,
|
||||
blackbox_param):
|
||||
"""
|
||||
Please see run_fbx_test(...) for details
|
||||
|
||||
Test Steps:
|
||||
1. Determine if blackbox is set to none
|
||||
2. Run FBX Test
|
||||
"""
|
||||
|
||||
if blackbox_param == None:
|
||||
return
|
||||
self.run_fbx_test(workspace, ap_setup_fixture,
|
||||
@@ -544,6 +552,15 @@ class TestsFBX_AllPlatforms(object):
|
||||
workspace, ap_setup_fixture,
|
||||
asset_processor, project,
|
||||
blackbox_param):
|
||||
"""
|
||||
Please see run_fbx_test(...) for details
|
||||
|
||||
Test Steps:
|
||||
1. Determine if blackbox is set to none
|
||||
2. Run FBX Test
|
||||
2. Re-run FBX test and validate the information in override assets
|
||||
"""
|
||||
|
||||
if blackbox_param == None:
|
||||
return
|
||||
self.run_fbx_test(workspace, ap_setup_fixture,
|
||||
@@ -567,6 +584,19 @@ class TestsFBX_AllPlatforms(object):
|
||||
|
||||
def run_fbx_test(self, workspace, ap_setup_fixture, asset_processor,
|
||||
project, blackbox_params: BlackboxAssetTest, overrideAsset = False):
|
||||
"""
|
||||
These tests work by having the test case ingest the test data and determine the run pattern.
|
||||
Tests will process scene settings files and will additionally do a verification against a provided debug file
|
||||
Additionally, if an override is passed, the output is checked against the override.
|
||||
|
||||
Test Steps:
|
||||
1. Create temporary test environment
|
||||
2. Process Assets
|
||||
3. Determine what assets to validate based upon test data
|
||||
4. Validate assets were created in cache
|
||||
5. If debug file provided, verify scene files were generated correctly
|
||||
6. Verify that each given source asset resulted in the expected jobs and products
|
||||
"""
|
||||
|
||||
test_assets_folder = blackbox_params.override_asset_folder if overrideAsset else blackbox_params.asset_folder
|
||||
logger.info(f"{blackbox_params.test_name}: Processing assets in folder '"
|
||||
|
||||
+172
-37
@@ -26,6 +26,18 @@ def soundbank_metadata_generator_setup_fixture(workspace):
|
||||
|
||||
|
||||
def success_case_test(test_folder, expected_dependencies_dict, bank_info, expected_result_code=0):
|
||||
"""
|
||||
Test Steps:
|
||||
1. Make sure the return code is what was expected, and that the expected number of banks were returned.
|
||||
2. Validate bank is in the expected dependencies dictionary.
|
||||
3. Validate the path to output the metadata file to was assembled correctly.
|
||||
4. Validate metadata object for this bank is set, and that it has an object assigned to its dependencies field
|
||||
and its includedEvents field
|
||||
5. Validate metadata object has the correct number of dependencies, and validated that every expected dependency
|
||||
exists in the dependencies list of the metadata object.
|
||||
6. Validate metadata object has the correct number of events, and validate that every expected event exists in the
|
||||
events of the metadata object.
|
||||
"""
|
||||
expected_bank_count = len(expected_dependencies_dict)
|
||||
|
||||
banks, result_code = bank_info.generate_metadata(
|
||||
@@ -80,8 +92,17 @@ class TestSoundBankMetadataGenerator:
|
||||
|
||||
|
||||
def test_NoMetadataTooFewBanks_ReturnCodeIsError(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# Trying to generate metadata for banks in a folder with one or fewer banks and no metadata is not possible
|
||||
# and should fail.
|
||||
"""
|
||||
Trying to generate metadata for banks in a folder with one or fewer banks and no metadata is not possible
|
||||
and should fail.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment with only 1 bank file
|
||||
2. Get Sound Bank Info
|
||||
3. Attempt to generate sound bank metadata
|
||||
4. Verify that proper error code is returned
|
||||
"""
|
||||
#
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_NoMetadataTooFewBanks_ReturnCodeIsError')
|
||||
if not os.path.isdir(test_assets_folder):
|
||||
@@ -97,15 +118,30 @@ class TestSoundBankMetadataGenerator:
|
||||
assert error_code is 2, 'Metadata was generated when there were fewer than two banks in the target directory.'
|
||||
|
||||
def test_NoMetadataNoContentBank_NoMetadataGenerated(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
"""
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. No expected dependencies
|
||||
3. Call success case test
|
||||
"""
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_NoMetadataNoContentBank_NoMetadataGenerated')
|
||||
expected_dependencies = dict()
|
||||
success_case_test(test_assets_folder, expected_dependencies, get_bank_info(workspace))
|
||||
|
||||
def test_NoMetadataOneContentBank_NoStreamedFiles_OneDependency(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# When no Wwise metadata is present, and there is only one content bank in the target directory with no wem
|
||||
# files, then only the content bank should have metadata associated with it. The generated metadata should
|
||||
# only describe a dependency on the init bank.
|
||||
"""
|
||||
When no Wwise metadata is present, and there is only one content bank in the target directory with no wem
|
||||
files, then only the content bank should have metadata associated with it. The generated metadata should
|
||||
only describe a dependency on the init bank.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_NoMetadataOneContentBank_NoStreamedFiles_OneDependency')
|
||||
|
||||
@@ -116,9 +152,18 @@ class TestSoundBankMetadataGenerator:
|
||||
|
||||
def test_NoMetadataOneContentBank_StreamedFiles_MultipleDependencies(self, workspace,
|
||||
soundbank_metadata_generator_setup_fixture):
|
||||
# When no Wwise metadata is present, and there is only one content bank in the target directory with wem files
|
||||
# present, then only the content bank should have metadata associated with it. The generated metadata should
|
||||
# describe a dependency on the init bank and all wem files in the folder.
|
||||
"""
|
||||
When no Wwise metadata is present, and there is only one content bank in the target directory with wem files
|
||||
present, then only the content bank should have metadata associated with it. The generated metadata should
|
||||
describe a dependency on the init bank and all wem files in the folder.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_NoMetadataOneContentBank_StreamedFiles_MultipleDependencies')
|
||||
|
||||
@@ -136,10 +181,19 @@ class TestSoundBankMetadataGenerator:
|
||||
success_case_test(test_assets_folder, expected_dependencies, get_bank_info(workspace))
|
||||
|
||||
def test_NoMetadataMultipleBanks_OneDependency_ReturnCodeIsWarning(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# When no Wwise metadata is present, and there are multiple content banks in the target directory with wem files
|
||||
# present, there is no way to tell which bank requires which wem files. A warning should be emitted,
|
||||
# stating that the full dependency graph could not be created, and only dependencies on the init bank are
|
||||
# described in the generated metadata files.
|
||||
"""
|
||||
When no Wwise metadata is present, and there are multiple content banks in the target directory with wem files
|
||||
present, there is no way to tell which bank requires which wem files. A warning should be emitted,
|
||||
stating that the full dependency graph could not be created, and only dependencies on the init bank are
|
||||
described in the generated metadata files.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_NoMetadataMultipleBanks_OneDependency_ReturnCodeIsWarning')
|
||||
bank_info = get_bank_info(workspace)
|
||||
@@ -150,8 +204,17 @@ class TestSoundBankMetadataGenerator:
|
||||
success_case_test(test_assets_folder, expected_dependencies, get_bank_info(workspace), expected_result_code=1)
|
||||
|
||||
def test_OneContentBank_NoStreamedFiles_OneDependency(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# Wwise metadata describes one content bank that contains all media needed by its events. Generated metadata
|
||||
# describes a dependency only on the init bank.
|
||||
"""
|
||||
Wwise metadata describes one content bank that contains all media needed by its events. Generated metadata
|
||||
describes a dependency only on the init bank.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_OneContentBank_NoStreamedFiles_OneDependency')
|
||||
|
||||
@@ -165,8 +228,17 @@ class TestSoundBankMetadataGenerator:
|
||||
success_case_test(test_assets_folder, expected_dependencies, get_bank_info(workspace))
|
||||
|
||||
def test_OneContentBank_StreamedFiles_MultipleDependencies(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# Wwise metadata describes one content bank that references streamed media files needed by its events. Generated
|
||||
# metadata describes dependencies on the init bank and wems named by the IDs of referenced streamed media.
|
||||
"""
|
||||
Wwise metadata describes one content bank that references streamed media files needed by its events. Generated
|
||||
metadata describes dependencies on the init bank and wems named by the IDs of referenced streamed media.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_OneContentBank_StreamedFiles_MultipleDependencies')
|
||||
|
||||
@@ -187,8 +259,17 @@ class TestSoundBankMetadataGenerator:
|
||||
success_case_test(test_assets_folder, expected_dependencies, get_bank_info(workspace))
|
||||
|
||||
def test_MultipleContentBanks_NoStreamedFiles_OneDependency(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# Wwise metadata describes multiple content banks. Each bank contains all media needed by its events. Generated
|
||||
# metadata describes each bank having a dependency only on the init bank.
|
||||
"""
|
||||
Wwise metadata describes multiple content banks. Each bank contains all media needed by its events. Generated
|
||||
metadata describes each bank having a dependency only on the init bank.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_MultipleContentBanks_NoStreamedFiles_OneDependency')
|
||||
|
||||
@@ -206,8 +287,17 @@ class TestSoundBankMetadataGenerator:
|
||||
success_case_test(test_assets_folder, expected_dependencies, get_bank_info(workspace))
|
||||
|
||||
def test_MultipleContentBanks_Bank1StreamedFiles(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# Wwise metadata describes multiple content banks. Bank 1 references streamed media files needed by its events,
|
||||
# while bank 2 contains all media need by its events.
|
||||
"""
|
||||
Wwise metadata describes multiple content banks. Bank 1 references streamed media files needed by its events,
|
||||
while bank 2 contains all media need by its events.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_MultipleContentBanks_Bank1StreamedFiles')
|
||||
|
||||
@@ -228,9 +318,18 @@ class TestSoundBankMetadataGenerator:
|
||||
success_case_test(test_assets_folder, expected_dependencies, get_bank_info(workspace))
|
||||
|
||||
def test_MultipleContentBanks_SplitBanks_OnlyBankDependenices(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# Wwise metadata describes multiple content banks. Bank 3 events require media that is contained in bank 4.
|
||||
# Generated metadata describes each bank having a dependency on the init bank, while bank 3 has an additional
|
||||
# dependency on bank 4.
|
||||
"""
|
||||
Wwise metadata describes multiple content banks. Bank 3 events require media that is contained in bank 4.
|
||||
Generated metadata describes each bank having a dependency on the init bank, while bank 3 has an additional
|
||||
dependency on bank 4.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_MultipleContentBanks_SplitBanks_OnlyBankDependenices')
|
||||
|
||||
@@ -248,9 +347,18 @@ class TestSoundBankMetadataGenerator:
|
||||
success_case_test(test_assets_folder, expected_dependencies, get_bank_info(workspace))
|
||||
|
||||
def test_MultipleContentBanks_ReferencedEvent_MediaEmbeddedInBank(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# Wwise metadata describes multiple content banks. Bank 1 contains all media required by its events, while bank
|
||||
# 5 contains a reference to an event in bank 1, but no media for that event. Generated metadata describes both
|
||||
# banks having a dependency on the init bank, while bank 5 has an additional dependency on bank 1.
|
||||
"""
|
||||
Wwise metadata describes multiple content banks. Bank 1 contains all media required by its events, while bank
|
||||
5 contains a reference to an event in bank 1, but no media for that event. Generated metadata describes both
|
||||
banks having a dependency on the init bank, while bank 5 has an additional dependency on bank 1.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_MultipleContentBanks_ReferencedEvent_MediaEmbeddedInBank')
|
||||
|
||||
@@ -271,10 +379,19 @@ class TestSoundBankMetadataGenerator:
|
||||
success_case_test(test_assets_folder, expected_dependencies, get_bank_info(workspace))
|
||||
|
||||
def test_MultipleContentBanks_ReferencedEvent_MediaStreamed(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# Wwise metadata describes multiple content banks. Bank 1 references streamed media files needed by its events,
|
||||
# while bank 5 contains a reference to an event in bank 1. This causes bank 5 to also describe a reference to
|
||||
# the streamed media file referenced by the event from bank 1. Generated metadata describes both banks having
|
||||
# dependencies on the init bank, as well as the wem named by the ID of referenced streamed media.
|
||||
"""
|
||||
Wwise metadata describes multiple content banks. Bank 1 references streamed media files needed by its events,
|
||||
while bank 5 contains a reference to an event in bank 1. This causes bank 5 to also describe a reference to
|
||||
the streamed media file referenced by the event from bank 1. Generated metadata describes both banks having
|
||||
dependencies on the init bank, as well as the wem named by the ID of referenced streamed media.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_MultipleContentBanks_ReferencedEvent_MediaStreamed')
|
||||
|
||||
@@ -298,11 +415,20 @@ class TestSoundBankMetadataGenerator:
|
||||
success_case_test(test_assets_folder, expected_dependencies, get_bank_info(workspace))
|
||||
|
||||
def test_MultipleContentBanks_ReferencedEvent_MixedSources(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# Wwise metadata describes multiple content banks. Bank 1 references a streamed media files needed by one of its
|
||||
# events, and contains all media needed for its other events, while bank 5 contains a reference to two events
|
||||
# in bank 1: one that requires streamed media, and one that requires media embedded in bank 1. Generated
|
||||
# metadata describes both banks having dependencies on the init bank and the wem named by the ID of referenced
|
||||
# streamed media, while bank 5 has an additional dependency on bank 1.
|
||||
"""
|
||||
Wwise metadata describes multiple content banks. Bank 1 references a streamed media files needed by one of its
|
||||
events, and contains all media needed for its other events, while bank 5 contains a reference to two events
|
||||
in bank 1: one that requires streamed media, and one that requires media embedded in bank 1. Generated
|
||||
metadata describes both banks having dependencies on the init bank and the wem named by the ID of referenced
|
||||
streamed media, while bank 5 has an additional dependency on bank 1.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_MultipleContentBanks_ReferencedEvent_MixedSources')
|
||||
|
||||
@@ -332,8 +458,17 @@ class TestSoundBankMetadataGenerator:
|
||||
success_case_test(test_assets_folder, expected_dependencies, get_bank_info(workspace))
|
||||
|
||||
def test_MultipleContentBanks_VaryingDependencies_MixedSources(self, workspace, soundbank_metadata_generator_setup_fixture):
|
||||
# Wwise metadata describes multiple content banks that have varying dependencies on each other, and dependencies
|
||||
# on streamed media files.
|
||||
"""
|
||||
Wwise metadata describes multiple content banks that have varying dependencies on each other, and dependencies
|
||||
on streamed media files.
|
||||
|
||||
Test Steps:
|
||||
1. Setup testing environment
|
||||
2. Get current bank info
|
||||
3. Build expected dependencies
|
||||
4. Call success case test
|
||||
"""
|
||||
|
||||
test_assets_folder = os.path.join(soundbank_metadata_generator_setup_fixture['tests_dir'], 'assets',
|
||||
'test_MultipleContentBanks_VaryingDependencies_MixedSources')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user