From 002be44fef604a727853535753cdc492fa7ddefe Mon Sep 17 00:00:00 2001 From: Milosz Wasilewski Date: Fri, 31 Mar 2017 13:51:25 +0100 Subject: Automated: Android: Added support for running VTS CTS test is almost compatible with VTS as they use the same test shell - tradefed. The CTS test was updated to also support executing and reporting VTS results. Change-Id: Ida3ceda733c5e74f87256cf2ebefbaf93a6fce74 Signed-off-by: Milosz Wasilewski --- automated/android/cts/cts-runner.py | 167 ----------------------- automated/android/cts/cts.sh | 87 ------------ automated/android/cts/cts.yaml | 41 ------ automated/android/tradefed/setup.sh | 37 ++++++ automated/android/tradefed/tradefed-runner.py | 182 ++++++++++++++++++++++++++ automated/android/tradefed/tradefed.sh | 59 +++++++++ automated/android/tradefed/tradefed.yaml | 46 +++++++ 7 files changed, 324 insertions(+), 295 deletions(-) delete mode 100755 automated/android/cts/cts-runner.py delete mode 100755 automated/android/cts/cts.sh delete mode 100644 automated/android/cts/cts.yaml create mode 100755 automated/android/tradefed/setup.sh create mode 100755 automated/android/tradefed/tradefed-runner.py create mode 100755 automated/android/tradefed/tradefed.sh create mode 100644 automated/android/tradefed/tradefed.yaml (limited to 'automated') diff --git a/automated/android/cts/cts-runner.py b/automated/android/cts/cts-runner.py deleted file mode 100755 index b81b8ff..0000000 --- a/automated/android/cts/cts-runner.py +++ /dev/null @@ -1,167 +0,0 @@ -#!/usr/bin/env python - -import datetime -import os -import re -import sys -import shlex -import shutil -import subprocess -import xml.etree.ElementTree as ET -import pexpect -import argparse -import logging - -sys.path.insert(0, '../../lib/') -import py_test_lib # nopep8 - - -def result_parser(xml_file): - etree_file = open(xml_file, 'rb') - etree_content = etree_file.read() - rx = re.compile("&#([0-9]+);|&#x([0-9a-fA-F]+);") - endpos = len(etree_content) - pos = 0 - while pos < endpos: - # remove characters that don't conform to XML spec - m = rx.search(etree_content, pos) - if not m: - break - mstart, mend = m.span() - target = m.group(1) - if target: - num = int(target) - else: - num = int(m.group(2), 16) - # #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] - if not(num in (0x9, 0xA, 0xD) or - 0x20 <= num <= 0xD7FF or - 0xE000 <= num <= 0xFFFD or - 0x10000 <= num <= 0x10FFFF): - etree_content = etree_content[:mstart] + etree_content[mend:] - endpos = len(etree_content) - pos = mend - - try: - root = ET.fromstring(etree_content) - except ET.ParseError as e: - logger.error('xml.etree.ElementTree.ParseError: %s' % e) - logger.info('Please Check %s manually' % xml_file) - sys.exit(1) - logger.info('Test modules in %s: %s' - % (xml_file, str(len(root.findall('Module'))))) - for elem in root.findall('Module'): - # Naming: Module Name + Test Case Name + Test Name - if 'abi' in elem.attrib.keys(): - module_name = '.'.join([elem.attrib['abi'], elem.attrib['name']]) - else: - module_name = elem.attrib['name'] - - tests_executed = len(elem.findall('.//Test')) - tests_passed = len(elem.findall('.//Test[@result="pass"]')) - tests_failed = len(elem.findall('.//Test[@result="fail"]')) - - result = '%s_executed pass %s' % (module_name, str(tests_executed)) - py_test_lib.add_result(RESULT_FILE, result) - - result = '%s_passed pass %s' % (module_name, str(tests_passed)) - py_test_lib.add_result(RESULT_FILE, result) - - failed_result = 'pass' - if tests_failed > 0: - failed_result = 'fail' - result = '%s_failed %s %s' % (module_name, failed_result, - str(tests_failed)) - py_test_lib.add_result(RESULT_FILE, result) - - -OUTPUT = '%s/output' % os.getcwd() -RESULT_FILE = '%s/result.txt' % OUTPUT -CTS_STDOUT = '%s/cts-stdout.txt' % OUTPUT -CTS_LOGCAT = '%s/cts-logcat.txt' % OUTPUT -TEST_PARAMS = '' - -parser = argparse.ArgumentParser() -parser.add_argument('-t', dest='TEST_PARAMS', required=True, - help="cts test parameters") -args = parser.parse_args() -TEST_PARAMS = args.TEST_PARAMS - -if os.path.exists(OUTPUT): - suffix = datetime.datetime.now().strftime('%Y%m%d%H%M%S') - shutil.move(OUTPUT, '%s_%s' % (OUTPUT, suffix)) -os.makedirs(OUTPUT) - -# Setup logger. -# There might be an issue in lava/local dispatcher, most likely problem of -# pexpect. It prints the messages from print() last, not by sequence. -# Use logging and subprocess.call() to work around this. -logger = logging.getLogger('CTS') -logger.setLevel(logging.DEBUG) -ch = logging.StreamHandler() -ch.setLevel(logging.DEBUG) -formatter = logging.Formatter('%(asctime)s - %(name)s: %(levelname)s: %(message)s') -ch.setFormatter(formatter) -logger.addHandler(ch) - -cts_stdout = open(CTS_STDOUT, 'w') -cts_logcat_out = open(CTS_LOGCAT, 'w') -cts_logcat = subprocess.Popen(['adb', 'logcat'], stdout=cts_logcat_out) - -logger.info('Test params: %s' % TEST_PARAMS) -logger.info('Starting CTS test...') - -child = pexpect.spawn('android-cts/tools/cts-tradefed', logfile=cts_stdout) -try: - child.expect('cts-tf >', timeout=60) - child.sendline(TEST_PARAMS) -except pexpect.TIMEOUT: - result = 'lunch-cts-rf-shell fail' - py_test_lib.add_result(RESULT_FILE, result) - -while child.isalive(): - subprocess.call('echo') - subprocess.call(['echo', '--- line break ---']) - logger.info('Checking adb connectivity...') - adb_command = "adb shell echo OK" - adb_check = subprocess.Popen(shlex.split(adb_command)) - if adb_check.wait() != 0: - subprocess.call(['adb', 'devices']) - logger.error('Terminating CTS test as adb connection is lost!') - child.terminate(force=True) - result = 'check-adb-connectivity fail' - py_test_lib.add_result(RESULT_FILE, result) - break - else: - logger.info('adb device is alive') - - try: - # Check if all tests finished every minute. - m = child.expect(['I/ResultReporter: Full Result:', - 'I/ConsoleReporter:.*Test run failed to complete.'], - timeout=60) - if m == 0: - py_test_lib.add_result(RESULT_FILE, 'cts-test-run pass') - elif m == 1: - py_test_lib.add_result(RESULT_FILE, 'cts-test-run fail') - - # Once all tests finshed, exit from tf shell and throw EOF. - child.sendline('exit') - child.expect(pexpect.EOF, timeout=60) - except pexpect.TIMEOUT: - logger.info('Printing cts recent output...') - subprocess.call(['tail', CTS_STDOUT]) - -logger.info('CTS test finished') -cts_logcat.kill() -cts_logcat_out.close() -cts_stdout.close() - -# Locate and parse test result. -result_dir = 'android-cts/results' -test_result = 'test_result.xml' -if os.path.exists(result_dir) and os.path.isdir(result_dir): - for root, dirs, files in os.walk(result_dir): - for name in files: - if name == test_result: - result_parser(xml_file=os.path.join(root, name)) diff --git a/automated/android/cts/cts.sh b/automated/android/cts/cts.sh deleted file mode 100755 index 8e85d94..0000000 --- a/automated/android/cts/cts.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/sh -x - -# shellcheck disable=SC1091 -. ../../lib/sh-test-lib -# shellcheck disable=SC1091 -. ../../lib/android-test-lib - -SKIP_INSTALL="false" -TIMEOUT="300" -JDK="openjdk-8-jdk-headless" -PKG_DEPS="curl wget zip xz-utils python-lxml python-setuptools python-pexpect aapt android-tools-adb lib32z1-dev libc6-dev-i386 lib32gcc1 libc6:i386 libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386" -CTS_URL="http://testdata.validation.linaro.org/cts/android-cts-7.1_r1.zip" -TEST_PARAMS="run cts -m CtsBionicTestCases --abi arm64-v8a --disable-reboot --skip-preconditions --skip-device-info" -RESULT_FILE="$(pwd)/output/result.txt" -export RESULT_FILE - -usage() { - echo "Usage: $0 [-s ] [-o timeout] [-n serialno] [-d jdk-version] [-c cts_url] [-t test_params]" 1>&2 - exit 1 -} - -while getopts ':s:o:n:d:c:t:' opt; do - case "${opt}" in - s) SKIP_INSTALL="${OPTARG}" ;; - o) TIMEOUT="${OPTARG}" ;; - n) ANDROID_SERIAL="${OPTARG}" ;; - d) JDK="${OPTARG}" ;; - c) CTS_URL="${OPTARG}" ;; - t) TEST_PARAMS="${OPTARG}" ;; - *) usage ;; - esac -done - -if [ "${SKIP_INSTALL}" = "true" ] || [ "${SKIP_INSTALL}" = "True" ]; then - info_msg "Package installation skipped" -else - dist_name - dist_info - # shellcheck disable=SC2154 - case "${dist}" in - debian) - dpkg --add-architecture i386 - dist_info - echo "deb [arch=amd64,i386] http://ftp.us.debian.org/debian ${Codename} main non-free contrib" > /etc/apt/sources.list.d/cts.list - if [ "${Codename}" != "sid" ]; then - echo "deb http://ftp.debian.org/debian ${Codename}-backports main" >> /etc/apt/sources.list.d/cts.list - fi - cat /etc/apt/sources.list.d/cts.list - apt-get update || true - install_deps "${JDK}" || install_deps "-t ${Codename}-backports ${JDK}" - install_deps "${PKG_DEPS}" - ;; - *) - install_deps "${PKG_DEPS} ${JDK}" - ;; - esac - install_latest_adb -fi - -initialize_adb -wait_boot_completed "${TIMEOUT}" -wait_homescreen "${TIMEOUT}" - -# Increase the heap size. KVM devices in LAVA default to ~250M of heap -export _JAVA_OPTIONS="-Xmx350M" -java -version - -# Download CTS test package or copy it from local disk. -if echo "${CTS_URL}" | grep "^http" ; then - wget -S --progress=dot:giga "${CTS_URL}" -else - cp "${CTS_URL}" ./ -fi -file_name=$(basename "${CTS_URL}") -unzip -q "${file_name}" -rm -f "${file_name}" - -if [ -d android-cts/results ]; then - mv android-cts/results "android-cts/results_$(date +%Y%m%d%H%M%S)" -fi - -# Run CTS test. -info_msg "About to run dd speed test on device ${ANDROID_SERIAL}" -./cts-runner.py -t "${TEST_PARAMS}" - -# Cleanup. -rm -f /etc/apt/sources.list.d/cts.list diff --git a/automated/android/cts/cts.yaml b/automated/android/cts/cts.yaml deleted file mode 100644 index d12e149..0000000 --- a/automated/android/cts/cts.yaml +++ /dev/null @@ -1,41 +0,0 @@ -metadata: - name: cts - format: "Lava-Test-Shell Test Definition 1.0" - description: "Run CTS on Linaro android." - maintainer: - - milosz.wasilewski@linaro.org - - chase.qi@linaro.org - os: - - debian - - ubuntu - devices: - - lxc - scope: - - functional - -params: - SKIP_INSTALL: "false" - # Specify timeout in seconds for wait_boot_completed and wait_homescreen. - TIMEOUT: "300" - # Specify adb device serial no. if more then one device connected. - ANDROID_SERIAL: "" - JDK: "openjdk-8-jdk-headless" - # Download CTS package or copy it from local disk. - # CTS_URL: "/root/android-cts/linaro/7.1_r1/android-cts-7.1_r1.zip" - CTS_URL: "http://testdata.validation.linaro.org/cts/android-cts-7.1_r1.zip" - TEST_PARAMS: "run cts -m CtsBionicTestCases --abi arm64-v8a --disable-reboot --skip-preconditions --skip-device-info" - # Specify url and token for file uploading. - URL: "https://archive.validation.linaro.org/artifacts/team/qa/" - TOKEN: "4373c97b474497dbd12373689d7d492e" -run: - steps: - - cd ./automated/android/cts - - ./cts.sh -s "${SKIP_INSTALL}" -o "${TIMEOUT}" -n "${ANDROID_SERIAL}" -d "${JDK}" -c "${CTS_URL}" -t "${TEST_PARAMS}" - # Upload test log and result files to artifactorial. - - cp -r ./android-cts/results ./output/ || true - - cp -r ./android-cts/logs ./output/ || true - - tar caf cts-output-$(date +%Y%m%d%H%M%S).tar.xz ./output - - ATTACHMENT=$(ls cts-output-*.tar.xz) - - ../../utils/upload-to-artifactorial.sh -a "${ATTACHMENT}" -u "${URL}" -t "${TOKEN}" - # Send test result to LAVA. - - ../../utils/send-to-lava.sh ./output/result.txt diff --git a/automated/android/tradefed/setup.sh b/automated/android/tradefed/setup.sh new file mode 100755 index 0000000..26ab73a --- /dev/null +++ b/automated/android/tradefed/setup.sh @@ -0,0 +1,37 @@ +#!/bin/sh -x + +# shellcheck disable=SC1091 +. ../../lib/sh-test-lib +# shellcheck disable=SC1091 +. ../../lib/android-test-lib + +JDK="openjdk-8-jdk-headless" +PKG_DEPS="curl wget zip xz-utils python-lxml python-setuptools python-pexpect aapt android-tools-adb lib32z1-dev libc6-dev-i386 lib32gcc1 libc6:i386 libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386" + +dist_name +dist_info +# shellcheck disable=SC2154 +case "${dist}" in + debian) + dpkg --add-architecture i386 + dist_info + echo "deb [arch=amd64,i386] http://ftp.us.debian.org/debian ${Codename} main non-free contrib" > /etc/apt/sources.list.d/tradefed.list + if [ "${Codename}" != "sid" ]; then + echo "deb http://ftp.debian.org/debian ${Codename}-backports main" >> /etc/apt/sources.list.d/tradefed.list + fi + cat /etc/apt/sources.list.d/tradefed.list + apt-get update || true + install_deps "${JDK}" || install_deps "-t ${Codename}-backports ${JDK}" + install_deps "${PKG_DEPS}" + ;; + *) + install_deps "${PKG_DEPS} ${JDK}" + ;; +esac + +install_latest_adb +initialize_adb +adb_root + +# Cleanup. +rm -f /etc/apt/sources.list.d/tradefed.list diff --git a/automated/android/tradefed/tradefed-runner.py b/automated/android/tradefed/tradefed-runner.py new file mode 100755 index 0000000..dff16a6 --- /dev/null +++ b/automated/android/tradefed/tradefed-runner.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python + +import datetime +import os +import re +import sys +import shlex +import shutil +import subprocess +import xml.etree.ElementTree as ET +import pexpect +import argparse +import logging + +sys.path.insert(0, '../../lib/') +import py_test_lib # nopep8 + + +def result_parser(xml_file): + etree_file = open(xml_file, 'rb') + etree_content = etree_file.read() + rx = re.compile("&#([0-9]+);|&#x([0-9a-fA-F]+);") + endpos = len(etree_content) + pos = 0 + while pos < endpos: + # remove characters that don't conform to XML spec + m = rx.search(etree_content, pos) + if not m: + break + mstart, mend = m.span() + target = m.group(1) + if target: + num = int(target) + else: + num = int(m.group(2), 16) + # #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] + if not(num in (0x9, 0xA, 0xD) or + 0x20 <= num <= 0xD7FF or + 0xE000 <= num <= 0xFFFD or + 0x10000 <= num <= 0x10FFFF): + etree_content = etree_content[:mstart] + etree_content[mend:] + endpos = len(etree_content) + pos = mend + + try: + root = ET.fromstring(etree_content) + except ET.ParseError as e: + logger.error('xml.etree.ElementTree.ParseError: %s' % e) + logger.info('Please Check %s manually' % xml_file) + sys.exit(1) + logger.info('Test modules in %s: %s' + % (xml_file, str(len(root.findall('Module'))))) + for elem in root.findall('Module'): + # Naming: Module Name + Test Case Name + Test Name + if 'abi' in elem.attrib.keys(): + module_name = '.'.join([elem.attrib['abi'], elem.attrib['name']]) + else: + module_name = elem.attrib['name'] + + tests_executed = len(elem.findall('.//Test')) + tests_passed = len(elem.findall('.//Test[@result="pass"]')) + tests_failed = len(elem.findall('.//Test[@result="fail"]')) + + result = '%s_executed pass %s' % (module_name, str(tests_executed)) + py_test_lib.add_result(RESULT_FILE, result) + + result = '%s_passed pass %s' % (module_name, str(tests_passed)) + py_test_lib.add_result(RESULT_FILE, result) + + failed_result = 'pass' + if tests_failed > 0: + failed_result = 'fail' + result = '%s_failed %s %s' % (module_name, failed_result, + str(tests_failed)) + py_test_lib.add_result(RESULT_FILE, result) + + +OUTPUT = '%s/output' % os.getcwd() +RESULT_FILE = '%s/result.txt' % OUTPUT +TRADEFED_STDOUT = '%s/tradefed-stdout.txt' % OUTPUT +TRADEFED_LOGCAT = '%s/tradefed-logcat.txt' % OUTPUT +TEST_PARAMS = '' + +parser = argparse.ArgumentParser() +parser.add_argument('-t', dest='TEST_PARAMS', required=True, + help="tradefed shell test parameters") +parser.add_argument('-p', dest='TEST_PATH', required=True, + help="path to tradefed package top directory") +args = parser.parse_args() +#TEST_PARAMS = args.TEST_PARAMS + +if os.path.exists(OUTPUT): + suffix = datetime.datetime.now().strftime('%Y%m%d%H%M%S') + shutil.move(OUTPUT, '%s_%s' % (OUTPUT, suffix)) +os.makedirs(OUTPUT) + +# Setup logger. +# There might be an issue in lava/local dispatcher, most likely problem of +# pexpect. It prints the messages from print() last, not by sequence. +# Use logging and subprocess.call() to work around this. +logger = logging.getLogger('Tradefed') +logger.setLevel(logging.DEBUG) +ch = logging.StreamHandler() +ch.setLevel(logging.DEBUG) +formatter = logging.Formatter('%(asctime)s - %(name)s: %(levelname)s: %(message)s') +ch.setFormatter(formatter) +logger.addHandler(ch) + +tradefed_stdout = open(TRADEFED_STDOUT, 'w') +tradefed_logcat_out = open(TRADEFED_LOGCAT, 'w') +tradefed_logcat = subprocess.Popen(['adb', 'logcat'], stdout=tradefed_logcat_out) + +logger.info('Test params: %s' % args.TEST_PARAMS) +logger.info('Starting tradefed shell test...') + +command = None +prompt = None +if args.TEST_PATH == "android-cts": + command = "android-cts/tools/cts-tradefed" + prompt = "cts-tf >" +if args.TEST_PATH == "android-vts": + command = "android-vts/tools/vts-tradefed" + prompt = "vts-tf >" + +if command is None: + logger.error("Not supported path: %s" % args.TEST_PATH) + sys.exit(1) + +child = pexpect.spawn(command, logfile=tradefed_stdout) +try: + child.expect(prompt, timeout=60) + child.sendline(args.TEST_PARAMS) +except pexpect.TIMEOUT: + result = 'lunch-tf-shell fail' + py_test_lib.add_result(RESULT_FILE, result) + +while child.isalive(): + subprocess.call('echo') + subprocess.call(['echo', '--- line break ---']) + logger.info('Checking adb connectivity...') + adb_command = "adb shell echo OK" + adb_check = subprocess.Popen(shlex.split(adb_command)) + if adb_check.wait() != 0: + subprocess.call(['adb', 'devices']) + logger.error('Terminating tradefed shell test as adb connection is lost!') + child.terminate(force=True) + result = 'check-adb-connectivity fail' + py_test_lib.add_result(RESULT_FILE, result) + break + else: + logger.info('adb device is alive') + + try: + # Check if all tests finished every minute. + m = child.expect(['I/ResultReporter: Full Result:', + 'I/ConsoleReporter:.*Test run failed to complete.'], + timeout=60) + if m == 0: + py_test_lib.add_result(RESULT_FILE, 'tradefed-test-run pass') + elif m == 1: + py_test_lib.add_result(RESULT_FILE, 'tradefed-test-run fail') + + # Once all tests finshed, exit from tf shell and throw EOF. + child.sendline('exit') + child.expect(pexpect.EOF, timeout=60) + except pexpect.TIMEOUT: + logger.info('Printing tradefed recent output...') + subprocess.call(['tail', TRADEFED_STDOUT]) + +logger.info('Tradefed test finished') +tradefed_logcat.kill() +tradefed_logcat_out.close() +tradefed_stdout.close() + +# Locate and parse test result. +result_dir = '%s/results' % args.TEST_PATH +test_result = 'test_result.xml' +if os.path.exists(result_dir) and os.path.isdir(result_dir): + for root, dirs, files in os.walk(result_dir): + for name in files: + if name == test_result: + result_parser(xml_file=os.path.join(root, name)) diff --git a/automated/android/tradefed/tradefed.sh b/automated/android/tradefed/tradefed.sh new file mode 100755 index 0000000..9aaf3b7 --- /dev/null +++ b/automated/android/tradefed/tradefed.sh @@ -0,0 +1,59 @@ +#!/bin/sh -x + +# shellcheck disable=SC1091 +. ../../lib/sh-test-lib +# shellcheck disable=SC1091 +. ../../lib/android-test-lib + +export PATH=$PWD/platform-tools:$PATH +TIMEOUT="300" +TEST_URL="http://testdata.validation.linaro.org/cts/android-cts-7.1_r1.zip" +TEST_PARAMS="run cts -m CtsBionicTestCases --abi arm64-v8a --disable-reboot --skip-preconditions --skip-device-info" +TEST_PATH="android-cts" +RESULT_FILE="$(pwd)/output/result.txt" +export RESULT_FILE + +usage() { + echo "Usage: $0 [-o timeout] [-n serialno] [-c cts_url] [-t test_params] [-p test_path]" 1>&2 + exit 1 +} + +while getopts ':o:n:c:t:p:' opt; do + case "${opt}" in + o) TIMEOUT="${OPTARG}" ;; + n) ANDROID_SERIAL="${OPTARG}" ;; + c) TEST_URL="${OPTARG}" ;; + t) TEST_PARAMS="${OPTARG}" ;; + p) TEST_PATH="${OPTARG}" ;; + *) usage ;; + esac +done + +if [ -e "/home/testuser" ]; then + export HOME=/home/testuser +fi +disable_suspend +wait_boot_completed "${TIMEOUT}" +wait_homescreen "${TIMEOUT}" + +# Increase the heap size. KVM devices in LAVA default to ~250M of heap +export _JAVA_OPTIONS="-Xmx350M" +java -version + +# Download CTS/VTS test package or copy it from local disk. +if echo "${TEST_URL}" | grep "^http" ; then + wget -S --progress=dot:giga "${TEST_URL}" +else + cp "${TEST_URL}" ./ +fi +file_name=$(basename "${TEST_URL}") +unzip -q "${file_name}" +rm -f "${file_name}" + +if [ -d "${TEST_PATH}/results" ]; then + mv "${TEST_PATH}/results" "${TEST_PATH}/results_$(date +%Y%m%d%H%M%S)" +fi + +# Run tradefed test. +info_msg "About to run tradefed shell on device ${ANDROID_SERIAL}" +./tradefed-runner.py -t "${TEST_PARAMS}" -p "${TEST_PATH}" diff --git a/automated/android/tradefed/tradefed.yaml b/automated/android/tradefed/tradefed.yaml new file mode 100644 index 0000000..efdf147 --- /dev/null +++ b/automated/android/tradefed/tradefed.yaml @@ -0,0 +1,46 @@ +metadata: + name: cts + format: "Lava-Test-Shell Test Definition 1.0" + description: "Run tradefed based tests in LAVA." + maintainer: + - milosz.wasilewski@linaro.org + - chase.qi@linaro.org + os: + - debian + - ubuntu + devices: + - lxc + scope: + - functional + +params: + SKIP_INSTALL: "false" + # Specify timeout in seconds for wait_boot_completed and wait_homescreen. + TIMEOUT: "300" + JDK: "openjdk-8-jdk-headless" + # Download CTS package or copy it from local disk. + # CTS_URL: "/root/android-cts/linaro/7.1_r1/android-cts-7.1_r1.zip" + TEST_URL: "http://testdata.validation.linaro.org/cts/android-cts-7.1_r1.zip" + TEST_PARAMS: "run cts -m CtsBionicTestCases --abi arm64-v8a --disable-reboot --skip-preconditions --skip-device-info" + # set to the name of the top directory in TEST_URL archive + # This should be 'android-cts' for CTS and android-vts for VTS + TEST_PATH: "android-cts" + # Specify url and token for file uploading. + URL: "https://archive.validation.linaro.org/artifacts/team/qa/" + TOKEN: "" + +run: + steps: + - cd ./automated/android/tradefed + - ./setup.sh + - useradd testuser + - mkdir /home/testuser; chown testuser.testuser /home/testuser + - sudo -u testuser ./tradefed.sh -o "${TIMEOUT}" -c "${TEST_URL}" -t "${TEST_PARAMS}" -p "${TEST_PATH}" + # Upload test log and result files to artifactorial. + - cp -r ./${TEST_PATH}/results ./output/ || true + - cp -r ./${TEST_PATH}/logs ./output/ || true + - tar caf tradefed-output-$(date +%Y%m%d%H%M%S).tar.xz ./output + - ATTACHMENT=$(ls tradefed-output-*.tar.xz) + - ../../utils/upload-to-artifactorial.sh -a "${ATTACHMENT}" -u "${URL}" -t "${TOKEN}" + # Send test result to LAVA. + - ../../utils/send-to-lava.sh ./output/result.txt -- cgit v1.2.3