1db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu#!/usr/bin/env python
2db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
3db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
4db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu# Use of this source code is governed by a BSD-style license that can be
5db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu# found in the LICENSE file.
6db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
7db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhuimport common
8db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhuimport request_response
9db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
10db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhuimport logging
11db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhuimport mox
12db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhuimport unittest
13db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
14db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhuimport at_transceiver
15db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhuimport global_state
16db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhuimport modem_configuration
17db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhuimport task_loop
18db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
19db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
20db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhuclass RequestResponseTestCase(unittest.TestCase):
21db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu    """ Test fixture for RequestResponse class. """
22db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
23db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu    def setUp(self):
24db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._mox = mox.Mox()
25db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
26db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        # Prepare modem configuration to suit our needs.
27db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._modem_conf = modem_configuration.ModemConfiguration()
28db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._modem_conf.base_wm_request_response_map = {
29db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                'AT1': 'AT1RESPONSE',
30db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                'AT2': ('AT2OK', 'AT2ERROR'),
31db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                'AT3': 'AT3RESPONSE'
32db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        }
33db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._modem_conf.plugin_wm_request_response_map = {
34db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                'AT3': 'AT3RESPONSE_OVERRIDEN',
35db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                'AT4': 'AT4RESPONSE',
36db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                'AT5': ['AT5RESPONSE1', 'AT5RESPONSE2']
37db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        }
38db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
39db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop = self._mox.CreateMock(task_loop.TaskLoop)
40db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._transceiver = self._mox.CreateMock(at_transceiver.ATTransceiver)
41db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine = request_response.RequestResponse(
42db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                global_state.GlobalState(),
43db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                self._transceiver,
44db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                self._modem_conf)
45db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
46db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        # Mock out the task_loop
47db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine._task_loop = self._task_loop
48db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
49db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu    def test_enabled_responses(self):
50db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        """
51db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        Responses for different configurations when machine is enabled.
52db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
53db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        """
54db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.enable_machine()
55db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
56db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
57db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_text_only',
58db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'AT1RESPONSE')
59db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
60db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
61db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_text_only',
62db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'AT2OK')
63db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
64db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
65db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_text_only',
66db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'AT3RESPONSE_OVERRIDEN')
67db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
68db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
69db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_text_only',
70db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'AT4RESPONSE')
71db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
72db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
73db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_text_only',
74db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'AT5RESPONSE1')
75db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
76db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
77db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_text_only',
78db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'AT5RESPONSE2')
79db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
80db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
81db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_ok')
82db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
83db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
84db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_error')
85db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
86db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._mox.ReplayAll()
87db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT1')
88db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT2')
89db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT3')
90db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT4')
91db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT5')
92db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT6')
93db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._mox.VerifyAll()
94db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
95db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
96db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu    def test_disabled_responses(self):
97db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        """
98db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        Responses for different configurations when machine is enabled.
99db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
100db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        """
101db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.disable_machine()
102db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
103db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
104db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
105db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_error')
106db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
107db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
108db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_text_only',
109db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'AT2ERROR')
110db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
111db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
112db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_error')
113db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
114db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
115db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_error')
116db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
117db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
118db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_error')
119db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._task_loop.post_task_after_delay(mox.IgnoreArg(),
120db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              0,
121db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu                                              'wm_response_error')
122db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
123db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._mox.ReplayAll()
124db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT1')
125db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT2')
126db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT3')
127db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT4')
128db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT5')
129db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._machine.act_on('AT6')
130db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu        self._mox.VerifyAll()
131db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
132db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu
133db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhuif __name__ == '__main__':
134db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu    logging.basicConfig(level=logging.DEBUG)
135db2e125078222e46e26eb5180ca4fbcc5f09a66bPrathmesh Prabhu    unittest.main()
136