#
# Copyright (C) 2016 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 os
import operator
import ntpath
def _SafeStrip(value):
'''Strip string value if value is not None.
Args:
value: string, value to strip
Returns:
stripped string; None if input value is None.
'''
if value is None:
return value
return value.strip()
class BinaryTestCase(object):
'''A class to represent a binary test case.
Attributes:
test_suite: string, test suite name.
test_name: string, test case name which does not include test suite.
path: string, absolute test binary path on device.
tag: string, test tag.
put_tag_func: function that takes a name and tag to output a combination.
working_directory: string, working directory to call the command.
ld_library_path: string, a path for LD_LIBRARY_PATH environment variable.
profiling_library_path: string, path to lookup and load VTS profiling libraries.
cmd: string, a shell command to execute the test case. If empty, path will be used.
envp: string, environment veriable. shoud be in format 'name1=value1 name2=value2...'
Will be called using 'env <envp> <cmd> <args>'
args: string, arguments following cmd.
name_appendix: string, appendix attached to the test name in display,
typically contains info of parameters used in the test,
e.e. service name used for hal hidl test.
'''
def __init__(self,
test_suite,
test_name,
path,
tag='',
put_tag_func=operator.add,
working_directory=None,
ld_library_path=None,
profiling_library_path=None,
cmd='',
envp='',
args='',
name_appendix=''):
self.test_suite = test_suite
self.test_name = test_name
self.path = path
self.tag = tag
self.put_tag_func = put_tag_func
self.working_directory = working_directory
self.ld_library_path = ld_library_path
self.profiling_library_path = profiling_library_path
self.cmd = cmd
self.envp = envp
self.args = args
self.name_appendix = name_appendix
def __str__(self):
return self._GenerateDisplayName()
def _GenerateDisplayName(self):
'''Get a string of test name for display.
The display name contains three parts: the original full test name, the
name appendix which includes more info about the test run, and the
tag(s) used by the test.
'''
return self.put_tag_func(self.full_name + self.name_appendix, self.tag)
@property
def name_appendix(self):
return self._name_appendix
@name_appendix.setter
def name_appendix(self, name_appendix):
self._name_appendix = name_appendix
@property
def full_name(self):
'''Get a string that represents the test.
Returns:
A string test name in format '<test suite>.<test name>' if
test_suite is not empty; '<test name>' otherwise
'''
return getattr(self, '_full_name', '{}.{}'.format(
self.test_suite, self.test_name)
if self.test_suite else self.test_name)
@full_name.setter
def full_name(self, full_name):
self._full_name = full_name
def GetRunCommand(self):
'''Get the command to run the test.
Returns:
String, a command to run the test.
'''
working_directory = ('cd %s && ' % self.working_directory
if self.working_directory else '')
envp = 'env %s ' % self.envp if self.envp else ''
ld_library_path = ('LD_LIBRARY_PATH=%s ' % self.ld_library_path
if self.ld_library_path else '')
if ld_library_path:
envp = ('{}{}'.format(envp, ld_library_path)
if envp else 'env %s ' % ld_library_path)
args = ' %s' % self.args if self.args else ''
return '{working_directory}{envp}{cmd}{args}'.format(
working_directory=working_directory,
envp=envp,
cmd=self.cmd,
args=args)
@property
def test_suite(self):
'''Get test_suite'''
return self._test_suite
@test_suite.setter
def test_suite(self, test_suite):
'''Set test_suite'''
self._test_suite = _SafeStrip(test_suite)
@property
def test_name(self):
'''Get test_name'''
return self._test_name
@test_name.setter
def test_name(self, test_name):
'''Set test_name'''
self._test_name = _SafeStrip(test_name)
@property
def path(self):
'''Get path'''
return self._path
@path.setter
def path(self, path):
'''Set path'''
self._path = _SafeStrip(path)
@property
def cmd(self):
'''Get test command. If command is empty, path is returned.'''
if not self._cmd:
return self.path
return self._cmd
@cmd.setter
def cmd(self, cmd):
'''Set path'''
self._cmd = _SafeStrip(cmd)
@property
def tag(self):
'''Get tag'''
return self._tag
@tag.setter
def tag(self, tag):
'''Set tag'''
self._tag = _SafeStrip(tag)
@property
def working_directory(self):
'''Get working_directory'''
return self._working_directory
@working_directory.setter
def working_directory(self, working_directory):
'''Set working_directory'''
self._working_directory = _SafeStrip(working_directory)
@property
def ld_library_path(self):
'''Get ld_library_path'''
return self._ld_library_path
@ld_library_path.setter
def ld_library_path(self, ld_library_path):
'''Set ld_library_path'''
self._ld_library_path = _SafeStrip(ld_library_path)
@property
def envp(self):
'''Get envp'''
return self._envp
@envp.setter
def envp(self, envp):
'''Set env'''
self._envp = _SafeStrip(envp)
@property
def args(self):
'''Get args'''
return self._args
@args.setter
def args(self, args):
'''Set args'''
self._args = _SafeStrip(args)