def rebuild(self, all=False): if not self.options.meson_build_dirs: self.options.meson_build_dirs = [config.BUILDDIR] if self.options.meson_no_rebuild: return True if self.rebuilt is not None: return self.rebuilt for bdir in self.options.meson_build_dirs: if not os.path.isfile(os.path.join(bdir, 'build.ninja')): printc("Only ninja backend is supported to rebuilt tests before running them.\n", Colors.OKBLUE) self.rebuilt = True return True ninja = shutil.which('ninja') if not ninja: ninja = shutil.which('ninja-build') if not ninja: printc("Can't find ninja, can't rebuild test.\n", Colors.FAIL) self.rebuilt = False return False print("-> Rebuilding %s.\n" % bdir) try: subprocess.check_call([ninja, '-C', bdir]) except subprocess.CalledProcessError: self.rebuilt = False return False self.rebuilt = True return True
def _discover_file(self, uri, fpath): try: media_info = "%s.%s" % (fpath, GstValidateMediaDescriptor.MEDIA_INFO_EXT) args = G_V_DISCOVERER_COMMAND.split(" ") args.append(uri) if os.path.isfile( media_info) and not self.options.update_media_info: self._add_media(media_info, uri) return True elif fpath.endswith(GstValidateMediaDescriptor.STREAM_INFO_EXT): self._add_media(fpath) return True elif not self.options.generate_info and not self.options.update_media_info and not self.options.validate_uris: return True elif self.options.update_media_info and not os.path.isfile( media_info): return True media_descriptor = GstValidateMediaDescriptor.new_from_uri( uri, True, self.options.generate_info_full) if media_descriptor: self._add_media(media_descriptor, uri) else: self.warning("Could not get any descriptor for %s" % uri) return True except subprocess.CalledProcessError as e: if self.options.generate_info: printc("Result: Failed", Colors.FAIL) else: self.error("Exception: %s", e) return False
def _discover_file(self, uri, fpath): try: media_info = "%s.%s" % ( fpath, GstValidateMediaDescriptor.MEDIA_INFO_EXT) args = G_V_DISCOVERER_COMMAND.split(" ") args.append(uri) if os.path.isfile(media_info) and not self.options.update_media_info: self._add_media(media_info, uri) return True elif fpath.endswith(GstValidateMediaDescriptor.STREAM_INFO_EXT): self._add_media(fpath) return True elif not self.options.generate_info and not self.options.update_media_info and not self.options.validate_uris: self.info("%s not present. Use --generate-media-info", media_info) return True elif self.options.update_media_info and not os.path.isfile(media_info): self.info("%s not present. Use --generate-media-info", media_info) return True media_descriptor = GstValidateMediaDescriptor.new_from_uri( uri, True, self.options.generate_info_full) if media_descriptor: self._add_media(media_descriptor, uri) else: self.warning("Could not get any descriptor for %s" % uri) return True except subprocess.CalledProcessError as e: if self.options.generate_info: printc("Result: Failed", Colors.FAIL) else: self.error("Exception: %s", e) return False
def get_meson_tests(self): meson = shutil.which('meson') if not meson: meson = shutil.which('meson.py') if not meson: printc("Can't find meson, can't run testsuite.\n", Colors.FAIL) return False if not self.options.meson_build_dirs: self.options.meson_build_dirs = [config.BUILDDIR] self.options.meson_build_dirs = [ os.path.realpath(p) for p in self.options.meson_build_dirs ] mesontests = [] for i, bdir in enumerate(self.options.meson_build_dirs): bdir = os.path.abspath(bdir) output = subprocess.check_output( [meson, 'introspect', '--tests', bdir]) for test_dict in json.loads(output.decode()): test_dict['__bdir__'] = bdir mesontests.append(test_dict) return mesontests
def rebuild(self, all=False): if not self.options.meson_build_dirs: self.options.meson_build_dirs = [config.BUILDDIR] if self.options.meson_no_rebuild: return True if self.rebuilt is not None: return self.rebuilt for bdir in self.options.meson_build_dirs: if not os.path.isfile(os.path.join(bdir, 'build.ninja')): printc( "Only ninja backend is supported to rebuilt tests before running them.\n", Colors.OKBLUE) self.rebuilt = True return True ninja = shutil.which('ninja') if not ninja: ninja = shutil.which('ninja-build') if not ninja: printc("Can't find ninja, can't rebuild test.\n", Colors.FAIL) self.rebuilt = False return False print("-> Rebuilding %s.\n" % bdir) try: subprocess.check_call([ninja, '-C', bdir]) except subprocess.CalledProcessError: self.rebuilt = False return False self.rebuilt = True return True
def _discover_file(self, uri, fpath): for ext in (GstValidateMediaDescriptor.MEDIA_INFO_EXT, GstValidateMediaDescriptor.PUSH_MEDIA_INFO_EXT): try: is_push = False media_info = "%s.%s" % (fpath, ext) if ext == GstValidateMediaDescriptor.PUSH_MEDIA_INFO_EXT: if not os.path.exists(media_info): continue is_push = True uri = "push" + uri args = GstValidateBaseTestManager.MEDIA_CHECK_COMMAND.split( " ") args.append(uri) if os.path.isfile( media_info) and not self.options.update_media_info: self._add_media(media_info, uri) continue elif fpath.endswith( GstValidateMediaDescriptor.STREAM_INFO_EXT): self._add_media(fpath) continue elif not self.options.generate_info and not self.options.update_media_info and not self.options.validate_uris: continue elif self.options.update_media_info and not os.path.isfile( media_info): self.info("%s not present. Use --generate-media-info", media_info) continue elif os.path.islink(media_info): self.info( "%s is a symlink, not updating and hopefully the actual file gets updated!", media_info) continue include_frames = 0 if self.options.update_media_info: include_frames = 2 elif self.options.generate_info_full: include_frames = 1 media_descriptor = GstValidateMediaDescriptor.new_from_uri( uri, True, include_frames, is_push) if media_descriptor: self._add_media(media_descriptor, uri) else: self.warning("Could not get any descriptor for %s" % uri) except subprocess.CalledProcessError as e: if self.options.generate_info: printc("Result: Failed", Colors.FAIL) else: self.error("Exception: %s", e) return False return True
def update_assets(assets_dir): try: utils.launch_command("cd %s && %s" % (assets_dir, SYNC_ASSETS_COMMAND), fails=True) except subprocess.CalledProcessError as e: utils.printc("Could not update assets repository\n\nError: %s" "\n\nMAKE SURE YOU HAVE git-annex INSTALLED!" % (e), utils.Colors.FAIL, True) return False return True
def _discover_file(self, uri, fpath): for ext in (GstValidateMediaDescriptor.MEDIA_INFO_EXT, GstValidateMediaDescriptor.PUSH_MEDIA_INFO_EXT): try: is_push = False media_info = "%s.%s" % (fpath, ext) if ext == GstValidateMediaDescriptor.PUSH_MEDIA_INFO_EXT: if not os.path.exists(media_info): continue is_push = True uri = "push" + uri args = GstValidateBaseTestManager.MEDIA_CHECK_COMMAND.split(" ") args.append(uri) if os.path.isfile(media_info) and not self.options.update_media_info: self._add_media(media_info, uri) continue elif fpath.endswith(GstValidateMediaDescriptor.STREAM_INFO_EXT): self._add_media(fpath) continue elif not self.options.generate_info and not self.options.update_media_info and not self.options.validate_uris: continue elif self.options.update_media_info and not os.path.isfile(media_info): self.info( "%s not present. Use --generate-media-info", media_info) continue elif os.path.islink(media_info): self.info( "%s is a symlink, not updating and hopefully the actual file gets updated!", media_info) continue include_frames = 0 if self.options.update_media_info: include_frames = 2 elif self.options.generate_info_full: include_frames = 1 media_descriptor = GstValidateMediaDescriptor.new_from_uri( uri, True, include_frames, is_push) if media_descriptor: self._add_media(media_descriptor, uri) else: self.warning("Could not get any descriptor for %s" % uri) except subprocess.CalledProcessError as e: if self.options.generate_info: printc("Result: Failed", Colors.FAIL) else: self.error("Exception: %s", e) return False return True
def register_defaults(self): """ Registers the defaults: * Scenarios to be used * Encoding formats to be used * Blacklisted tests * Test generators """ printc("-> Registering default 'validate' tests... ", end='') self.register_default_scenarios() self.register_default_encoding_formats() self.register_default_blacklist() self.register_default_test_generators() printc("OK", Colors.OKGREEN)
def print_valgrind_bugs(self): # Look for all the 'pending' bugs in our supp file bugs = [] p = get_data_file('data', 'gstvalidate.supp') with open(p) as f: for l in f.readlines(): l = l.strip() if l.startswith('# PENDING:'): tmp = l.split(' ') bugs.append(tmp[2]) if bugs: msg = "Ignored valgrind bugs:\n" for b in bugs: msg += " + %s\n" % b printc(msg, Colors.FAIL, True)
def update_assets(options, assets_dir): try: command = "cd %s && " % assets_dir if options.force_sync: command += "git reset --hard && " command += SYNC_ASSETS_COMMAND utils.launch_command(command, fails=True) except subprocess.CalledProcessError as e: utils.printc("Could not update assets repository\n\nError: %s" "\n\nMAKE SURE YOU HAVE git-annex INSTALLED!" % (e), utils.Colors.FAIL, True) return False return True
def update_assets(options, assets_dir): try: command = "cd %s && " % assets_dir if options.force_sync: command += "git reset --hard && " command += SYNC_ASSETS_COMMAND utils.launch_command(command, fails=True) except subprocess.CalledProcessError as e: utils.printc( "Could not update assets repository\n\nError: %s" "\n\nMAKE SURE YOU HAVE git-annex INSTALLED!" % (e), utils.Colors.FAIL, True) return False return True
def list_tests(self): if self.tests: return self.tests if self._run_defaults: scenarios = [self.scenarios_manager.get_scenario(scenario_name) for scenario_name in self.get_scenarios()] else: scenarios = self.scenarios_manager.get_scenario(None) uris = self._list_uris() for generator in self.get_generators(): for test in generator.generate_tests(uris, scenarios): self.add_test(test) if not self.tests and not uris: printc("No valid uris present in the path. Check if media files and info files exist", Colors.FAIL) return self.tests
def list_tests(self): if self.tests: return self.tests if self._run_defaults: scenarios = [self.scenarios_manager.get_scenario(scenario_name) for scenario_name in self.get_scenarios()] else: scenarios = self.scenarios_manager.get_scenario(None) uris = self._list_uris() for generator in self.get_generators(): for test in generator.generate_tests(uris, scenarios): self.add_test(test) if not self.tests and not uris and not self.options.wanted_tests: printc( "No valid uris present in the path. Check if media files and info files exist", Colors.FAIL) return self.tests
def get_meson_tests(self): meson = shutil.which('meson') if not meson: meson = shutil.which('meson.py') if not meson: printc("Can't find meson, can't run testsuite.\n", Colors.FAIL) return False if not self.options.meson_build_dirs: self.options.meson_build_dirs = [config.BUILDDIR] mesontests = [] for i, bdir in enumerate(self.options.meson_build_dirs): bdir = os.path.abspath(bdir) output = subprocess.check_output( [meson, 'introspect', '--tests', bdir]) for test_dict in json.loads(output.decode()): mesontests.append(test_dict) return mesontests
def populate_tests(self, uri_minfo_special_scenarios, scenarios): test_rtsp = GST_VALIDATE_RTSP_SERVER_COMMAND if not test_rtsp: printc("\n\nRTSP server not available, you should make sure" " that %s is available in your $PATH." % GST_VALIDATE_RTSP_SERVER_COMMAND, Colors.FAIL) elif self.test_manager.options.disable_rtsp: printc("\n\nRTSP tests are disabled") test_rtsp = False for uri, minfo, special_scenarios in uri_minfo_special_scenarios: pipe = self._pipeline_template protocol = minfo.media_descriptor.get_protocol() if protocol == Protocols.RTSP: self.debug("SKIPPING %s as it is a RTSP stream" % uri) continue pipe += " uri=%s" % uri for scenario in special_scenarios + scenarios: cpipe = pipe if not minfo.media_descriptor.is_compatible(scenario): continue cpipe = self._set_sinks(minfo, cpipe, scenario) fname = self._get_name(scenario, protocol, minfo) self.debug("Adding: %s", fname) if scenario.does_reverse_playback() and protocol == Protocols.HTTP: # 10MB so we can reverse playback cpipe += " ring-buffer-max-size=10485760" self.add_test(GstValidateLaunchTest(fname, self.test_manager.options, self.test_manager.reporter, cpipe, scenario=scenario, media_descriptor=minfo.media_descriptor) ) if test_rtsp and protocol == Protocols.FILE and not minfo.media_descriptor.is_image(): rtspminfo = NamedDic({"path": minfo.media_descriptor.get_path(), "media_descriptor": GstValidateRTSPMediaDesciptor(minfo.media_descriptor.get_path())}) if not rtspminfo.media_descriptor.is_compatible(scenario): continue cpipe = self._set_sinks(rtspminfo, "%s uri=rtsp://127.0.0.1:<RTSPPORTNUMBER>/test" % self._pipeline_template, scenario) fname = self._get_name(scenario, Protocols.RTSP, rtspminfo) self.add_test(GstValidateRTSPTest( fname, self.test_manager.options, self.test_manager.reporter, cpipe, uri, scenario=scenario, media_descriptor=rtspminfo.media_descriptor)) fname = self._get_name(scenario, Protocols.RTSP + '2', rtspminfo) self.add_test(GstValidateRTSPTest( fname, self.test_manager.options, self.test_manager.reporter, cpipe, uri, scenario=scenario, media_descriptor=rtspminfo.media_descriptor, rtsp2=True))
def populate_tests(self, uri_minfo_special_scenarios, scenarios): test_rtsp = GST_VALIDATE_RTSP_SERVER_COMMAND if not test_rtsp: printc( "\n\nRTSP server not available, you should make sure" " that %s is available in your $PATH." % GST_VALIDATE_RTSP_SERVER_COMMAND, Colors.FAIL) elif self.test_manager.options.disable_rtsp: printc("\n\nRTSP tests are disabled") test_rtsp = False for uri, minfo, special_scenarios in uri_minfo_special_scenarios: pipe = self._pipeline_template protocol = minfo.media_descriptor.get_protocol() if protocol == Protocols.RTSP: self.debug("SKIPPING %s as it is a RTSP stream" % uri) continue pipe += " uri=%s" % uri for scenario in special_scenarios + scenarios: cpipe = pipe if not minfo.media_descriptor.is_compatible(scenario): continue cpipe = self._set_sinks(minfo, cpipe, scenario) fname = self._get_name(scenario, protocol, minfo) self.debug("Adding: %s", fname) if scenario.does_reverse_playback( ) and protocol == Protocols.HTTP: # 10MB so we can reverse playback cpipe += " ring-buffer-max-size=10485760" self.add_test( GstValidateLaunchTest( fname, self.test_manager.options, self.test_manager.reporter, cpipe, scenario=scenario, media_descriptor=minfo.media_descriptor)) if test_rtsp and protocol == Protocols.FILE and not minfo.media_descriptor.is_image( ): rtspminfo = NamedDic({ "path": minfo.media_descriptor.get_path(), "media_descriptor": GstValidateRTSPMediaDesciptor( minfo.media_descriptor.get_path()) }) if not rtspminfo.media_descriptor.is_compatible(scenario): continue cpipe = self._set_sinks( rtspminfo, "%s uri=rtsp://127.0.0.1:<RTSPPORTNUMBER>/test" % self._pipeline_template, scenario) fname = self._get_name(scenario, Protocols.RTSP, rtspminfo) self.add_test( GstValidateRTSPTest( fname, self.test_manager.options, self.test_manager.reporter, cpipe, uri, scenario=scenario, media_descriptor=rtspminfo.media_descriptor)) fname = self._get_name(scenario, Protocols.RTSP + '2', rtspminfo) self.add_test( GstValidateRTSPTest( fname, self.test_manager.options, self.test_manager.reporter, cpipe, uri, scenario=scenario, media_descriptor=rtspminfo.media_descriptor, rtsp2=True))