def test_store_pipeline_port_requirement(self):
        configuration = {"camera_name": "simulation", "pipeline_type": "store"}
        expanded_configuration = PipelineConfig.expand_config(configuration)

        with self.assertRaisesRegex(ValueError, "stream_port"):
            PipelineConfig.validate_pipeline_config(expanded_configuration)

        configuration = {
            "camera_name": "simulation",
            "pipeline_type": "store",
            "stream_port": "test"
        }
        expanded_configuration = PipelineConfig.expand_config(configuration)

        with self.assertRaisesRegex(ValueError, "must be an integer"):
            PipelineConfig.validate_pipeline_config(expanded_configuration)

        configuration = {
            "camera_name": "simulation",
            "pipeline_type": "store",
            "stream_port": config.PIPELINE_STREAM_PORT_RANGE[0]
        }
        expanded_configuration = PipelineConfig.expand_config(configuration)

        with self.assertRaisesRegex(ValueError, "must be outside of"):
            PipelineConfig.validate_pipeline_config(expanded_configuration)

        configuration = {
            "camera_name": "simulation",
            "pipeline_type": "store",
            "stream_port": config.PIPELINE_STREAM_PORT_RANGE[1] + 1
        }
        expanded_configuration = PipelineConfig.expand_config(configuration)
        PipelineConfig.validate_pipeline_config(expanded_configuration)
    def test_expand_pipeline_config(self):
        configuration = {
            "camera_name": "simulation",
            "image_slices": {
                "number_of_slices": None,
                "scale": 7
            }
        }

        expanded_configuration = PipelineConfig.expand_config(configuration)
        self.assertEqual(
            expanded_configuration["image_slices"]["number_of_slices"],
            PipelineConfig.DEFAULT_IMAGE_SLICES["number_of_slices"],
            "Default not applied.")

        self.assertEqual(expanded_configuration["pipeline_type"],
                         PipelineConfig.DEFAULT_CONFIGURATION["pipeline_type"],
                         "Default not applied.")

        configuration = {"camera_name": "simulation", "image_slices": None}

        expanded_configuration = PipelineConfig.expand_config(configuration)

        self.assertIsNone(expanded_configuration["image_slices"],
                          "It should still be None.")

        configuration = {"camera_name": "simulation", "image_slices": {}}

        expanded_configuration = PipelineConfig.expand_config(configuration)

        self.assertDictEqual(expanded_configuration["image_slices"],
                             PipelineConfig.DEFAULT_IMAGE_SLICES,
                             "Image slices defaults not applied.")

        configuration = {
            "camera_name": "simulation",
            "image_background_enable": None
        }

        expanded_configuration = PipelineConfig.expand_config(configuration)

        self.assertEqual(
            expanded_configuration["image_background_enable"],
            PipelineConfig.DEFAULT_CONFIGURATION["image_background_enable"],
            "Default value not applied. It should not be None.")
    def test_invalid_pipeline_type(self):
        configuration = {"camera_name": "simulation"}
        expanded_configuration = PipelineConfig.expand_config(configuration)
        PipelineConfig.validate_pipeline_config(expanded_configuration)

        expanded_configuration["pipeline_type"] = "invalid"

        with self.assertRaisesRegex(
                ValueError,
                "pipeline_type 'invalid' not present in mapping. Available:"):
            PipelineConfig.validate_pipeline_config(expanded_configuration)
    def test_invalid_number_of_slices(self):
        configuration = {
            "camera_name": "simulation",
            "image_slices": {
                "number_of_slices": 1.2
            }
        }

        expanded_configuration = PipelineConfig.expand_config(configuration)
        with self.assertRaisesRegex(ValueError,
                                    "number_of_slices must be an integer"):
            PipelineConfig.validate_pipeline_config(expanded_configuration)
Ejemplo n.º 5
0
    def create_pipeline(self, pipeline_name=None, configuration=None, instance_id=None):
        """
        If both pipeline_name and configuration are set, pipeline is create from name and
        configuration field added as additional config parameters
        """
        status = self.get_status()

        if (not pipeline_name) and (not configuration):
            raise ValueError("You must specify either the pipeline name or the configuration for the pipeline.")

        if pipeline_name is not None:
            cfg = self.config_manager.get_pipeline_config(pipeline_name)
        elif configuration is not None:
            cfg = PipelineConfig.expand_config(configuration)
            PipelineConfig.validate_pipeline_config(cfg)

        server,port = None,None
        if instance_id is not None:
            server = self.get_server(instance_id, status)
        if server is None:
            (server,port) = self.get_server_for_pipeline(pipeline_name, cfg, status)
            if port:
                if not configuration:
                    configuration = {}
                configuration["port"] = port

        self._check_background(server, cfg)
        self._check_script(server, cfg)
        if pipeline_name is not None:
            server.save_pipeline_config(pipeline_name, cfg)
            _logger.info("Creating stream from name %s at %s" % (pipeline_name, server.get_address()))
            instance_id, stream_address = server.create_instance_from_name(pipeline_name, instance_id, configuration)
        elif cfg is not None:
            _logger.info("Creating stream from config to camera %s at %s" % (str(cfg.get("camera_name")), server.get_address()))
            instance_id, stream_address = server.create_instance_from_config(cfg, instance_id)
        else:
            raise Exception("Invalid parameters")

        return instance_id, stream_address