cbuildbot_launch: Add Monarch metrics.

Add Monarch metrics for cbuildbot_launch, including performance
numbers for CleanBuildroot, and IntialCheckout.

BUG=chromium:721617
TEST=Unittests

Change-Id: I6308a7f019ec27729f24ea25d95c829b610a3343
Reviewed-on: https://chromium-review.googlesource.com/503621
Commit-Ready: Don Garrett <dgarrett@chromium.org>
Tested-by: Don Garrett <dgarrett@chromium.org>
Reviewed-by: Paul Hobbs <phobbs@google.com>
diff --git a/scripts/cbuildbot_launch_unittest.py b/scripts/cbuildbot_launch_unittest.py
index a6b8339..ece44ae 100644
--- a/scripts/cbuildbot_launch_unittest.py
+++ b/scripts/cbuildbot_launch_unittest.py
@@ -21,6 +21,10 @@
 EXPECTED_MANIFEST_URL = 'https://chrome-internal-review.googlesource.com/chromeos/manifest-internal'  # pylint: disable=line-too-long
 
 
+# It's reasonable for unittests to look at internals.
+# pylint: disable=protected-access
+
+
 class FakeException(Exception):
   """Test exception to raise during tests."""
 
@@ -103,7 +107,7 @@
     cbuildbot_launch.RunCbuildbot(options)
 
     self.assertCommandCalled(
-        expected_cmd, cwd=options.buildroot)
+        expected_cmd, cwd=options.buildroot, error_code_ok=True)
 
   def testRunCbuildbotSimple(self):
     """Ensure we invoke cbuildbot correctly."""
@@ -141,7 +145,7 @@
     mock_checkout = self.PatchObject(cbuildbot_launch, 'InitialCheckout',
                                      autospec=True)
 
-    cbuildbot_launch.main(['--buildroot', '/buildroot', 'config'])
+    cbuildbot_launch._main(['--buildroot', '/buildroot', 'config'])
 
     # Did we create the repo instance correctly?
     self.assertEqual(mock_repo_create.mock_calls,
@@ -150,7 +154,8 @@
 
     # Ensure we clean, as expected.
     self.assertEqual(mock_clean.mock_calls,
-                     [mock.call('/buildroot', mock_repo)])
+                     [mock.call('/buildroot', mock_repo,
+                                {'branch_name': 'master'})])
 
     # Ensure we checkout, as expected.
     self.assertEqual(mock_checkout.mock_calls,
@@ -160,7 +165,8 @@
     self.assertCommandCalled(
         ['/buildroot/chromite/bin/cbuildbot',
          'config', '--buildroot', '/buildroot'],
-        cwd='/buildroot')
+        cwd='/buildroot',
+        error_code_ok=True)
 
   def testMainMax(self):
     """Test a larger set of command line options."""
@@ -177,10 +183,10 @@
     mock_checkout = self.PatchObject(cbuildbot_launch, 'InitialCheckout',
                                      autospec=True)
 
-    cbuildbot_launch.main(['--buildroot', '/buildroot',
-                           '--branch', 'branch',
-                           '--git-cache-dir', '/git-cache',
-                           'config'])
+    cbuildbot_launch._main(['--buildroot', '/buildroot',
+                            '--branch', 'branch',
+                            '--git-cache-dir', '/git-cache',
+                            'config'])
 
     # Did we create the repo instance correctly?
     self.assertEqual(mock_repo_create.mock_calls,
@@ -189,7 +195,8 @@
 
     # Ensure we clean, as expected.
     self.assertEqual(mock_clean.mock_calls,
-                     [mock.call('/buildroot', mock_repo)])
+                     [mock.call('/buildroot', mock_repo,
+                                {'branch_name': 'branch'})])
 
     # Ensure we checkout, as expected.
     self.assertEqual(mock_checkout.mock_calls,
@@ -202,7 +209,8 @@
          '--buildroot', '/buildroot',
          '--branch', 'branch',
          '--git-cache-dir', '/git-cache'],
-        cwd='/buildroot')
+        cwd='/buildroot',
+        error_code_ok=True)
 
 
 class CleanBuildrootTest(cros_test_lib.MockTempDirTestCase):
@@ -219,6 +227,8 @@
 
     self.mock_repo = mock.MagicMock()
 
+    self.metrics = {}
+
   def populateBuildroot(self, state=None):
     """Create standard buildroot contents for cleanup."""
     osutils.SafeMakedirs(self.root)
@@ -234,7 +244,7 @@
     """Test CleanBuildroot with no history."""
     self.mock_repo.branch = 'master'
 
-    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo)
+    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo, self.metrics)
 
     self.assertEqual(osutils.ReadFile(self.state), '1 master')
 
@@ -243,7 +253,7 @@
     self.populateBuildroot()
     self.mock_repo.branch = 'master'
 
-    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo)
+    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo, self.metrics)
 
     self.assertEqual(osutils.ReadFile(self.state), '1 master')
     self.assertNotExists(self.repo)
@@ -255,7 +265,7 @@
     self.populateBuildroot('0 master')
     self.mock_repo.branch = 'master'
 
-    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo)
+    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo, self.metrics)
 
     self.assertEqual(osutils.ReadFile(self.state), '1 master')
     self.assertNotExists(self.repo)
@@ -267,7 +277,7 @@
     self.populateBuildroot('1 branchA')
     self.mock_repo.branch = 'branchB'
 
-    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo)
+    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo, self.metrics)
 
     self.assertEqual(osutils.ReadFile(self.state), '1 branchB')
     self.assertExists(self.repo)
@@ -279,7 +289,7 @@
     self.populateBuildroot('1 branchA')
     self.mock_repo.branch = 'branchA'
 
-    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo)
+    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo, self.metrics)
 
     self.assertEqual(osutils.ReadFile(self.state), '1 branchA')
     self.assertExists(self.repo)
@@ -292,7 +302,7 @@
     self.mock_repo.branch = 'branchA'
     self.mock_repo.BuildRootGitCleanup.side_effect = Exception
 
-    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo)
+    cbuildbot_launch.CleanBuildroot(self.root, self.mock_repo, self.metrics)
 
     self.assertEqual(osutils.ReadFile(self.state), '1 branchA')
     self.assertNotExists(self.repo)