예제 #1
0
    def test_getstate_base_event(self):
        event = BaseDriverEvent()
        self.assertDictEqual(
            event.__getstate__(),
            {
                "id": "force_bdss.events.base_driver_event.BaseDriverEvent",
                "model_data": {},
            },
        )

        event = DummyEvent(stateful_data=DataValue(value=1))
        self.assertDictEqual(
            event.__getstate__(),
            {
                "id": "force_bdss.tests.dummy_classes"
                ".notification_listener.DummyEvent",
                "model_data": {
                    "stateless_data": 1,
                    "stateful_data": {
                        "accuracy": None,
                        "name": "",
                        "quality": "AVERAGE",
                        "type": "",
                        "value": 1,
                    },
                },
            },
        )
예제 #2
0
    def test_loads_json_error(self):

        wrong_json_data = "something weird"
        with self.assertRaisesRegex(
                DriverEventDeserializationError,
                f"Data object {wrong_json_data} is not compatible "
                f"with the json.loads method and raises",
        ):
            BaseDriverEvent.loads_json(wrong_json_data)
예제 #3
0
    def test_notify_driver_event(self):
        workflow_file = ProbeWorkflowFile(path=fixtures.get("test_probe.json"))
        workflow_file.read()
        workflow = workflow_file.workflow

        with self.assertTraitChanges(workflow, "event", count=1):
            workflow.execution_layers[0].data_sources[0].notify(
                BaseDriverEvent()
            )

        with self.assertTraitChanges(workflow, "event", count=1):
            workflow.mco_model.notify(BaseDriverEvent())
예제 #4
0
    def test_from_json(self):

        start_data = {
            "model_data": {
                "parameter_names": ["p1", "p2"],
                "kpi_names": ["k1", "k2", "k3"],
            },
            "id": "force_bdss.events.mco_events.MCOStartEvent",
        }
        start_event = BaseDriverEvent.from_json(start_data)
        self.assertIsInstance(start_event, MCOStartEvent)
        self.assertDictEqual(start_event.__getstate__(), start_data)

        finish_data = {
            "id": "force_bdss.events.mco_events.MCOFinishEvent",
            "model_data": {},
        }
        finish_event = BaseDriverEvent.from_json(finish_data)
        self.assertIsInstance(finish_event, MCOFinishEvent)
        self.assertDictEqual(finish_event.__getstate__(), finish_data)

        progress_data = {
            "id": "force_bdss.events.mco_events.MCOProgressEvent",
            "model_data": {
                "optimal_kpis": [{
                    "accuracy": None,
                    "name": "",
                    "quality": "AVERAGE",
                    "type": "",
                    "value": 10,
                }],
                "optimal_point": [
                    {
                        "accuracy": None,
                        "name": "",
                        "quality": "AVERAGE",
                        "type": "",
                        "value": 12,
                    },
                    {
                        "accuracy": None,
                        "name": "",
                        "quality": "AVERAGE",
                        "type": "",
                        "value": 13,
                    },
                ],
            },
        }
        progress_event = BaseDriverEvent.from_json(progress_data)
        self.assertIsInstance(progress_event, MCOProgressEvent)
        self.assertDictEqual(progress_event.__getstate__(), progress_data)
예제 #5
0
    def test_raises_from_json(self):

        key_failed_data = {
            "model_data": {
                "some_key": [{
                    "random_trait": "some data"
                }],
                "another_key": [],
            }
        }
        with self.assertRaisesRegex(
                DriverEventDeserializationError,
                "Could not parse json data. "
                "The `json_data` argument should contain the"
                "class id key 'id'.",
        ):
            BaseDriverEvent.from_json(key_failed_data)
예제 #6
0
 def test_from_json(self):
     data = {
         "id": "force_bdss.events.base_driver_event.BaseDriverEvent",
         "model_data": {},
     }
     event = BaseDriverEvent.from_json(data)
     self.assertIsInstance(event, BaseDriverEvent)
     self.assertDictEqual(event.__getstate__(), data)
예제 #7
0
 def test_loads_json(self):
     start_data = {
         "model_data": {
             "parameter_names": ["p1", "p2"],
             "kpi_names": ["k1", "k2", "k3"],
         },
         "id": "force_bdss.events.mco_events.MCOStartEvent",
     }
     start_event = BaseDriverEvent.loads_json(dumps(start_data))
     self.assertIsInstance(start_event, MCOStartEvent)
     self.assertDictEqual(start_event.__getstate__(), start_data)
     self.assertEqual(start_event.dumps_json(), dumps(start_data))
예제 #8
0
 def test_raises_from_json(self):
     failed_data = {
         "id": "force_bdss.events.mco_events.MCOProgressEvent",
         "model_data": {
             "optimal_kpis": [{
                 "random_trait": "some data"
             }],
             "optimal_point": [],
         },
     }
     with self.assertRaisesRegex(
             Exception,
             r"Unable to instantiate a \<class "
             r"'force_bdss.events.mco_events.MCOProgressEvent'\> "
             r"instance with data "
             r"\{'optimal_kpis': \[\{'random_trait': 'some data'\}\],"
             r" 'optimal_point': \[\]}"
             r": the `__init__` and `from_json` "
             r"methods failed to create an instance.",
     ):
         BaseDriverEvent.from_json(failed_data)
예제 #9
0
    def test_get_event_class(self):

        data = {
            "id": "force_bdss.events.mco_events.MCOProgressEvent",
            "model_data": {},
        }
        klass = MCOProgressEvent.get_event_class(data["id"])
        self.assertIs(klass, MCOProgressEvent)

        data = {
            "id": "force_bdss.events.mco_events.MCOStartEvent",
            "model_data": {},
        }
        klass = BaseDriverEvent.get_event_class(data["id"])
        self.assertIs(klass, MCOStartEvent)

        data = {
            "id": "force_bdss.events.mco_events.MCOFinishEvent",
            "model_data": {},
        }
        klass = BaseDriverEvent.get_event_class(data["id"])
        self.assertIs(klass, MCOFinishEvent)
예제 #10
0
    def test_get_event_class(self):
        data = {
            "id": "force_bdss.events.base_driver_event.BaseDriverEvent",
            "model_data": {},
        }
        klass = BaseDriverEvent.get_event_class(data["id"])
        self.assertIs(klass, BaseDriverEvent)

        data = {"id": "force_bdss.mco.base_mco.BaseMCO", "model_data": {}}
        error_message = ("Class <class 'force_bdss.mco.base_mco.BaseMCO'> "
                         "must be a subclass of BaseDriverEvent")
        with self.assertRaisesRegex(DriverEventTypeError, error_message):
            BaseDriverEvent.get_event_class(data["id"])

        data = {"id": "force_bdss.mco.base_mco.RandomClass", "model_data": {}}
        with self.assertRaisesRegex(
                ImportError,
                "Unable to locate the class definition RandomClass in module "
                "<.*> "
                f"requested by the event with id {data['id']}",
        ):
            BaseDriverEvent.get_event_class(data["id"])
예제 #11
0
 def test_dumps_json(self):
     start_data = {
         "model_data": {
             "parameter_names": ["p1", "p2"],
             "kpi_names": ["k1", "k2", "k3"],
         },
         "id": "force_bdss.events.mco_events.MCOStartEvent",
     }
     start_event = BaseDriverEvent.from_json(start_data)
     json_dump = start_event.dumps_json()
     self.assertIn('"parameter_names": ["p1", "p2"]', json_dump)
     self.assertIn('"kpi_names": ["k1", "k2", "k3"]', json_dump)
     self.assertIn('"parameter_names": ["p1", "p2"]', json_dump)
     self.assertIn('"model_data": {', json_dump)
     self.assertIn('"id": "force_bdss.events.mco_events.MCOStartEvent"',
                   json_dump)
     self.assertEqual(len(str(start_data)), len(json_dump))
예제 #12
0
 def test_notify(self):
     with self.assertTraitChanges(self.model, 'event', count=1):
         self.model.notify(BaseDriverEvent())
예제 #13
0
 def test_notify_driver_event(self):
     with self.assertTraitChanges(self.layer, "event", count=1):
         self.layer.data_sources[0].notify(BaseDriverEvent())