class NotificationErrorsTestCase(TestWithDatabase): """Test Notification error handling. These tests will throw notifications at the server that will raise exceptions. Some events don't trigger exceptions in themselves, but an exception is created at broadcast. """ induced_error = Failure(ValueError("Test error")) @defer.inlineCallbacks def setUp(self): yield super(NotificationErrorsTestCase, self).setUp() self.event_sent = defer.Deferred() self.notifier = FakeNotifier(event_sent_deferred=self.event_sent) self.patch(notifier, 'get_notifier', lambda: self.notifier) self.fake_reactor = DummyReactor() self.ssfactory = StorageServerFactory(reactor=self.fake_reactor) protocol = StorageServer() protocol.factory = self.ssfactory protocol.working_caps = ["volumes", "generations"] protocol.session_id = uuid.uuid4() self.patch(self.ssfactory.content, 'get_user_by_id', lambda *a: self.induced_error) self.handler = self.add_memento_handler(logger) @defer.inlineCallbacks def check_event(self, event, **kwargs): """Test an error in node update.""" self.notifier.send_event(event) yield self.event_sent actual = self.handler.records_by_level[logging.ERROR] self.assertEqual(len(actual), 1) expected = '%s in notification %r while calling deliver_%s(**%r)' % ( self.induced_error.value, event, event.event_type, kwargs) self.assertEqual(actual[0].getMessage(), expected) def test_share_created(self): """Test the share events.""" event_args = ( uuid.uuid4(), u"name", uuid.uuid4(), 1, 2, Share.VIEW, False) return self.check_event(ShareCreated(*event_args)) def test_share_deleted(self): """Test the share events.""" event_args = ( uuid.uuid4(), u"name", uuid.uuid4(), 1, 2, Share.VIEW, False) return self.check_event(ShareDeleted(*event_args)) def test_share_declined(self): """Test the share events.""" event_args = ( uuid.uuid4(), u"name", uuid.uuid4(), 1, 2, Share.VIEW, False) return self.check_event(ShareDeclined(*event_args)) def test_share_accepted(self): """Test the share events.""" event_args = ( uuid.uuid4(), u"name", uuid.uuid4(), 1, 2, Share.VIEW, True) return self.check_event( ShareAccepted(*event_args), recipient_id=u'test') def test_udf_delete(self): """Test UDF Delete.""" return self.check_event(UDFDelete(1, uuid.uuid4(), uuid.uuid4())) def test_udf_create(self): """Test UDF Create.""" return self.check_event( UDFCreate(1, uuid.uuid4(), uuid.uuid4(), u"path", uuid.uuid4())) def test_new_volume_gen(self): """Test the new gen for volume events.""" event = VolumeNewGeneration(1, uuid.uuid4(), 77, uuid.uuid4()) return self.check_event(event)
class NotificationErrorsTestCase(TestWithDatabase): """Test Notification error handling. These tests will throw notifications at the server that will raise exceptions. Some events don't trigger exceptions in themselves, but an exception is created at broadcast. """ induced_error = Failure(ValueError("Test error")) @defer.inlineCallbacks def setUp(self): yield super(NotificationErrorsTestCase, self).setUp() self.event_sent = defer.Deferred() self.notifier = FakeNotifier(event_sent_deferred=self.event_sent) self.patch(notifier, 'get_notifier', lambda: self.notifier) self.fake_reactor = DummyReactor() self.ssfactory = StorageServerFactory(reactor=self.fake_reactor) protocol = StorageServer() protocol.factory = self.ssfactory protocol.working_caps = ["volumes", "generations"] protocol.session_id = uuid.uuid4() self.patch(self.ssfactory.content, 'get_user_by_id', lambda *a: self.induced_error) self.handler = self.add_memento_handler(logger) @defer.inlineCallbacks def check_event(self, event, **kwargs): """Test an error in node update.""" self.notifier.send_event(event) yield self.event_sent actual = self.handler.records_by_level[logging.ERROR] self.assertEqual(len(actual), 1) expected = '%s in notification %r while calling deliver_%s(**%r)' % ( self.induced_error.value, event, event.event_type, kwargs) self.assertEqual(actual[0].getMessage(), expected) def test_share_created(self): """Test the share events.""" event_args = (uuid.uuid4(), u"name", uuid.uuid4(), 1, 2, Share.VIEW, False) return self.check_event(ShareCreated(*event_args)) def test_share_deleted(self): """Test the share events.""" event_args = (uuid.uuid4(), u"name", uuid.uuid4(), 1, 2, Share.VIEW, False) return self.check_event(ShareDeleted(*event_args)) def test_share_declined(self): """Test the share events.""" event_args = (uuid.uuid4(), u"name", uuid.uuid4(), 1, 2, Share.VIEW, False) return self.check_event(ShareDeclined(*event_args)) def test_share_accepted(self): """Test the share events.""" event_args = (uuid.uuid4(), u"name", uuid.uuid4(), 1, 2, Share.VIEW, True) return self.check_event(ShareAccepted(*event_args), recipient_id=u'test') def test_udf_delete(self): """Test UDF Delete.""" return self.check_event(UDFDelete(1, uuid.uuid4(), uuid.uuid4())) def test_udf_create(self): """Test UDF Create.""" return self.check_event( UDFCreate(1, uuid.uuid4(), uuid.uuid4(), u"path", uuid.uuid4())) def test_new_volume_gen(self): """Test the new gen for volume events.""" event = VolumeNewGeneration(1, uuid.uuid4(), 77, uuid.uuid4()) return self.check_event(event)