Fix client create funtion

Minor typo bugs in the create function
Also add test cases for delete and create
This commit is contained in:
Andrew Hutchings
2012-10-22 14:56:09 +01:00
parent 2c64eb5ba5
commit a5374619cd
2 changed files with 83 additions and 2 deletions

View File

@@ -57,14 +57,14 @@ class LibraAPI(object):
if args.protocol is not None: if args.protocol is not None:
data['protocol'] = args.protocol data['protocol'] = args.protocol
for node in args.node: for node in args.node:
addr = args.node.split(':') addr = node.split(':')
nodes.append({'address': addr[0], 'port': addr[1], nodes.append({'address': addr[0], 'port': addr[1],
'condition': 'ENABLED'}) 'condition': 'ENABLED'})
data['nodes'] = nodes data['nodes'] = nodes
if args.vip is not None: if args.vip is not None:
data['virtualIps'] = [{'id': args.vip}] data['virtualIps'] = [{'id': args.vip}]
resp, body = self._post('/loadbalancers', data) resp, body = self._post('/loadbalancers', body=data)
column_names = ['ID', 'Name', 'Protocol', 'Port', 'Algorithm', column_names = ['ID', 'Name', 'Protocol', 'Port', 'Algorithm',
'Status', 'Created', 'Updated', 'IPs', 'Nodes'] 'Status', 'Created', 'Updated', 'IPs', 'Nodes']
columns = ['id', 'name', 'protocol', 'port', 'algorithm', 'status', columns = ['id', 'name', 'protocol', 'port', 'algorithm', 'status',

View File

@@ -3,6 +3,7 @@ import json
import mock import mock
import httplib2 import httplib2
import sys import sys
import novaclient
from StringIO import StringIO from StringIO import StringIO
from libra.client.libraapi import LibraAPI from libra.client.libraapi import LibraAPI
@@ -10,6 +11,21 @@ class DummyArgs(object):
def __init__(self): def __init__(self):
self.lbid = 2000 self.lbid = 2000
class DummyCreateArgs(object):
def __init__(self):
self.name = 'a-new-loadbalancer'
self.node = ['10.1.1.1:80', '10.1.1.2:81']
self.port = None
self.protocol = None
self.vip = None
class MockLibraAPI(LibraAPI):
def __init__(self, username, password, tenant, auth_url, region):
self.postdata = None
return super(MockLibraAPI, self).__init__(username, password, tenant, auth_url, region)
def _post(self, url, **kwargs):
self.postdata = kwargs['body']
return super(MockLibraAPI, self)._post(url, **kwargs)
class TestLBaaSClientLibraAPI(unittest.TestCase): class TestLBaaSClientLibraAPI(unittest.TestCase):
def setUp(self): def setUp(self):
@@ -122,3 +138,68 @@ class TestLBaaSClientLibraAPI(unittest.TestCase):
finally: finally:
sys.stdout = orig sys.stdout = orig
def testDeleteFailLb(self):
fake_response = httplib2.Response({"status": '500'})
fake_body = ''
mock_request = mock.Mock(return_value=(fake_response, fake_body))
with mock.patch.object(httplib2.Http, "request", mock_request):
with mock.patch('time.time', mock.Mock(return_value=1234)):
with self.assertRaises(novaclient.exceptions.ClientException):
args = DummyArgs()
self.api.delete_lb(args)
def testCreateLb(self):
""" TODO: Check response data too """
fake_response = httplib2.Response({"status": '202'})
fake_body = json.dumps({
'name': 'a-new-loadbalancer',
'id': '144',
'protocol': 'HTTP',
'port': '83',
'algorithm': 'ROUND_ROBIN',
'status': 'BUILD',
'created': '2011-04-13T14:18:07Z',
'updated': '2011-04-13T14:18:07Z',
'virtualIps': [
{
'address': '15.0.0.1',
'id': '39',
'type': 'PUBLIC',
'ipVersion': 'IPV4',
}
],
'nodes': [
{
'address': '10.1.1.1',
'id': '653',
'port': '80',
'status': 'ONLINE',
'condition': 'ENABLED'
}
]
})
post_compare = {
"name": "a-new-loadbalancer",
"nodes": [
{
"address": "10.1.1.1",
"condition": "ENABLED",
"port": "80"
},
{
"address": "10.1.1.2",
"condition": "ENABLED",
"port": "81"
}
]
}
mock_request = mock.Mock(return_value=(fake_response, fake_body))
with mock.patch.object(httplib2.Http, "request", mock_request):
with mock.patch('time.time', mock.Mock(return_value=1234)):
api = MockLibraAPI('username', 'password', 'tenant', 'auth_test', 'region')
api.nova.management_url = "http://example.com"
api.nova.auth_token = "token"
args = DummyCreateArgs()
api.create_lb(args)
self.assertEquals(post_compare, api.postdata)