123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- """
- 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
- """
- #
- # This launches the AssetProcessor and Editor then attempts to find the expected
- # assets created by a Python Asset Builder and the output of a scene pipeline script
- #
- import sys
- import os
- import pytest
- import logging
- import re
- import sqlite3
- pytest.importorskip('ly_test_tools')
- import ly_test_tools.environment.file_system as file_system
- import ly_test_tools.log.log_monitor
- import ly_test_tools.environment.waiter as waiter
- from ly_test_tools.o3de.editor_test_utils import compile_test_case_name_from_request
- def detect_product(sql_connection, platform, target):
- cur = sql_connection.cursor()
- product_target = f'{platform}/{target}'
- print(f'Detecting {product_target} in assetdb.sqlite')
- hits = 0
- for row in cur.execute(f'select ProductID from Products where ProductName is "{product_target}"'):
- hits = hits + 1
- assert hits == 1
- def compile_test_case_name(request):
- """
- Compile a test case name for consumption by the TIAF python coverage listener gem.
- @param request: The fixture request.
- """
- try:
- test_case_prefix = "::".join(str.split(request.node.nodeid, "::")[:2])
- test_case_name = "::".join([test_case_prefix, request.node.originalname])
- callspec = request.node.callspec.id
- compiled_test_case_name = f"{test_case_name}[{callspec}]"
- except Exception as e:
- logging.warning(f"Error reading test case name for TIAF. {e}")
- compiled_test_case_name = "ERROR"
- return compiled_test_case_name
- def find_products(cache_folder, platform):
- con = sqlite3.connect(os.path.join(cache_folder, 'assetdb.sqlite'))
- detect_product(con, platform, 'gem/pythontests/pythonassetbuilder/test_asset.mock_asset')
- detect_product(con, platform, 'gem/pythontests/pythonassetbuilder/geom_group_fbx_cube_100cm_z_positive.fbx.azmodel')
- detect_product(con, platform, 'gem/pythontests/pythonassetbuilder/geom_group_fbx_cube_100cm_z_negative.fbx.azmodel')
- detect_product(con, platform, 'gem/pythontests/pythonassetbuilder/geom_group_fbx_cube_100cm_y_positive.fbx.azmodel')
- detect_product(con, platform, 'gem/pythontests/pythonassetbuilder/geom_group_fbx_cube_100cm_y_negative.fbx.azmodel')
- detect_product(con, platform, 'gem/pythontests/pythonassetbuilder/geom_group_fbx_cube_100cm_x_positive.fbx.azmodel')
- detect_product(con, platform, 'gem/pythontests/pythonassetbuilder/geom_group_fbx_cube_100cm_x_negative.fbx.azmodel')
- detect_product(con, platform, 'gem/pythontests/pythonassetbuilder/geom_group_fbx_cube_100cm_center.fbx.azmodel')
- con.close()
- @pytest.mark.SUITE_periodic
- @pytest.mark.parametrize('launcher_platform', ['windows_editor'])
- @pytest.mark.parametrize('project', ['AutomatedTesting'])
- @pytest.mark.parametrize('level', ['auto_test'])
- class TestPythonAssetProcessing(object):
- def test_DetectPythonCreatedAsset(self, request, editor, level, launcher_platform):
- unexpected_lines = []
- expected_lines = []
- timeout = 180
- halt_on_unexpected = False
- test_directory = os.path.join(os.path.dirname(__file__))
- testFile = os.path.join(test_directory, 'AssetBuilder_test_case.py')
- compiled_test_case_name = compile_test_case_name_from_request(request)
- editor.args.extend(['-NullRenderer', '-rhi=Null', "--skipWelcomeScreenDialog", "--autotest_mode", "--runpythontest", testFile, f"-pythontestcase={compiled_test_case_name}"])
- with editor.start():
- editorlog_file = os.path.join(editor.workspace.paths.project_log(), 'Editor.log')
- log_monitor = ly_test_tools.log.log_monitor.LogMonitor(editor, editorlog_file)
- waiter.wait_for(
- lambda: editor.is_alive(),
- timeout,
- exc=("Log file '{}' was never opened by another process.".format(editorlog_file)),
- interval=1)
- log_monitor.monitor_log_for_lines(expected_lines, unexpected_lines, halt_on_unexpected, timeout)
- cache_folder = editor.workspace.paths.cache()
- platform = editor.workspace.asset_processor_platform
- if platform == 'windows':
- platform = 'pc'
- find_products(cache_folder, platform)
|