def test_invalid_gzip(self): with tempfile.NamedTemporaryFile(suffix=".gz") as f: f.write(b'Hello\n') f.flush() with self.assertRaises(OSError): with WPTScreenshot(f.name, api=self.api, processes=1) as s: s.process() self.server.terminate() _, err = self.server.communicate() sizes = self._batch_sizes(err) self.assertListEqual(sizes, [])
def test_invalid_encoding(self): with tempfile.NamedTemporaryFile() as f: f.write(b'\xc8\n') f.flush() with self.assertRaises(UnicodeDecodeError): with WPTScreenshot(f.name, api=self.api, processes=1) as s: s.process() self.server.terminate() _, err = self.server.communicate() sizes = self._batch_sizes(err) self.assertListEqual(sizes, [])
def test_basic(self): with tempfile.NamedTemporaryFile() as f: f.write(b'data:image/png;base64,0001\n') f.write(b'data:image/png;base64,0002\n') f.flush() with WPTScreenshot(f.name, api=self.api, processes=1) as s: s.process() self.server.terminate() _, err = self.server.communicate() sizes = self._batch_sizes(err) self.assertListEqual(sizes, [2])
def test_gzip(self): with tempfile.NamedTemporaryFile(suffix='.gz') as f: with gzip.GzipFile(filename=f.name, mode='wb') as g: g.write(b'data:image/png;base64,0001\n') g.write(b'data:image/png;base64,0002\n') f.flush() with WPTScreenshot(f.name, api=self.api, processes=1) as s: s.process() self.server.terminate() _, err = self.server.communicate() sizes = self._batch_sizes(err) self.assertListEqual(sizes, [2])
def test_multiple_batches(self): with tempfile.NamedTemporaryFile() as f: f.write(b'data:image/png;base64,0001\n') f.write(b'data:image/png;base64,0002\n') f.write(b'data:image/png;base64,0003\n') f.flush() with WPTScreenshot(f.name, api=self.api, processes=2) as s: s.MAXIMUM_BATCH_SIZE = 2 s.process() self.server.terminate() _, err = self.server.communicate() sizes = self._batch_sizes(err) self.assertSetEqual(set(sizes), {1, 2})
def test_errors(self): with tempfile.NamedTemporaryFile() as f: f.write(b'invalid,0001\n') f.write(b'data:image/png;base64,0002\n') f.write(b'data:image/png;base64,0\n') f.flush() with self.assertLogs() as lm: with WPTScreenshot(f.name, api=self.api, processes=1) as s: s.process() self.server.terminate() _, err = self.server.communicate() sizes = self._batch_sizes(err) self.assertListEqual(sizes, [1]) self.assertListEqual(lm.output, [ 'ERROR:wptscreenshot:Invalid data URI: invalid,0001', 'ERROR:wptscreenshot:Invalid base64: data:image/png;base64,0' ])
def _upload_screenshots(processor): for screenshot in processor.screenshots: with WPTScreenshot(screenshot, processor.report.run_info, auth=processor.auth) as s: s.process()