1*9a741119SAndroid Build Coastguard Worker# 2*9a741119SAndroid Build Coastguard Worker# Copyright (C) 2017 The Android Open Source Project 3*9a741119SAndroid Build Coastguard Worker# 4*9a741119SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 5*9a741119SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 6*9a741119SAndroid Build Coastguard Worker# You may obtain a copy of the License at 7*9a741119SAndroid Build Coastguard Worker# 8*9a741119SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*9a741119SAndroid Build Coastguard Worker# 10*9a741119SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*9a741119SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 12*9a741119SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*9a741119SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 14*9a741119SAndroid Build Coastguard Worker# limitations under the License. 15*9a741119SAndroid Build Coastguard Worker# 16*9a741119SAndroid Build Coastguard Worker 17*9a741119SAndroid Build Coastguard Workerimport logging 18*9a741119SAndroid Build Coastguard Worker 19*9a741119SAndroid Build Coastguard Workerfrom vts.utils.python.android import api 20*9a741119SAndroid Build Coastguard Worker 21*9a741119SAndroid Build Coastguard Worker 22*9a741119SAndroid Build Coastguard Workerdef IsVndkRuntimeEnforced(dut): 23*9a741119SAndroid Build Coastguard Worker """Returns whether VNDK run-time enforcement is enabled on the device. 24*9a741119SAndroid Build Coastguard Worker 25*9a741119SAndroid Build Coastguard Worker VNDK run-time enforcement is optional in O-MR1 (API 27); mandatory after P. 26*9a741119SAndroid Build Coastguard Worker If VNDK run-time enforcement is disabled, the system property named 27*9a741119SAndroid Build Coastguard Worker ro.vndk.lite must be set to true. The usage of this function is to decide 28*9a741119SAndroid Build Coastguard Worker whether to skip VNDK test cases. 29*9a741119SAndroid Build Coastguard Worker 30*9a741119SAndroid Build Coastguard Worker Args: 31*9a741119SAndroid Build Coastguard Worker dut: The AndroidDevice under test. 32*9a741119SAndroid Build Coastguard Worker 33*9a741119SAndroid Build Coastguard Worker Returns: 34*9a741119SAndroid Build Coastguard Worker A boolean, whether VNDK runtime should be enabled. 35*9a741119SAndroid Build Coastguard Worker """ 36*9a741119SAndroid Build Coastguard Worker api_level = dut.getLaunchApiLevel(strict=False) 37*9a741119SAndroid Build Coastguard Worker if not api_level: 38*9a741119SAndroid Build Coastguard Worker logging.error("Cannot get first API level. " 39*9a741119SAndroid Build Coastguard Worker "Assume VNDK runtime to be enforced.") 40*9a741119SAndroid Build Coastguard Worker return True 41*9a741119SAndroid Build Coastguard Worker if api_level <= api.PLATFORM_API_LEVEL_O_MR1: 42*9a741119SAndroid Build Coastguard Worker return not dut.vndk_lite 43*9a741119SAndroid Build Coastguard Worker # For P-launching devices, VNDK run-time enforcement is mandatory. 44*9a741119SAndroid Build Coastguard Worker return True 45*9a741119SAndroid Build Coastguard Worker 46*9a741119SAndroid Build Coastguard Worker 47*9a741119SAndroid Build Coastguard Workerdef IsVndkRequired(dut): 48*9a741119SAndroid Build Coastguard Worker """Returns whether the device's vendor partition requires VNDK. 49*9a741119SAndroid Build Coastguard Worker 50*9a741119SAndroid Build Coastguard Worker VNDK libraries are moved from system to vendor partition in V version. If 51*9a741119SAndroid Build Coastguard Worker a device does not require VNDK, it does not define ro.vndk.version. 52*9a741119SAndroid Build Coastguard Worker 53*9a741119SAndroid Build Coastguard Worker Args: 54*9a741119SAndroid Build Coastguard Worker dut: The AndroidDevice under test. 55*9a741119SAndroid Build Coastguard Worker 56*9a741119SAndroid Build Coastguard Worker Returns: 57*9a741119SAndroid Build Coastguard Worker A boolean, whether VNDK is required. 58*9a741119SAndroid Build Coastguard Worker """ 59*9a741119SAndroid Build Coastguard Worker return bool(dut.GetVndkVersion()) 60*9a741119SAndroid Build Coastguard Worker 61*9a741119SAndroid Build Coastguard Worker 62*9a741119SAndroid Build Coastguard Workerdef IsVndkInstalledInVendor(dut): 63*9a741119SAndroid Build Coastguard Worker """Returns whether the device's VNDK should be installed in vendor. 64*9a741119SAndroid Build Coastguard Worker 65*9a741119SAndroid Build Coastguard Worker VNDK libraries are moved from system to vendor partition in V version. 66*9a741119SAndroid Build Coastguard Worker VNDK 35 should be installed in vendor partiton. 67*9a741119SAndroid Build Coastguard Worker 68*9a741119SAndroid Build Coastguard Worker Args: 69*9a741119SAndroid Build Coastguard Worker dut: The AndroidDevice under test. 70*9a741119SAndroid Build Coastguard Worker 71*9a741119SAndroid Build Coastguard Worker Returns: 72*9a741119SAndroid Build Coastguard Worker A boolean, whether VNDK should be installed in vendor partition. 73*9a741119SAndroid Build Coastguard Worker """ 74*9a741119SAndroid Build Coastguard Worker try: 75*9a741119SAndroid Build Coastguard Worker return int(dut.GetVndkVersion()) > 34 76*9a741119SAndroid Build Coastguard Worker except ValueError: 77*9a741119SAndroid Build Coastguard Worker return False 78*9a741119SAndroid Build Coastguard Worker 79*9a741119SAndroid Build Coastguard Worker 80*9a741119SAndroid Build Coastguard Workerdef FormatVndkPath(pattern, bitness, version=""): 81*9a741119SAndroid Build Coastguard Worker """Formats a VNDK path. 82*9a741119SAndroid Build Coastguard Worker 83*9a741119SAndroid Build Coastguard Worker Args: 84*9a741119SAndroid Build Coastguard Worker pattern: The path pattern containing {LIB} and {VER}. 85*9a741119SAndroid Build Coastguard Worker bitness: A string or an integer, 32 or 64. 86*9a741119SAndroid Build Coastguard Worker version: A string, the VNDK version. 87*9a741119SAndroid Build Coastguard Worker 88*9a741119SAndroid Build Coastguard Worker Returns: 89*9a741119SAndroid Build Coastguard Worker A string, the formatted path. 90*9a741119SAndroid Build Coastguard Worker """ 91*9a741119SAndroid Build Coastguard Worker return pattern.format(LIB=("lib64" if str(bitness) == "64" else "lib"), 92*9a741119SAndroid Build Coastguard Worker VER=version) 93*9a741119SAndroid Build Coastguard Worker 94*9a741119SAndroid Build Coastguard Worker 95*9a741119SAndroid Build Coastguard Workerdef GetVndkDirectory(bitness, version): 96*9a741119SAndroid Build Coastguard Worker """Returns the path to VNDK directory on device. 97*9a741119SAndroid Build Coastguard Worker 98*9a741119SAndroid Build Coastguard Worker Args: 99*9a741119SAndroid Build Coastguard Worker bitness: A string or an integer, 32 or 64. 100*9a741119SAndroid Build Coastguard Worker version: A string, the VNDK version. 101*9a741119SAndroid Build Coastguard Worker 102*9a741119SAndroid Build Coastguard Worker Returns: 103*9a741119SAndroid Build Coastguard Worker A string, the path to VNDK directory. 104*9a741119SAndroid Build Coastguard Worker """ 105*9a741119SAndroid Build Coastguard Worker return FormatVndkPath("/apex/com.android.vndk.v{VER}/{LIB}", 106*9a741119SAndroid Build Coastguard Worker bitness, version) 107*9a741119SAndroid Build Coastguard Worker 108*9a741119SAndroid Build Coastguard Worker 109*9a741119SAndroid Build Coastguard Workerdef GetVndkExtDirectories(bitness): 110*9a741119SAndroid Build Coastguard Worker """Returns the paths to VNDK extension directories on device. 111*9a741119SAndroid Build Coastguard Worker 112*9a741119SAndroid Build Coastguard Worker Args: 113*9a741119SAndroid Build Coastguard Worker bitness: A string or an integer, 32 or 64. 114*9a741119SAndroid Build Coastguard Worker 115*9a741119SAndroid Build Coastguard Worker Returns: 116*9a741119SAndroid Build Coastguard Worker A list of strings, the paths to VNDK extension directories. 117*9a741119SAndroid Build Coastguard Worker """ 118*9a741119SAndroid Build Coastguard Worker return [FormatVndkPath("/odm/{LIB}/vndk", bitness), 119*9a741119SAndroid Build Coastguard Worker FormatVndkPath("/vendor/{LIB}/vndk", bitness)] 120*9a741119SAndroid Build Coastguard Worker 121*9a741119SAndroid Build Coastguard Worker 122*9a741119SAndroid Build Coastguard Workerdef GetVndkSpExtDirectories(bitness): 123*9a741119SAndroid Build Coastguard Worker """Returns the paths to VNDK-SP extension directories on device. 124*9a741119SAndroid Build Coastguard Worker 125*9a741119SAndroid Build Coastguard Worker Args: 126*9a741119SAndroid Build Coastguard Worker bitness: A string or an integer, 32 or 64. 127*9a741119SAndroid Build Coastguard Worker 128*9a741119SAndroid Build Coastguard Worker Returns: 129*9a741119SAndroid Build Coastguard Worker A list of strings, the paths to VNDK-SP extension directories. 130*9a741119SAndroid Build Coastguard Worker """ 131*9a741119SAndroid Build Coastguard Worker return [FormatVndkPath("/odm/{LIB}/vndk-sp", bitness), 132*9a741119SAndroid Build Coastguard Worker FormatVndkPath("/vendor/{LIB}/vndk-sp", bitness)] 133