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
                    )
Example #2
0
 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', [])
Example #3
0
 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])
Example #4
0
 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
     )
Example #5
0
 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])
Example #6
0
    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)
Example #7
0
 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])
Example #8
0
 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()
Example #9
0
 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)