# Copyright (c) 2010 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.

TIME='LARGE'
AUTHOR = 'The Chromium OS Authors'
PURPOSE = 'Stress test the ecryptfs home directory across power state changes.'
CRITERIA = 'This test is a stress test. Expected success, no crashes.'
DOC = """This test uses fio and a basic configuration to test and
validate writes to the ecryptfs vault. It does not create a login
session, but mounts a special user dir for the test.
"""
NAME = 'platform_CryptohomeFio'
TIME = 'MEDIUM'
TEST_CLASS = 'platform'
TEST_CATEGORY = 'Stress'
TEST_TYPE = 'client'

RUNTIME=60

disk_configs = {#'tmpfs' : (False, True),
	        'ext3+ssd' : (False, False),
 		'ecryptfs+ext3+ssd' : (True, False),
		}

tests = { 'surfing': 'iops',
          'boot': 'bw',
          'login': 'bw',
          'seq_read': 'bw',
          'seq_write': 'bw',
          '16k_read': 'iops',
          '16k_write': 'iops',
          '8k_read': 'iops',
          '8k_write': 'iops',
          '4k_read': 'iops',
          '4k_write': 'iops',
          }


for test in tests.keys():
    for config, opts in disk_configs.items():
        job.run_test('platform_CryptohomeFio', 
                     script=test,
                     tag='%s_%s' % (test, config),
                     runtime=RUNTIME,
                     mount_cryptohome=opts[0],
                     tmpfs=opts[1])

