# Copyright (c) 2017 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Library to run xfstests in autotest. """ import os from autotest_lib.client.bin import partition class xfstests_env: """ Setup the environment for running xfstests. """ XFS_MOUNT_PATH = '/mnt/stateful_partition/unencrypted/cache' env_names={} env_partition={} env_vp={} env_device={} fs_types={} def setup_partitions(self, job, fs_types, crypto=False, env_names=['TEST', 'SCRATCH']): """ xfttests needs 2 partitions: TEST and SCRATCH. - TEST_DEV: "device containing TEST PARTITION" - TEST_DIR: "mount point of TEST PARTITION" - SCRATCH_DEV "device containing SCRATCH PARTITION" - SCRATCH_MNT "mount point for SCRATCH PARTITION" - SCRATCH_DIR "directory on a large partition" @param job: The job object. """ self.env_names = env_names self.fs_types = fs_types for name in self.env_names: file_name = 'xfstests_%s' % name file_img = os.path.join( self.XFS_MOUNT_PATH, '%s.img' % file_name) self.env_vp[name] = partition.virtual_partition( file_img=file_img, file_size=4096) self.env_device[name] = self.env_vp[name].device # You can use real block devices, such as /dev/sdc1 by populating # env_device directly, but going through the virtual partition # object. # By default, we create a directory under autotest mountpoint = os.path.join(job.tmpdir, file_name) if not os.path.isdir(mountpoint): os.makedirs(mountpoint) self.env_partition[name] = job.partition( device=self.env_device[name], mountpoint=mountpoint) # # Job configuration, instead of editing xfstests config files, set them # right here as environment variables # for name in self.env_names: os.environ['%s_DEV' % name] = self.env_partition[name].device test_dir = self.env_partition['TEST'].mountpoint os.environ['TEST_DIR'] = test_dir os.environ['SCRATCH_MNT'] = self.env_partition['SCRATCH'].mountpoint os.environ['SCRATCH_DIR'] = self.XFS_MOUNT_PATH # ChromeOS does not need special option when SELinux is enabled. os.environ['SELINUX_MOUNT_OPTIONS'] = ' ' mkfs_args = '' mnt_options = '' if crypto: mkfs_args += '-O encrypt' mnt_options += '-o test_dummy_encryption' for fs_type in self.fs_types: for name in self.env_names: self.env_partition[name].mkfs(fstype=fs_type, args=mkfs_args) os.environ['EXT_MOUNT_OPTIONS'] = mnt_options def unmount_partitions(self): """ Unmount the partition created. """ for name in self.env_names: self.env_partition[name].unmount(ignore_status=True) self.env_vp[name].destroy()