mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-06 23:48:53 +00:00
validate:launcher: Implement bug checks for gitlab
And use new gitlab urls for all the bugs
This commit is contained in:
parent
8d00a74f1a
commit
3a826e1e3d
4 changed files with 64 additions and 30 deletions
|
@ -626,7 +626,7 @@ class GstValidateTranscodingTest(GstValidateTest, GstValidateEncodingTestInterfa
|
||||||
self.set_result(Result.PASSED,
|
self.set_result(Result.PASSED,
|
||||||
"""Got no EOS 30 seconds after sending EOS,
|
"""Got no EOS 30 seconds after sending EOS,
|
||||||
in HLS known and tolerated issue:
|
in HLS known and tolerated issue:
|
||||||
https://bugzilla.gnome.org/show_bug.cgi?id=723868""")
|
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/132""")
|
||||||
return Result.KNOWN_ERROR
|
return Result.KNOWN_ERROR
|
||||||
|
|
||||||
self.set_result(
|
self.set_result(
|
||||||
|
@ -1081,10 +1081,6 @@ not been tested and explicitely activated if you set use --wanted-tests ALL""")
|
||||||
|
|
||||||
def register_default_blacklist(self):
|
def register_default_blacklist(self):
|
||||||
self.set_default_blacklist([
|
self.set_default_blacklist([
|
||||||
# hls known issues
|
|
||||||
# ("hls.playback.seek_with_stop.*",
|
|
||||||
# "https://bugzilla.gnome.org/show_bug.cgi?id=753689"),
|
|
||||||
|
|
||||||
# testbin known issues
|
# testbin known issues
|
||||||
("testbin.media_check.*",
|
("testbin.media_check.*",
|
||||||
"Not supported by GstDiscoverer."),
|
"Not supported by GstDiscoverer."),
|
||||||
|
@ -1095,9 +1091,9 @@ not been tested and explicitely activated if you set use --wanted-tests ALL""")
|
||||||
|
|
||||||
# Matroska/WEBM known issues:
|
# Matroska/WEBM known issues:
|
||||||
("*.reverse_playback.*webm$",
|
("*.reverse_playback.*webm$",
|
||||||
"https://bugzilla.gnome.org/show_bug.cgi?id=679250"),
|
"https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/65"),
|
||||||
("*.reverse_playback.*mkv$",
|
("*.reverse_playback.*mkv$",
|
||||||
"https://bugzilla.gnome.org/show_bug.cgi?id=679250"),
|
"https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/65"),
|
||||||
("http.playback.seek_with_stop.*webm",
|
("http.playback.seek_with_stop.*webm",
|
||||||
"matroskademux.gst_matroska_demux_handle_seek_push: Seek end-time not supported in streaming mode"),
|
"matroskademux.gst_matroska_demux_handle_seek_push: Seek end-time not supported in streaming mode"),
|
||||||
("http.playback.seek_with_stop.*mkv",
|
("http.playback.seek_with_stop.*mkv",
|
||||||
|
@ -1105,7 +1101,7 @@ not been tested and explicitely activated if you set use --wanted-tests ALL""")
|
||||||
|
|
||||||
# MPEG TS known issues:
|
# MPEG TS known issues:
|
||||||
('(?i)*playback.reverse_playback.*(?:_|.)(?:|m)ts$',
|
('(?i)*playback.reverse_playback.*(?:_|.)(?:|m)ts$',
|
||||||
"https://bugzilla.gnome.org/show_bug.cgi?id=702595"),
|
"https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/97"),
|
||||||
|
|
||||||
# Fragmented MP4 disabled tests:
|
# Fragmented MP4 disabled tests:
|
||||||
('*.playback..*seek.*.fragmented_nonseekable_sink_mp4',
|
('*.playback..*seek.*.fragmented_nonseekable_sink_mp4',
|
||||||
|
@ -1133,14 +1129,14 @@ not been tested and explicitely activated if you set use --wanted-tests ALL""")
|
||||||
|
|
||||||
# ogg known issues
|
# ogg known issues
|
||||||
("http.playback.seek.*vorbis_theora_1_ogg",
|
("http.playback.seek.*vorbis_theora_1_ogg",
|
||||||
"https://bugzilla.gnome.org/show_bug.cgi?id=769545"),
|
"https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/281"),
|
||||||
# RTSP known issues
|
# RTSP known issues
|
||||||
('rtsp.*playback.reverse.*',
|
('rtsp.*playback.reverse.*',
|
||||||
'https://bugzilla.gnome.org/show_bug.cgi?id=626811'),
|
'https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/32'),
|
||||||
('rtsp.*playback.seek_with_stop.*',
|
('rtsp.*playback.seek_with_stop.*',
|
||||||
'https://bugzilla.gnome.org/show_bug.cgi?id=784298'),
|
'https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/386'),
|
||||||
('rtsp.*playback.fast_*',
|
('rtsp.*playback.fast_*',
|
||||||
'https://bugzilla.gnome.org/show_bug.cgi?id=754575'),
|
'https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/issues/14'),
|
||||||
])
|
])
|
||||||
|
|
||||||
def register_default_test_generators(self):
|
def register_default_test_generators(self):
|
||||||
|
|
|
@ -45,6 +45,7 @@ from . import reporters
|
||||||
from . import loggable
|
from . import loggable
|
||||||
from .loggable import Loggable
|
from .loggable import Loggable
|
||||||
|
|
||||||
|
from collections import defaultdict
|
||||||
try:
|
try:
|
||||||
from lxml import etree as ET
|
from lxml import etree as ET
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -1320,16 +1321,10 @@ class TestsManager(Loggable):
|
||||||
if not self.expected_failures or not self.options.check_bugs_status:
|
if not self.expected_failures or not self.options.check_bugs_status:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if self.expected_failures:
|
bugs_definitions = defaultdict(list)
|
||||||
printc("\nCurrently known failures in the %s testsuite:"
|
|
||||||
% self.name, Colors.WARNING, title_char='-')
|
|
||||||
|
|
||||||
bugs_definitions = {}
|
|
||||||
for regex, failures in list(self.expected_failures.items()):
|
for regex, failures in list(self.expected_failures.items()):
|
||||||
for failure in failures:
|
for failure in failures:
|
||||||
bugs = failure.get('bug')
|
bugs = failure.get('bug')
|
||||||
if not bugs:
|
|
||||||
bugs = failure.get('bugs')
|
|
||||||
if not bugs:
|
if not bugs:
|
||||||
printc('+ %s:\n --> no bug reported associated with %s\n' % (
|
printc('+ %s:\n --> no bug reported associated with %s\n' % (
|
||||||
regex.pattern, failure), Colors.WARNING)
|
regex.pattern, failure), Colors.WARNING)
|
||||||
|
@ -1339,7 +1334,7 @@ class TestsManager(Loggable):
|
||||||
bugs = [bugs]
|
bugs = [bugs]
|
||||||
cbugs = bugs_definitions.get(regex.pattern, [])
|
cbugs = bugs_definitions.get(regex.pattern, [])
|
||||||
bugs.extend([b for b in bugs if b not in cbugs])
|
bugs.extend([b for b in bugs if b not in cbugs])
|
||||||
bugs_definitions[regex.pattern] = bugs
|
bugs_definitions[regex.pattern].extend(bugs)
|
||||||
|
|
||||||
return check_bugs_resolution(bugs_definitions.items())
|
return check_bugs_resolution(bugs_definitions.items())
|
||||||
|
|
||||||
|
@ -1630,6 +1625,9 @@ class _TestsLauncher(Loggable):
|
||||||
if self._setup_testsuites() is False:
|
if self._setup_testsuites() is False:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
if self.options.check_bugs_status:
|
||||||
|
printc("-> Checking bugs resolution... ", end='')
|
||||||
|
|
||||||
for tester in self.testers:
|
for tester in self.testers:
|
||||||
if not tester.set_blacklists():
|
if not tester.set_blacklists():
|
||||||
return False
|
return False
|
||||||
|
@ -1637,6 +1635,9 @@ class _TestsLauncher(Loggable):
|
||||||
if not tester.check_expected_failures():
|
if not tester.check_expected_failures():
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
if self.options.check_bugs_status:
|
||||||
|
printc("OK", Colors.OKGREEN)
|
||||||
|
|
||||||
if self.needs_http_server() or options.httponly is True:
|
if self.needs_http_server() or options.httponly is True:
|
||||||
self.httpsrv = HTTPServer(options)
|
self.httpsrv = HTTPServer(options)
|
||||||
self.httpsrv.start()
|
self.httpsrv.start()
|
||||||
|
|
|
@ -417,8 +417,7 @@ class LauncherConfig(Loggable):
|
||||||
parser.add_argument("--check-bugs", dest="check_bugs_status",
|
parser.add_argument("--check-bugs", dest="check_bugs_status",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
help="Check if the bug linked to blacklisted tests has"
|
help="Check if the bug linked to blacklisted tests has"
|
||||||
" been marked as resolved. (only work with bugzilla "
|
" been marked as resolved. (works with gitlab and bugzilla)")
|
||||||
"for the time being).")
|
|
||||||
parser.add_argument("-L", "--list-tests",
|
parser.add_argument("-L", "--list-tests",
|
||||||
dest="list_tests",
|
dest="list_tests",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
|
|
|
@ -23,6 +23,7 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from . import config
|
from . import config
|
||||||
|
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
import re
|
import re
|
||||||
|
@ -40,6 +41,7 @@ import urllib.parse
|
||||||
from .loggable import Loggable
|
from .loggable import Loggable
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
from xml.etree import ElementTree
|
from xml.etree import ElementTree
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
|
||||||
GST_SECOND = int(1000000000)
|
GST_SECOND = int(1000000000)
|
||||||
|
@ -439,8 +441,13 @@ class BackTraceGenerator(Loggable):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
ALL_GITLAB_ISSUES = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
def check_bugs_resolution(bugs_definitions):
|
def check_bugs_resolution(bugs_definitions):
|
||||||
bugz = {}
|
bugz = {}
|
||||||
|
gitlab_issues = defaultdict(list)
|
||||||
|
|
||||||
regexes = {}
|
regexes = {}
|
||||||
for regex, bugs in bugs_definitions:
|
for regex, bugs in bugs_definitions:
|
||||||
if isinstance(bugs, str):
|
if isinstance(bugs, str):
|
||||||
|
@ -449,15 +456,29 @@ def check_bugs_resolution(bugs_definitions):
|
||||||
for bug in bugs:
|
for bug in bugs:
|
||||||
url = urllib.parse.urlparse(bug)
|
url = urllib.parse.urlparse(bug)
|
||||||
|
|
||||||
|
if "gitlab" in url.netloc:
|
||||||
|
components = [c for c in url.path.split('/') if c]
|
||||||
|
if len(components) != 4:
|
||||||
|
printc("\n + %s \n --> bug: %s\n --> Status: Not a proper gitlab report" % (regex, bug),
|
||||||
|
Colors.WARNING)
|
||||||
|
continue
|
||||||
|
project_id = components[0] + '%2F' + components[1]
|
||||||
|
issue_id = components[3]
|
||||||
|
|
||||||
|
gitlab_url: str = "https://%s/api/v4/projects/%s/issues/%s" % (url.hostname, project_id, issue_id)
|
||||||
|
if gitlab_url in ALL_GITLAB_ISSUES:
|
||||||
|
continue
|
||||||
|
gitlab_issues[gitlab_url].append(regex)
|
||||||
|
ALL_GITLAB_ISSUES[gitlab_url].append(regex)
|
||||||
|
continue
|
||||||
|
|
||||||
if "bugzilla" not in url.netloc:
|
if "bugzilla" not in url.netloc:
|
||||||
printc(" + %s \n --> bug: %s\n --> Status: Not a bugzilla report\n" % (regex, bug),
|
|
||||||
Colors.WARNING)
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
query = urllib.parse.parse_qs(url.query)
|
query = urllib.parse.parse_qs(url.query)
|
||||||
_id = query.get('id')
|
_id = query.get('id')
|
||||||
if not _id:
|
if not _id:
|
||||||
printc(" + '%s' -- Can't check bug '%s'\n" %
|
printc("\n + '%s' -- Can't check bug '%s'" %
|
||||||
(regex, bug), Colors.WARNING)
|
(regex, bug), Colors.WARNING)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -471,6 +492,20 @@ def check_bugs_resolution(bugs_definitions):
|
||||||
bugz[url_parts] = ids
|
bugz[url_parts] = ids
|
||||||
|
|
||||||
res = True
|
res = True
|
||||||
|
for gitlab_url, regexe in gitlab_issues.items():
|
||||||
|
try:
|
||||||
|
issue = json.load(urllib.request.urlopen(gitlab_url))
|
||||||
|
except Exception as e:
|
||||||
|
printc("\n + Could not properly check bugs status for: %s (%s)"
|
||||||
|
% (gitlab_url, e), Colors.FAIL)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if issue['state'] in ['closed']:
|
||||||
|
printc("\n + %s \n --> %s: '%s'\n ==> Bug CLOSED already (status: %s)" % (
|
||||||
|
regexe, issue['web_url'], issue['title'], issue['state']), Colors.FAIL)
|
||||||
|
|
||||||
|
res = False
|
||||||
|
|
||||||
for url_parts, ids in bugz.items():
|
for url_parts, ids in bugz.items():
|
||||||
url_parts = list(url_parts)
|
url_parts = list(url_parts)
|
||||||
query = {'id': ','.join(ids)}
|
query = {'id': ','.join(ids)}
|
||||||
|
@ -479,7 +514,7 @@ def check_bugs_resolution(bugs_definitions):
|
||||||
try:
|
try:
|
||||||
res = urllib.request.urlopen(urllib.parse.urlunparse(url_parts))
|
res = urllib.request.urlopen(urllib.parse.urlunparse(url_parts))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
printc(" + Could not properly check bugs status for: %s (%s)\n"
|
printc("\n + Could not properly check bugs status for: %s (%s)"
|
||||||
% (urllib.parse.urlunparse(url_parts), e), Colors.FAIL)
|
% (urllib.parse.urlunparse(url_parts), e), Colors.FAIL)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -487,7 +522,7 @@ def check_bugs_resolution(bugs_definitions):
|
||||||
bugs = root.findall('./bug')
|
bugs = root.findall('./bug')
|
||||||
|
|
||||||
if len(bugs) != len(ids):
|
if len(bugs) != len(ids):
|
||||||
printc(" + Could not properly check bugs status on server %s\n" %
|
printc("\n + Could not properly check bugs status on server %s" %
|
||||||
urllib.parse.urlunparse(url_parts), Colors.FAIL)
|
urllib.parse.urlunparse(url_parts), Colors.FAIL)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -498,19 +533,22 @@ def check_bugs_resolution(bugs_definitions):
|
||||||
desc = bugelem.findtext('./short_desc')
|
desc = bugelem.findtext('./short_desc')
|
||||||
|
|
||||||
if not status:
|
if not status:
|
||||||
printc(" + %s \n --> bug: %s\n --> Status: UNKNOWN\n" % (regex, bug),
|
printc("\n + %s \n --> bug: %s\n --> Status: UNKNOWN" % (regex, bug),
|
||||||
Colors.WARNING)
|
Colors.WARNING)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not status.lower() in ['new', 'verified']:
|
if not status.lower() in ['new', 'verified']:
|
||||||
printc(" + %s \n --> bug: #%s: '%s'\n ==> Bug CLOSED already (status: %s)\n" % (
|
printc("\n + %s \n --> bug: #%s: '%s'\n ==> Bug CLOSED already (status: %s)" % (
|
||||||
regex, bugid, desc, status), Colors.WARNING)
|
regex, bugid, desc, status), Colors.WARNING)
|
||||||
|
|
||||||
res = False
|
res = False
|
||||||
|
|
||||||
printc(" + %s \n --> bug: #%s: '%s'\n --> Status: %s\n" % (
|
printc("\n + %s \n --> bug: #%s: '%s'\n --> Status: %s" % (
|
||||||
regex, bugid, desc, status), Colors.OKGREEN)
|
regex, bugid, desc, status), Colors.OKGREEN)
|
||||||
|
|
||||||
|
if not res:
|
||||||
|
printc("\n==> Some bugs marked as known issues have been closed!", Colors.FAIL)
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue