def test_var_initialization(self): ''' This test assumes a well-formed input spec and mostly just tests that everything compiles and the variable initialization code does not throw any errors. ''' print("Setting current project to", self.project) dxpy.WORKSPACE_ID = self.project dxpy.PROJECT_CONTEXT_ID = self.project # Make some data objects for input dxapplet = dxpy.api.applet_new({"project": dxpy.WORKSPACE_ID, "name": "anapplet", "dxapi": "1.0.0", "runSpec": {"code": "", "interpreter": "bash"}})['id'] dxfile = dxpy.upload_string("foo", name="afile") dxgtable = dxpy.new_dxgtable(columns=[{"name": "int_col", "type": "int"}], name="agtable") dxgtable.add_rows([[3], [0]]) dxgtable.close(block=True) dxrecord = dxpy.new_dxrecord(name="arecord") dxrecord.close() dxapp_json = { "name": "all_vars", "title": "all_vars", "summary": "all_vars", "dxapi": "1.0.0", "version": "0.0.1", "categories": [], "inputSpec": [], "outputSpec": [] } classes = ['applet', 'record', 'file', 'gtable', 'boolean', 'int', 'float', 'string', 'hash', 'array:applet', 'array:record', 'array:file', 'array:gtable', 'array:boolean', 'array:int', 'array:float', 'array:string'] for classname in classes: dxapp_json['inputSpec'].append({"name": "required_" + classname.replace(":", "_"), "class": classname, "optional": False}) # Note: marking outputs as optional so that empty arrays # will be acceptable; keeping names the same (as required) # in order to allow pass-through from input variables dxapp_json['outputSpec'].append({"name": "required_" + classname.replace(":", "_"), "class": classname, "optional": True}) dxapp_json['inputSpec'].append({"name": "optional_" + classname.replace(":", "_"), "class": classname, "optional": True}) cmdline_args = ['-irequired_applet=anapplet', '-irequired_array_applet=anapplet', '-irequired_record=arecord', '-irequired_array_record=arecord', '-irequired_file=afile', '-irequired_array_file=afile', '-irequired_gtable=agtable', '-irequired_array_gtable=agtable', '-irequired_boolean=true', '-irequired_array_boolean=true', '-irequired_array_boolean=false', '-irequired_int=32', '-irequired_array_int=42', '-irequired_float=3.4', '-irequired_array_float=.42', '-irequired_string=foo', '-irequired_array_string=bar', '-irequired_hash={"foo":"bar"}'] for lang in supported_languages: appdir = create_app_dir_with_dxapp_json(dxapp_json, lang) # Test with bare-minimum of inputs output = subprocess.check_output(['dx-run-app-locally', appdir] + cmdline_args) print(output) # Verify array is printed total 3 times once in each input, logs, and final output self.assertEquals(len(re.findall("required_array_boolean = \[ true, false ]", output)), 3) self.assertIn("App finished successfully", output) # See PTFM-13697 for CentOS 5 details if testutil.TEST_RUN_JOBS and not testutil.host_is_centos_5(): # Now actually make it an applet and run it applet_name = dxapp_json['name'] + '-' + lang subprocess.check_output(['dx', 'build', appdir, '--destination', applet_name]) subprocess.check_output(['dx', 'run', applet_name, '-y', '--wait'] + cmdline_args)
def test_var_initialization(self): ''' This test assumes a well-formed input spec and mostly just tests that everything compiles and the variable initialization code does not throw any errors. ''' print("Setting current project to", self.project) dxpy.WORKSPACE_ID = self.project dxpy.PROJECT_CONTEXT_ID = self.project # Make some data objects for input dxpy.api.applet_new({ "project": dxpy.WORKSPACE_ID, "name": "anapplet", "dxapi": "1.0.0", "runSpec": { "code": "", "interpreter": "bash", "distribution": "Ubuntu", "release": "14.04" } })['id'] dxpy.upload_string("foo", name="afile") dxrecord = dxpy.new_dxrecord(name="arecord") dxrecord.close() dxapp_json = { "name": "all_vars", "title": "all_vars", "summary": "all_vars", "dxapi": "1.0.0", "version": "0.0.1", "categories": [], "inputSpec": [], "outputSpec": [] } classes = [ 'applet', 'record', 'file', 'boolean', 'int', 'float', 'string', 'hash', 'array:applet', 'array:record', 'array:file', 'array:boolean', 'array:int', 'array:float', 'array:string' ] for classname in classes: dxapp_json['inputSpec'].append({ "name": "required_" + classname.replace(":", "_"), "class": classname, "optional": False }) # Note: marking outputs as optional so that empty arrays # will be acceptable; keeping names the same (as required) # in order to allow pass-through from input variables dxapp_json['outputSpec'].append({ "name": "required_" + classname.replace(":", "_"), "class": classname, "optional": True }) dxapp_json['inputSpec'].append({ "name": "optional_" + classname.replace(":", "_"), "class": classname, "optional": True }) cmdline_args = [ '-irequired_applet=anapplet', '-irequired_array_applet=anapplet', '-irequired_record=arecord', '-irequired_array_record=arecord', '-irequired_file=afile', '-irequired_array_file=afile', '-irequired_boolean=true', '-irequired_array_boolean=true', '-irequired_array_boolean=false', '-irequired_int=32', '-irequired_array_int=42', '-irequired_float=3.4', '-irequired_array_float=.42', '-irequired_string=foo', '-irequired_array_string=bar', '-irequired_hash={"foo":"bar"}' ] for lang in supported_languages: appdir = create_app_dir_with_dxapp_json(dxapp_json, lang) # See PTFM-13697 for CentOS 5 details if testutil.TEST_RUN_JOBS and not testutil.host_is_centos_5(): # Now actually make it an applet and run it applet_name = dxapp_json['name'] + '-' + lang subprocess.check_output( ['dx', 'build', appdir, '--destination', applet_name]) subprocess.check_output( ['dx', 'run', applet_name, '-y', '--wait'] + cmdline_args)