# 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.new'
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])

