def setUp(self): super(WorkerTestBase, self).setUp() cfg.CONF.boot_timeout = 1 cfg.CONF.akanda_mgt_service_port = 5000 cfg.CONF.max_retries = 3 cfg.CONF.management_prefix = 'fdca:3ba5:a17a:acda::/64' cfg.CONF.num_worker_threads = 0 self.fake_nova = mock.patch('akanda.rug.worker.nova').start() fake_neutron_obj = mock.patch.object( neutron, 'Neutron', autospec=True).start() fake_neutron_obj.get_ports_for_instance.return_value = ( 'mgt_port', ['ext_port', 'int_port']) fake_neutron_obj.get_router_for_tenant.return_value = ( FakeFetchedResource()) self.fake_neutron = mock.patch.object( neutron, 'Neutron', return_value=fake_neutron_obj).start() self.w = worker.Worker(mock.Mock()) self.addCleanup(mock.patch.stopall) self.target = self.tenant_id r = event.Resource( tenant_id=self.tenant_id, id=self.router_id, driver=router.Router.RESOURCE_NAME, ) self.msg = event.Event( resource=r, crud=event.CREATE, body={'key': 'value'}, )
def setUp(self): super(TestWildcardMessages, self).setUp() self.conf = mock.patch.object(vm_manager.cfg, 'CONF').start() self.conf.boot_timeout = 1 self.conf.akanda_mgt_service_port = 5000 self.conf.max_retries = 3 self.conf.management_prefix = 'fdca:3ba5:a17a:acda::/64' mock.patch('akanda.rug.worker.nova').start() mock.patch('akanda.rug.worker.quantum').start() self.addCleanup(mock.patch.stopall) self.w = worker.Worker(0, mock.Mock()) # Create some tenants for msg in [ event.Event( tenant_id='98dd9c41-d3ac-4fd6-8927-567afa0b8fc3', router_id='ABCD', crud=event.CREATE, body={'key': 'value'}, ), event.Event( tenant_id='ac194fc5-f317-412e-8611-fb290629f624', router_id='EFGH', crud=event.CREATE, body={'key': 'value'}, ) ]: self.w.handle_message(msg.tenant_id, msg)
def testIgnoring(self): tmpdir = tempfile.mkdtemp() fullname = os.path.join(tmpdir, 'ac194fc5-f317-412e-8611-fb290629f624') with open(fullname, 'a'): os.utime(fullname, None) self.addCleanup(lambda: os.unlink(fullname) and os.rmdir(tmpdir)) w = worker.Worker(0, mock.Mock(), ignore_directory=tmpdir) tenant_id = '98dd9c41-d3ac-4fd6-8927-567afa0b8fc3' router_id = 'ac194fc5-f317-412e-8611-fb290629f624' msg = event.Event( tenant_id=tenant_id, router_id=router_id, crud=event.CREATE, body={'key': 'value'}, ) # Create the router manager and state machine so we can # replace the send_message() method with a mock. trm = w._get_trms(tenant_id)[0] sm = trm.get_state_machines(msg, worker.WorkerContext())[0] with mock.patch.object(sm, 'send_message') as meth: # The router id is being ignored, so the send_message() # method shouldn't ever be invoked. meth.side_effect = AssertionError('send_message was called') w.handle_message(tenant_id, msg)
def test(self): w = worker.Worker(0, mock.Mock()) tenant_id = '98dd9c41-d3ac-4fd6-8927-567afa0b8fc3' router_id = 'ac194fc5-f317-412e-8611-fb290629f624' msg = event.Event( tenant_id=tenant_id, router_id=router_id, crud=event.CREATE, body={'key': 'value'}, ) # Create the router manager and state machine so we can # replace the update() method with a mock. trm = w._get_trms(tenant_id)[0] sm = trm.get_state_machines(msg, self.worker_context)[0] with mock.patch.object(sm, 'update') as meth: w.handle_message(tenant_id, msg) # Add a null message so the worker loop will exit. We have # to do this directly, because if we do it through # handle_message() that triggers shutdown logic that keeps # the loop from working properly. w.work_queue.put(None) # We aren't using threads (and we trust that threads do # work) so we just invoke the thread target ourselves to # pretend. used_context = w._thread_target() meth.assert_called_once_with(used_context)
def setUp(self): super(TestCreatingRouter, self).setUp() self.conf = mock.patch.object(vm_manager.cfg, 'CONF').start() self.conf.boot_timeout = 1 self.conf.akanda_mgt_service_port = 5000 self.conf.max_retries = 3 self.conf.management_prefix = 'fdca:3ba5:a17a:acda::/64' mock.patch('akanda.rug.worker.nova').start() mock.patch('akanda.rug.worker.quantum').start() self.addCleanup(mock.patch.stopall) self.w = worker.Worker(0, mock.Mock()) self.tenant_id = '98dd9c41-d3ac-4fd6-8927-567afa0b8fc3' self.router_id = 'ac194fc5-f317-412e-8611-fb290629f624' self.hostname = 'akanda' self.msg = event.Event( tenant_id=self.tenant_id, router_id=self.router_id, crud=event.CREATE, body={'key': 'value'}, ) self.w.handle_message(self.tenant_id, self.msg)
def test_stop_threads(self): self.w = worker.Worker(1, mock.Mock()) original_queue = self.w.work_queue self.assertTrue(self.w._keep_going) self.w._shutdown() self.assertFalse(self.w._keep_going) new_queue = self.w.work_queue self.assertIsNot(original_queue, new_queue)
def testWithIgnores(self): tmpdir = tempfile.mkdtemp() fullname = os.path.join(tmpdir, 'this-router-id') with open(fullname, 'a'): os.utime(fullname, None) self.addCleanup(lambda: os.unlink(fullname) and os.rmdir(tmpdir)) w = worker.Worker(0, mock.Mock(), ignore_directory=tmpdir) ignored = w._get_routers_to_ignore() self.assertEqual(set(['this-router-id']), ignored)
def test_handle_message_report_status(self): self.w = worker.Worker(0, mock.Mock()) with mock.patch('akanda.rug.worker.cfg.CONF') as conf: self.w.handle_message( 'debug', event.Event('*', '', event.COMMAND, {'payload': { 'command': commands.WORKERS_DEBUG }})) self.assertTrue(conf.log_opt_values.called)
def test_report_status_dispatched(self): self.w = worker.Worker(0, mock.Mock()) with mock.patch.object(self.w, 'report_status') as meth: self.w.handle_message( 'debug', event.Event('*', '', event.COMMAND, {'payload': { 'command': commands.WORKERS_DEBUG }})) meth.assert_called_once_with()
def testManage(self): w = worker.Worker(0, mock.Mock()) w._debug_routers = set(['this-router-id']) w.handle_message( '*', event.Event( '*', '', event.COMMAND, { 'payload': { 'command': commands.ROUTER_MANAGE, 'router_id': 'this-router-id' } }), ) self.assertEqual(set(), w._debug_routers)
def setUp(self): super(TestConfigReload, self).setUp() self.conf = mock.patch.object(worker.cfg, 'CONF').start() self.conf.boot_timeout = 1 self.conf.akanda_mgt_service_port = 5000 self.conf.max_retries = 3 self.conf.management_prefix = 'fdca:3ba5:a17a:acda::/64' mock.patch('akanda.rug.worker.nova').start() mock.patch('akanda.rug.worker.quantum').start() self.w = worker.Worker(0, mock.Mock()) self.addCleanup(mock.patch.stopall)
def test_stop_threads_notifier(self, producer, exchange, broker): notifier = notifications.Publisher('topic') w = worker.Worker(notifier) self.assertTrue(notifier) w._shutdown() self.assertFalse(w.notifier._t)
def testNoIgnores(self): tmpdir = tempfile.mkdtemp() self.addCleanup(lambda: os.rmdir(tmpdir)) w = worker.Worker(0, mock.Mock(), ignore_directory=tmpdir) ignored = w._get_routers_to_ignore() self.assertEqual(set(), ignored)
def testNoIgnorePath(self): w = worker.Worker(0, mock.Mock(), ignore_directory=None) ignored = w._get_routers_to_ignore() self.assertEqual(set(), ignored)
def test_stop_threads_notifier(self, producer, exchange, broker): notifier = notifications.Publisher('url', 'quantum', 'topic') self.w = worker.Worker(0, notifier) self.assertTrue(self.w.notifier._t) self.w._shutdown() self.assertFalse(self.w.notifier._t)
def test_shutdown_on_null_message(self): self.w = worker.Worker(0, mock.Mock()) with mock.patch.object(self.w, '_shutdown') as meth: self.w.handle_message(None, None) meth.assert_called_once_with()