188135049140d13f6fa6585e17fb335c6f6f61deeDave Tu# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
288135049140d13f6fa6585e17fb335c6f6f61deeDave Tu# Use of this source code is governed by a BSD-style license that can be
388135049140d13f6fa6585e17fb335c6f6f61deeDave Tu# found in the LICENSE file.
488135049140d13f6fa6585e17fb335c6f6f61deeDave Tu
588135049140d13f6fa6585e17fb335c6f6f61deeDave Tuimport random, time
6bee23c2b0ca824c12c39e7a5a4cd4d2a313918b7Eric Lifrom autotest_lib.client.common_lib import error
7bee23c2b0ca824c12c39e7a5a4cd4d2a313918b7Eric Lifrom autotest_lib.client.cros import power_strip
888135049140d13f6fa6585e17fb335c6f6f61deeDave Tufrom autotest_lib.server import autotest, test
988135049140d13f6fa6585e17fb335c6f6f61deeDave Tu
1088135049140d13f6fa6585e17fb335c6f6f61deeDave Tuclass platform_CryptohomeSyncStressServer(test.test):
1188135049140d13f6fa6585e17fb335c6f6f61deeDave Tu    version = 1
1288135049140d13f6fa6585e17fb335c6f6f61deeDave Tu    max_delay = 120
1388135049140d13f6fa6585e17fb335c6f6f61deeDave Tu
1488135049140d13f6fa6585e17fb335c6f6f61deeDave Tu    def run_once(self, host, power_addr, outlet, username, password):
1588135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        # check parameters
1688135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        if power_addr == None:
1788135049140d13f6fa6585e17fb335c6f6f61deeDave Tu            raise error.TestFail('Missing power_addr argument.')
1888135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        if outlet == None:
1988135049140d13f6fa6585e17fb335c6f6f61deeDave Tu            raise error.TestFail('Missing outlet argument.')
2088135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        if username == None:
2188135049140d13f6fa6585e17fb335c6f6f61deeDave Tu            raise error.TestFail('Missing user parameter.')
2288135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        if password == None:
2388135049140d13f6fa6585e17fb335c6f6f61deeDave Tu            raise error.TestFail('Missing pass parameter.')
2488135049140d13f6fa6585e17fb335c6f6f61deeDave Tu
2588135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        outlet = int(outlet)
2688135049140d13f6fa6585e17fb335c6f6f61deeDave Tu
2788135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        at = autotest.Autotest(host)
2888135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        boot_id = host.get_boot_id()
2988135049140d13f6fa6585e17fb335c6f6f61deeDave Tu
3088135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        # log in and verify things work
3188135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        self.job.set_state('client_fail', True)
3288135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        at.run_test('platform_CryptohomeSyncStress',
3388135049140d13f6fa6585e17fb335c6f6f61deeDave Tu                    username=username, password=password)
3488135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        if self.job.get_state('client_fail'):
3588135049140d13f6fa6585e17fb335c6f6f61deeDave Tu            raise error.TestFail('Client test failed')
3688135049140d13f6fa6585e17fb335c6f6f61deeDave Tu
3788135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        # wait for some delay
3888135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        delay = random.randint(0, self.max_delay)
3988135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        print 'Delaying for %s seconds and then restarting.' % (delay)
4088135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        time.sleep(delay)
4188135049140d13f6fa6585e17fb335c6f6f61deeDave Tu
4288135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        # restart client
4388135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        power_strip.PowerStrip(power_addr).reboot(outlet)
4488135049140d13f6fa6585e17fb335c6f6f61deeDave Tu        host.wait_for_restart(old_boot_id=boot_id)
45