Skip to content
Snippets Groups Projects
Select Git revision
  • e9169b92fb29a8975cd705ee1e9af5ed0f2965ec
  • master default
  • cnit_ofc26
  • feat/344-implement-a-new-firewall-agent-controllable-through-restconf-openconfig
  • feat/343-integration-of-mimir-deployment-in-production-environment
  • ofc_polimi
  • feat/305-cttc-enhanced-netconf-openconfig-sbi-driver-for-dscm-pluggables
  • feat/306-cttc-enhanced-restconf-based-openconfig-nbi-for-dscm-pluggables
  • feat/301-cttc-dscm-pluggables
  • CTTC-IMPLEMENT-NBI-CONNECTOR-NOS-ZTP
  • CTTC-TEST-SMARTNICS-6GMICROSDN-ZTP
  • develop protected
  • feat/327-tid-new-service-to-ipowdm-controller-to-manage-transceivers-configuration-on-external-agent
  • cnit_tapi
  • feat/330-tid-pcep-component
  • feat/tid-newer-pcep-component
  • feat/116-ubi-updates-in-telemetry-backend-to-support-p4-in-band-network-telemetry
  • feat/292-cttc-implement-integration-test-for-ryu-openflow
  • cnit-p2mp-premerge
  • feat/325-tid-nbi-e2e-to-manage-e2e-path-computation
  • feat/326-tid-external-management-of-devices-telemetry-nbi
  • feat/324-tid-nbi-ietf_l3vpn-deploy-fail
  • v5.0.0 protected
  • v4.0.0 protected
  • demo-dpiab-eucnc2024
  • v3.0.0 protected
  • v2.1.0 protected
  • v2.0.0 protected
  • v1.0.0 protected
29 results

test_unitary.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Objects.py 8.98 KiB
    # Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    from typing import Dict, List, Optional, Tuple
    from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
    from common.proto.kpi_sample_types_pb2 import KpiSampleType
    from common.tools.object_factory.ConfigRule import json_config_rule_set
    from common.tools.object_factory.Connection import json_connection, json_connection_id
    from common.tools.object_factory.Constraint import json_constraint_custom, json_constraint_sla_latency
    from common.tools.object_factory.Context import json_context, json_context_id
    from common.tools.object_factory.Device import json_device_id, json_device_packetrouter_disabled
    from common.tools.object_factory.EndPoint import json_endpoint, json_endpoint_id
    from common.tools.object_factory.Link import json_link, json_link_id
    from common.tools.object_factory.Service import json_service_id, json_service_l3nm_planned
    from common.tools.object_factory.Slice import json_slice_id, json_slice
    from common.tools.object_factory.Topology import json_topology, json_topology_id
    from common.tools.object_factory.PolicyRule import json_policyrule, json_policyrule_id
    
    
    # ----- Context --------------------------------------------------------------------------------------------------------
    CONTEXT_NAME = DEFAULT_CONTEXT_NAME
    CONTEXT_ID   = json_context_id(CONTEXT_NAME)
    CONTEXT      = json_context(CONTEXT_NAME, name=CONTEXT_NAME)
    
    
    # ----- Topology -------------------------------------------------------------------------------------------------------
    TOPOLOGY_NAME = DEFAULT_TOPOLOGY_NAME
    TOPOLOGY_ID   = json_topology_id(TOPOLOGY_NAME, context_id=CONTEXT_ID)
    TOPOLOGY      = json_topology(TOPOLOGY_NAME, context_id=CONTEXT_ID, name=TOPOLOGY_NAME)
    
    
    # ----- KPI Sample Types -----------------------------------------------------------------------------------------------
    PACKET_PORT_SAMPLE_TYPES = [
        KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED,
        KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED,
        KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED,
        KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED,
    ]
    
    
    # ----- Device ---------------------------------------------------------------------------------------------------------
    def compose_device(name : str, endpoint_names : List[str]) -> Tuple[str, Dict, Dict]:
        device_id = json_device_id(name)
        endpoints = [
            json_endpoint(device_id, endpoint_name, 'copper', topology_id=TOPOLOGY_ID,
                kpi_sample_types=PACKET_PORT_SAMPLE_TYPES)
            for endpoint_name in endpoint_names
        ]
        config_rules = [
            json_config_rule_set('dev/rsrc1/value', 'value1'),
            json_config_rule_set('dev/rsrc2/value', 'value2'),
            json_config_rule_set('dev/rsrc3/value', 'value3'),
        ]
        device = json_device_packetrouter_disabled(name, endpoints=endpoints, config_rules=config_rules)
        return name, device_id, device
    
    DEVICE_R1_NAME, DEVICE_R1_ID, DEVICE_R1 = compose_device('R1', ['1.2', '1.3', '2.2', '2.3'])
    DEVICE_R2_NAME, DEVICE_R2_ID, DEVICE_R2 = compose_device('R2', ['1.1', '1.3', '2.1', '2.3'])
    DEVICE_R3_NAME, DEVICE_R3_ID, DEVICE_R3 = compose_device('R3', ['1.1', '1.2', '2.1', '2.2'])
    
    
    # ----- Link -----------------------------------------------------------------------------------------------------------
    def compose_link(
        name : str, endpoint_ids : List[Tuple[str, str]],
        total_capacity_gbps : Optional[float] = None, used_capacity_gbps : Optional[float] = None
    ) -> Tuple[str, Dict, Dict]:
        link_id = json_link_id(name)
        endpoint_ids = [
            json_endpoint_id(device_id, endpoint_name, topology_id=TOPOLOGY_ID)
            for device_id, endpoint_name in endpoint_ids
        ]
        link = json_link(
            name, endpoint_ids, total_capacity_gbps=total_capacity_gbps, used_capacity_gbps=used_capacity_gbps
        )
        return name, link_id, link
    
    LINK_R1_R2_NAME, LINK_R1_R2_ID, LINK_R1_R2 = compose_link(
        'R1==R2', [(DEVICE_R1_ID, '1.2'), (DEVICE_R2_ID, '1.1')],
        total_capacity_gbps=100, # used_capacity_gbps=None => used_capacity_gbps=total_capacity_gbps
    )
    LINK_R2_R3_NAME, LINK_R2_R3_ID, LINK_R2_R3 = compose_link(
        'R2==R3', [(DEVICE_R2_ID, '1.3'), (DEVICE_R3_ID, '1.2')],
        total_capacity_gbps=100, # used_capacity_gbps=None => used_capacity_gbps=total_capacity_gbps
    )
    LINK_R1_R3_NAME, LINK_R1_R3_ID, LINK_R1_R3 = compose_link(
        'R1==R3', [(DEVICE_R1_ID, '1.3'), (DEVICE_R3_ID, '1.1')],
        total_capacity_gbps=100, # used_capacity_gbps=None => used_capacity_gbps=total_capacity_gbps
    )
    
    
    # ----- Service --------------------------------------------------------------------------------------------------------
    def compose_service(
        name : str, endpoint_ids : List[Tuple[str, str]], latency_ms : float, jitter_us : float
    ) -> Tuple[str, Dict, Dict]:
        service_id = json_service_id(name, context_id=CONTEXT_ID)
        endpoint_ids = [
            json_endpoint_id(device_id, endpoint_name, topology_id=TOPOLOGY_ID)
            for device_id, endpoint_name in endpoint_ids
        ]
        constraints = [
            json_constraint_sla_latency(latency_ms),
            json_constraint_custom('jitter[us]',  str(jitter_us)),
        ]
        config_rules = [
            json_config_rule_set('svc/rsrc1/value', 'value7'),
            json_config_rule_set('svc/rsrc2/value', 'value8'),
            json_config_rule_set('svc/rsrc3/value', 'value9'),
        ]
        service = json_service_l3nm_planned(
            name, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules)
        return name, service_id, service
    
    SERVICE_R1_R2_NAME, SERVICE_R1_R2_ID, SERVICE_R1_R2 = compose_service(
        'R1-R2', [(DEVICE_R1_ID, '2.2'), (DEVICE_R2_ID, '2.1')], 15.2, 1.2)
    
    SERVICE_R1_R3_NAME, SERVICE_R1_R3_ID, SERVICE_R1_R3 = compose_service(
        'R1-R3', [(DEVICE_R1_ID, '2.3'), (DEVICE_R3_ID, '2.1')], 5.8, 0.1)
    
    SERVICE_R2_R3_NAME, SERVICE_R2_R3_ID, SERVICE_R2_R3 = compose_service(
        'R2-R3', [(DEVICE_R2_ID, '2.3'), (DEVICE_R3_ID, '2.2')], 23.1, 3.4)
    
    
    # ----- Slice ----------------------------------------------------------------------------------------------------------
    def compose_slice(
        name : str, endpoint_ids : List[Tuple[str, str]], latency_ms : float, jitter_us : float,
        service_ids : List[Dict] = [], subslice_ids : List[Dict] = [], owner : Optional[Dict] = None
    ) -> Tuple[str, Dict, Dict]:
        slice_id = json_slice_id(name, context_id=CONTEXT_ID)
        endpoint_ids = [
            json_endpoint_id(device_id, endpoint_name, topology_id=TOPOLOGY_ID)
            for device_id, endpoint_name in endpoint_ids
        ]
        constraints = [
            json_constraint_sla_latency(latency_ms),
            json_constraint_custom('jitter[us]',  str(jitter_us)),
        ]
        config_rules = [
            json_config_rule_set('svc/rsrc1/value', 'value7'),
            json_config_rule_set('svc/rsrc2/value', 'value8'),
            json_config_rule_set('svc/rsrc3/value', 'value9'),
        ]
        slice_ = json_slice(
            name, context_id=CONTEXT_ID, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules,
            service_ids=service_ids, subslice_ids=subslice_ids, owner=owner)
        return name, slice_id, slice_
    
    SLICE_R1_R3_NAME, SLICE_R1_R3_ID, SLICE_R1_R3 = compose_slice(
        'R1-R3', [(DEVICE_R1_ID, '2.3'), (DEVICE_R3_ID, '2.1')], 15.2, 1.2,
        service_ids=[SERVICE_R1_R2_ID, SERVICE_R2_R3_ID],
        subslice_ids=[], owner=None)
    
    
    # ----- Connection -----------------------------------------------------------------------------------------------------
    def compose_connection(
        name : str, service_id : Dict, endpoint_ids : List[Tuple[str, str]], sub_service_ids : List[Dict] = []
    ) -> Tuple[str, Dict, Dict]:
        connection_id = json_connection_id(name)
        endpoint_ids = [
            json_endpoint_id(device_id, endpoint_name, topology_id=TOPOLOGY_ID)
            for device_id, endpoint_name in endpoint_ids
        ]
        connection = json_connection(
            name, service_id=service_id, path_hops_endpoint_ids=endpoint_ids, sub_service_ids=sub_service_ids)
        return name, connection_id, connection
    
    CONNECTION_R1_R3_NAME, CONNECTION_R1_R3_ID, CONNECTION_R1_R3 = compose_connection(
        'CON:R1/2.3-R3/2.1', SERVICE_R1_R3_ID, [
            (DEVICE_R1_ID, '2.3'),
            (DEVICE_R1_ID, '1.2'), (DEVICE_R2_ID, '1.1'),
            (DEVICE_R2_ID, '1.3'), (DEVICE_R3_ID, '1.2'),
            (DEVICE_R3_ID, '2.1')
        ], sub_service_ids=[SERVICE_R1_R2_ID, SERVICE_R2_R3_ID])
    
    
    # ----- PolicyRule -------------------------------------------------------------------------------------------------------
    POLICYRULE_NAME = 'my-device-policy'
    POLICYRULE_ID   = json_policyrule_id(POLICYRULE_NAME)
    POLICYRULE      = json_policyrule(POLICYRULE_NAME, policy_priority=1)