diff --git a/results-processor/artifact_test_github.zip b/results-processor/artifact_test_github.zip new file mode 100644 index 0000000000..cd710023fd Binary files /dev/null and b/results-processor/artifact_test_github.zip differ diff --git a/results-processor/artifact_test_numberless.zip b/results-processor/artifact_test_numberless.zip new file mode 100644 index 0000000000..bd21d85f10 Binary files /dev/null and b/results-processor/artifact_test_numberless.zip differ diff --git a/results-processor/processor.py b/results-processor/processor.py index 31417769e5..f449432b57 100644 --- a/results-processor/processor.py +++ b/results-processor/processor.py @@ -2,9 +2,10 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import fnmatch import logging import os -import re +import posixpath import shutil import sys import tempfile @@ -187,13 +188,14 @@ def _download_archive(self, archive_url): return with zipfile.ZipFile(artifact, mode='r') as z: for f in z.infolist(): - # ZipInfo.is_dir isn't available in Python 3.5. - if f.filename.endswith('/'): + if f.is_dir(): continue - path = z.extract(f, path=self._temp_dir) - if re.match(r'^.*/wpt_report.*\.json$', f.filename): + basename = posixpath.basename(f.filename) + if fnmatch.fnmatchcase(basename, 'wpt_report*.json'): + path = z.extract(f, path=self._temp_dir) self.results.append(path) - if re.match(r'^.*/wpt_screenshot.*\.txt$', f.filename): + elif fnmatch.fnmatchcase(basename, 'wpt_screenshot*.txt'): + path = z.extract(f, path=self._temp_dir) self.screenshots.append(path) def download(self, results, screenshots, archives): diff --git a/results-processor/processor_test.py b/results-processor/processor_test.py index 8a4c9e1bbc..42e0a24f53 100644 --- a/results-processor/processor_test.py +++ b/results-processor/processor_test.py @@ -85,6 +85,36 @@ def test_download_azure_errors(self): p.download([], [], ['https://wpt.fyi/artifact.zip']) self.assertEqual(len(p.results), 0) + def test_download_github(self): + with Processor() as p: + p._download_gcs = self.fake_download(None, None) + p._download_http = self.fake_download( + 'https://wpt.fyi/artifact.zip', + 'artifact_test_github.zip') + + p.download([], [], ['https://wpt.fyi/artifact.zip']) + self.assertEqual(len(p.results), 1) + self.assertTrue(p.results[0].endswith( + '/wpt_report_2.json')) + self.assertEqual(len(p.screenshots), 1) + self.assertTrue(p.screenshots[0].endswith( + '/wpt_screenshot_2.txt')) + + def test_download_numberless(self): + with Processor() as p: + p._download_gcs = self.fake_download(None, None) + p._download_http = self.fake_download( + 'https://wpt.fyi/artifact.zip', + 'artifact_test_numberless.zip') + + p.download([], [], ['https://wpt.fyi/artifact.zip']) + self.assertEqual(len(p.results), 1) + self.assertTrue(p.results[0].endswith( + '/wpt_report.json')) + self.assertEqual(len(p.screenshots), 1) + self.assertTrue(p.screenshots[0].endswith( + '/wpt_screenshot.txt')) + class MockProcessorTest(unittest.TestCase): @patch('processor.Processor')