| # Copyright 2017 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. |
| |
| """Setup a station for station-based test. |
| |
| Description |
| ----------- |
| This factory test checks whether properties for a station (Station name, Line |
| number, Station number) is set, and ask the operator to set the properties if |
| it's not. |
| |
| The test relies on the station_setup Goofy plugin to work. See the docstring of |
| the station_setup Goofy plugin on the configurable options for the test. |
| |
| Test Procedure |
| -------------- |
| If all required properties is already filled, and no duplicate station is found |
| on Overlord, the test passes without any user interaction. |
| |
| Otherwise, the operator is prompted with a form to fill in the required |
| properties. After the input, checks would be performed again, and operator |
| would be prompted again if check fails. |
| |
| Dependency |
| ---------- |
| The pytest needs to be run in Goofy, and needs the station_setup Goofy plugin |
| to be enabled. |
| |
| See `README for Goofy plugin |
| <https://chromium.googlesource.com/chromiumos/platform/factory/+/master/py/goofy/plugins/README.md#Use-a-Plugin>`_ |
| on how to enable a plugin. |
| |
| This test depends on the plugin named ``"station_setup.station_setup"``. |
| |
| Examples |
| -------- |
| To ask the operator to fill the properties of the station when needed, add this |
| in test list:: |
| |
| { |
| "pytest_name": "station_setup" |
| } |
| """ |
| |
| import unittest |
| |
| import factory_common # pylint: disable=unused-import |
| from cros.factory.test import state |
| from cros.factory.test import test_ui |
| from cros.factory.test import ui_templates |
| |
| |
| _HTML = """ |
| <div id='main'> |
| </div> |
| """ |
| |
| _JS = """ |
| const StationSetup = test.invocation.goofy.StationSetup; |
| function onEnter() { |
| if (window.isInEnter) { |
| return; |
| } |
| window.isInEnter = true; |
| window.update($('main')).then((ret) => { |
| if (ret.success) { |
| test.pass(); |
| } else { |
| window.isInEnter = false; |
| } |
| }); |
| } |
| (async () => { |
| const needUpdate = await StationSetup.needUpdate(); |
| if (!needUpdate) { |
| test.pass(); |
| return; |
| } |
| const {html, update} = await StationSetup.run(); |
| window.update = update; |
| goog.dom.safe.setInnerHtml($('main'), html); |
| })(); |
| """ |
| |
| |
| class StationSetup(unittest.TestCase): |
| """The factory test to setup station.""" |
| |
| def setUp(self): |
| self._ui = test_ui.UI() |
| self._template = ui_templates.OneSection(self._ui) |
| |
| def runTest(self): |
| self.assertTrue( |
| state.get_instance().IsPluginEnabled('station_setup.station_setup'), |
| 'This pytest needs the station_setup Goofy plugin to be enabled.') |
| |
| self._template.SetState(_HTML) |
| self._ui.BindKeyJS(test_ui.ENTER_KEY, 'onEnter();') |
| self._ui.RunJS(_JS) |
| self._ui.Run() |