def _call_drivers(self, method_name, context, raise_orig_exc=False): """Helper method for calling a method across all drivers. :param method_name: name of the method to call :param context: context parameter to pass to each method call :param raise_orig_exc: whether or not to raise the original driver exception, or use a general one """ for driver in self.ordered_drivers: try: getattr(driver.obj, method_name)(context) except Exception as e: # This is an internal failure. LOG.exception(e) LOG.error( "Flow Classifier driver '%(name)s' " "failed in %(method)s", {'name': driver.name, 'method': method_name} ) if raise_orig_exc: raise else: raise fc_exc.FlowClassifierDriverError( method=method_name )
def test_create_flow_classifier_driver_manager_exception(self): self.fake_driver_manager.create_flow_classifier = mock.Mock( side_effect=fc_exc.FlowClassifierDriverError( method='create_flow_classifier' ) ) with self.port( name='test1' ) as port: self._create_flow_classifier( self.fmt, {'logical_source_port': port['port']['id']}, expected_res_status=500) driver_manager = self.fake_driver_manager create_flow_classifier_precommit = ( driver_manager.create_flow_classifier_precommit) create_flow_classifier_precommit.assert_called_once_with( mock.ANY ) driver_manager.create_flow_classifier.assert_called_once_with( mock.ANY ) driver_manager.delete_flow_classifier.assert_called_once_with( mock.ANY ) self._test_list_resources('flow_classifier', [])
def test_update_flow_classifier_driver_manager_exception(self): self.fake_driver_manager.update_flow_classifier = mock.Mock( side_effect=fc_exc.FlowClassifierDriverError( method='update_flow_classifier' ) ) with self.port( name='test1' ) as port: with self.flow_classifier(flow_classifier={ 'name': 'test1', 'logical_source_port': port['port']['id'] }) as fc: self.assertIn('flow_classifier', fc) original_flow_classifier = fc['flow_classifier'] req = self.new_update_request( 'flow_classifiers', {'flow_classifier': {'name': 'test2'}}, fc['flow_classifier']['id'] ) updated_flow_classifier = copy.copy(original_flow_classifier) updated_flow_classifier['name'] = 'test2' res = req.get_response(self.ext_api) self.assertEqual(res.status_int, 500) driver_manager = self.fake_driver_manager driver_manager.update_flow_classifier.assert_called_once_with( mock.ANY ) res = self._list('flow_classifiers') self.assertIn('flow_classifiers', res) self.assertItemsEqual( res['flow_classifiers'], [updated_flow_classifier])
def test_create_flow_classifier_driver_manager_exception(self): self.fake_driver_manager.create_flow_classifier = mock.Mock( side_effect=fc_exc.FlowClassifierDriverError( method='create_flow_classifier' ) ) self._create_flow_classifier( self.fmt, {}, expected_res_status=500) self._test_list_resources('flow_classifier', []) driver_manager = self.fake_driver_manager driver_manager.delete_flow_classifier.assert_called_once_with( mock.ANY )
def test_delete_flow_classifier_driver_manager_exception(self): self.fake_driver_manager.delete_flow_classifier = mock.Mock( side_effect=fc_exc.FlowClassifierDriverError( method='delete_flow_classifier' ) ) with self.flow_classifier(flow_classifier={ 'name': 'test1' }, do_delete=False) as fc: req = self.new_delete_request( 'flow_classifiers', fc['flow_classifier']['id'] ) res = req.get_response(self.ext_api) self.assertEqual(res.status_int, 500) self._test_list_resources('flow_classifier', [fc])
def _call_drivers(self, method_name, context): """Helper method for calling a method across all drivers. :param method_name: name of the method to call :param context: context parameter to pass to each method call :param continue_on_failure: whether or not to continue to call all SFC drivers once one has raised an exception if any Flow Classifier driver call fails. """ for driver in self.ordered_drivers: try: getattr(driver.obj, method_name)(context) except Exception as e: # This is an internal failure. LOG.exception(e) LOG.error( _LE("Flow Classifier driver '%(name)s'" "failed in %(method)s"), { 'name': driver.name, 'method': method_name }) raise fc_exc.FlowClassifierDriverError(method=method_name)
def test_delete_flow_classifier_driver_manager_exception(self): self.fake_driver_manager.delete_flow_classifier = mock.Mock( side_effect=fc_exc.FlowClassifierDriverError( method='delete_flow_classifier' ) ) with self.port( name='test1' ) as port: with self.flow_classifier(flow_classifier={ 'name': 'test1', 'logical_source_port': port['port']['id'] }, do_delete=False) as fc: req = self.new_delete_request( 'flow_classifiers', fc['flow_classifier']['id'] ) res = req.get_response(self.ext_api) self.assertEqual(res.status_int, 500) driver_manager = self.fake_driver_manager driver_manager.delete_flow_classifier.assert_called_once_with( mock.ANY ) self._test_list_resources('flow_classifier', [fc])
def test_delete_flow_classifier_precommit_driver_manager_exception(self): self.fake_driver_manager.delete_flow_classifier_precommit = mock.Mock( side_effect=fc_exc.FlowClassifierDriverError( method='delete_flow_classifier_precommit')) self._test_delete_flow_classifier_driver_manager_exception()
def test_update_flow_classifier_postcommit_driver_manager_exception(self): self.fake_driver_manager.update_flow_classifier_postcommit = mock.Mock( side_effect=fc_exc.FlowClassifierDriverError( method='update_flow_classifier_postcommit')) self._test_update_flow_classifier_driver_manager_exception(True)