libra/tests/test_worker_controller.py
David Shrewsbury ae8952dea7 Add support for version discovery to worker.
The worker now supports a DISCOVER message that can be sent to it
to discover which version of the JSON message format that it supports.
The Gearman function name that it registers is now simply the hostname
and no longer includes 'lbaas-<VERSION>-' as a prefix.

Change-Id: Ib34ae424e5461b3b1f8df601a6e7a1fd99c48c05
2012-11-26 14:25:05 -05:00

137 lines
4.3 KiB
Python

import logging
import mock_objects
import unittest
from libra.worker.controller import LBaaSController as c
from libra.worker.drivers.haproxy.driver import HAProxyDriver
class TestWorkerController(unittest.TestCase):
def setUp(self):
self.logger = logging.getLogger('test_worker_controller')
self.lh = mock_objects.MockLoggingHandler()
self.logger.setLevel(logging.DEBUG)
self.logger.addHandler(self.lh)
self.driver = HAProxyDriver('mock_objects.FakeOSServices')
def tearDown(self):
pass
def testBadAction(self):
msg = {
c.ACTION_FIELD: 'BOGUS'
}
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn(c.RESPONSE_FIELD, response)
self.assertEquals(response[c.RESPONSE_FIELD], c.RESPONSE_FAILURE)
def testUpdate(self):
msg = {
c.ACTION_FIELD: 'UPDATE',
'loadbalancers': [
{
'protocol': 'http',
'nodes': [
{
'address': '10.0.0.1',
'port': 80
}
]
}
]
}
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn(c.RESPONSE_FIELD, response)
self.assertEquals(response[c.RESPONSE_FIELD], c.RESPONSE_SUCCESS)
def testSuspend(self):
msg = {
c.ACTION_FIELD: 'SUSPEND'
}
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn(c.RESPONSE_FIELD, response)
self.assertEquals(response[c.RESPONSE_FIELD], c.RESPONSE_SUCCESS)
def testEnable(self):
msg = {
c.ACTION_FIELD: 'ENABLE'
}
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn(c.RESPONSE_FIELD, response)
self.assertEquals(response[c.RESPONSE_FIELD], c.RESPONSE_SUCCESS)
def testDelete(self):
msg = {
c.ACTION_FIELD: 'DELETE'
}
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn(c.RESPONSE_FIELD, response)
self.assertEquals(response[c.RESPONSE_FIELD], c.RESPONSE_SUCCESS)
def testCreateMissingLBs(self):
msg = {
c.ACTION_FIELD: 'UPDATE'
}
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn('badRequest', response)
def testCreateMissingNodes(self):
msg = {
c.ACTION_FIELD: 'UPDATE',
'loadbalancers': [ { 'protocol': 'http' } ]
}
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn('badRequest', response)
def testCreateMissingProto(self):
msg = {
c.ACTION_FIELD: 'UPDATE',
'loadbalancers': [
{
'nodes': [
{
'address': '10.0.0.1',
'port': 80
}
]
}
]
}
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn('badRequest', response)
def testBadAlgorithm(self):
msg = {
c.ACTION_FIELD: 'UPDATE',
'loadbalancers': [
{
'protocol': 'http',
'algorithm': 'BOGUS',
'nodes': [
{
'address': '10.0.0.1',
'port': 80
}
]
}
]
}
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn(c.RESPONSE_FIELD, response)
self.assertEquals(response[c.RESPONSE_FIELD], c.RESPONSE_FAILURE)
def testDiscover(self):
msg = { c.ACTION_FIELD: 'DISCOVER' }
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn('version', response)
self.assertEquals(response[c.RESPONSE_FIELD], c.RESPONSE_SUCCESS)