def init(statsd_obj): global statsd, statsd_timer statsd = statsd_obj statsd_timer = statsd.get_timer() possible_notifiers.append(email_notifier.EmailNotifier(log)) possible_notifiers.append(webhook_notifier.WebhookNotifier(log)) possible_notifiers.append(pagerduty_notifier.PagerdutyNotifier(log))
def notify(self, smtp_stub, metric, mock_smtp): mock_smtp.SMTP = smtp_stub mock_log = mock.MagicMock() mock_log.warn = self.trap.append mock_log.error = self.trap.append email = email_notifier.EmailNotifier(mock_log) email.config(self.email_config) alarm_dict = alarm(metric) notification = Notification('email', 0, 1, 'email notification', '*****@*****.**', 0, alarm_dict) self.trap.append(email.send_notification(notification))
def test_smtp_sendmail_smtp_None(self, mock_smtp): """Email that fails on smtp_connect twice """ metrics = [] metric_data = {'dimensions': {'hostname': 'foo1', 'service': 'bar1'}} metrics.append(metric_data) metric_data = {'dimensions': {'hostname': 'foo2', 'service': 'bar2'}} metrics.append(metric_data) mock_log = mock.MagicMock() mock_log.warn = self.trap.append mock_log.error = self.trap.append mock_log.debug = self.trap.append mock_log.info = self.trap.append mock_log.exception = self.trap.append mock_smtp.SMTP.return_value = None mock_smtp.SMTP.side_effect = [socket.error, socket.error, socket.error] mock_smtp.sendmail.side_effect = [ smtplib.SMTPServerDisconnected, smtplib.SMTPServerDisconnected ] # There has to be a better way to preserve exception definitions when # we're mocking access to a library mock_smtp.SMTPServerDisconnected = smtplib.SMTPServerDisconnected mock_smtp.SMTPException = smtplib.SMTPException email = email_notifier.EmailNotifier(mock_log) email.config(self.email_config) del self.trap[:] alarm_dict = alarm(metrics) notification = Notification('email', 0, 1, 'email notification', '*****@*****.**', 0, alarm_dict) email_result = email.send_notification(notification) self.assertFalse(email_result) self.assertIn( "Connecting to Email Server {}".format( self.email_config['server']), self.trap)
def test_smtp_sendmail_failed_connection_twice(self, mock_smtp): """Email that fails on smtp_connect twice """ metrics = [] metric_data = {'dimensions': {'hostname': 'foo1', 'service': 'bar1'}} metrics.append(metric_data) metric_data = {'dimensions': {'hostname': 'foo2', 'service': 'bar2'}} metrics.append(metric_data) mock_log = mock.MagicMock() mock_log.warn = self.trap.append mock_log.error = self.trap.append mock_log.debug = self.trap.append mock_log.info = self.trap.append mock_log.exception = self.trap.append # mock_smtp.SMTP.return_value = mock_smtp mock_smtp.SMTP.side_effect = [ mock_smtp, smtplib.SMTPServerDisconnected, socket.error ] mock_smtp.sendmail.side_effect = [ smtplib.SMTPServerDisconnected, smtplib.SMTPServerDisconnected ] # There has to be a better way to preserve exception definitions when # we're mocking access to a library mock_smtp.SMTPServerDisconnected = smtplib.SMTPServerDisconnected mock_smtp.SMTPException = smtplib.SMTPException email = email_notifier.EmailNotifier(mock_log) email.config(self.email_config) alarm_dict = alarm(metrics) notification = Notification('email', 0, 1, 'email notification', '*****@*****.**', 0, alarm_dict) self.trap.append(email.send_notification(notification)) self.assertIn( "SMTP server disconnected. Will reconnect and retry message.", self.trap) self.assertIn("Unable to connect to email server.", self.trap)