#!/usr/bin/env python3 # -*- coding: utf-8 -*- # SPDX-License-Identifier: BSD-3-Clause # test_trx_mode_params # Copyright (C) 2025 Telecom Infra Project and GNPy contributors # see AUTHORS.rst for a list of contributors """ checks all possibilities of this function """ from pathlib import Path import pytest from gnpy.core.equipment import trx_mode_params from gnpy.core.exceptions import EquipmentConfigError from gnpy.tools.json_io import load_equipment, load_json, _equipment_from_json from gnpy.tools.default_edfa_config import DEFAULT_EXTRA_CONFIG TEST_DIR = Path(__file__).parent DATA_DIR = TEST_DIR / 'data' EQPT_LIBRARY_NAME = DATA_DIR / 'eqpt_config.json' NETWORK_FILE_NAME = DATA_DIR / 'testTopology_expected.json' @pytest.mark.parametrize('trx_type, trx_mode, error_message, no_error, expected_result', [('', '', False, True, "SI"), ('', '', True, False, 'Could not find transponder "" in equipment library'), ('vendorA_trx-type1', '', True, False, 'Could not find transponder "vendorA_trx-type1" with mode "" in equipment library'), ('vendorA_trx-type1', '', False, True, "SI"), ('', 'mode 1', True, False, 'Could not find transponder "" in equipment library'), ('', 'mode 1', False, True, "SI"), ('vendorA_trx-type1', 'mode 2', True, True, 'mode 2'), ('vendorA_trx-type1', 'mode 2', False, True, 'mode 2'), ('wrong type', '', True, False, 'Could not find transponder "wrong type" in equipment library'), ('wrong type', '', False, True, 'SI'), ('vendorA_trx-type1', 'wrong mode', True, False, 'Could not find transponder "vendorA_trx-type1" with mode "wrong mode" in equipment library'), ('vendorA_trx-type1', 'wrong mode', False, True, 'SI'), ('wrong type', 'wrong mode', True, False, 'Could not find transponder "wrong type" in equipment library'), ('wrong type', 'wrong mode', False, True, 'SI'), ('vendorA_trx-type1', None, True, True, 'None'), ('vendorA_trx-type1', None, False, True, 'None'), (None, None, True, False, 'Could not find transponder "None" in equipment library'), (None, None, False, True, 'SI'), (None, 'mode 2', True, False, 'Could not find transponder "None" in equipment library'), (None, 'mode 2', False, True, 'SI'), ]) def test_trx_mode_params(trx_type, trx_mode, error_message, no_error, expected_result): """Checks all combinations of trx_type and mode """ possible_results = {} possible_results["SI"] = { 'OSNR': None, 'baud_rate': 32000000000.0, 'bit_rate': None, 'cost': None, 'equalization_offset_db': 0, 'f_max': 196100000000000.0, 'f_min': 191300000000000.0, 'min_spacing': None, 'penalties': {}, 'roll_off': 0.15, 'spacing': 50000000000.0, 'tx_osnr': 100, } possible_results["mode 2"] = { 'format': 'mode 2', 'baud_rate': 64e9, 'OSNR': 15, 'bit_rate': 200e9, 'roll_off': 0.15, 'tx_osnr': 100, 'equalization_offset_db': 0, 'min_spacing': 75e9, 'f_max': 196100000000000.0, 'f_min': 191350000000000.0, 'penalties': {}, 'cost': 1 } possible_results["None"] = { 'format': 'undetermined', 'baud_rate': None, 'OSNR': None, 'bit_rate': None, 'roll_off': None, 'tx_osnr': None, 'equalization_offset_db': 0, 'min_spacing': None, 'f_max': 196100000000000.0, 'f_min': 191350000000000.0, 'penalties': None, 'cost': None } equipment = load_equipment(EQPT_LIBRARY_NAME, DEFAULT_EXTRA_CONFIG) if no_error: trx_params = trx_mode_params(equipment, trx_type, trx_mode, error_message) print(trx_params) assert trx_params == possible_results[expected_result] else: with pytest.raises(EquipmentConfigError, match=expected_result): _ = trx_mode_params(equipment, trx_type, trx_mode, error_message) @pytest.mark.parametrize('baudrate, spacing, error_message', [(60e9, 50e9, 'Inconsistency in equipment library:\n Transponder "vendorB_trx-type1" mode "wrong mode" ' + 'has baud rate 60.00 GHz greater than min_spacing 50.00.'), (32e9, 50, 'Inconsistency in equipment library:\n Transponder "vendorB_trx-type1" mode "wrong mode" ' + 'has baud rate 32.00 GHz greater than min_spacing 0.00.')]) def test_wrong_baudrate_spacing(baudrate, spacing, error_message): """Checks wrong values for baudrate and spacing correctly raise an error """ json_data = load_json(EQPT_LIBRARY_NAME) wrong_transceiver = { 'type_variety': 'vendorB_trx-type1', 'frequency': { 'min': 191.35e12, 'max': 196.1e12 }, 'mode': [{ 'format': 'PS_SP64_1', 'baud_rate': 32e9, 'OSNR': 11, 'bit_rate': 100e9, 'roll_off': 0.15, 'tx_osnr': 100, 'min_spacing': 50e9, 'cost': 1, 'penalties': [{ 'chromatic_dispersion': 80000, 'penalty_value': 0.5 }, { 'pmd': 120, 'penalty_value': 0.5}], 'equalization_offset_db': 0 }, { 'format': 'wrong mode', 'baud_rate': baudrate, 'OSNR': 11, 'bit_rate': 100e9, 'roll_off': 0.15, 'tx_osnr': 40, 'min_spacing': spacing, 'cost': 1, 'penalties': [{ 'chromatic_dispersion': 80000, 'penalty_value': 0.5 }, { 'pmd': 120, 'penalty_value': 0.5}], 'equalization_offset_db': 0}] } json_data['Transceiver'].append(wrong_transceiver) equipment = _equipment_from_json(json_data, DEFAULT_EXTRA_CONFIG) with pytest.raises(EquipmentConfigError, match=error_message): _ = trx_mode_params(equipment, 'vendorB_trx-type1', 'wrong mode', error_message=False)