summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYing Chen <chying@google.com>2016-01-25 19:26:31 -0800
committerYing Chen <chying@google.com>2016-01-25 19:46:26 -0800
commit5e27805e341d128106515f7ee9073e489617f147 (patch)
treebcb8965bdde6ca661de3a7e39fff0c6493a41b5c
parent847b021a5808efe63620be7f451ab54fbae92d15 (diff)
downloadadt-infra-5e27805e341d128106515f7ee9073e489617f147.tar.gz
Add boot tests for nyc-release ndk x86 image
- Issue adb start-server before logcat - kill adb process if "adb shell getprop" timeout Change-Id: Iaf452a138090afd622dacc9da86c1556dc054d17
-rw-r--r--build/masters/master.client.adt/builders.pyl19
-rw-r--r--build/scripts/master/emu_gs_scheduler.py12
-rw-r--r--build/scripts/slave/recipes/adt/adt.py8
-rw-r--r--emu_test/config/boot_cfg.csv104
-rw-r--r--emu_test/test_boot/test_boot.py17
-rw-r--r--emu_test/utils/download_unzip_image.py6
-rw-r--r--emu_test/utils/emu_testcase.py27
7 files changed, 118 insertions, 75 deletions
diff --git a/build/masters/master.client.adt/builders.pyl b/build/masters/master.client.adt/builders.pyl
index 3bce485c..8d4addae 100644
--- a/build/masters/master.client.adt/builders.pyl
+++ b/build/masters/master.client.adt/builders.pyl
@@ -30,6 +30,19 @@
"project": "git_lmp-mr1-emu-dev",
"branch": "all",
"name_identifier": "system-images",
+ },
+ "sys_image_nyc_poller": {
+ "gs_bucket": "android-build-emu-sysimage",
+ "gs_path": ["builds/git_nyc-release-linux-sdk_phone_armv7-win_sdk/",
+ "builds/git_nyc-release-linux-sdk_google_phone_x86-sdk_addon/",
+ "builds/git_nyc-release-linux-sdk_google_phone_x86_64-sdk_addon/",
+ "builds/git_nyc-release-linux-sdk_phone_x86-sdk/",
+ "builds/git_nyc-release-linux-sdk_phone_x86_64-sdk/"],
+ "pollInterval": 1007,
+ "type": "GSMultiPoller",
+ "project": "git_nyc-release",
+ "branch": "all",
+ "name_identifier": "system-images",
},
"emulator_linux_poller": {
"gs_bucket": "android-build-emu",
@@ -129,17 +142,17 @@
"schedulers": {
"emu_linux_scheduler": {
- "project": ["emu-master-dev", "git_lmp-mr1-emu-dev", "git_mnc-emu-dev"],
+ "project": ["emu-master-dev", "git_lmp-mr1-emu-dev", "git_mnc-emu-dev", "git_nyc-release"],
"branch": ["linux", "all"],
"type": "gs_poller",
},
"emu_mac_scheduler": {
- "project": ["emu-master-dev", "git_lmp-mr1-emu-dev", "git_mnc-emu-dev"],
+ "project": ["emu-master-dev", "git_lmp-mr1-emu-dev", "git_mnc-emu-dev", "git_nyc-release"],
"branch": ["mac", "all"],
"type": "gs_poller",
},
"emu_windows_scheduler": {
- "project": ["emu-master-dev", "git_lmp-mr1-emu-dev", "git_mnc-emu-dev"],
+ "project": ["emu-master-dev", "git_lmp-mr1-emu-dev", "git_mnc-emu-dev", "git_nyc-release"],
"branch": ["windows", "all"],
"type": "gs_poller",
},
diff --git a/build/scripts/master/emu_gs_scheduler.py b/build/scripts/master/emu_gs_scheduler.py
index a7ff91f3..d2530e3c 100644
--- a/build/scripts/master/emu_gs_scheduler.py
+++ b/build/scripts/master/emu_gs_scheduler.py
@@ -32,7 +32,7 @@ class EmulatorSingleBranchScheduler(SingleBranchScheduler):
emu_revision = content[0]
emu_file = ','.join(content[1:])
except:
- log.msg("%s: Error - emulator cache file not available, cancle build" % self.name)
+ log.msg("%s: Error - emulator cache file not available, cancel build" % self.name)
cancel_build = True
try:
with open('sys_image_lmp_poller.cache', 'r') as f:
@@ -50,11 +50,21 @@ class EmulatorSingleBranchScheduler(SingleBranchScheduler):
except:
mnc_revision = 'None'
mnc_file = ''
+ try:
+ with open('sys_image_nyc_poller.cache', 'r') as f:
+ content = f.read().splitlines()
+ nyc_revision = content[0]
+ nyc_file = ','.join(content[1:])
+ except:
+ nyc_revision = 'None'
+ nyc_file = ''
self.properties.setProperty('mnc_revision', mnc_revision, 'Scheduler')
self.properties.setProperty('mnc_system_image', mnc_file, 'Scheduler')
self.properties.setProperty('lmp_revision', lmp_revision, 'Scheduler')
self.properties.setProperty('lmp_system_image', lmp_file, 'Scheduler')
+ self.properties.setProperty('nyc_revision', nyc_revision, 'Scheduler')
+ self.properties.setProperty('nyc_system_image', nyc_file, 'Scheduler')
self.properties.setProperty('emu_revision', emu_revision, 'Scheduler')
self.properties.setProperty('emulator_image', emu_file, 'Scheduler')
self.properties.setProperty('got_revision', '%s-%s-%s' % (emu_revision, mnc_revision, lmp_revision), 'Scheduler')
diff --git a/build/scripts/slave/recipes/adt/adt.py b/build/scripts/slave/recipes/adt/adt.py
index 92da403d..68366e10 100644
--- a/build/scripts/slave/recipes/adt/adt.py
+++ b/build/scripts/slave/recipes/adt/adt.py
@@ -29,6 +29,8 @@ def RunSteps(api):
remote_files_list.append(api.properties['mnc_system_image'])
elif project == 'git_lmp-mr1-emu-dev':
remote_files_list.append(api.properties['lmp_system_image'])
+ elif project == 'git_nyc-release':
+ remote_files_list.append(api.properties['nyc_system_image'])
download_path = api.path['slave_build'].join('')
emulator_path = download_path.join('tools', 'emulator')
@@ -137,6 +139,12 @@ def RunSteps(api):
'test_boot.*',
'boot_cfg.csv',
'{"api": "23"}')
+ if str(api.properties['nyc_revision']) != 'None' and project in ['git_nyc-release', 'emu-master-dev']:
+ PythonTestStep('Boot Test - NYC System Image',
+ api.path.join(log_dir, 'boot_test_NYC_sysimage'),
+ 'test_boot.*',
+ 'boot_cfg.csv',
+ '{"api": "24"}')
PythonTestStep('Run Emulator CTS Test',
api.path.join(log_dir, 'CTS_test'),
'test_cts.*',
diff --git a/emu_test/config/boot_cfg.csv b/emu_test/config/boot_cfg.csv
index ef4f2e0d..8815e9f5 100644
--- a/emu_test/config/boot_cfg.csv
+++ b/emu_test/config/boot_cfg.csv
@@ -1,48 +1,56 @@
-Device Config,,,,,,,Linux,,,,Windows,,,,,MacOSX,,,
-API*,TAG*,ABI*,DEVICE,RAM,GPU,TOT IMAGE,Ubuntu 12.04 HD Graphics 4000,Ubuntu 14.04 HD 4400,Ubuntu 14.04 Quadro 600,Ubuntu 15.04 Quadro K600,Win 7 32-bit HD 4400,Win 7 64-bit HD 4400,Win 8 64-bit Quadro 600,Win 8.1 64-bit Quadro 600,Win 10 64-bit Quadro 600,Mac 10.10.5 Intel HD 5000,Mac 10.10.5 Iris Pro,Mac 10.8.5 Intel HD 5000,Mac 10.11.1 Iris Pro
-API 23,android-tv,armeabi-v7a,Android TV (1080p),2048,yes,,,,P,,,,,,,,,,
-,,x86,Android TV (1080p),2048,yes,,,,P,,,,,,,,,,
-,default,armeabi-v7a,Nexus 6,2048,yes,,P,P,P,P,P,,P,P,P,P,P,P,P
-,,x86,Nexus 5,2048,yes,yes,P,P,P,P,P,P,P,P,P,P,P,P,P
-,,x86_64,Nexus 5,2048,yes,yes,P,P,P,P,S,P,P,P,P,P,P,P,P
-,google_apis,armeabi-v7a,Galaxy Nexus,2048,yes,,,,P,,,,,,,,,,
-,,x86,Nexus 5,2048,yes,yes,P,P,P,P,P,P,P,P,P,P,P,P,P
-,,x86_64,Nexus 5,2048,yes,yes,P,P,P,P,S,P,P,P,P,P,P,P,P
-API 22,android-tv,armeabi-v7a,Android TV (1080p),2048,yes,,,,P,,,,,,,,,,
-,,x86,Android TV (1080p),2048,yes,,,,P,,,,,,,,,,
-,android-wear,armeabi-v7a,wear_square_320,1024,yes,,,,P,,,,,,,,,,
-,,x86,,,,,,,P,,,,,,,,,,
-,default,armeabi-v7a,,,,,,,P,,,,,,,,,,
-,,x86,Nexus 5,2048,yes,yes,P,P,P,P,P,P,P,P,P,P,P,P,P
-,,x86_64,Nexus 5,2048,yes,yes,P,P,P,P,S,P,P,P,P,P,P,P,P
-,google_apis,armeabi-v7a,,,,,,,P,,,,,,,,,,
-,,x86,Nexus 5,2048,yes,yes,P,P,P,P,P,P,P,P,P,P,P,P,P
-,,x86_64,Nexus 5,2048,yes,yes,P,P,P,P,S,P,P,P,P,P,P,P,P
-API 21,android-tv,armeabi-v7a,Android TV (1080p),2048,yes,,,,P,,,,,,,,,,
-,,x86,Android TV (1080p),2048,yes,,,,P,,,,,,,,,,
-,android-wear,armeabi-v7a,,,,,,,P,,,,,,,,,,
-,,x86,,,,,,,P,,,,,,,,,,
-,default,armeabi-v7a,Nexus 5,2048,yes,,P,P,P,P,P,,P,P,P,P,P,P,P
-,,x86,Nexus 5,2048,yes,,P,P,P,P,P,P,P,P,P,P,P,P,P
-,,x86_64,Nexus 5,2048,yes,,P,P,P,P,S,,P,P,P,X,X,X,X
-,google_apis,armeabi-v7a,,,,,,,P,,,,,,,,,,
-,,x86,,,,,,,P,,,,,,,,,,
-,,x86_64,,,,,,,P,,,,,,,,,,
-API 20,android-wear,armeabi-v7a,,,,,,,P,,,,,,,,,,
-,,x86,,,,,,,P,,,,,,,,,,
-API 19,default,armeabi-v7a,,,,,,,P,,,,,,,,,,
-,,x86,,,,,,,P,,,,,,,,,,
-,google_apis,armeabi-v7a,,,,,,,,,,,,,,,,,
-,,x86,,,,,,,,,,,,,,,,,
-API 18,default,armeabi-v7a,,,,,,,P,,,,,,,,,,
-,,x86,,,,,,,P,,,,,,,,,,
-API 17,default,armeabi-v7a,,,,,,,P,,,,,,,,,,
-,,mips,,,,,,,P,,,,,,,,,,
-,,x86,,,,,,,P,,,,,,,,,,
-API 16,default,armeabi-v7a,Nexus 4,1024,yes,,P,P,P,P,,,P,P,P,P,P,P,P
-,,mips,Nexus 4,1024,yes,,P,P,P,P,,,P,P,P,P,P,P,P
-,,x86,Nexus 4,1024,yes,,P,P,P,P,,,P,P,P,X,X,X,X
-API 15,default,armeabi-v7a,,,no,,,,P,,,,,,,,,,
-,,mips,,,no,,,,P,,,,,,,,,,
-,,x86,,,no,,,,P,,,,,,,,,,
-API 10,default,x86,,,no,,P,P,P,P,,,P,P,P,P,P,P,P \ No newline at end of file
+Device Config,,,,,,Linux,,,,Windows,,,,,MacOSX,,,
+API*,TAG*,ABI*,DEVICE,RAM,GPU,Ubuntu 12.04 HD Graphics 4000,Ubuntu 14.04 HD 4400,Ubuntu 14.04 Quadro 600,Ubuntu 15.04 Quadro K600,Win 7 32-bit HD 4400,Win 7 64-bit HD 4400,Win 8 64-bit Quadro 600,Win 8.1 64-bit Quadro 600,Win 10 64-bit Quadro 600,Mac 10.10.5 Intel HD 5000,Mac 10.10.5 Iris Pro,Mac 10.8.5 Intel HD 5000,Mac 10.11.1 Iris Pro
+API 24,android-tv,armeabi-v7a,Android TV (1080p),2048,yes,,,,,,,,,,,,,
+,,x86,Android TV (1080p),2048,yes,,,,,,,,,,,,,
+,default,armeabi-v7a,Nexus 6,2048,yes,,,,,,,,,,,,,
+,,x86,Nexus 5,2048,yes,P,P,P,P,P,P,P,P,P,P,P,P,P
+,,x86_64,Nexus 5,2048,yes,P,P,P,P,S,P,P,P,P,P,P,P,P
+,google_apis,armeabi-v7a,Galaxy Nexus,2048,yes,,,,,,,,,,,,,
+,,x86,Nexus 5,2048,yes,,,,,,,,,,,,,
+,,x86_64,Nexus 5,2048,yes,,,,,,,,,,,,,
+API 23,android-tv,armeabi-v7a,Android TV (1080p),2048,yes,,,P,,,,,,,,,,
+,,x86,Android TV (1080p),2048,yes,,,P,,,,,,,,,,
+,default,armeabi-v7a,Nexus 6,2048,yes,P,P,P,P,P,,P,P,P,P,P,P,P
+,,x86,Nexus 5,2048,yes,P,P,P,P,P,P,P,P,P,P,P,P,P
+,,x86_64,Nexus 5,2048,yes,P,P,P,P,S,P,P,P,P,P,P,P,P
+,google_apis,armeabi-v7a,Galaxy Nexus,2048,yes,,,P,,,,,,,,,,
+,,x86,Nexus 5,2048,yes,P,P,P,P,P,P,P,P,P,P,P,P,P
+,,x86_64,Nexus 5,2048,yes,P,P,P,P,S,P,P,P,P,P,P,P,P
+API 22,android-tv,armeabi-v7a,Android TV (1080p),2048,yes,,,P,,,,,,,,,,
+,,x86,Android TV (1080p),2048,yes,,,P,,,,,,,,,,
+,android-wear,armeabi-v7a,wear_square_320,1024,yes,,,P,,,,,,,,,,
+,,x86,,,,,,P,,,,,,,,,,
+,default,armeabi-v7a,,,,,,P,,,,,,,,,,
+,,x86,Nexus 5,2048,yes,P,P,P,P,P,P,P,P,P,P,P,P,P
+,,x86_64,Nexus 5,2048,yes,P,P,P,P,S,P,P,P,P,P,P,P,P
+,google_apis,armeabi-v7a,,,,,,P,,,,,,,,,,
+,,x86,Nexus 5,2048,yes,P,P,P,P,P,P,P,P,P,P,P,P,P
+,,x86_64,Nexus 5,2048,yes,P,P,P,P,S,P,P,P,P,P,P,P,P
+API 21,android-tv,armeabi-v7a,Android TV (1080p),2048,yes,,,P,,,,,,,,,,
+,,x86,Android TV (1080p),2048,yes,,,P,,,,,,,,,,
+,android-wear,armeabi-v7a,,,,,,P,,,,,,,,,,
+,,x86,,,,,,P,,,,,,,,,,
+,default,armeabi-v7a,Nexus 5,2048,yes,P,P,P,P,P,,P,P,P,P,P,P,P
+,,x86,Nexus 5,2048,yes,P,P,P,P,P,P,P,P,P,P,P,P,P
+,,x86_64,Nexus 5,2048,yes,P,P,P,P,S,,P,P,P,X,X,X,X
+,google_apis,armeabi-v7a,,,,,,P,,,,,,,,,,
+,,x86,,,,,,P,,,,,,,,,,
+,,x86_64,,,,,,P,,,,,,,,,,
+API 20,android-wear,armeabi-v7a,,,,,,P,,,,,,,,,,
+,,x86,,,,,,P,,,,,,,,,,
+API 19,default,armeabi-v7a,,,,,,P,,,,,,,,,,
+,,x86,,,,,,P,,,,,,,,,,
+,google_apis,armeabi-v7a,,,,,,,,,,,,,,,,
+,,x86,,,,,,,,,,,,,,,,
+API 18,default,armeabi-v7a,,,,,,P,,,,,,,,,,
+,,x86,,,,,,P,,,,,,,,,,
+API 17,default,armeabi-v7a,,,,,,P,,,,,,,,,,
+,,mips,,,,,,P,,,,,,,,,,
+,,x86,,,,,,P,,,,,,,,,,
+API 16,default,armeabi-v7a,Nexus 4,1024,yes,P,P,P,P,,,P,P,P,P,P,P,P
+,,mips,Nexus 4,1024,yes,P,P,P,P,,,P,P,P,P,P,P,P
+,,x86,Nexus 4,1024,yes,P,P,P,P,,,P,P,P,X,X,X,X
+API 15,default,armeabi-v7a,,,no,,,P,,,,,,,,,,
+,,mips,,,no,,,P,,,,,,,,,,
+,,x86,,,no,,,P,,,,,,,,,,
+API 10,default,x86,,,no,P,P,P,P,,,P,P,P,P,P,P,P \ No newline at end of file
diff --git a/emu_test/test_boot/test_boot.py b/emu_test/test_boot/test_boot.py
index 9e9551f0..41c64b68 100644
--- a/emu_test/test_boot/test_boot.py
+++ b/emu_test/test_boot/test_boot.py
@@ -20,26 +20,13 @@ class BootTestCase(EmuBaseTestCase):
super(BootTestCase, cls).setUpClass()
def tearDown(self):
-
- def kill_proc_by_name(proc_names):
- for x in psutil.process_iter():
- try:
- proc = psutil.Process(x.pid)
- # mips 64 use qemu-system-mipsel64, others emulator-[arch]
- if any([x in proc.name() for x in proc_names]):
- if proc.status() != psutil.STATUS_ZOMBIE:
- self.m_logger.info("kill_proc_by_name - %s, %s" % (proc.name(), proc.status()))
- proc.kill()
- except psutil.NoSuchProcess:
- pass
-
self.m_logger.debug('First try - quit emulator by adb emu kill')
kill_proc = psutil.Popen(["adb", "emu", "kill"])
# check emulator process is terminated
result = self.term_check(timeout=5)
if not result:
self.m_logger.debug('Second try - quit emulator by psutil')
- kill_proc_by_name(["emulator", "qemu-system"])
+ self.kill_proc_by_name(["emulator", "qemu-system"])
result = self.term_check(timeout=10)
self.m_logger.debug("term_check after psutil.kill - %s", result)
self.m_logger.info("Remove AVD inside of tear down")
@@ -48,7 +35,7 @@ class BootTestCase(EmuBaseTestCase):
try:
if result:
self.start_proc.wait()
- kill_proc_by_name(["crash-service"])
+ self.kill_proc_by_name(["crash-service"])
psutil.Popen(["adb", "kill-server"])
os.remove(os.path.join(avd_dir, '%s.ini' % self.avd_config.name()))
shutil.rmtree(os.path.join(avd_dir, '%s.avd' % self.avd_config.name()), ignore_errors=True)
diff --git a/emu_test/utils/download_unzip_image.py b/emu_test/utils/download_unzip_image.py
index be5fbddb..230e06a7 100644
--- a/emu_test/utils/download_unzip_image.py
+++ b/emu_test/utils/download_unzip_image.py
@@ -28,6 +28,8 @@ def get_dst_dir(remote_path):
api = '22'
elif 'mnc' in branch_name:
api = '23'
+ elif 'nyc' in branch_name:
+ api = 'N'
else:
raise ValueError("unsupported image %s", branch_name)
return os.path.join(os.environ['ANDROID_SDK_ROOT'],
@@ -69,8 +71,10 @@ def download_and_unzip():
verbose_call(['mkdir', '-p', dst_dir])
if 'x86_64' in file_path:
verbose_call(['rm', '-rf', os.path.join(dst_dir,'x86_64')])
- else:
+ elif 'x86' in file_path:
verbose_call(['rm', '-rf', os.path.join(dst_dir,'x86')])
+ elif 'armv7' in file_path:
+ verbose_call(['rm', '-rf', os.path.join(dst_dir,'armeabi-v7a')])
verbose_call(['unzip', '-o', file_name, '-d', dst_dir])
else:
verbose_call(['unzip', '-o', file_name])
diff --git a/emu_test/utils/emu_testcase.py b/emu_test/utils/emu_testcase.py
index 193e4f08..4a375858 100644
--- a/emu_test/utils/emu_testcase.py
+++ b/emu_test/utils/emu_testcase.py
@@ -115,6 +115,18 @@ class EmuBaseTestCase(LoggedTestCase):
pass
return None
+ def kill_proc_by_name(self, proc_names):
+ for x in psutil.process_iter():
+ try:
+ proc = psutil.Process(x.pid)
+ # mips 64 use qemu-system-mipsel64, others emulator-[arch]
+ if any([x in proc.name() for x in proc_names]):
+ if proc.status() != psutil.STATUS_ZOMBIE:
+ self.m_logger.info("kill_proc_by_name - %s, %s" % (proc.name(), proc.status()))
+ proc.kill()
+ except psutil.NoSuchProcess:
+ pass
+
def launch_emu(self, avd):
"""Launch given avd and return immediately"""
exec_path = emu_args.emulator_exec
@@ -129,6 +141,7 @@ class EmuBaseTestCase(LoggedTestCase):
logcat_path = os.path.join(emu_args.session_dir, "%s_logcat.txt" % test_name)
verbose_log_path = os.path.join(emu_args.session_dir, "%s_verbose.txt" % test_name)
with open(logcat_path, 'w') as output:
+ self.run_with_timeout(["adb", "start-server"], 20)
psutil.Popen(["adb", "logcat"], stdout=output, stderr=STDOUT)
self.start_proc = psutil.Popen(launch_cmd, stdout=PIPE, stderr=STDOUT)
with open(verbose_log_path, 'w') as verb_output:
@@ -165,6 +178,7 @@ class EmuBaseTestCase(LoggedTestCase):
self.m_logger.info('cmd %s timeout, force terminate', ' '.join(cmd))
try:
vars['process'].terminate()
+ self.kill_proc_by_name(["adb"])
except Exception as e:
self.m_logger.error('exception terminate adb getprop process: %r', e)
thread.join(timeout)
@@ -248,8 +262,9 @@ class EmuBaseTestCase(LoggedTestCase):
gpu = "no" if avd_config.gpu == "no" else "yes"
set_val('hw.gpu.enabled', gpu)
set_val('hw.ramSize', avd_config.ram)
+ api_target = avd_config.api if avd_config.api != "24" else "N"
set_val('image.sysdir.1',
- 'system-images/android-%s/%s/%s/' % (avd_config.api, avd_config.tag, avd_config.abi))
+ 'system-images/android-%s/%s/%s/' % (api_target, avd_config.tag, avd_config.abi))
set_val('tag.display', tag_id_to_display[avd_config.tag])
set_val('tag.id', avd_config.tag)
@@ -277,10 +292,11 @@ class EmuBaseTestCase(LoggedTestCase):
def try_create():
android_exec = "android.bat" if os.name == "nt" else "android"
avd_abi = "%s/%s" % (avd_config.tag, avd_config.abi)
+ api_target = avd_config.api if avd_config.api != "24" else "N"
if "google" in avd_config.tag:
- avd_target = "Google Inc.:Google APIs:%s" % (avd_config.api)
+ avd_target = "Google Inc.:Google APIs:%s" % (api_target)
else:
- avd_target = "android-%s" % (avd_config.api)
+ avd_target = "android-%s" % (api_target)
create_cmd = [android_exec, "create", "avd", "--force",
"--name", avd_name, "--target", avd_target,
"--abi", avd_abi]
@@ -423,12 +439,9 @@ def create_test_case_from_file(desc, testcase_class, test_func):
# For 32 bit machine, ram should be less than 768MB
if not platform.machine().endswith('64'):
ram = str(min([int(ram), 768]))
- if api < "22" and row[6] == "yes":
- raise ConfigError()
- tot_image = row[6] if row[6] == "yes" else "no"
avd_config = AVDConfig(api, tag, abi, device, ram, gpu, classic="yes", port=get_port(), cts=False)
create_test_case(avd_config, op)
# for unreleased images, test with qemu2 in addition
- if tot_image == "yes":
+ if api > "21" and abi != "armeabi-v7a":
avd_config = AVDConfig(api, tag, abi, device, ram, gpu, classic="no", port=get_port(), cts=False)
create_test_case(avd_config, op)