refactored service interaction use names with a _, and cleanup up some of the CoreServices methods
This commit is contained in:
parent
0bf9c99910
commit
e80736061f
27 changed files with 958 additions and 885 deletions
|
@ -7,7 +7,6 @@ import os
|
|||
import pytest
|
||||
from mock.mock import MagicMock
|
||||
|
||||
from core import services
|
||||
from core.api.coreapi import CoreConfMessage
|
||||
from core.api.coreapi import CoreEventMessage
|
||||
from core.api.coreapi import CoreExecMessage
|
||||
|
@ -29,6 +28,7 @@ from core.enumerations import NodeTlvs
|
|||
from core.enumerations import NodeTypes
|
||||
from core.misc import ipaddress
|
||||
from core.misc.ipaddress import MacAddress
|
||||
from core.service import ServiceManager
|
||||
|
||||
EMANE_SERVICES = "zebra|OSPFv3MDR|IPForward"
|
||||
|
||||
|
@ -199,6 +199,7 @@ class CoreServerTest(object):
|
|||
self.request_handler.handle_message(message)
|
||||
|
||||
def shutdown(self):
|
||||
self.server.coreemu.shutdown()
|
||||
self.server.shutdown()
|
||||
self.server.server_close()
|
||||
|
||||
|
@ -223,6 +224,9 @@ def session():
|
|||
# shutdown coreemu
|
||||
coreemu.shutdown()
|
||||
|
||||
# clear services, since they will be reloaded
|
||||
ServiceManager.services.clear()
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def ip_prefixes():
|
||||
|
@ -231,9 +235,6 @@ def ip_prefixes():
|
|||
|
||||
@pytest.fixture()
|
||||
def cored():
|
||||
# load default services
|
||||
services.load()
|
||||
|
||||
# create and return server
|
||||
server = CoreServerTest()
|
||||
yield server
|
||||
|
@ -241,6 +242,11 @@ def cored():
|
|||
# cleanup
|
||||
server.shutdown()
|
||||
|
||||
#
|
||||
|
||||
# cleanup services
|
||||
ServiceManager.services.clear()
|
||||
|
||||
|
||||
def ping(from_node, to_node, ip_prefixes, count=3):
|
||||
address = ip_prefixes.ip4_address(to_node)
|
||||
|
|
|
@ -6,22 +6,22 @@ from core.service import CoreService
|
|||
|
||||
|
||||
class MyService(CoreService):
|
||||
_name = "MyService"
|
||||
_group = "Utility"
|
||||
_depends = ()
|
||||
_dirs = ()
|
||||
_configs = ('myservice.sh',)
|
||||
_startindex = 50
|
||||
_startup = ('sh myservice.sh',)
|
||||
_shutdown = ()
|
||||
name = "MyService"
|
||||
group = "Utility"
|
||||
depends = ()
|
||||
dirs = ()
|
||||
configs = ('myservice.sh',)
|
||||
startindex = 50
|
||||
startup = ('sh myservice.sh',)
|
||||
shutdown = ()
|
||||
|
||||
|
||||
class MyService2(CoreService):
|
||||
_name = "MyService2"
|
||||
_group = "Utility"
|
||||
_depends = ()
|
||||
_dirs = ()
|
||||
_configs = ('myservice.sh',)
|
||||
_startindex = 50
|
||||
_startup = ('sh myservice.sh',)
|
||||
_shutdown = ()
|
||||
name = "MyService2"
|
||||
group = "Utility"
|
||||
depends = ()
|
||||
dirs = ()
|
||||
configs = ('myservice.sh',)
|
||||
startindex = 50
|
||||
startup = ('sh myservice.sh',)
|
||||
shutdown = ()
|
||||
|
|
|
@ -15,10 +15,8 @@ from core.enumerations import NodeTypes
|
|||
from core.mobility import BasicRangeModel
|
||||
from core.mobility import Ns2ScriptedMobility
|
||||
from core.netns.vnodeclient import VnodeClient
|
||||
from core.service import ServiceManager
|
||||
|
||||
_PATH = os.path.abspath(os.path.dirname(__file__))
|
||||
_SERVICES_PATH = os.path.join(_PATH, "myservices")
|
||||
_MOBILITY_FILE = os.path.join(_PATH, "mobility.scen")
|
||||
_WIRED = [
|
||||
NodeTypes.PEER_TO_PEER,
|
||||
|
@ -51,16 +49,6 @@ def ping(from_node, to_node, ip_prefixes):
|
|||
|
||||
|
||||
class TestCore:
|
||||
def test_import_service(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")
|
||||
|
||||
@pytest.mark.parametrize("net_type", _WIRED)
|
||||
def test_wired_ping(self, session, net_type, ip_prefixes):
|
||||
"""
|
||||
|
|
|
@ -101,7 +101,7 @@ def run_cmd(node, exec_cmd):
|
|||
|
||||
|
||||
class TestGui:
|
||||
def test_broker(self, session, cored):
|
||||
def test_broker(self, cored):
|
||||
"""
|
||||
Test session broker creation.
|
||||
|
||||
|
@ -119,6 +119,7 @@ class TestGui:
|
|||
daemon = "localhost"
|
||||
|
||||
# add server
|
||||
session = cored.server.coreemu.create_session()
|
||||
session.broker.addserver(daemon, "127.0.0.1", CORE_API_PORT)
|
||||
|
||||
# setup server
|
||||
|
|
18
daemon/tests/test_services.py
Normal file
18
daemon/tests/test_services.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
import os
|
||||
|
||||
from core.service import ServiceManager
|
||||
|
||||
_PATH = os.path.abspath(os.path.dirname(__file__))
|
||||
_SERVICES_PATH = os.path.join(_PATH, "myservices")
|
||||
|
||||
|
||||
class TestServices:
|
||||
def test_import_service(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")
|
|
@ -6,6 +6,7 @@ from core.emane.ieee80211abg import EmaneIeee80211abgModel
|
|||
from core.emulator.emudata import NodeOptions
|
||||
from core.enumerations import NodeTypes
|
||||
from core.mobility import BasicRangeModel
|
||||
from core.services.utility import SshService
|
||||
|
||||
_XML_VERSIONS = [
|
||||
"0.0",
|
||||
|
@ -68,6 +69,75 @@ class TestXml:
|
|||
assert session.get_object(n1_id)
|
||||
assert session.get_object(n2_id)
|
||||
|
||||
@pytest.mark.parametrize("version", _XML_VERSIONS)
|
||||
def test_xml_ptp_services(self, session, tmpdir, version, ip_prefixes):
|
||||
"""
|
||||
Test xml client methods for a ptp neetwork.
|
||||
|
||||
:param session: session for test
|
||||
:param tmpdir: tmpdir to create data in
|
||||
:param str version: xml version to write and parse
|
||||
:param ip_prefixes: generates ip addresses for nodes
|
||||
"""
|
||||
# create ptp
|
||||
ptp_node = session.add_node(_type=NodeTypes.PEER_TO_PEER)
|
||||
|
||||
# create nodes
|
||||
node_options = NodeOptions(model="host")
|
||||
node_one = session.add_node(node_options=node_options)
|
||||
node_two = session.add_node()
|
||||
|
||||
# link nodes to ptp net
|
||||
for node in [node_one, node_two]:
|
||||
interface = ip_prefixes.create_interface(node)
|
||||
session.add_link(node.objid, ptp_node.objid, interface_one=interface)
|
||||
|
||||
# set custom values for node service\
|
||||
custom_start = 50
|
||||
session.services.setcustomservice(node_one.objid, SshService.name)
|
||||
service = session.services.getcustomservice(node_one.objid, SshService.name)
|
||||
service.startindex = custom_start
|
||||
service_file = SshService.configs[0]
|
||||
file_data = "# test"
|
||||
session.services.setservicefile(node_one.objid, SshService.name, service_file, file_data)
|
||||
|
||||
# instantiate session
|
||||
session.instantiate()
|
||||
|
||||
# get ids for nodes
|
||||
n1_id = node_one.objid
|
||||
n2_id = node_two.objid
|
||||
|
||||
# save xml
|
||||
xml_file = tmpdir.join("session.xml")
|
||||
file_path = xml_file.strpath
|
||||
session.save_xml(file_path, version)
|
||||
|
||||
# verify xml file was created and can be parsed
|
||||
assert xml_file.isfile()
|
||||
assert ElementTree.parse(file_path)
|
||||
|
||||
# stop current session, clearing data
|
||||
session.shutdown()
|
||||
|
||||
# verify nodes have been removed from session
|
||||
with pytest.raises(KeyError):
|
||||
assert not session.get_object(n1_id)
|
||||
with pytest.raises(KeyError):
|
||||
assert not session.get_object(n2_id)
|
||||
|
||||
# load saved xml
|
||||
session.open_xml(file_path, start=True)
|
||||
|
||||
# retrieve custom service
|
||||
service = session.services.getcustomservice(node_one.objid, SshService.name)
|
||||
|
||||
# verify nodes have been recreated
|
||||
assert session.get_object(n1_id)
|
||||
assert session.get_object(n2_id)
|
||||
assert service.startindex == custom_start
|
||||
assert service.configtxt.get(service_file) == file_data
|
||||
|
||||
@pytest.mark.parametrize("version", _XML_VERSIONS)
|
||||
def test_xml_mobility(self, session, tmpdir, version, ip_prefixes):
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue