blob: 6eb8ceb9c907822d0118826ba72d0f40b5014c1b [file] [log] [blame]
# Copyright 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 os.path
import subprocess
import sys
import tempfile
import time
import its.device
# from its.device import ItsSession
NUM_RUNS = 2
SCENE_NAME = 'sensor_fusion'
SKIP_RET_CODE = 101
TEST_NAME = 'test_sensor_fusion'
TEST_DIR = os.path.join(os.getcwd(), 'tests', SCENE_NAME)
def main():
"""Run all the test_sensor_fusion NUM_RUNS times.
Save intermediate files, and producing a summary/report of the results.
Script should be run from the top-level CameraITS directory.
Command line Arguments:
camera: the camera(s) to be tested. Use comma to separate multiple
camera Ids. Ex: 'camera=0,1' or 'camera=1'
device: the device id for adb
rotator: string for rotator id in for vid:pid:ch
"""
camera_id = '0'
rotator_ids = 'default'
for s in sys.argv[1:]:
if s[:7] == 'camera=' and len(s) > 7:
camera_id = s[7:]
elif s[:8] == 'rotator=' and len(s) > 8:
rotator_ids = s[8:]
if camera_id not in ['0', '1']:
print 'Need to specify camera 0 or 1'
sys.exit()
# Make output directories to hold the generated files.
tmpdir = tempfile.mkdtemp()
print 'Saving output files to:', tmpdir, '\n'
device_id = its.device.get_device_id()
device_id_arg = 'device=' + device_id
print 'Testing device ' + device_id
camera_id_arg = 'camera=' + camera_id
if rotator_ids:
rotator_id_arg = 'rotator=' + rotator_ids
print 'Preparing to run sensor_fusion on camera', camera_id
os.mkdir(os.path.join(tmpdir, camera_id))
# Run test multiple times, capturing stdout and stderr.
numpass = 0
numfail = 0
numskip = 0
for i in range(NUM_RUNS):
os.mkdir(os.path.join(tmpdir, camera_id, SCENE_NAME+'_'+str(i)))
cmd = ('python tools/rotation_rig.py rotator=%s' % rotator_ids)
subprocess.Popen(cmd.split())
cmd = ['python', os.path.join(TEST_DIR, TEST_NAME+'.py'),
device_id_arg, camera_id_arg, rotator_id_arg]
outdir = os.path.join(tmpdir, camera_id, SCENE_NAME+'_'+str(i))
outpath = os.path.join(outdir, TEST_NAME+'_stdout.txt')
errpath = os.path.join(outdir, TEST_NAME+'_stderr.txt')
t0 = time.time()
with open(outpath, 'w') as fout, open(errpath, 'w') as ferr:
retcode = subprocess.call(
cmd, stderr=ferr, stdout=fout, cwd=outdir)
t1 = time.time()
if retcode == 0:
retstr = 'PASS '
numpass += 1
elif retcode == SKIP_RET_CODE:
retstr = 'SKIP '
numskip += 1
else:
retstr = 'FAIL '
numfail += 1
msg = '%s %s/%s [%.1fs]' % (retstr, SCENE_NAME, TEST_NAME, t1-t0)
print msg
test_result = '%d / %d tests passed (%.1f%%)' % (
numpass+numskip, NUM_RUNS, 100.0*float(numpass+numskip)/NUM_RUNS)
print test_result
if __name__ == '__main__':
main()