cbuildbot_launch: Wipe buildroot, if it has bad permissions.

We created some buildroots without group writability, which breaks
those builds. Wipe those buildroots.

BUG=chromium:710900
TEST=cbuildbot_launch_test

Change-Id: I9471506b1e6fc00e292cad7935eee9dd7779e7aa
Reviewed-on: https://chromium-review.googlesource.com/476114
Tested-by: Don Garrett <dgarrett@chromium.org>
Reviewed-by: Paul Hobbs <phobbs@google.com>
Commit-Queue: Don Garrett <dgarrett@chromium.org>
Trybot-Ready: Don Garrett <dgarrett@chromium.org>
diff --git a/scripts/cbuildbot_launch_unittest.py b/scripts/cbuildbot_launch_unittest.py
index b7d8263..be0f375 100644
--- a/scripts/cbuildbot_launch_unittest.py
+++ b/scripts/cbuildbot_launch_unittest.py
@@ -203,24 +203,28 @@
 
   def setUp(self):
     """Create standard buildroot contents for cleanup."""
-    self.state = os.path.join(self.tempdir, '.cbuildbot_launch_state')
-    self.repo = os.path.join(self.tempdir, '.repo/repo')
-    self.chroot = os.path.join(self.tempdir, 'chroot/chroot')
-    self.general = os.path.join(self.tempdir, 'general/general')
+    self.root = os.path.join(self.tempdir, 'buildroot')
+    self.state = os.path.join(self.root, '.cbuildbot_launch_state')
+    self.repo = os.path.join(self.root, '.repo/repo')
+    self.chroot = os.path.join(self.root, 'chroot/chroot')
+    self.general = os.path.join(self.root, 'general/general')
     # TODO: Add .cache, and distfiles.
 
-  def populateBuildroot(self, state=None):
+  def populateBuildroot(self, state=None, group_readable=True):
     """Create standard buildroot contents for cleanup."""
+    buildroot_mode = 0o775 if group_readable else 0o700
+    osutils.SafeMakedirs(self.root, mode=buildroot_mode)
+
     if state:
       osutils.WriteFile(self.state, state)
 
     # Create files.
     for f in (self.repo, self.chroot, self.general):
-      osutils.Touch(os.path.join(self.tempdir, f), makedirs=True)
+      osutils.Touch(f, makedirs=True)
 
-  def testBuildrootEmpty(self):
+  def testNoBuildroot(self):
     """Test CleanBuildroot with no history."""
-    cbuildbot_launch.CleanBuildroot(None, self.tempdir)
+    cbuildbot_launch.CleanBuildroot(None, self.root)
 
     self.assertEqual(osutils.ReadFile(self.state), 'TOT')
 
@@ -228,7 +232,7 @@
     """Test CleanBuildroot with no state information."""
     self.populateBuildroot()
 
-    cbuildbot_launch.CleanBuildroot(None, self.tempdir)
+    cbuildbot_launch.CleanBuildroot(None, self.root)
 
     self.assertEqual(osutils.ReadFile(self.state), 'TOT')
     self.assertExists(self.repo)
@@ -239,7 +243,7 @@
     """Test CleanBuildroot with a change in branches."""
     self.populateBuildroot('branchA')
 
-    cbuildbot_launch.CleanBuildroot('branchB', self.tempdir)
+    cbuildbot_launch.CleanBuildroot('branchB', self.root)
 
     self.assertEqual(osutils.ReadFile(self.state), 'branchB')
     self.assertExists(self.repo)
@@ -250,9 +254,21 @@
     """Test CleanBuildroot with no change in branch."""
     self.populateBuildroot('branchA')
 
-    cbuildbot_launch.CleanBuildroot('branchA', self.tempdir)
+    cbuildbot_launch.CleanBuildroot('branchA', self.root)
 
     self.assertEqual(osutils.ReadFile(self.state), 'branchA')
     self.assertExists(self.repo)
     self.assertExists(self.chroot)
     self.assertExists(self.general)
+
+
+  def testBuildrootNotGroupReadable(self):
+    """Test CleanBuildroot with no state information."""
+    self.populateBuildroot(group_readable=False)
+
+    cbuildbot_launch.CleanBuildroot(None, self.root)
+
+    self.assertEqual(osutils.ReadFile(self.state), 'TOT')
+    self.assertNotExists(self.repo)
+    self.assertNotExists(self.chroot)
+    self.assertNotExists(self.general)