def testRootOwnedCache(self): """Test CleanBuildRoot with no history.""" seed_distfiles_ts = time.time() - 60 old_build_state = build_summary.BuildSummary( status=constants.BUILDER_STATUS_PASSED, buildroot_layout=2, branch='branchA', distfiles_ts=seed_distfiles_ts) self.populateBuildroot(previous_build_state=old_build_state.to_json()) self.mock_repo.branch = 'branchA' osutils.Chown(self.cache, 'root', 'root') build_state = build_summary.BuildSummary( status=constants.BUILDER_STATUS_INFLIGHT, buildroot_layout=cbuildbot_launch.BUILDROOT_BUILDROOT_LAYOUT, branch='branchA') cbuildbot_launch.CleanBuildRoot( self.root, self.mock_repo, self.cache, build_state) new_summary = cbuildbot_launch.GetLastBuildState(self.root) self.assertEqual(new_summary.buildroot_layout, 2) self.assertEqual(new_summary.branch, 'branchA') # Same cache creation timestamp is rewritten to state. self.assertEqual(new_summary.distfiles_ts, seed_distfiles_ts) self.assertEqual(new_summary, build_state) self.assertExists(self.repo) self.assertExists(self.chroot) self.assertExists(self.general) self.assertNotExists(self.distfiles) self.assertExists(self.previous_build_state)
def SetVersion(self, version): """Set and store the chroot version.""" self._version = version osutils.WriteFile(self._version_file, str(version), sudo=True) # TODO(saklein) Verify if this chown is necessary. The version file # is in /etc, so it's reasonable to expect root would own it, but the bash # version had the chown for many years before the conversion. osutils.Chown(self._version_file)
def MkDirP(directory): """Thread-safely create a directory like mkdir -p. If the directory already exists, call chown on the directory and its subfiles recursively with current user and group to make sure current process has full access to the directory. """ if os.path.isdir(directory): # Fix permissions and ownership of the directory and its subfiles by # calling chown recursively with current user and group. try: osutils.Chown(directory, user=os.getuid(), group=os.getgid(), recursive=True) except cros_build_lib.RunCommandError as e: _Log('Could not chown: %s', e) else: osutils.SafeMakedirs(directory)
def testChown(self): """Test chown.""" # Helpers to get the user and group name of the given path's owner. def User(path): return pwd.getpwuid(os.stat(path).st_uid).pw_name def Group(path): return grp.getgrgid(os.stat(path).st_gid).gr_name filename = os.path.join(self.tempdir, 'chowntests') osutils.Touch(filename) user = User(filename) group = Group(filename) new_user = new_group = 'root' # Change only the user. osutils.Chown(filename, user=new_user) self.assertEqual(new_user, User(filename)) self.assertEqual(new_group, Group(filename)) # Change both user and group. osutils.Chown(filename, user=user, group=group) self.assertEqual(user, User(filename)) self.assertEqual(group, Group(filename)) # Change only the group. osutils.Chown(filename, group=new_group) self.assertEqual(user, User(filename)) self.assertEqual(new_group, Group(filename)) # Chown with no arguments. osutils.Chown(filename, user=new_user, group=new_group) self.assertEqual(new_user, User(filename)) self.assertEqual(new_group, Group(filename)) osutils.Chown(filename) self.assertEqual(user, User(filename)) self.assertEqual(group, Group(filename)) # User and group ids as the arguments. osutils.Chown(filename, user=0, group=0) self.assertEqual(new_user, User(filename)) self.assertEqual(new_group, Group(filename)) # Recursive. dirname = os.path.join(self.tempdir, 'chowntestsdir') osutils.SafeMakedirs(dirname) filename = os.path.join(dirname, 'chowntestsfile') osutils.Touch(filename) # Chown without recursive. osutils.Chown(dirname, user=new_user, group=new_group) self.assertEqual(new_user, User(dirname)) self.assertEqual(new_group, Group(dirname)) self.assertEqual(user, User(filename)) self.assertEqual(group, Group(filename)) # Chown with recursive. osutils.Chown(dirname, user=new_user, group=new_group, recursive=True) self.assertEqual(new_user, User(filename)) self.assertEqual(new_group, Group(filename)) osutils.Chown(dirname, user=user, group=group, recursive=True) self.assertEqual(user, User(dirname)) self.assertEqual(group, Group(dirname)) self.assertEqual(user, User(filename)) self.assertEqual(group, Group(filename))