def test_alpha(): assert tcommon.telnet() == True for x in range(0, 10): prefix = tcommon.getRandStr(chars=string.ascii_uppercase + string.ascii_lowercase) assert common.sendData('CREATE "{}/obj"'.format(prefix)) == ["OK"] # create empty object assert common.sendData('DELETE "{}/obj"'.format(prefix)) == ["OK"] # destroy object assert common.sendData('DELETE "{}"'.format(prefix)) == ["OK"] # destroy container
def test_config(): assert common.sendData( '"Config.instance" SET assetBundlesCache "/tmp/"') == ["OK"] assert common.sendData( '"Config.instance" SET databaseFolderPath "/tmp/"') == ["OK"] assert common.sendData('"Config.instance" SET physicsEnabled false') == [ "OK" ]
def setConfig(path=None, databasePath=None, physics=False): common.sendData([ '"Config.instance" SET assetBundlesCache "{}"'.format( settings.assets if path == None else path), '"Config.instance" SET databaseFolderPath "{}"'.format( settings.assets if databasePath == None else databasePath), '"Config.instance" SET physicsEnabled {}'.format('false' if physics == False else 'true') ])
def test_space_nested(): for x in range(0, 10): root = tcommon.getRandStr(chars=' ') prefix = root for i in range(0, 32): prefix += '/{}'.format(tcommon.getRandStr(chars=' ')) assert common.sendData('CREATE "{}/obj"'.format(prefix)) == ["OK"] # create empty object assert common.sendData('DELETE "{}/obj"'.format(prefix)) == ["OK"] # destroy object assert common.sendData('DELETE "{}"'.format(prefix)) == ["OK"] # destroy container
def test_disk_export_setup(width, height, gprefix): assert tcommon.telnet() == True objs[gprefix] = [gprefix] fns[gprefix] = [] objs[gprefix].append('{}/disk1'.format(gprefix)) assert common.sendData('CREATE "{}/disk1"'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/disk1" SET active false'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/disk1" ADD Sensors.Disk'.format(gprefix)) == ["OK"] assert common.sendData('"{}/disk1" SET Sensors.Disk path "{}"'.format( gprefix, settings.output_path)) == ["OK"]
def test_localscale_int(): prefix = tcommon.getRandStr() assert tcommon.telnet() == True assert common.sendData( 'CREATE "{}/obj"'.format(prefix)) == ["OK"] # create empty object assert common.sendData( '"{}/obj" SET Transform localScale (0 32000 65000)'.format( prefix)) == ["OK"] # set object scale assert common.sendData( '"{}/obj" GET Transform localScale'.format(prefix)) == [ '[0.0,32000.0,65000.0]', "OK" ] # get object scale assert common.sendData( 'DELETE "{}"'.format(prefix)) == ["OK"] # destroy object
def test_localscale_float(): prefix = tcommon.getRandStr() assert tcommon.telnet() == True assert common.sendData( 'CREATE "{}/obj"'.format(prefix)) == ["OK"] # create empty object assert common.sendData( '"{}/obj" SET Transform localScale (-6.101 1.101 -50.101)'.format( prefix)) == ["OK"] # set object scale assert common.sendData( '"{}/obj" GET Transform localScale'.format(prefix)) == [ '[-6.101,1.101,-50.101]', "OK" ] # get object scale assert common.sendData( 'DELETE "{}"'.format(prefix)) == ["OK"] # destroy object
def test_localeulerangles_float(): prefix = tcommon.getRandStr() assert tcommon.telnet() == True assert common.sendData( 'CREATE "{}/obj"'.format(prefix)) == ["OK"] # create empty object assert common.sendData( '"{}/obj" SET Transform eulerAngles (0 0 0) localEulerAngles (-6.101 1.101 -50.101)' .format(prefix)) == ["OK"] # set object eulerAngles assert common.sendData( '"{}/obj" GET Transform localEulerAngles'.format(prefix)) == [ '[353.899,1.101,309.899]', "OK" ] # get object eulerAngles assert common.sendData( 'DELETE "{}"'.format(prefix)) == ["OK"] # destroy object
def test_eulerangles_int(): prefix = tcommon.getRandStr() assert tcommon.telnet() == True assert common.sendData( 'CREATE "{}/obj"'.format(prefix)) == ["OK"] # create empty object assert common.sendData( '"{}/obj" SET Transform eulerAngles (0 90 180)'.format(prefix)) == [ "OK" ] # set object eulerAngles assert common.sendData( '"{}/obj" GET Transform eulerAngles'.format(prefix)) == [ '[0.0,90.0,180.0]', "OK" ] # get object eulerAngles assert common.sendData( 'DELETE "{}"'.format(prefix)) == ["OK"] # destroy object
def test_create_del_longnames_nested(): root = tcommon.getRandStr(size=65) for x in range(0, 10): prefix = root # create 32 nested levels, each one with a 65 char length empty object name for i in range(0, 32): prefix += '/{}'.format(tcommon.getRandStr(size=65)) assert common.sendData('CREATE "{}/obj"'.format(prefix)) == ["OK"] # create empty object assert common.sendData('DELETE "{}/obj"'.format(prefix)) == ["OK"] # destroy object assert common.sendData('DELETE "{}"'.format(prefix)) == ["OK"] # destroy container assert common.sendData('DELETE "{}"'.format(root)) == ["OK"] # destroy root container
def test_disk_export_segmentation_setup(width, height, gprefix): objs[gprefix].append('{}/disk1/cameras/segmentation'.format(gprefix)) assert common.sendData( 'CREATE "{}/disk1/cameras/segmentation"'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/disk1/cameras/segmentation" ADD Sensors.RenderCameraLink'.format( gprefix)) == ["OK"] assert common.sendData( '"{}/disk1/cameras/segmentation" SET Sensors.RenderCameraLink target "{}/cameras/segmentation"' .format(gprefix, gprefix)) == ["OK"] assert common.sendData( '"{}/disk1/cameras/segmentation" SET active true'.format(gprefix)) == [ "OK" ] assert common.sendData( '"{}/disk1" SET active true'.format(gprefix)) == ["OK"]
def test_rgb_export(width, height, gprefix): assert common.sendData([ '"{}/disk1" EXECUTE Sensors.Disk Snapshot'.format(gprefix), 'NOOP' ]) == ["OK", "OK"] # take a screenshot and make sure it's written by NOOPing fn = os.path.join(settings.output_path, '1_cameras_camerargb.jpg') assert os.path.exists(fn) == True # check if file exists fns[gprefix].append(fn) sf = os.stat(fn) assert (sf.st_size > 0) == True # check if file is more than zero bytes assert len(tcommon.imageColors( fn)) == 1 # check if there's only one col or on the image assert tcommon.imageSize(fn) == (width, height) # check export image size cleanup(gprefix)
def cleanup(objs, fns=[]): objs.sort(key=lambda x: len(x), reverse=True) for obj in objs: common.output('Removing object `{}`'.format(obj), 'DEBUG') if common.sendData('DELETE "{}"'.format(obj)) != ["OK"]: return False for fn in fns: if os.path.exists(fn): common.output('Removing file `{}`'.format(fn), 'DEBUG') try: os.remove(fn) except: pass return True
def test_camera_rgb_setup(width, height, gprefix): objs[gprefix].append('{}/cameras/cameraRGB'.format(gprefix)) assert common.sendData( 'CREATE "{}/cameras/cameraRGB"'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/cameraRGB" SET active false'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/cameraRGB" ADD Camera Sensors.RenderCamera'.format( gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/cameraRGB" SET Camera near 0.3 far 1000 fieldOfView 60 renderingPath "UsePlayerSettings"' .format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/cameraRGB" SET Sensors.RenderCamera format "ARGB32" resolution ({} {})' .format(gprefix, width, height)) == ["OK"] assert common.sendData( '"{}/cameras/cameraRGB" SET active true'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/cameraRGB" SET Camera enabled true'.format(gprefix)) == [ "OK" ]
def test_torus(): prefix = tcommon.getRandStr() assert tcommon.telnet() == True assert common.sendData( 'CREATE "{}/spawner/drone/container"'.format(prefix)) == ["OK"] assert common.sendData( '"{}/spawner/drone/container" SET active false'.format(prefix)) == [ "OK" ] assert common.sendData( '"{}/spawner/drone/container" ADD RandomProps.Torus'.format( prefix)) == ["OK"] assert common.sendData( '"{}/spawner/drone/container" ADD RandomProps.PropArea'.format( prefix)) == ["OK"] assert common.sendData( '"{}/spawner/drone/container" SET RandomProps.PropArea tags "drone"'. format(prefix)) == ["OK"] assert common.sendData( '"{}/spawner/drone/container" SET RandomProps.PropArea async false numberOfProps 25 collisionCheck false stickToGround false' .format(prefix)) == ["OK"] assert common.sendData( '"{}/spawner/drone/container" SET RandomProps.Torus radius 10 innerRadius 0' .format(prefix)) == ["OK"] assert common.sendData( '"{}/spawner/drone/container" SET Transform position (0 0 0) eulerAngles (0 0 0) localScale (1 1 1)' .format(prefix)) == ["OK"] assert common.sendData( '"{}/spawner/drone/container" SET active true'.format(prefix)) == [ "OK" ] assert common.sendData( '"{}/spawner/drone" SET active true'.format(prefix)) == ["OK"] assert common.sendData( 'DELETE "{}"'.format(prefix)) == ["OK"] # destroy container
def test_camera_segmentation_setup(width, height, gprefix): objs[gprefix].append('{}/cameras/segmentation'.format(gprefix)) assert common.sendData( 'CREATE "{}/cameras/segmentation"'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras" SET Transform position (-6 1 -15) eulerAngles (0 0 0)'. format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/segmentation" SET active false'.format(gprefix)) == [ "OK" ] assert common.sendData( '"{}/cameras/segmentation" ADD Camera SegmentationCamera Segmentation.Output.BoundingBoxes Segmentation.Output.ClassColors Sensors.RenderCamera' .format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/segmentation" SET Camera near 0.3 far 1000 fieldOfView 60 renderingPath "UsePlayerSettings"' .format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/segmentation" SET Sensors.RenderCamera format "ARGB32" resolution ({} {})' .format(gprefix, width, height)) == ["OK"] assert common.sendData( '"{}/cameras/segmentation" SET Segmentation.Output.BoundingBoxes minimumObjectVisibility 0 extensionAmount 0 minimumPixelsCount 1' .format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/segmentation" EXECUTE Segmentation.Output.ClassColors lookUpTable.SetClassColor "Car->red" "Drone->blue"' .format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/segmentation" ADD Segmentation.Output.FilteredBoundingBoxes' .format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/segmentation" EXECUTE Segmentation.Output.FilteredBoundingBoxes EnableClasses "Car" "Drone"' .format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/segmentation" SET active true'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/cameras/segmentation" SET Camera enabled true'.format( gprefix)) == ["OK"]
def test_segmentation_export(width, height, gprefix): # create objects assert common.sendData( 'CREATE "Cars/VW_Golf_V/VW_Golf_V" FROM "cars" AS "{}/obj/subject0"'. format(gprefix)) == ["OK"] assert common.sendData( '"{}/obj" SET active false'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/obj/subject0" SET Transform position (0 0 0) eulerAngles (0 0 0)'. format(gprefix)) == ["OK"] assert common.sendData( '"{}/obj/subject0" ADD Segmentation.Entity Segmentation.Class'.format( gprefix)) == ["OK"] assert common.sendData( '"{}/obj/subject0" SET Segmentation.Class className "Car"'.format( gprefix)) == ["OK"] assert common.sendData( 'CREATE "Drones/DJI_Phantom_4_Pro/DJI_Phantom_4_Pron" FROM "drones" AS "{}/obj/subject1"' .format(gprefix)) == ["OK"] assert common.sendData( '"{}/obj" SET active false'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/obj/subject1" SET Transform position (0 2 0) eulerAngles (0 0 0)'. format(gprefix)) == ["OK"] assert common.sendData( '"{}/obj/subject1" ADD Segmentation.Entity Segmentation.Class'.format( gprefix)) == ["OK"] assert common.sendData( '"{}/obj/subject1" SET Segmentation.Class className "Drone"'.format( gprefix)) == ["OK"] assert common.sendData( '"{}/obj" SET Transform position (-6 0 -9) eulerAngles (0 0 0)'.format( gprefix)) == ["OK"] assert common.sendData( '"{}/obj" SET active true'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/obj/subject0" SET active true'.format(gprefix)) == ["OK"] assert common.sendData( '"{}/obj/subject1" SET active true'.format(gprefix)) == ["OK"] # take screenshot assert common.sendData([ '"{}/disk1" EXECUTE Sensors.Disk Snapshot'.format(gprefix), 'NOOP' ]) == ["OK", "OK"] # take a screenshot and make sure it's written by NOOPing objs[gprefix].append("{}/obj".format(gprefix)) fn = os.path.join(settings.output_path, '1_cameras_segmentation.jpg') assert os.path.exists(fn) == True # check if file exists fns[gprefix].append(fn) sf = os.stat(fn) assert (sf.st_size > 0) == True # check if file is more than zero bytes assert tcommon.imageColors( fn) == None # check if there's more than 256 colors on the image assert tcommon.imageSize(fn) == (width, height) # check export image size output = common.sendData( '"{}/cameras/segmentation" GET Segmentation.Output.BoundingBoxes boundingBoxes' .format(gprefix), read=True) assert len(output) == 2 # output length output[0] = re.sub('"id":\d+,', '', output[0]) assert output == [ '[{"classId":1,"numPoints":43268,"boxMin":[0.3773216, 0.3116036],"boxMax":[0.6226784, 0.6036506],"visibility":"Infinity"},{"classId":2,"numPoints":425,"boxMin":[0.4770283, 0.6440678],"boxMax":[0.5229716, 0.6779661],"visibility":"Infinity"}]', "OK" ] cleanup(gprefix)
def test_digits_long(): for x in range(0, 10): prefix = tcommon.getRandStr(size=257, chars=string.digits) assert common.sendData('CREATE "{}/obj"'.format(prefix)) == ["OK"] # create empty object assert common.sendData('DELETE "{}/obj"'.format(prefix)) == ["OK"] # destroy object assert common.sendData('DELETE "{}"'.format(prefix)) == ["OK"] # destroy container
def test_create_del_longnames(): for x in range(0, 10): prefix = tcommon.getRandStr(size=257) assert common.sendData('CREATE "{}/obj"'.format(prefix)) == ["OK"] # create empty object assert common.sendData('DELETE "{}/obj"'.format(prefix)) == ["OK"] # destroy object assert common.sendData('DELETE "{}"'.format(prefix)) == ["OK"] # destroy container