def test_overlay(self): self.snapshot_dir_path = TestRender.createSnapshotDir( 10, self.capture_template, size=(640, 480)) # Create the job. r = Rendering(guid=uuid.uuid4(), name="Render with overlay") r.update({ 'overlay_text_template': "Current Time: {current_time}\nTime elapsed: {time_elapsed}", 'overlay_font_path': get_system_fonts()[0] }) job = self.createRenderingJob(rendering=r) # Start the job. job._render() # Assertions. self.on_render_start.assert_called_once() self.on_render_success.assert_called_once() self.on_render_error.assert_not_called() output_files = os.listdir(self.octoprint_timelapse_folder) self.assertEqual( len(output_files), 1, "Incorrect amount of output files detected! Found {}. Expected only timelapse output." .format(output_files)) output_filename = output_files[0] self.assertRegexpMatches(output_filename, re.compile('.*\.mp4$', re.IGNORECASE)) output_filepath = os.path.join(self.octoprint_timelapse_folder, output_filename) self.assertGreater(os.path.getsize(output_filepath), 0)
def test_watermark(self): self.snapshot_dir_path = TestRender.createSnapshotDir( 10, self.capture_template, size=(50, 50)) # Create the job. watermark_file = self.createWatermark() r = Rendering(guid=uuid.uuid4(), name="Render with Watermark") r.update({ 'enable_watermark': True, 'selected_watermark': watermark_file.name }) job = self.createRenderingJob(rendering=r) # Start the job. job._render() # Assertions. self.on_render_start.assert_called_once() self.on_render_success.assert_called_once() self.on_render_error.assert_not_called() output_files = os.listdir(self.octoprint_timelapse_folder) self.assertEqual( len(output_files), 1, "Incorrect amount of output files detected! Found {}. Expected only timelapse output." .format(output_files)) output_filename = output_files[0] self.assertRegexpMatches(output_filename, re.compile('.*\.mp4$', re.IGNORECASE)) self.assertGreater( os.path.getsize( os.path.join(self.octoprint_timelapse_folder, output_filename)), 0)
def test_gif(self): # Create the job. r = Rendering(guid=uuid.uuid4(), name="Render to GIF") r.update({'output_format': 'GIF'}) job = self.createRenderingJob(rendering=r) # Start the job. job.process() # Wait for the job to finish. job._thread.join() # Assertions. self.assertFalse(job.has_error, "{}: {}".format(job.error_type, job.error_message))
def test_watermark(self): # Create the job. watermark_file = self.createWatermark() r = Rendering(guid=uuid.uuid4(), name="Render with Watermark") r.update({ 'enable_watermark': True, 'selected_watermark': watermark_file.name }) job = self.createRenderingJob(rendering=r) # Start the job. job.process() # Wait for the job to finish. job._thread.join() # Assertions. self.assertFalse(job.has_error, "{}: {}".format(job.error_type, job.error_message))
def doTestCodec(self, name, extension, codec_name): """ Tests a particular codec setup. :param name: The internal Octolapse name of the codec. :param extension: The file extension we should expect out of this configuration. :param codec_name: The expected name that ffprobe should return for this codec. """ self.snapshot_dir_path = TestRender.createSnapshotDir( 10, self.capture_template, size=(50, 50)) # Create the job. r = Rendering(guid=uuid.uuid4(), name="Use {} codec".format(name)) r.update({'output_format': name}) job = self.createRenderingJob(rendering=r) # Start the job. job._render() # Assertions. self.on_render_start.assert_called_once() self.on_render_success.assert_called_once() self.on_render_error.assert_not_called() output_files = os.listdir(self.octoprint_timelapse_folder) self.assertEqual( len(output_files), 1, "Incorrect amount of output files detected! Found {}. Expected only timelapse output." .format(output_files)) output_filename = output_files[0] self.assertRegexpMatches( output_filename, re.compile('.*\.{}$'.format(extension), re.IGNORECASE)) output_filepath = os.path.join(self.octoprint_timelapse_folder, output_filename) self.assertGreater(os.path.getsize(output_filepath), 0) # Check the codec using ffprobe to make sure it matches what we expect. actual_codec = subprocess.check_output([ "ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=codec_name", "-of", "default=noprint_wrappers=1:nokey=1", output_filepath ]).strip() self.assertEqual(actual_codec, codec_name)
def test_overlay_invalid_font(self): self.snapshot_dir_path = TestRender.createSnapshotDir( 10, self.capture_template, size=(640, 480)) # Create the job. r = Rendering(guid=uuid.uuid4(), name="Render with overlay") r.update({ 'overlay_text_template': "Current Time: {current_time}\nTime elapsed: {time_elapsed}", 'overlay_font_path': '/dev/null' }) job = self.createRenderingJob(rendering=r) # Start the job. job._render() # Assertions. self.on_render_start.assert_called_once() self.on_render_success.assert_not_called() self.on_render_error.assert_called_once() output_files = os.listdir(self.octoprint_timelapse_folder) self.assertEqual( len(output_files), 0, "Expected no output files to be generated.".format(output_files))