# 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()