1# Copyright 2015 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5from autotest_lib.client.bin import test
6from autotest_lib.client.common_lib.cros.tendo import buffet_tester
7
8class buffet_IntermittentConnectivity(test.test):
9    """Test that buffet reconnects if it loses connectivity."""
10    version = 1
11
12    def initialize(self):
13        self._helper = buffet_tester.BuffetTester()
14
15
16    def run_once(self):
17        """Test entry point."""
18        # Erase all buffet state and restart it pointing to our fake
19        # server, register with the cloud and check we can poll for
20        # commands.
21        self._helper.restart_buffet(reset_state=True)
22        self._helper.check_buffet_status_is(buffet_tester.STATUS_UNCONFIGURED)
23        device_id = self._helper.register_with_server()
24        self._helper.check_buffet_is_polling(device_id)
25
26        # Now make fake_device_server fail all request from Buffet
27        # with HTTP Error Code 500 (Internal Server Error) and check
28        # that we transition to the CONNECTING state.
29        self._helper._fail_control_client.start_failing_requests()
30        self._helper.check_buffet_status_is(
31                buffet_tester.STATUS_CONNECTING,
32                expected_device_id=device_id,
33                timeout_seconds=20)
34
35        # Stop failing request from and check that we transition to
36        # the CONNECTED state.
37        self._helper._fail_control_client.stop_failing_requests()
38        self._helper.check_buffet_status_is(
39                buffet_tester.STATUS_CONNECTED,
40                expected_device_id=device_id,
41                timeout_seconds=20)
42        self._helper.check_buffet_is_polling(device_id)
43
44
45    def cleanup(self):
46        self._helper.close()
47