# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

"""Pytest configuration for GPU Memory Service tests."""

import pytest

# Skip collection entirely if gpu_memory_service is not installed
try:
    import gpu_memory_service  # noqa: F401
except ImportError:
    collect_ignore_glob = ["test_*.py"]

from tests.utils.port_utils import allocate_port, deallocate_ports


@pytest.fixture
def gms_ports():
    """Allocate ports for GMS tests.

    Returns a dict with ports for:
    - frontend: Frontend HTTP port
    - shadow_system: System port for shadow/primary engine
    - primary_system: System port for primary engine (failover test only)
    - shadow_kv_event: KV event port for shadow engine (vLLM)
    - primary_kv_event: KV event port for primary engine (vLLM)
    - shadow_nixl: NIXL side channel port for shadow engine (vLLM)
    - primary_nixl: NIXL side channel port for primary engine (vLLM)
    - shadow_sglang: SGLang HTTP port for shadow engine
    - primary_sglang: SGLang HTTP port for primary engine
    """
    ports = [
        allocate_port(p)
        for p in [8200, 8100, 8101, 20080, 20081, 20096, 20097, 30000, 30001]
    ]
    yield {
        "frontend": ports[0],
        "shadow_system": ports[1],
        "primary_system": ports[2],
        "shadow_kv_event": ports[3],
        "primary_kv_event": ports[4],
        "shadow_nixl": ports[5],
        "primary_nixl": ports[6],
        "shadow_sglang": ports[7],
        "primary_sglang": ports[8],
    }
    deallocate_ports(ports)
