Esempio n. 1
0
    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)
Esempio n. 2
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)
Esempio n. 3
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))
Esempio n. 4
0
    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))
Esempio n. 5
0
    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)
Esempio n. 6
0
    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))