Skip to content
Snippets Groups Projects
test_resource_manager.py 1.66 KiB
Newer Older
import random
import string

from gso.services import resource_manager


def _random_string(
        n=None,
        letters=string.ascii_letters + string.digits + string.punctuation):
    if not n:
        n = random.randint(1, 20)
    return ''.join(random.choices(letters, k=n))


def test_new_router():
    router_name = _random_string(10)
    assert router_name not in resource_manager._DUMMY_INVENTORY
    resource_manager.import_new_router(new_router_fqdn=router_name)
    assert router_name in resource_manager._DUMMY_INVENTORY


def test_new_lag():
    router_name = list(resource_manager._DUMMY_INVENTORY.keys())[0]
    new_lags = {
        resource_manager.next_lag(router_fqdn=router_name)
        for _ in range(10)
    }
    assert len(new_lags) == 10
    assert new_lags <= set(
        resource_manager._DUMMY_INVENTORY[router_name]['lags'])


def test_physical_allocation_lifecycle_happy():
    router_name = list(resource_manager._DUMMY_INVENTORY.keys())[0]

    def _interfaces():
        return resource_manager.available_physical_interfaces(
            router_fqdn=router_name)

    initial_available = _interfaces()

    interface_name = initial_available[0]

    resource_manager.reserve_physical_interface(
        router_fqdn=router_name, interface_name=interface_name)

    current_available = _interfaces()
    assert interface_name not in current_available

    resource_manager.allocate_physical_interface(
        router_fqdn=router_name, interface_name=interface_name)
    resource_manager.free_physical_interface(
        router_fqdn=router_name, interface_name=interface_name)

    current_available = _interfaces()
    assert interface_name in current_available