blob: f8e858dfea93bd438d4ffbd1f3ec08fb35cd832c [file] [log] [blame]
#!/usr/bin/python
#
# Copyright (c) 2014 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.
from __future__ import print_function
import json
import threading
import unittest
import mox
from ws4py.client.threadedclient import WebSocketClient
import factory_common # pylint: disable=unused-import
from cros.factory.goofy import ui_app_controller
from cros.factory.goofy.ui_app_controller import UIAppController
from cros.factory.utils import net_utils
class UIAppControllerTest(unittest.TestCase):
def setUp(self):
ui_app_controller.UI_APP_CONTROLLER_PORT = net_utils.FindUnusedTCPPort()
self.hook = mox.MockAnything()
self.connected_event = threading.Event()
self.disconnected_event = threading.Event()
self.controller = None
self.client = None
def StartControllerAndClient(self):
self.controller = UIAppController(
connect_hook=self.connected_event.set,
disconnect_hook=self.disconnected_event.set)
self.client = WebSocketClient('ws://127.0.0.1:%d' %
ui_app_controller.UI_APP_CONTROLLER_PORT)
self.client.received_message = self.ReceivedMessage
def ReceivedMessage(self, message):
self.hook.message(json.loads(str(message)))
def SendOK(self, unused_cmd):
self.client.send('OK\n')
def SendError(self, unused_cmd):
self.client.send('ERROR\n')
def tearDown(self):
if self.controller:
self.controller.Stop()
def testHook(self):
self.hook.message({
'url': 'http://10.3.0.11:4012/',
'command': 'CONNECT',
'dongle_mac_address': 'unittest'
}).WithSideEffects(self.SendError)
self.hook.message({
'url': 'http://10.3.0.11:4012/',
'command': 'CONNECT',
'dongle_mac_address': 'unittest'
}).WithSideEffects(self.SendOK)
mox.Replay(self.hook)
self.StartControllerAndClient()
self.client.connect()
self.assertTrue(self.connected_event.wait(0.2))
self.assertFalse(self.controller.ShowUI('10.3.0.11', 'unittest'))
self.assertTrue(self.controller.ShowUI('10.3.0.11', 'unittest'))
self.client.close()
self.assertTrue(self.disconnected_event.wait(0.2))
mox.Verify(self.hook)
if __name__ == '__main__':
unittest.main()