Update unit tests for mock changes

Change-Id: I22a5c59788add39e25f266d1fd129a806fd0d10e
Closes-Bug: 1474481
This commit is contained in:
Michael Johnson 2015-07-15 17:02:06 +00:00 committed by Adam Harwell
parent 296a194008
commit 17193a0dde
8 changed files with 138 additions and 64 deletions

View File

@ -22,6 +22,7 @@ import subprocess
import flask import flask
import jinja2 import jinja2
import six
from werkzeug import exceptions from werkzeug import exceptions
from octavia.amphorae.backends.agent.api_server import util from octavia.amphorae.backends.agent.api_server import util
@ -71,7 +72,7 @@ def get_haproxy_config(listener_id):
with open(util.config_path(listener_id), 'r') as file: with open(util.config_path(listener_id), 'r') as file:
cfg = file.read() cfg = file.read()
resp = flask.Response(cfg, mimetype='text/plain', ) resp = flask.Response(cfg, mimetype='text/plain', )
resp.headers['ETag'] = hashlib.md5(cfg).hexdigest() resp.headers['ETag'] = hashlib.md5(six.b(cfg)).hexdigest()
return resp return resp
@ -280,15 +281,17 @@ def get_certificate_md5(listener_id, filename):
_check_listener_exists(listener_id) _check_listener_exists(listener_id)
_check_ssl_filename_format(filename) _check_ssl_filename_format(filename)
if not os.path.exists(_cert_file_path(listener_id, filename)): cert_path = _cert_file_path(listener_id, filename)
path_exists = os.path.exists(cert_path)
if not path_exists:
return flask.make_response(flask.jsonify(dict( return flask.make_response(flask.jsonify(dict(
message='Certificate Not Found', message='Certificate Not Found',
details="No certificate with filename: {f}".format( details="No certificate with filename: {f}".format(
f=filename))), 404) f=filename))), 404)
with open(_cert_file_path(listener_id, filename), 'r') as crt_file: with open(cert_path, 'r') as crt_file:
cert = crt_file.read() cert = crt_file.read()
md5 = hashlib.md5(cert).hexdigest() md5 = hashlib.md5(six.b(cert)).hexdigest()
resp = flask.jsonify(dict(md5sum=md5)) resp = flask.jsonify(dict(md5sum=md5))
resp.headers['ETag'] = md5 resp.headers['ETag'] = md5
return resp return resp

View File

@ -44,13 +44,13 @@ for code in six.iterkeys(exceptions.default_exceptions):
# https://127.0.0.1:8443/0.5/listeners/123/haproxy # https://127.0.0.1:8443/0.5/listeners/123/haproxy
@app.route('/' + api_server.VERSION + '/listeners/<listener_id>/haproxy', @app.route('/' + api_server.VERSION + '/listeners/<listener_id>/haproxy',
methods=['PUT']) methods=['PUT'])
def upload_happroxy_config(listener_id): def upload_haproxy_config(listener_id):
return listener.upload_haproxy_config(listener_id) return listener.upload_haproxy_config(listener_id)
@app.route('/' + api_server.VERSION + '/listeners/<listener_id>/haproxy', @app.route('/' + api_server.VERSION + '/listeners/<listener_id>/haproxy',
methods=['GET']) methods=['GET'])
def get_happroxy_config(listener_id): def get_haproxy_config(listener_id):
return listener.get_haproxy_config(listener_id) return listener.get_haproxy_config(listener_id)

View File

@ -35,6 +35,8 @@ if six.PY3:
class ServerTestCase(base.TestCase): class ServerTestCase(base.TestCase):
app = None
def setUp(self): def setUp(self):
self.app = server.app.test_client() self.app = server.app.test_client()
super(ServerTestCase, self).setUp() super(ServerTestCase, self).setUp()
@ -200,7 +202,7 @@ class ServerTestCase(base.TestCase):
json.loads(rv.data.decode('utf-8'))) json.loads(rv.data.decode('utf-8')))
mock_rmtree.assert_called_with('/var/lib/octavia/123') mock_rmtree.assert_called_with('/var/lib/octavia/123')
mock_exists.assert_called_with('/etc/init/haproxy-123.conf') mock_exists.assert_called_with('/etc/init/haproxy-123.conf')
mock_exists.assert_any_called_with('/var/lib/octavia/123/haproxy.pid') mock_exists.assert_any_call('/var/lib/octavia/123/haproxy.pid')
# service is stopped + upstart script # service is stopped + upstart script
mock_exists.side_effect = [True, False, True] mock_exists.side_effect = [True, False, True]
@ -235,7 +237,7 @@ class ServerTestCase(base.TestCase):
@mock.patch('os.path.exists') @mock.patch('os.path.exists')
def test_get_haproxy(self, mock_exists): def test_get_haproxy(self, mock_exists):
CONTENT = six.b("bibble\nbibble") CONTENT = "bibble\nbibble"
mock_exists.side_effect = [False] mock_exists.side_effect = [False]
rv = self.app.get('/' + api_server.VERSION + '/listeners/123/haproxy') rv = self.app.get('/' + api_server.VERSION + '/listeners/123/haproxy')
self.assertEqual(404, rv.status_code) self.assertEqual(404, rv.status_code)
@ -247,7 +249,7 @@ class ServerTestCase(base.TestCase):
rv = self.app.get('/' + api_server.VERSION + rv = self.app.get('/' + api_server.VERSION +
'/listeners/123/haproxy') '/listeners/123/haproxy')
self.assertEqual(200, rv.status_code) self.assertEqual(200, rv.status_code)
self.assertEqual(CONTENT, rv.data) self.assertEqual(six.b(CONTENT), rv.data)
self.assertEqual('text/plain; charset=utf-8', self.assertEqual('text/plain; charset=utf-8',
rv.headers['Content-Type']) rv.headers['Content-Type'])
@ -374,7 +376,7 @@ class ServerTestCase(base.TestCase):
@mock.patch('os.path.exists') @mock.patch('os.path.exists')
def test_get_certificate_md5(self, mock_exists): def test_get_certificate_md5(self, mock_exists):
CONTENT = six.b("TestTest") CONTENT = "TestTest"
mock_exists.side_effect = [False] mock_exists.side_effect = [False]
rv = self.app.get('/' + api_server.VERSION + rv = self.app.get('/' + api_server.VERSION +
'/listeners/123/certificates/test.pem') '/listeners/123/certificates/test.pem')
@ -397,14 +399,14 @@ class ServerTestCase(base.TestCase):
data='TestTest') data='TestTest')
self.assertEqual(400, rv.status_code) self.assertEqual(400, rv.status_code)
mock_exists.side_effect = [True, True]
m = mock.mock_open(read_data=CONTENT) m = mock.mock_open(read_data=CONTENT)
mock_exists.return_value = True
mock_exists.side_effect = None
with mock.patch('%s.open' % BUILTINS, m, create=True): with mock.patch('%s.open' % BUILTINS, m, create=True):
rv = self.app.get('/' + api_server.VERSION + rv = self.app.get('/' + api_server.VERSION +
'/listeners/123/certificates/test.pem') '/listeners/123/certificates/test.pem')
self.assertEqual(200, rv.status_code) self.assertEqual(200, rv.status_code)
self.assertEqual(dict(md5sum=hashlib.md5(CONTENT).hexdigest()), self.assertEqual(dict(md5sum=hashlib.md5(six.b(CONTENT)).hexdigest()),
json.loads(rv.data.decode('utf-8'))) json.loads(rv.data.decode('utf-8')))
@mock.patch('os.path.exists') @mock.patch('os.path.exists')

View File

@ -75,11 +75,21 @@ class TestSshDriver(base.TestCase):
build_conf.assert_called_once_with( build_conf.assert_called_once_with(
listener, listener.default_tls_container, listener, listener.default_tls_container,
listener.sni_containers) listener.sni_containers)
self.driver.client.connect.assert_called_once() self.driver.client.connect.assert_called_once_with(
self.driver.client.open_sftp().assert_called_once() hostname=listener.load_balancer.amphorae[0].lb_network_ip,
self.driver.client.open_sftp().put().assert_called_once() key_filename=self.driver.amp_config.key_path,
self.driver.client.exec_command.assert_called_once() username=self.driver.amp_config.username)
self.driver.client.close.assert_called_once() self.driver.client.open_sftp.assert_called_once_with()
self.driver.client.open_sftp().put.assert_called_once_with(
mock.ANY, mock.ANY
)
self.driver.client.exec_command.assert_has_calls([
mock.call(mock.ANY),
mock.call(mock.ANY),
mock.call(mock.ANY),
mock.call(mock.ANY)
])
self.driver.client.close.assert_called_once_with()
def test_stop(self): def test_stop(self):
# Build sample Listener and VIP configs # Build sample Listener and VIP configs
@ -89,9 +99,14 @@ class TestSshDriver(base.TestCase):
# Execute driver method # Execute driver method
self.driver.start(listener, vip) self.driver.start(listener, vip)
self.driver.client.connect.assert_called_once() self.driver.client.connect.assert_called_once_with(
self.driver.client.exec_command.assert_called_once() hostname=listener.load_balancer.amphorae[0].lb_network_ip,
self.driver.client.close.assert_called_once() key_filename=self.driver.amp_config.key_path,
username=self.driver.amp_config.username)
self.driver.client.exec_command.assert_called_once_with(
'sudo haproxy -f {0}/{1}/haproxy.cfg -p {0}/{1}/{1}.pid'.format(
self.driver.amp_config.base_path, listener.id))
self.driver.client.close.assert_called_once_with()
def test_start(self): def test_start(self):
# Build sample Listener and VIP configs # Build sample Listener and VIP configs
@ -101,11 +116,17 @@ class TestSshDriver(base.TestCase):
# Execute driver method # Execute driver method
self.driver.start(listener, vip) self.driver.start(listener, vip)
self.driver.client.connect.assert_called_once() self.driver.client.connect.assert_called_once_with(
self.driver.client.exec_command.assert_called_once() hostname=listener.load_balancer.amphorae[0].lb_network_ip,
self.driver.client.close.assert_called_once() key_filename=self.driver.amp_config.key_path,
username=self.driver.amp_config.username)
self.driver.client.exec_command.assert_called_once_with(
'sudo haproxy -f {0}/{1}/haproxy.cfg -p {0}/{1}/{1}.pid'.format(
self.driver.amp_config.base_path, listener.id))
self.driver.client.close.assert_called_once_with()
def test_delete(self): def test_delete(self):
# Build sample Listener and VIP configs # Build sample Listener and VIP configs
listener = sample_configs.sample_listener_tuple( listener = sample_configs.sample_listener_tuple(
tls=True, sni=True) tls=True, sni=True)
@ -115,9 +136,18 @@ class TestSshDriver(base.TestCase):
self.driver.delete(listener, vip) self.driver.delete(listener, vip)
# Verify call # Verify call
self.driver.client.connect.assert_called_once() self.driver.client.connect.assert_called_once_with(
self.driver.client.exec_command.assert_called_once() hostname=listener.load_balancer.amphorae[0].lb_network_ip,
self.driver.client.close.assert_called_once() key_filename=self.driver.amp_config.key_path,
username=self.driver.amp_config.username)
exec_command_calls = [
mock.call('sudo kill -9 $(cat {0}/sample_listener_id_1'
'/sample_listener_id_1.pid)'
.format(self.driver.amp_config.base_path)),
mock.call('sudo rm -rf {0}/sample_listener_id_1'.format(
self.driver.amp_config.base_path))]
self.driver.client.exec_command.assert_has_calls(exec_command_calls)
self.driver.client.close.assert_called_once_with()
def test_get_info(self): def test_get_info(self):
pass pass
@ -157,10 +187,11 @@ class TestSshDriver(base.TestCase):
mock.call().get_intermediates()] mock.call().get_intermediates()]
bbq.assert_has_calls(calls_bbq) bbq.assert_has_calls(calls_bbq)
self.driver.client.open_sftp().put( self.driver.client.open_sftp().put.assert_has_calls([
mock.ANY, '{0}/{1}/certificates/{2}'.format( mock.call(mock.ANY, mock.ANY),
self.driver.amp_config.base_path, listener.id, mock.call(mock.ANY, mock.ANY),
pem)).assert_called_once() mock.call(mock.ANY, mock.ANY),
])
def test_get_primary_cn(self): def test_get_primary_cn(self):
cert = mock.MagicMock() cert = mock.MagicMock()
@ -200,4 +231,4 @@ class TestSshDriver(base.TestCase):
tls_tupe = sample_configs.sample_tls_container_tuple( tls_tupe = sample_configs.sample_tls_container_tuple(
certificate='imacert', private_key='imakey', certificate='imacert', private_key='imakey',
intermediates=['imainter', 'imainter2']) intermediates=['imainter', 'imainter2'])
self.assertEqual(expected, self.driver._build_pem(tls_tupe)) self.assertEqual(expected, self.driver._build_pem(tls_tupe))

View File

@ -65,5 +65,5 @@ class TestBaseTaskFlowEngine(base.TestCase):
engine_conf='TESTENGINE', engine_conf='TESTENGINE',
executor='TESTEXECUTOR') executor='TESTEXECUTOR')
_engine_mock.compile.assert_called_once() _engine_mock.compile.assert_called_once_with()
_engine_mock.prepare.assert_called_once() _engine_mock.prepare.assert_called_once_with()

View File

@ -38,7 +38,7 @@ class TestObjectUpdateTasks(base.TestCase):
delete_object = model_tasks.DeleteModelObject() delete_object = model_tasks.DeleteModelObject()
delete_object.execute(self.listener_mock) delete_object.execute(self.listener_mock)
self.listener_mock.delete.assert_called_once() self.listener_mock.delete.assert_called_once_with()
def test_update_listener(self): def test_update_listener(self):

View File

@ -102,15 +102,17 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
amp = cw.create_amphora() amp = cw.create_amphora()
(base_taskflow.BaseTaskFlowEngine._taskflow_load. (base_taskflow.BaseTaskFlowEngine._taskflow_load.
assert_called_once_with('TEST')) assert_called_once_with('TEST'))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
_flow_mock.storage.fetch.assert_called_once() _flow_mock.storage.fetch.assert_called_once_with('amphora')
assert (amp == AMP_ID) assert (amp == AMP_ID)
@ -129,6 +131,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.delete_amphora(AMP_ID) cw.delete_amphora(AMP_ID)
@ -140,7 +144,7 @@ class TestControllerWorker(base.TestCase):
assert_called_once_with('TEST', assert_called_once_with('TEST',
store={'amphora': _amphora_mock})) store={'amphora': _amphora_mock}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'health_monitor_flows.HealthMonitorFlows.' 'health_monitor_flows.HealthMonitorFlows.'
@ -158,6 +162,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.create_health_monitor(_health_mon_mock) cw.create_health_monitor(_health_mon_mock)
@ -168,7 +174,7 @@ class TestControllerWorker(base.TestCase):
'loadbalancer': _load_balancer_mock, 'loadbalancer': _load_balancer_mock,
'vip': _vip_mock})) 'vip': _vip_mock}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'health_monitor_flows.HealthMonitorFlows.' 'health_monitor_flows.HealthMonitorFlows.'
@ -186,6 +192,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.delete_health_monitor(HM_ID) cw.delete_health_monitor(HM_ID)
@ -197,7 +205,7 @@ class TestControllerWorker(base.TestCase):
'loadbalancer': _load_balancer_mock, 'loadbalancer': _load_balancer_mock,
'vip': _vip_mock})) 'vip': _vip_mock}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'health_monitor_flows.HealthMonitorFlows.' 'health_monitor_flows.HealthMonitorFlows.'
@ -215,6 +223,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.update_health_monitor(_health_mon_mock.id, cw.update_health_monitor(_health_mon_mock.id,
HEALTH_UPDATE_DICT) HEALTH_UPDATE_DICT)
@ -227,7 +237,7 @@ class TestControllerWorker(base.TestCase):
'vip': _vip_mock, 'vip': _vip_mock,
'update_dict': HEALTH_UPDATE_DICT})) 'update_dict': HEALTH_UPDATE_DICT}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'listener_flows.ListenerFlows.get_create_listener_flow', 'listener_flows.ListenerFlows.get_create_listener_flow',
@ -244,6 +254,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.create_listener(LB_ID) cw.create_listener(LB_ID)
@ -253,7 +265,7 @@ class TestControllerWorker(base.TestCase):
'loadbalancer': _load_balancer_mock, 'loadbalancer': _load_balancer_mock,
'vip': _vip_mock})) 'vip': _vip_mock}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'listener_flows.ListenerFlows.get_delete_listener_flow', 'listener_flows.ListenerFlows.get_delete_listener_flow',
@ -270,6 +282,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.delete_listener(LB_ID) cw.delete_listener(LB_ID)
@ -279,7 +293,7 @@ class TestControllerWorker(base.TestCase):
constants.VIP: _vip_mock, constants.VIP: _vip_mock,
constants.LOADBALANCER: _load_balancer_mock})) constants.LOADBALANCER: _load_balancer_mock}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'listener_flows.ListenerFlows.get_update_listener_flow', 'listener_flows.ListenerFlows.get_update_listener_flow',
@ -296,6 +310,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.update_listener(LB_ID, LISTENER_UPDATE_DICT) cw.update_listener(LB_ID, LISTENER_UPDATE_DICT)
@ -307,7 +323,7 @@ class TestControllerWorker(base.TestCase):
'update_dict': 'update_dict':
LISTENER_UPDATE_DICT})) LISTENER_UPDATE_DICT}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.load_balancer_flows.' @mock.patch('octavia.controller.worker.flows.load_balancer_flows.'
'LoadBalancerFlows.get_create_load_balancer_flow', 'LoadBalancerFlows.get_create_load_balancer_flow',
@ -333,6 +349,8 @@ class TestControllerWorker(base.TestCase):
mock_amp_repo_get): mock_amp_repo_get):
# Test code path with an existing READY amphora # Test code path with an existing READY amphora
_flow_mock.reset_mock()
store = {constants.LOADBALANCER_ID: LB_ID} store = {constants.LOADBALANCER_ID: LB_ID}
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.create_load_balancer(LB_ID) cw.create_load_balancer(LB_ID)
@ -340,7 +358,7 @@ class TestControllerWorker(base.TestCase):
(base_taskflow.BaseTaskFlowEngine._taskflow_load. (base_taskflow.BaseTaskFlowEngine._taskflow_load.
assert_called_once_with(_flow_mock, store=store)) assert_called_once_with(_flow_mock, store=store))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
self.assertFalse(mock_get_create_amp_for_lb_flow.called) self.assertFalse(mock_get_create_amp_for_lb_flow.called)
@ -390,6 +408,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.delete_load_balancer(LB_ID) cw.delete_load_balancer(LB_ID)
@ -402,7 +422,7 @@ class TestControllerWorker(base.TestCase):
store={'loadbalancer': store={'loadbalancer':
_load_balancer_mock})) _load_balancer_mock}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.load_balancer_flows.' @mock.patch('octavia.controller.worker.flows.load_balancer_flows.'
'LoadBalancerFlows.get_update_load_balancer_flow', 'LoadBalancerFlows.get_update_load_balancer_flow',
@ -419,6 +439,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
change = 'TEST2' change = 'TEST2'
cw.update_load_balancer(LB_ID, change) cw.update_load_balancer(LB_ID, change)
@ -433,7 +455,7 @@ class TestControllerWorker(base.TestCase):
'loadbalancer': 'loadbalancer':
_load_balancer_mock})) _load_balancer_mock}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'member_flows.MemberFlows.get_create_member_flow', 'member_flows.MemberFlows.get_create_member_flow',
@ -450,6 +472,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.create_member(MEMBER_ID) cw.create_member(MEMBER_ID)
@ -460,7 +484,7 @@ class TestControllerWorker(base.TestCase):
'loadbalancer': _load_balancer_mock, 'loadbalancer': _load_balancer_mock,
'vip': _vip_mock})) 'vip': _vip_mock}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'member_flows.MemberFlows.get_delete_member_flow', 'member_flows.MemberFlows.get_delete_member_flow',
@ -477,6 +501,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.delete_member(MEMBER_ID) cw.delete_member(MEMBER_ID)
@ -488,7 +514,7 @@ class TestControllerWorker(base.TestCase):
'vip': _vip_mock, 'vip': _vip_mock,
'loadbalancer': _load_balancer_mock})) 'loadbalancer': _load_balancer_mock}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'member_flows.MemberFlows.get_update_member_flow', 'member_flows.MemberFlows.get_update_member_flow',
@ -505,6 +531,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.update_member(MEMBER_ID, MEMBER_UPDATE_DICT) cw.update_member(MEMBER_ID, MEMBER_UPDATE_DICT)
@ -516,7 +544,7 @@ class TestControllerWorker(base.TestCase):
'vip': _vip_mock, 'vip': _vip_mock,
'update_dict': MEMBER_UPDATE_DICT})) 'update_dict': MEMBER_UPDATE_DICT}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'pool_flows.PoolFlows.get_create_pool_flow', 'pool_flows.PoolFlows.get_create_pool_flow',
@ -533,6 +561,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.create_pool(POOL_ID) cw.create_pool(POOL_ID)
@ -543,7 +573,7 @@ class TestControllerWorker(base.TestCase):
'loadbalancer': _load_balancer_mock, 'loadbalancer': _load_balancer_mock,
'vip': _vip_mock})) 'vip': _vip_mock}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'pool_flows.PoolFlows.get_delete_pool_flow', 'pool_flows.PoolFlows.get_delete_pool_flow',
@ -560,6 +590,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.delete_pool(POOL_ID) cw.delete_pool(POOL_ID)
@ -570,7 +602,7 @@ class TestControllerWorker(base.TestCase):
'loadbalancer': _load_balancer_mock, 'loadbalancer': _load_balancer_mock,
'vip': _vip_mock})) 'vip': _vip_mock}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()
@mock.patch('octavia.controller.worker.flows.' @mock.patch('octavia.controller.worker.flows.'
'pool_flows.PoolFlows.get_update_pool_flow', 'pool_flows.PoolFlows.get_update_pool_flow',
@ -587,6 +619,8 @@ class TestControllerWorker(base.TestCase):
mock_health_mon_repo_get, mock_health_mon_repo_get,
mock_amp_repo_get): mock_amp_repo_get):
_flow_mock.reset_mock()
cw = controller_worker.ControllerWorker() cw = controller_worker.ControllerWorker()
cw.update_pool(POOL_ID, POOL_UPDATE_DICT) cw.update_pool(POOL_ID, POOL_UPDATE_DICT)
@ -598,4 +632,4 @@ class TestControllerWorker(base.TestCase):
'vip': _vip_mock, 'vip': _vip_mock,
'update_dict': POOL_UPDATE_DICT})) 'update_dict': POOL_UPDATE_DICT}))
_flow_mock.run.assert_called_once() _flow_mock.run.assert_called_once_with()

View File

@ -43,20 +43,24 @@ MOCK_NEUTRON_PORT = {'port': {'network_id': '1',
class TestAllowedAddressPairsDriver(base.TestCase): class TestAllowedAddressPairsDriver(base.TestCase):
k_session = None
driver = None
def setUp(self): def setUp(self):
super(TestAllowedAddressPairsDriver, self).setUp() super(TestAllowedAddressPairsDriver, self).setUp()
neutron_patcher = mock.patch('neutronclient.neutron.client.Client', with mock.patch('neutronclient.neutron.client.Client',
autospec=True) autospec=True) as neutron_client:
mock.patch('novaclient.client.Client', autospec=True).start() with mock.patch('novaclient.client.Client', autospec=True):
neutron_client = neutron_patcher.start() client = neutron_client(allowed_address_pairs.NEUTRON_VERSION)
client = neutron_client(allowed_address_pairs.NEUTRON_VERSION) client.list_extensions.return_value = {
client.list_extensions.return_value = { 'extensions': [
'extensions': [{'alias': allowed_address_pairs.AAP_EXT_ALIAS}, {'alias': allowed_address_pairs.AAP_EXT_ALIAS},
{'alias': allowed_address_pairs.SEC_GRP_EXT_ALIAS}]} {'alias': allowed_address_pairs.SEC_GRP_EXT_ALIAS}
self.k_session = mock.patch( ]
'octavia.common.keystone.get_session').start() }
self.driver = allowed_address_pairs.AllowedAddressPairsDriver() self.k_session = mock.patch(
'octavia.common.keystone.get_session').start()
self.driver = allowed_address_pairs.AllowedAddressPairsDriver()
def test_check_extensions_loaded(self): def test_check_extensions_loaded(self):
list_extensions = self.driver.neutron_client.list_extensions list_extensions = self.driver.neutron_client.list_extensions