Commit 883734fb authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

OFC25 test:

- Fixed comparison of virtual link ids/names
parent 767cb911
Loading
Loading
Loading
Loading
+46 −18
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
import logging
import os
import time
from typing import List, Set, Tuple
from typing import List, Optional, Set, Tuple

from common.Constants import DEFAULT_CONTEXT_NAME
from common.proto.context_pb2 import ContextId, Device, Empty, Link, LinkTypeEnum, ServiceStatusEnum, ServiceTypeEnum
@@ -216,15 +216,20 @@ def describe_services(context_client, profile_name: str) -> str:
    return str(services)


def get_virtual_link_ids(context_client) -> Set[str]:
def get_virtual_link_identifiers(context_client) -> Tuple[Set[str], Set[str]]:
    response = context_client.ListLinks(Empty())
    virtual_link_ids = {
        link.link_id.link_uuid.uuid
        for link in response.links
        if link.link_type == LinkTypeEnum.LINKTYPE_VIRTUAL
    }
    LOGGER.info('VirtualLinks[%d] = %s', len(virtual_link_ids), str(sorted(virtual_link_ids)))
    return virtual_link_ids
    virtual_link_uuids = set()
    virtual_link_names = set()
    for link in response.links:
        if link.link_type != LinkTypeEnum.LINKTYPE_VIRTUAL:
            continue
        virtual_link_uuids.add(link.link_id.link_uuid.uuid)
        if len(link.name) > 0:
            virtual_link_names.add(link.name)

    LOGGER.info('VirtualLinkNames[%d] = %s', len(virtual_link_names), str(sorted(virtual_link_names)))
    LOGGER.info('VirtualLinkUuids[%d] = %s', len(virtual_link_uuids), str(sorted(virtual_link_uuids)))
    return virtual_link_uuids, virtual_link_names


def describe_links(context_client, profile_name: str) -> str:
@@ -245,19 +250,32 @@ def log_global_state(ip_context_client, e2e_context_client, opt_context_client)
    describe_services(opt_context_client, 'opt')


def assert_expected_set(actual_items: Set[str], expected_items: Optional[Set[str]], label: str) -> None:
    if expected_items is None:
        return

    assert actual_items == expected_items, (
        '{:s} mismatch: expected={:s} actual={:s}'.format(
            label, str(sorted(expected_items)), str(sorted(actual_items))
        )
    )


def assert_global_state(
    ip_context_client,
    e2e_context_client,
    opt_context_client,
    expected_virtual_link_ids: Set[str],
    expected_virtual_link_uuids: Optional[Set[str]],
    expected_virtual_link_names: Optional[Set[str]],
    expected_e2e_services: int,
    expected_opt_connections: int,
) -> None:
    response = ip_context_client.ListServices(ADMIN_CONTEXT_ID)
    assert len(response.services) == 0

    virtual_link_ids = get_virtual_link_ids(ip_context_client)
    assert virtual_link_ids == expected_virtual_link_ids
    virtual_link_uuids, virtual_link_names = get_virtual_link_identifiers(ip_context_client)
    assert_expected_set(virtual_link_uuids, expected_virtual_link_uuids, 'Virtual link UUIDs')
    assert_expected_set(virtual_link_names, expected_virtual_link_names, 'Virtual link names')

    e2e_services = list_active_optical_services(e2e_context_client)
    if expected_e2e_services == 0:
@@ -281,7 +299,8 @@ def wait_for_state_or_raise(
    ip_context_client,
    e2e_context_client,
    opt_context_client,
    expected_virtual_link_ids: Set[str],
    expected_virtual_link_uuids: Optional[Set[str]],
    expected_virtual_link_names: Optional[Set[str]],
    expected_e2e_services: int,
    expected_opt_connections: int,
    max_retry: int = 30,
@@ -291,14 +310,21 @@ def wait_for_state_or_raise(
    for attempt in range(1, max_retry + 1):
        try:
            LOGGER.info(
                'Checking expected state attempt %d/%d: virtual_links=%s e2e_services=%d opt_connections=%d',
                attempt, max_retry, str(sorted(expected_virtual_link_ids)), expected_e2e_services, expected_opt_connections
                'Checking expected state attempt %d/%d: virtual_link_uuids=%s virtual_link_names=%s '
                'e2e_services=%d opt_connections=%d',
                attempt,
                max_retry,
                '<ignored>' if expected_virtual_link_uuids is None else str(sorted(expected_virtual_link_uuids)),
                '<ignored>' if expected_virtual_link_names is None else str(sorted(expected_virtual_link_names)),
                expected_e2e_services,
                expected_opt_connections,
            )
            assert_global_state(
                ip_context_client=ip_context_client,
                e2e_context_client=e2e_context_client,
                opt_context_client=opt_context_client,
                expected_virtual_link_ids=expected_virtual_link_ids,
                expected_virtual_link_uuids=expected_virtual_link_uuids,
                expected_virtual_link_names=expected_virtual_link_names,
                expected_e2e_services=expected_e2e_services,
                expected_opt_connections=expected_opt_connections,
            )
@@ -313,8 +339,10 @@ def wait_for_state_or_raise(
            time.sleep(wait_seconds)

    LOGGER.error(
        'Timed out waiting expected state: virtual_links=%s e2e_services=%d opt_connections=%d',
        str(sorted(expected_virtual_link_ids)),
        'Timed out waiting expected state: virtual_link_uuids=%s virtual_link_names=%s '
        'e2e_services=%d opt_connections=%d',
        '<ignored>' if expected_virtual_link_uuids is None else str(sorted(expected_virtual_link_uuids)),
        '<ignored>' if expected_virtual_link_names is None else str(sorted(expected_virtual_link_names)),
        expected_e2e_services,
        expected_opt_connections,
    )
+11 −8
Original line number Diff line number Diff line
@@ -41,13 +41,14 @@ def test_create_virtual_link(
        ip_context_client=ip_context_client,
        e2e_context_client=e2e_context_client,
        opt_context_client=opt_context_client,
        expected_virtual_link_ids=set(),
        expected_virtual_link_uuids=None,
        expected_virtual_link_names=set(),
        expected_e2e_services=0,
        expected_opt_connections=0,
    )

    expected_virtual_link_ids: Set[str] = set()
    for index, (descriptor_name, virtual_link_id) in enumerate(VIRTUAL_LINK_DESCRIPTORS, start=1):
    expected_virtual_link_names: Set[str] = set()
    for index, (descriptor_name, virtual_link_name) in enumerate(VIRTUAL_LINK_DESCRIPTORS, start=1):
        descriptor_file = os.path.join(DESCRIPTORS_DIR, descriptor_name)
        LOGGER.info(
            'Creating virtual link step %d/%d from descriptor %s',
@@ -61,18 +62,20 @@ def test_create_virtual_link(
        )
        results = descriptor_loader.process()
        check_descriptor_load_results(results, descriptor_loader)
        LOGGER.info('Virtual link request submitted successfully for %s', virtual_link_id)
        LOGGER.info('Virtual link request submitted successfully for %s', virtual_link_name)

        expected_virtual_link_ids.add(virtual_link_id)
        expected_virtual_link_names.add(virtual_link_name)
        LOGGER.info(
            'Waiting for propagated state after creating %s: expected_virtual_links=%s expected_e2e_services=%d',
            virtual_link_id, str(sorted(expected_virtual_link_ids)), index
            'Waiting for propagated state after creating %s: expected_virtual_link_names=%s '
            'expected_e2e_services=%d',
            virtual_link_name, str(sorted(expected_virtual_link_names)), index
        )
        wait_for_state_or_raise(
            ip_context_client=ip_context_client,
            e2e_context_client=e2e_context_client,
            opt_context_client=opt_context_client,
            expected_virtual_link_ids=expected_virtual_link_ids,
            expected_virtual_link_uuids=None,
            expected_virtual_link_names=expected_virtual_link_names,
            expected_e2e_services=index,
            expected_opt_connections=1,
        )
+11 −8
Original line number Diff line number Diff line
@@ -40,17 +40,18 @@ def test_delete_virtual_links(

    assert ip_vnt_manager_client is not None

    expected_virtual_link_ids = {link_id for _, link_id in VIRTUAL_LINK_DESCRIPTORS}
    expected_virtual_link_names = {link_name for _, link_name in VIRTUAL_LINK_DESCRIPTORS}
    wait_for_state_or_raise(
        ip_context_client=ip_context_client,
        e2e_context_client=e2e_context_client,
        opt_context_client=opt_context_client,
        expected_virtual_link_ids=expected_virtual_link_ids,
        expected_virtual_link_uuids=None,
        expected_virtual_link_names=expected_virtual_link_names,
        expected_e2e_services=3,
        expected_opt_connections=1,
    )

    for remaining, (descriptor_name, virtual_link_id) in zip(
    for remaining, (descriptor_name, virtual_link_name) in zip(
        [2, 1, 0], reversed(VIRTUAL_LINK_DESCRIPTORS)
    ):
        descriptor_file = os.path.join(DESCRIPTORS_DIR, descriptor_name)
@@ -65,18 +66,20 @@ def test_delete_virtual_links(
            vntm_client=ip_vnt_manager_client,
        )
        descriptor_loader.unload()
        LOGGER.info('Virtual link removal submitted successfully for %s', virtual_link_id)
        LOGGER.info('Virtual link removal submitted successfully for %s', virtual_link_name)

        expected_virtual_link_ids.remove(virtual_link_id)
        expected_virtual_link_names.remove(virtual_link_name)
        LOGGER.info(
            'Waiting for propagated state after deleting %s: expected_virtual_links=%s expected_e2e_services=%d',
            virtual_link_id, str(sorted(expected_virtual_link_ids)), remaining
            'Waiting for propagated state after deleting %s: expected_virtual_link_names=%s '
            'expected_e2e_services=%d',
            virtual_link_name, str(sorted(expected_virtual_link_names)), remaining
        )
        wait_for_state_or_raise(
            ip_context_client=ip_context_client,
            e2e_context_client=e2e_context_client,
            opt_context_client=opt_context_client,
            expected_virtual_link_ids=expected_virtual_link_ids,
            expected_virtual_link_uuids=None,
            expected_virtual_link_names=expected_virtual_link_names,
            expected_e2e_services=remaining,
            expected_opt_connections=(1 if remaining > 0 else 0),
        )