#!/usr/bin/env vpython3
# Copyright 2022 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import mock
import os
import sys
import unittest
# if the current directory is in scripts (pwd), then we need to
# add plugin in order to import from that directory
if os.path.split(os.path.dirname(__file__))[1] != 'plugin':
sys.path.append(
os.path.join(os.path.abspath(os.path.dirname(__file__)), 'plugin'))
from test_plugin_service import TestPluginServicer, TestPluginServicerWrapper
from plugin_constants import PLUGIN_PROTOS_PATH, PLUGIN_SERVICE_ADDRESS
sys.path.append(PLUGIN_PROTOS_PATH)
import test_plugin_service_pb2
import test_plugin_service_pb2_grpc
VIDEO_RECORDER_PLUGIN_NAME = 'VideoRecorderPlugin'
class UnitTest(unittest.TestCase):
def setUp(self):
self.video_recorder_plugin = mock.MagicMock()
self.video_recorder_plugin.__str__ = mock.Mock(
return_value=VIDEO_RECORDER_PLUGIN_NAME)
self.servicer = TestPluginServicer([self.video_recorder_plugin])
self.servicer_wrapper = TestPluginServicerWrapper(self.servicer)
self.servicer_wrapper.server = mock.MagicMock()
# for device testing
self.device_proxy = mock.MagicMock()
self.servicer_wrapper_on_device = TestPluginServicerWrapper(
self.servicer, self.device_proxy)
def test_TestCaseWillStart_succeed(self):
request = test_plugin_service_pb2.TestCaseWillStartRequest()
response = self.servicer.TestCaseWillStart(request, None)
expected_response = test_plugin_service_pb2.TestCaseWillStartResponse()
self.assertEqual(response, expected_response)
self.video_recorder_plugin.test_case_will_start.assert_called_with(request)
def test_TestCaseDidFinish_succeed(self):
request = test_plugin_service_pb2.TestCaseDidFinishRequest()
response = self.servicer.TestCaseDidFinish(request, None)
expected_response = test_plugin_service_pb2.TestCaseDidFinishResponse()
self.assertEqual(response, expected_response)
self.video_recorder_plugin.test_case_did_finish.assert_called_with(request)
def test_TestCaseDidFail_succeed(self):
request = test_plugin_service_pb2.TestCaseDidFailRequest()
response = self.servicer.TestCaseDidFail(request, None)
expected_response = test_plugin_service_pb2.TestCaseDidFailResponse()
self.assertEqual(response, expected_response)
self.video_recorder_plugin.test_case_did_fail.assert_called_with(request)
def test_TestBundleWillFinish(self):
request = test_plugin_service_pb2.TestBundleWillFinishRequest()
response = self.servicer.TestBundleWillFinish(request, None)
expected_response = test_plugin_service_pb2.TestBundleWillFinishResponse()
self.assertEqual(response, expected_response)
self.video_recorder_plugin.test_bundle_will_finish.assert_called_with(
request)
def test_ListEnabledPlugins_succeed(self):
request = test_plugin_service_pb2.ListEnabledPluginsRequest()
response = self.servicer.ListEnabledPlugins(request, None)
expected_plugin_str = [VIDEO_RECORDER_PLUGIN_NAME]
expected_response = test_plugin_service_pb2.ListEnabledPluginsResponse(
enabled_plugins=expected_plugin_str)
self.assertEqual(response, expected_response)
def test_start_server(self):
self.servicer_wrapper.start_server()
self.servicer_wrapper.server.add_insecure_port.assert_called_with(
PLUGIN_SERVICE_ADDRESS)
self.servicer_wrapper.server.start.assert_called_with()
self.assertEqual(self.servicer_wrapper.device_proxy, None)
# Plugin feature running on physical device
self.servicer_wrapper_on_device.start_server()
self.servicer_wrapper_on_device.device_proxy.start.assert_called_with()
def test_tear_down(self):
self.servicer_wrapper.tear_down()
self.video_recorder_plugin.reset.assert_called_with()
self.servicer_wrapper.server.stop.assert_called_with(grace=None)
# Plugin feature running on physical device
self.servicer_wrapper_on_device.tear_down()
self.servicer_wrapper_on_device.device_proxy.tear_down.assert_called_with()
def test_wait_for_termination(self):
self.servicer_wrapper.wait_for_termination()
self.servicer_wrapper.server.wait_for_termination.assert_called_with()
if __name__ == '__main__':
unittest.main()