12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- """
- 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
- """
- import pytest
- import os
- import sys
- from ly_test_tools.o3de.editor_test import EditorTestSuite, EditorSingleTest
- sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
- from ly_test_tools.environment import process_utils
- from ly_test_tools.launchers import launcher_helper
- from ly_test_tools.log.log_monitor import LogMonitor
- import ly_test_tools.environment.waiter as waiter
- # Saves the level cache folder.
- # These artifacts will be saved in the test results so developers can access the level assets
- # to debug should the test ever fail.
- def save_multiplayer_level_cache_folder_artifact(workspace, multiplayer_level):
- level_cache_folder_path = os.path.join(workspace.paths.platform_cache(), "levels", "multiplayer", multiplayer_level)
- if os.path.exists(level_cache_folder_path):
- workspace.artifact_manager.save_artifact(level_cache_folder_path)
- else:
- pytest.fail(f"Failed to find level asset cache for '{multiplayer_level}', located here: '{level_cache_folder_path}'! Make sure AssetProcessor successfully built the level.")
- @pytest.mark.SUITE_sandbox
- @pytest.mark.parametrize("project", ["AutomatedTesting"])
- @pytest.mark.parametrize("launcher_platform", ['windows_editor'])
- class TestAutomation(EditorTestSuite):
- class test_Multiplayer_AutoComponent_NetworkInput(EditorSingleTest):
- from .tests import Multiplayer_AutoComponent_NetworkInput as test_module
- @classmethod
- def setup(cls, instance, request, workspace):
- save_multiplayer_level_cache_folder_artifact(workspace, "autocomponent_networkinput")
- @pytest.mark.xfail(reason="GHI #9869: Test periodically fails")
- class test_Multiplayer_AutoComponent_RPC(EditorSingleTest):
- from .tests import Multiplayer_AutoComponent_RPC as test_module
- @classmethod
- def setup(cls, instance, request, workspace):
- save_multiplayer_level_cache_folder_artifact(workspace, "autocomponent_rpc")
-
- class test_Multiplayer_SimpleNetworkLevelEntity(EditorSingleTest):
- from .tests import Multiplayer_SimpleNetworkLevelEntity as test_module
- @classmethod
- def setup(cls, instance, request, workspace):
- save_multiplayer_level_cache_folder_artifact(workspace, "simplenetworklevelentity")
- def test_Multiplayer_SimpleGameServerLauncher_ConnectsSuccessfully(self, workspace, launcher_platform, crash_log_watchdog):
- unexpected_lines = []
- expected_lines = ["New outgoing connection to remote address:"]
- halt_on_unexpected = False
- timeout = 180
- # Start the AutomatedTesting.ServerLauncher.exe in hosting mode, no rendering mode, and wait for it to exist
- server_launcher = launcher_helper.create_server_launcher(workspace)
- server_launcher.args.extend(['+host', '-rhi=Null'])
- server_launcher.start()
- waiter.wait_for(lambda: process_utils.process_exists(f"AutomatedTesting.ServerLauncher.exe", ignore_extensions=True))
- # Start the AutomatedTesting.GameLauncher.exe in client mode, no rendering mode, and wait for it to exist
- game_launcher = launcher_helper.create_game_launcher(workspace)
- game_launcher.args.extend(['+connect', '-rhi=Null'])
- game_launcher.start()
- waiter.wait_for(lambda: process_utils.process_exists(f"AutomatedTesting.GameLauncher.exe", ignore_extensions=True))
- # Verify that the GameLauncher.exe was able to connect to the ServerLauncher.exe by checking the logs
- game_launcher_log_file = os.path.join(game_launcher.workspace.paths.project_log(), 'Game.log')
- game_launcher_log_monitor = LogMonitor(game_launcher, game_launcher_log_file)
- game_launcher_log_monitor.monitor_log_for_lines(expected_lines, unexpected_lines, halt_on_unexpected, timeout)
- process_utils.kill_processes_named("AssetProcessor.exe", ignore_extensions=True)
|