git cl creds-check: add methods analysing .gitcookies.

These methods are used to produce report in the next CL.

BUG=689543

Change-Id: I71b2705ac8b046103b4982d47f7ec97f8ef7818b
Reviewed-on: https://chromium-review.googlesource.com/455838
Commit-Queue: Andrii Shyshkalov <tandrii@chromium.org>
Reviewed-by: Michael Achenbach <machenbach@chromium.org>
diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py
index b52ee60..2aaa984 100755
--- a/tests/git_cl_test.py
+++ b/tests/git_cl_test.py
@@ -447,6 +447,55 @@
         'Cr-Branched-From: somehash-refs/heads/master@{#12}')
 
 
+class GitCookiesCheckerTest(unittest.TestCase):
+  def setUp(self):
+    super(GitCookiesCheckerTest, self).setUp()
+    self.c = git_cl._GitCookiesChecker()
+
+  def mock_hosts_creds(self, subhost_identity_pairs):
+    def ensure_googlesource(h):
+      if not h.endswith(self.c._GOOGLESOURCE):
+        assert not h.endswith('.')
+        return h + '.' + self.c._GOOGLESOURCE
+      return h
+    self.c._all_hosts = [(ensure_googlesource(h), i, '.gitcookies')
+                         for h, i in subhost_identity_pairs]
+
+  def test_analysis_nothing(self):
+    self.c._all_hosts = []
+    self.assertFalse(self.c.has_generic_host())
+    self.assertEqual(set(), self.c.get_conflicting_hosts())
+    self.assertEqual(set(), self.c.get_duplicated_hosts())
+    self.assertEqual(set(), self.c.get_partially_configured_hosts())
+    self.assertEqual(set(), self.c.get_hosts_with_wrong_identities())
+
+  def test_analysis(self):
+    self.mock_hosts_creds([
+      ('.googlesource.com',      'git-example.chromium.org'),
+
+      ('chromium',               'git-example.google.com'),
+      ('chromium-review',        'git-example.google.com'),
+      ('chrome-internal',        'git-example.chromium.org'),
+      ('chrome-internal-review', 'git-example.chromium.org'),
+      ('conflict',               'git-example.google.com'),
+      ('conflict-review',        'git-example.chromium.org'),
+      ('dup',                    'git-example.google.com'),
+      ('dup',                    'git-example.google.com'),
+      ('dup-review',             'git-example.google.com'),
+      ('partial',                'git-example.google.com'),
+    ])
+    self.assertTrue(self.c.has_generic_host())
+    self.assertEqual(set(['conflict.googlesource.com']),
+                     self.c.get_conflicting_hosts())
+    self.assertEqual(set(['dup.googlesource.com']),
+                     self.c.get_duplicated_hosts())
+    self.assertEqual(set(['partial.googlesource.com']),
+                     self.c.get_partially_configured_hosts())
+    self.assertEqual(set(['chromium.googlesource.com',
+                          'chrome-internal.googlesource.com']),
+                     self.c.get_hosts_with_wrong_identities())
+
+
 class TestGitCl(TestCase):
   def setUp(self):
     super(TestGitCl, self).setUp()
@@ -489,7 +538,6 @@
     # It's important to reset settings to not have inter-tests interference.
     git_cl.settings = None
 
-
   def tearDown(self):
     try:
       self.assertEquals([], self.calls)