added logic to help provide dependent service ordering

This commit is contained in:
Blake J. Harnden 2018-06-19 18:36:53 -07:00
parent bf47e5fc0d
commit 37ce407460
4 changed files with 159 additions and 3 deletions

View file

@ -1,18 +1,94 @@
import os
import pytest
from core.service import CoreService
from core.service import ServiceManager
_PATH = os.path.abspath(os.path.dirname(__file__))
_SERVICES_PATH = os.path.join(_PATH, "myservices")
class ServiceA(CoreService):
name = "A"
dependencies = ("B",)
class ServiceB(CoreService):
name = "B"
dependencies = ("C",)
class ServiceC(CoreService):
name = "C"
dependencies = ()
class ServiceD(CoreService):
name = "D"
dependencies = ("A",)
class ServiceE(CoreService):
name = "E"
dependencies = ("Z",)
class ServiceF(CoreService):
name = "F"
dependencies = ()
class TestServices:
def test_import_service(self):
def test_service_import(self):
"""
Test importing a custom service.
:param conftest.Core core: core fixture to test with
"""
ServiceManager.add_services(_SERVICES_PATH)
assert ServiceManager.get("MyService")
assert ServiceManager.get("MyService2")
def test_services_dependencies(self, session):
# given
services = [
ServiceA(),
ServiceB(),
ServiceC(),
ServiceD(),
ServiceF(),
]
# when
startups = session.services.get_service_startups(services)
# then
assert len(startups) == 2
def test_services_dependencies_not_present(self, session):
# given
services = [
ServiceA(),
ServiceB(),
ServiceC(),
ServiceE()
]
# when
with pytest.raises(ValueError):
session.services.get_service_startups(services)
def test_services_dependencies_cycle(self, session):
# given
service_c = ServiceC()
service_c.dependencies = ("D",)
services = [
ServiceA(),
ServiceB(),
service_c,
ServiceD(),
ServiceF()
]
# when
with pytest.raises(ValueError):
session.services.get_service_startups(services)