#!/usr/bin/python
|
# Copyright (c) 2012 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.
|
|
import mox
|
import socket
|
import unittest
|
|
from config import rpm_config
|
import rpm_dispatcher
|
|
DUT_SAME_RPM1 = 'chromeos-rack8e-hostbs1'
|
DUT_SAME_RPM2 = 'chromeos-rack8e-hostbs2'
|
RPM_HOSTNAME = 'chromeos-rack8e-rpm1'
|
DUT_DIFFERENT_RPM = 'chromeos-rack1-hostbs1'
|
FAKE_DISPATCHER_URI = 'fake-dispatcher'
|
FAKE_DISPATCHER_PORT = 9999
|
FRONT_END_PORT = rpm_config.getint('RPM_INFRASTRUCTURE', 'frontend_port')
|
PROPER_URI_FORMAT = 'http://%s:%d'
|
|
|
class TestRPMDispatcher(mox.MoxTestBase):
|
"""
|
Simple unit tests to verify that the RPM Dispatcher properly registers with
|
the frontend server, and also initializes and reuses the same RPM Controller
|
for DUT requests on the same RPM.
|
|
queue_request is the only public method of RPM Dispatcher, however its logic
|
is simple and relies mostly on the private methods; therefore, I am testing
|
primarily RPMDispatcher initialization and _get_rpm_controller (which calls
|
_create_rpm_controller) to verify correct implementation.
|
"""
|
|
def setUp(self):
|
super(TestRPMDispatcher, self).setUp()
|
self.frontend_mock = self.mox.CreateMockAnything()
|
expected_uri = PROPER_URI_FORMAT % (FAKE_DISPATCHER_URI,
|
FAKE_DISPATCHER_PORT)
|
self.frontend_mock.register_dispatcher(expected_uri)
|
rpm_dispatcher.xmlrpclib.ServerProxy = self.mox.CreateMockAnything()
|
frontend_uri = 'http://%s:%d' % (socket.gethostname(), FRONT_END_PORT)
|
rpm_dispatcher.xmlrpclib.ServerProxy(frontend_uri).AndReturn(
|
self.frontend_mock)
|
rpm_dispatcher.atexit = self.mox.CreateMockAnything()
|
rpm_dispatcher.atexit.register(mox.IgnoreArg())
|
self.mox.ReplayAll()
|
self.dispatcher = rpm_dispatcher.RPMDispatcher(FAKE_DISPATCHER_URI,
|
FAKE_DISPATCHER_PORT)
|
|
|
def testRegistration(self):
|
"""
|
Make sure that as a dispatcher is initialized it properly registered
|
with the frontend server.
|
"""
|
self.mox.VerifyAll()
|
|
|
def testGetSameRPMController(self):
|
"""
|
Make sure that calls to _get_rpm_controller with DUT hostnames that
|
belong to the same RPM device create and retrieve the same RPMController
|
instance.
|
"""
|
controller1 = self.dispatcher._get_rpm_controller(RPM_HOSTNAME)
|
controller2 = self.dispatcher._get_rpm_controller(RPM_HOSTNAME)
|
self.assertEquals(controller1, controller2)
|
|
|
def testGetDifferentRPMController(self):
|
"""
|
Make sure that calls to _get_rpm_controller with DUT hostnames that
|
belong to the different RPM device create and retrieve different
|
RPMController instances.
|
"""
|
controller1 = self.dispatcher._get_rpm_controller(DUT_SAME_RPM1)
|
controller2 = self.dispatcher._get_rpm_controller(DUT_DIFFERENT_RPM)
|
self.assertNotEquals(controller1, controller2)
|
|
|
if __name__ == '__main__':
|
unittest.main()
|