You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.2 KiB
96 lines
3.2 KiB
7 months ago
|
# 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'
|
||
|
# TODO: update this when blockers are updated b:169251326
|
||
|
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()
|