普通文本  |  153行  |  5.62 KB

#!/usr/bin/env python
#
# Copyright (C) 2017 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

import logging

from vts.runners.host import asserts
from vts.runners.host import keys
from vts.runners.host import test_runner
from vts.testcases.template.hal_hidl_host_test import hal_hidl_host_test

class VtsHalGnssV1_0HostTest(hal_hidl_host_test.HalHidlHostTest):
    """A simple testcase for the GNSS HIDL HAL."""

    SYSPROP_GETSTUB = "vts.hal.vts.hidl.get_stub"
    TEST_HAL_SERVICES = {"android.hardware.gnss@1.0::IGnss"}
    def setUpClass(self):
        """Creates a mirror and turns on the framework-layer GNSS service."""
        super(VtsHalGnssV1_0HostTest, self).setUpClass()

        self.passthrough_mode = self.getUserParam(
            keys.ConfigKeys.IKEY_PASSTHROUGH_MODE, default_value=True)

        mode = "true" if self.passthrough_mode else "false"
        self.shell.Execute(
            "setprop %s %s" % (self.SYSPROP_GETSTUB, mode))

        self.dut.hal.InitHidlHal(
            target_type="gnss",
            target_basepaths=self.dut.libPaths,
            target_version=1.0,
            target_package="android.hardware.gnss",
            target_component_name="IGnss",
            bits=int(self.abi_bitness))

    def SetCallback(self):
        """Utility function to set the callbacks."""

        def gnssLocationCb(location):
            logging.info("callback gnssLocationCb")

        def gnssStatusCb(status):
            logging.info("callback gnssStatusCb")

        def gnssSvStatusCb(svInfo):
            logging.info("callback gnssSvStatusCb")

        def gnssNmeaCb(timestamp, nmea):
            logging.info("callback gnssNmeaCb")

        def gnssSetCapabilitesCb(capabilities):
            logging.info("callback gnssSetCapabilitesCb")

        def gnssAcquireWakelockCb():
            logging.info("callback gnssAcquireWakelockCb")

        def gnssReleaseWakelockCb():
            logging.info("callback gnssReleaseWakelockCb")

        def gnssRequestTimeCb():
            logging.info("callback gnssRequestTimeCb")

        def gnssSetSystemInfoCb(info):
            logging.info("callback gnssSetSystemInfoCb")

        client_callback = self.dut.hal.gnss.GetHidlCallbackInterface(
            "IGnssCallback",
            gnssLocationCb=gnssLocationCb,
            gnssStatusCb=gnssStatusCb,
            gnssSvStatusCb=gnssSvStatusCb,
            gnssNmeaCb=gnssNmeaCb,
            gnssSetCapabilitesCb=gnssSetCapabilitesCb,
            gnssAcquireWakelockCb=gnssAcquireWakelockCb,
            gnssReleaseWakelockCb=gnssReleaseWakelockCb,
            gnssRequestTimeCb=gnssRequestTimeCb,
            gnssSetSystemInfoCb=gnssSetSystemInfoCb)

        result = self.dut.hal.gnss.setCallback(client_callback)
        logging.info("setCallback result: %s", result)

    def testExtensionPresence(self):
        """A test case which checks whether each extension exists."""
        self.SetCallback()

        nested_interface = self.dut.hal.gnss.getExtensionAGnssRil()
        if not nested_interface:
            logging.info("getExtensionAGnssRil returned None")
        else:
            result = nested_interface.updateNetworkAvailability(False, "test")
            logging.info("updateNetworkAvailability result: %s", result)

        nested_interface = self.dut.hal.gnss.getExtensionGnssGeofencing()
        if not nested_interface:
            logging.info("getExtensionGnssGeofencing returned None")

        nested_interface = self.dut.hal.gnss.getExtensionAGnss()
        if not nested_interface:
            logging.info("getExtensionAGnss returned None")
        else:
            result = nested_interface.dataConnClosed()
            logging.info("dataConnClosed result: %s", result)

        nested_interface = self.dut.hal.gnss.getExtensionGnssNi()
        if not nested_interface:
            logging.info("getExtensionGnssNi returned None")

        nested_interface = self.dut.hal.gnss.getExtensionGnssMeasurement()
        if not nested_interface:
            logging.info("getExtensionGnssMeasurement returned None")

        nested_interface = self.dut.hal.gnss.getExtensionXtra()
        if not nested_interface:
            logging.info("getExtensionXtra returned None")

        nested_interface = self.dut.hal.gnss.getExtensionGnssConfiguration()
        if not nested_interface:
            logging.info("getExtensionGnssConfiguration returned None")

        nested_interface = self.dut.hal.gnss.getExtensionGnssBatching()
        if not nested_interface:
            logging.info("getExtensionGnssBatching returned None")

    def testExtensionPresenceForUnimplementedOnes(self):
        """A test case which checks whether each extension exists.

        Separate test case for known failures.
        """
        self.SetCallback()

        nested_interface = self.dut.hal.gnss.getExtensionGnssNavigationMessage()
        if not nested_interface:
            logging.error("ExtensionGnssNavigationMessage not implemented")

        nested_interface = self.dut.hal.gnss.getExtensionGnssDebug()
        if not nested_interface:
            logging.error("ExtensionGnssDebug not implemented")

if __name__ == "__main__":
    test_runner.main()