From ad248b7c005661e6565f6be12b3a25713f5d8aec Mon Sep 17 00:00:00 2001
From: Dan Albert <danalbert@google.com>
Date: Mon, 12 Jan 2015 12:25:31 -0800
Subject: [PATCH] Guard against @google.com.example.com.

Begin adding some unit tests. Testing the Jenkins interface will
probably be difficult, but testing that we can properly handle
messages from Gerrit is easy enough.

Change-Id: Id7e8e175e0f064fd10715febe40040a65564c701
---
 tools/bionicbb/gmail_listener.py      | 11 +++++++++--
 tools/bionicbb/test_gmail_listener.py | 21 +++++++++++++++++++++
 2 files changed, 30 insertions(+), 2 deletions(-)
 create mode 100644 tools/bionicbb/test_gmail_listener.py

diff --git a/tools/bionicbb/gmail_listener.py b/tools/bionicbb/gmail_listener.py
index 455d27084..2f19454b6 100644
--- a/tools/bionicbb/gmail_listener.py
+++ b/tools/bionicbb/gmail_listener.py
@@ -51,6 +51,13 @@ def get_headers(msg):
     return headers
 
 
+def should_skip_message(gerrit_info):
+    match = re.search(r'<(\S+)>$', gerrit_info['Owner'])
+    if match:
+        return not match.group(1).endswith('@google.com')
+    raise RuntimeError('Gerrit info missing Gerrit-Owner info.')
+
+
 def build_service():
     from apiclient.discovery import build
     from oauth2client.client import flow_from_clientsecrets
@@ -200,7 +207,7 @@ def build_project(gerrit_info, dry_run):
 
 
 def handle_change(gerrit_info, _, dry_run):
-    if '@google.com' not in gerrit_info['Owner']:
+    if should_skip_message(gerrit_info):
         return True
     return build_project(gerrit_info, dry_run)
 handle_newchange = handle_change
@@ -233,7 +240,7 @@ def handle_comment(gerrit_info, body, dry_run):
         drop_rejection(gerrit_info, dry_run)
 
     # TODO(danalbert): Needs to be based on the account that made the comment.
-    if '@google.com' not in gerrit_info['Owner']:
+    if should_skip_message(gerrit_info):
         return True
 
     command_map = {
diff --git a/tools/bionicbb/test_gmail_listener.py b/tools/bionicbb/test_gmail_listener.py
new file mode 100644
index 000000000..feb796111
--- /dev/null
+++ b/tools/bionicbb/test_gmail_listener.py
@@ -0,0 +1,21 @@
+import gmail_listener
+import unittest
+
+
+class TestGerritParsers(unittest.TestCase):
+    def test_should_skip_message(self):
+        info = gmail_listener.get_gerrit_info(
+            'Gerrit-Owner: Some Googler <somegoogler@google.com>\n')
+        self.assertFalse(gmail_listener.should_skip_message(info))
+
+        info = gmail_listener.get_gerrit_info(
+            'Gerrit-Owner: Fake Googler <fakegoogler@google.com.foo.com>\n')
+        self.assertTrue(gmail_listener.should_skip_message(info))
+
+        info = gmail_listener.get_gerrit_info(
+            'Gerrit-Owner: John Doe <johndoe@example.com>\n')
+        self.assertTrue(gmail_listener.should_skip_message(info))
+
+
+if __name__ == '__main__':
+    unittest.main()