libra/tests/test_worker_controller.py
David Shrewsbury f781ee9350 Add LB id to the worker archive API for Swift.
Swift archiving requires the load balancer ID to create the container
name.

Change-Id: I2d4a57f2aa50b7a2f65c52de727e1469d35b0987
2013-03-22 13:34:03 -04:00

232 lines
7.8 KiB
Python

import logging
import testtools
import tests.mock_objects
from libra.worker.controller import LBaaSController as c
from libra.worker.drivers.base import LoadBalancerDriver
from libra.worker.drivers.haproxy.driver import HAProxyDriver
class TestWorkerController(testtools.TestCase):
def setUp(self):
super(TestWorkerController, self).setUp()
self.logger = logging.getLogger('test_worker_controller')
self.lh = tests.mock_objects.MockLoggingHandler()
self.logger.setLevel(logging.DEBUG)
self.logger.addHandler(self.lh)
self.driver = HAProxyDriver('tests.mock_objects.FakeOSServices')
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 testCaseSensitive(self):
msg = {
c.ACTION_FIELD: 'UPDATE',
'LoAdBaLaNcErS': [ { 'protocol': 'http' } ]
}
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn('badRequest', response)
def testUpdate(self):
msg = {
c.ACTION_FIELD: 'UPDATE',
c.LBLIST_FIELD: [
{
'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',
c.LBLIST_FIELD: [ { 'protocol': 'http' } ]
}
controller = c(self.logger, self.driver, msg)
response = controller.run()
self.assertIn('badRequest', response)
def testCreateMissingProto(self):
msg = {
c.ACTION_FIELD: 'UPDATE',
c.LBLIST_FIELD: [
{
'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',
c.LBLIST_FIELD: [
{
'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)
def testArchiveMissingMethod(self):
msg = {
c.ACTION_FIELD: 'ARCHIVE'
}
null_driver = LoadBalancerDriver()
controller = c(self.logger, null_driver, msg)
response = controller.run()
self.assertIn('badRequest', response)
def testArchiveInvalidMethod(self):
msg = {
c.ACTION_FIELD: 'ARCHIVE',
c.OBJ_STORE_TYPE_FIELD: 'bad'
}
null_driver = LoadBalancerDriver()
controller = c(self.logger, null_driver, msg)
response = controller.run()
self.assertIn('badRequest', response)
def testArchiveSwiftRequiredParams(self):
null_driver = LoadBalancerDriver()
# Missing basepath field
msg = {
c.ACTION_FIELD: 'ARCHIVE',
c.OBJ_STORE_TYPE_FIELD: 'Swift',
c.OBJ_STORE_ENDPOINT_FIELD: "https://example.com",
c.OBJ_STORE_TOKEN_FIELD: "XXXX",
c.LBLIST_FIELD: [{'protocol': 'http', 'id': '123'}]
}
controller = c(self.logger, null_driver, msg)
response = controller.run()
self.assertIn('badRequest', response)
# Missing endpoint field
msg = {
c.ACTION_FIELD: 'ARCHIVE',
c.OBJ_STORE_TYPE_FIELD: 'Swift',
c.OBJ_STORE_BASEPATH_FIELD: "/lbaaslogs",
c.OBJ_STORE_TOKEN_FIELD: "XXXX",
c.LBLIST_FIELD: [{'protocol': 'http', 'id': '123'}]
}
controller = c(self.logger, null_driver, msg)
response = controller.run()
self.assertIn('badRequest', response)
# Missing token field
msg = {
c.ACTION_FIELD: 'ARCHIVE',
c.OBJ_STORE_TYPE_FIELD: 'Swift',
c.OBJ_STORE_BASEPATH_FIELD: "/lbaaslogs",
c.OBJ_STORE_ENDPOINT_FIELD: "https://example.com",
c.LBLIST_FIELD: [{'protocol': 'http', 'id': '123'}]
}
controller = c(self.logger, null_driver, msg)
response = controller.run()
self.assertIn('badRequest', response)
# Missing load balancer field
msg = {
c.ACTION_FIELD: 'ARCHIVE',
c.OBJ_STORE_TYPE_FIELD: 'Swift',
c.OBJ_STORE_BASEPATH_FIELD: "/lbaaslogs",
c.OBJ_STORE_ENDPOINT_FIELD: "https://example.com",
c.OBJ_STORE_TOKEN_FIELD: "XXXX"
}
controller = c(self.logger, null_driver, msg)
response = controller.run()
self.assertIn('badRequest', response)
def testArchiveNotImplemented(self):
msg = {
c.ACTION_FIELD: 'ARCHIVE',
c.OBJ_STORE_TYPE_FIELD: 'Swift',
c.OBJ_STORE_BASEPATH_FIELD: "/lbaaslogs",
c.OBJ_STORE_ENDPOINT_FIELD: "https://example.com",
c.OBJ_STORE_TOKEN_FIELD: "XXXX",
c.LBLIST_FIELD: [{'protocol': 'http', 'id': '123'}]
}
null_driver = LoadBalancerDriver()
controller = c(self.logger, null_driver, msg)
response = controller.run()
self.assertEquals(response[c.RESPONSE_FIELD], c.RESPONSE_FAILURE)
self.assertIn(c.ERROR_FIELD, response)
self.assertEquals(response[c.ERROR_FIELD],
"Selected driver does not support ARCHIVE action.")