%PDF- %PDF-
| Direktori : /proc/self/root/usr/lib/python2.7/site-packages/salt/daemons/test/ |
| Current File : //proc/self/root/usr/lib/python2.7/site-packages/salt/daemons/test/test_presence.py |
# -*- coding: utf-8 -*-
'''
Raet Ioflo Behavior Unittests
'''
from __future__ import absolute_import, print_function, unicode_literals
import sys
from salt.ext.six.moves import map
import importlib
# pylint: disable=blacklisted-import
if sys.version_info < (2, 7):
import unittest2 as unittest
else:
import unittest
# pylint: enable=blacklisted-import
from ioflo.base.consoling import getConsole
console = getConsole()
from ioflo.aid.odicting import odict
from ioflo.test import testing
from raet.lane.stacking import LaneStack
from raet.stacking import Stack
import salt.utils.stringutils
from salt.utils.event import tagify
def setUpModule():
console.reinit(verbosity=console.Wordage.concise)
def tearDownModule():
pass
class PresenterTestCase(testing.FrameIofloTestCase):
'''
Test case for Salt Raet Presenter deed
'''
def setUp(self):
'''
Call super if override so House Framer and Frame are setup correctly
'''
behaviors = ['salt.daemons.flo', 'salt.daemons.test.plan']
for behavior in behaviors:
mod = importlib.import_module(behavior)
super(PresenterTestCase, self).setUp()
def tearDown(self):
'''
Call super if override so House Framer and Frame are torn down correctly
'''
super(PresenterTestCase, self).tearDown()
def addPresenceInfo(self, stateGrp, name, ip, port):
self.assertIn(stateGrp, ('alloweds', 'aliveds', 'reapeds'))
group = self.store.fetch('.salt.var.presence.{0}'.format(stateGrp))
if group.value is None:
group.value = odict()
remote = Stack()
remote.ha = (ip, port)
group.value[name] = remote
def addAvailable(self, name):
availables = self.store.fetch('.salt.var.presence.availables')
if availables.value is None:
availables.value = set()
availables.value.add(name)
def testContextSetup(self):
'''
Test the context setup procedure used in all the consequence tests works as expected
This test intended to avoid some checks in other tests
'''
console.terse("{0}\n".format(self.testContextSetup.__doc__))
act = self.addEnterDeed("TestOptsSetupMaster")
self.assertIn(act, self.frame.enacts)
self.assertEqual(act.actor, "TestOptsSetupMaster")
act = self.addEnterDeed("SaltRaetManorLaneSetup")
self.assertIn(act, self.frame.enacts)
self.assertEqual(act.actor, "SaltRaetManorLaneSetup")
act = self.addEnterDeed("PresenterTestSetup")
self.assertIn(act, self.frame.enacts)
self.assertEqual(act.actor, "PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.assertIn(act, self.frame.reacts)
self.assertEqual(act.actor, "SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
self.assertDictEqual(
act.actor.Ioinits,
{'opts': salt.utils.stringutils.to_str('.salt.opts'),
'presence_req': salt.utils.stringutils.to_str('.salt.presence.event_req'),
'lane_stack': salt.utils.stringutils.to_str('.salt.lane.manor.stack'),
'alloweds': salt.utils.stringutils.to_str('.salt.var.presence.alloweds'),
'aliveds': salt.utils.stringutils.to_str('.salt.var.presence.aliveds'),
'reapeds': salt.utils.stringutils.to_str('.salt.var.presence.reapeds'),
'availables': salt.utils.stringutils.to_str('.salt.var.presence.availables')})
self.assertTrue(hasattr(act.actor, 'opts'))
self.assertTrue(hasattr(act.actor, 'presence_req'))
self.assertTrue(hasattr(act.actor, 'lane_stack'))
self.assertTrue(hasattr(act.actor, 'alloweds'))
self.assertTrue(hasattr(act.actor, 'aliveds'))
self.assertTrue(hasattr(act.actor, 'reapeds'))
self.assertTrue(hasattr(act.actor, 'availables'))
self.assertIsInstance(act.actor.lane_stack.value, LaneStack)
self.frame.recur()
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceAvailable(self):
'''
Test Presenter 'available' request (A1, B*)
'''
console.terse("{0}\n".format(self.testPresenceAvailable.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Prepare
# add available minions
self.addAvailable('alpha')
self.addAvailable('beta')
self.addPresenceInfo('aliveds', 'alpha', '1.1.1.1', '1234')
self.addPresenceInfo('aliveds', 'beta', '1.2.3.4', '1234')
# add presence request
testStack = self.store.fetch('.salt.test.lane.stack').value
presenceReq = self.store.fetch('.salt.presence.event_req').value
ryn = 'manor'
# general available request format
presenceReq.append({'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': 'available'}})
# missing 'data', fallback to available
presenceReq.append({'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)}})
# missing 'state' in 'data', fallback to available
presenceReq.append({'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {}})
# requested None state, fallback to available
presenceReq.append({'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': None}})
# requested 'present' state that is alias for available
presenceReq.append({'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': 'present'}})
# Test
# process 5 requests at once
self.frame.recur() # run in frame
# Check
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 5)
tag = tagify('present', 'presence')
while testStack.rxMsgs:
msg, sender = testStack.rxMsgs.popleft()
self.assertDictEqual(msg, {'route': {'src': [None, 'manor', None],
'dst': [None, None, 'event_fire']},
'tag': tag,
'data': {'present': {'alpha': '1.1.1.1',
'beta': '1.2.3.4'}}})
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceJoined(self):
'''
Test Presenter 'joined' request (A2)
'''
console.terse("{0}\n".format(self.testPresenceJoined.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Prepare
# add joined minions
# NOTE: for now alloweds are threaded as joineds
self.addPresenceInfo('alloweds', 'alpha', '1.1.1.1', '1234')
self.addPresenceInfo('alloweds', 'beta', '1.2.3.4', '1234')
# add presence request
testStack = self.store.fetch('.salt.test.lane.stack').value
presenceReq = self.store.fetch('.salt.presence.event_req').value
ryn = 'manor'
msg = {'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': 'joined'}}
presenceReq.append(msg)
# Test
self.frame.recur() # run in frame
# Check
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 1)
tag = tagify('present', 'presence')
msg, sender = testStack.rxMsgs.popleft()
self.assertDictEqual(msg, {'route': {'src': [None, 'manor', None],
'dst': [None, None, 'event_fire']},
'tag': tag,
'data': {'joined': {'alpha': '1.1.1.1',
'beta': '1.2.3.4'}}})
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceAllowed(self):
'''
Test Presenter 'allowed' request (A3)
'''
console.terse("{0}\n".format(self.testPresenceAllowed.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Prepare
# add allowed minions
self.addPresenceInfo('alloweds', 'alpha', '1.1.1.1', '1234')
self.addPresenceInfo('alloweds', 'beta', '1.2.3.4', '1234')
# add presence request
testStack = self.store.fetch('.salt.test.lane.stack').value
presenceReq = self.store.fetch('.salt.presence.event_req').value
ryn = 'manor'
msg = {'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': 'allowed'}}
presenceReq.append(msg)
# Test
self.frame.recur() # run in frame
# Check
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 1)
tag = tagify('present', 'presence')
msg, sender = testStack.rxMsgs.popleft()
self.assertDictEqual(msg, {'route': {'src': [None, 'manor', None],
'dst': [None, None, 'event_fire']},
'tag': tag,
'data': {'allowed': {'alpha': '1.1.1.1',
'beta': '1.2.3.4'}}})
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceAlived(self):
'''
Test Presenter 'alived' request (A4)
'''
console.terse("{0}\n".format(self.testPresenceAlived.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Prepare
# add alived minions
self.addPresenceInfo('aliveds', 'alpha', '1.1.1.1', '1234')
self.addPresenceInfo('aliveds', 'beta', '1.2.3.4', '1234')
# add presence request
testStack = self.store.fetch('.salt.test.lane.stack').value
presenceReq = self.store.fetch('.salt.presence.event_req').value
ryn = 'manor'
msg = {'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': 'alived'}}
presenceReq.append(msg)
# Test
self.frame.recur() # run in frame
# Check
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 1)
tag = tagify('present', 'presence')
msg, sender = testStack.rxMsgs.popleft()
self.assertDictEqual(msg, {'route': {'src': [None, 'manor', None],
'dst': [None, None, 'event_fire']},
'tag': tag,
'data': {'alived': {'alpha': '1.1.1.1',
'beta': '1.2.3.4'}}})
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceReaped(self):
'''
Test Presenter 'reaped' request (A5)
'''
console.terse("{0}\n".format(self.testPresenceReaped.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Prepare
# add reaped minions
self.addPresenceInfo('reapeds', 'alpha', '1.1.1.1', '1234')
self.addPresenceInfo('reapeds', 'beta', '1.2.3.4', '1234')
# add presence request
testStack = self.store.fetch('.salt.test.lane.stack').value
presenceReq = self.store.fetch('.salt.presence.event_req').value
ryn = 'manor'
msg = {'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': 'reaped'}}
presenceReq.append(msg)
# Test
self.frame.recur() # run in frame
# Check
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 1)
tag = tagify('present', 'presence')
msg, sender = testStack.rxMsgs.popleft()
self.assertDictEqual(msg, {'route': {'src': [None, 'manor', None],
'dst': [None, None, 'event_fire']},
'tag': tag,
'data': {'reaped': {'alpha': '1.1.1.1',
'beta': '1.2.3.4'}}})
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceNoRequest(self):
'''
Test Presenter with no requests (C1)
'''
console.terse("{0}\n".format(self.testPresenceNoRequest.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Test
self.frame.recur() # run in frame
# Check
testStack = self.store.fetch('.salt.test.lane.stack').value
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 0)
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceUnknownSrc(self):
'''
Test Presenter handles request from unknown (disconnected) source (C2)
'''
console.terse("{0}\n".format(self.testPresenceUnknownSrc.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Prepare
# add presence request
testStack = self.store.fetch('.salt.test.lane.stack').value
presenceReq = self.store.fetch('.salt.presence.event_req').value
ryn = 'manor'
name = 'unknown_name'
self.assertNotEqual(name, testStack.local.name)
msg = {'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, name, None)}}
presenceReq.append(msg)
# Test
self.frame.recur() # run in frame
# Check
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 0)
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceAvailableNoMinions(self):
'''
Test Presenter 'available' request with no minions in the state (D1)
'''
console.terse("{0}\n".format(self.testPresenceAvailableNoMinions.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Prepare
# add presence request
testStack = self.store.fetch('.salt.test.lane.stack').value
presenceReq = self.store.fetch('.salt.presence.event_req').value
ryn = 'manor'
presenceReq.append({'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': 'available'}})
# Test
self.frame.recur() # run in frame
# Check
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 1)
tag = tagify('present', 'presence')
msg, sender = testStack.rxMsgs.popleft()
self.assertDictEqual(msg, {'route': {'src': [None, 'manor', None],
'dst': [None, None, 'event_fire']},
'tag': tag,
'data': {'present': {}}})
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceAvailableOneMinion(self):
'''
Test Presenter 'available' request with one minion in the state (D2)
'''
console.terse("{0}\n".format(self.testPresenceAvailableOneMinion.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Prepare
# add available minions
self.addAvailable('alpha')
self.addPresenceInfo('aliveds', 'alpha', '1.1.1.1', '1234')
# add presence request
testStack = self.store.fetch('.salt.test.lane.stack').value
presenceReq = self.store.fetch('.salt.presence.event_req').value
ryn = 'manor'
presenceReq.append({'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': 'available'}})
# Test
self.frame.recur() # run in frame
# Check
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 1)
tag = tagify('present', 'presence')
msg, sender = testStack.rxMsgs.popleft()
self.assertDictEqual(msg, {'route': {'src': [None, 'manor', None],
'dst': [None, None, 'event_fire']},
'tag': tag,
'data': {'present': {'alpha': '1.1.1.1'}}})
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceAvailableSomeIpUnknown(self):
'''
Test Presenter 'available' request with some minion addresses aren't known (D3)
'''
console.terse("{0}\n".format(self.testPresenceAvailableSomeIpUnknown.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Prepare
# add available minions
self.addAvailable('alpha')
self.addAvailable('beta')
self.addAvailable('gamma')
self.addPresenceInfo('aliveds', 'alpha', '1.1.1.1', '1234')
self.addPresenceInfo('aliveds', 'delta', '1.2.3.4', '1234')
# add presence request
testStack = self.store.fetch('.salt.test.lane.stack').value
presenceReq = self.store.fetch('.salt.presence.event_req').value
ryn = 'manor'
presenceReq.append({'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': 'available'}})
# Test
self.frame.recur() # run in frame
# Check
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 1)
tag = tagify('present', 'presence')
msg, sender = testStack.rxMsgs.popleft()
self.assertDictEqual(msg, {'route': {'src': [None, 'manor', None],
'dst': [None, None, 'event_fire']},
'tag': tag,
'data': {'present': {'alpha': '1.1.1.1',
'beta': None,
'gamma': None}}})
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceAllowedNoMinions(self):
'''
Test Presenter 'allowed' request with no minions in the state (D4)
'''
console.terse("{0}\n".format(self.testPresenceAllowedNoMinions.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Prepare
# add presence request
testStack = self.store.fetch('.salt.test.lane.stack').value
presenceReq = self.store.fetch('.salt.presence.event_req').value
ryn = 'manor'
msg = {'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': 'allowed'}}
presenceReq.append(msg)
# Test
self.frame.recur() # run in frame
# Check
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 1)
tag = tagify('present', 'presence')
msg, sender = testStack.rxMsgs.popleft()
self.assertDictEqual(msg, {'route': {'src': [None, 'manor', None],
'dst': [None, None, 'event_fire']},
'tag': tag,
'data': {'allowed': {}}})
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def testPresenceAllowedOneMinion(self):
'''
Test Presenter 'allowed' request with one minion in the state (D5)
'''
console.terse("{0}\n".format(self.testPresenceAllowedOneMinion.__doc__))
# Bootstrap
self.addEnterDeed("TestOptsSetupMaster")
self.addEnterDeed("SaltRaetManorLaneSetup")
self.addEnterDeed("PresenterTestSetup")
act = self.addRecurDeed("SaltRaetPresenter")
self.resolve() # resolve House, Framer, Frame, Acts, Actors
self.frame.enter()
# Prepare
# add allowed minions
self.addPresenceInfo('alloweds', 'alpha', '1.1.1.1', '1234')
# add presence request
testStack = self.store.fetch('.salt.test.lane.stack').value
presenceReq = self.store.fetch('.salt.presence.event_req').value
ryn = 'manor'
msg = {'route': {'dst': (None, ryn, 'presence_req'),
'src': (None, testStack.local.name, None)},
'data': {'state': 'allowed'}}
presenceReq.append(msg)
# Test
self.frame.recur() # run in frame
# Check
self.assertEqual(len(testStack.rxMsgs), 0)
testStack.serviceAll()
self.assertEqual(len(testStack.rxMsgs), 1)
tag = tagify('present', 'presence')
msg, sender = testStack.rxMsgs.popleft()
self.assertDictEqual(msg, {'route': {'src': [None, 'manor', None],
'dst': [None, None, 'event_fire']},
'tag': tag,
'data': {'allowed': {'alpha': '1.1.1.1'}}})
# Close active stacks servers
act.actor.lane_stack.value.server.close()
testStack = self.store.fetch('.salt.test.lane.stack')
if testStack:
testStack.value.server.close()
def runOne(test):
'''
Unittest Runner
'''
test = PresenterTestCase(test)
suite = unittest.TestSuite([test])
unittest.TextTestRunner(verbosity=2).run(suite)
def runSome():
'''
Unittest runner
'''
tests = []
names = [
'testContextSetup',
'testPresenceAvailable',
'testPresenceJoined',
'testPresenceAllowed',
'testPresenceAlived',
'testPresenceReaped',
'testPresenceNoRequest',
'testPresenceUnknownSrc',
'testPresenceAvailableNoMinions',
'testPresenceAvailableOneMinion',
'testPresenceAvailableSomeIpUnknown',
'testPresenceAllowedNoMinions',
'testPresenceAllowedOneMinion',
]
tests.extend(list(map(PresenterTestCase, names)))
suite = unittest.TestSuite(tests)
unittest.TextTestRunner(verbosity=2).run(suite)
def runAll():
'''
Unittest runner
'''
suite = unittest.TestSuite()
suite.addTest(unittest.TestLoader().loadTestsFromTestCase(PresenterTestCase))
unittest.TextTestRunner(verbosity=2).run(suite)
if __name__ == '__main__' and __package__ is None:
# console.reinit(verbosity=console.Wordage.concise)
runAll() # run all unittests
# runSome() #only run some
# runOne('testPresenceAvailable')