def _invalid_alert_level_missing(self, system_data: SystemData):
        # Test non-existing alert level.
        sensor_alert = ManagerObjSensorAlert()
        sensor_alert.sensorId = self.sensors[0].sensorId
        sensor_alert.state = 0
        sensor_alert.alertLevels = [99]
        sensor_alert.hasOptionalData = False
        sensor_alert.optionalData = None
        sensor_alert.changeState = True
        sensor_alert.hasLatestData = False
        sensor_alert.dataType = SensorDataType.NONE
        sensor_alert.timeReceived = 0

        is_exception = False
        try:
            system_data.add_sensor_alert(sensor_alert)
        except ValueError:
            is_exception = True
        if not is_exception:
            self.fail("Exception because of wrong node type expected.")
    def _invalid_sensor_missing_alert_level(self, system_data: SystemData):
        # Test sensor does not handle alert level.
        sensor_alert = ManagerObjSensorAlert()
        sensor_alert.sensorId = self.sensors[0].sensorId
        sensor_alert.state = 0
        sensor_alert.alertLevels = []
        for alert_level in self.alert_levels:
            if alert_level.level not in self.sensors[0].alertLevels:
                sensor_alert.alertLevels.append(alert_level.level)
        sensor_alert.hasOptionalData = False
        sensor_alert.optionalData = None
        sensor_alert.changeState = True
        sensor_alert.hasLatestData = False
        sensor_alert.dataType = SensorDataType.NONE
        sensor_alert.timeReceived = 0

        is_exception = False
        try:
            system_data.add_sensor_alert(sensor_alert)
        except ValueError:
            is_exception = True
        if not is_exception:
            self.fail("Exception because of wrong node type expected.")
    def _invalid_wrong_data_type(self, system_data: SystemData):
        # Test data type mismatch.
        sensor_alert = ManagerObjSensorAlert()
        sensor_alert.sensorId = self.sensors[0].sensorId
        sensor_alert.state = 0
        sensor_alert.alertLevels = [self.sensors[0].alertLevels[0]]
        sensor_alert.hasOptionalData = False
        sensor_alert.optionalData = None
        sensor_alert.changeState = True
        sensor_alert.hasLatestData = False
        sensor_alert.dataType = SensorDataType.INT
        sensor_alert.sensorData = 0
        sensor_alert.timeReceived = 0

        is_exception = False
        try:
            system_data.add_sensor_alert(sensor_alert)
        except ValueError:
            is_exception = True
        if not is_exception:
            self.fail("Exception because of wrong node type expected.")
    def test_delete_sensor_alerts(self):
        """
        Test Sensor Alert object deleting.
        """
        number_sensor_alerts = 10
        system_data = self._create_sensors()

        # Create objects.
        new_sensor_alerts = []
        for i in range(number_sensor_alerts):
            temp_sensor_alert = ManagerObjSensorAlert()
            temp_sensor_alert.sensorId = self.sensors[i % len(self.sensors)].sensorId
            temp_sensor_alert.state = i % 2
            temp_sensor_alert.alertLevels = list(self.sensors[i % len(self.sensors)].alertLevels)
            temp_sensor_alert.hasOptionalData = False
            temp_sensor_alert.optionalData = None
            temp_sensor_alert.changeState = (i % 2) == 0
            temp_sensor_alert.hasLatestData = False
            temp_sensor_alert.dataType = SensorDataType.NONE
            temp_sensor_alert.timeReceived = i
            new_sensor_alerts.append(temp_sensor_alert)
            system_data.add_sensor_alert(temp_sensor_alert)

        for i in range(int(number_sensor_alerts / 2), (number_sensor_alerts + 1)):

            system_data.delete_sensor_alerts_received_before(i)

            for j in range(i):
                if not new_sensor_alerts[j].is_deleted():
                    self.fail("Sensor Alert object not marked as deleted.")

            for j in range(i, number_sensor_alerts):
                if new_sensor_alerts[j].is_deleted():
                    self.fail("Sensor Alert object marked as deleted.")

            for sensor_alert in system_data.get_sensor_alerts_list():
                if sensor_alert.timeReceived < i:
                    self.fail("Sensor Alert object still stored that is younger than deleted timestamp.")
Exemplo n.º 5
0
    def test_update_server_info_duplicate_sensor_alerts(self):
        """
        Tests adding of sensor alerts to the database via update_server_information duplicates sensor alerts.
        """

        config_logging(logging.ERROR)

        storage = self._init_database()
        storage._sensor_alert_life_span = 2147483647  # max signed 32bit integer

        system_data = self._create_system_data()
        self._create_objects(storage, system_data)

        sensor_list = system_data.get_sensors_list()
        for i in range(len(sensor_list)):
            target_sensor = sensor_list[i % len(sensor_list)]

            sensor_alert = ManagerObjSensorAlert()
            sensor_alert.sensorId = target_sensor.sensorId
            sensor_alert.state = (i % 2)
            sensor_alert.description = "Sensor Alert %d" % i
            sensor_alert.timeReceived = int(time.time())
            sensor_alert.alertLevels = list(target_sensor.alertLevels)
            sensor_alert.hasOptionalData = False
            sensor_alert.changeState = False
            sensor_alert.hasLatestData = False
            sensor_alert.dataType = SensorDataType.NONE

            system_data.add_sensor_alert(sensor_alert)

        storage.update_server_information(0, system_data.get_options_list(),
                                          system_data.get_nodes_list(),
                                          system_data.get_sensors_list(),
                                          system_data.get_alerts_list(),
                                          system_data.get_managers_list(),
                                          system_data.get_alert_levels_list(),
                                          system_data.get_sensor_alerts_list())

        self.assertEqual(len(system_data.get_sensor_alerts_list()),
                         len(sensor_list))

        # Add same list of sensor alerts again for duplication test.
        storage.update_server_information(0, system_data.get_options_list(),
                                          system_data.get_nodes_list(),
                                          system_data.get_sensors_list(),
                                          system_data.get_alerts_list(),
                                          system_data.get_managers_list(),
                                          system_data.get_alert_levels_list(),
                                          system_data.get_sensor_alerts_list())

        storage._open_connection()
        db_sensor_alerts = storage._get_sensor_alerts()
        storage._close_connection()

        compare_sensor_alerts_content(self,
                                      system_data.get_sensor_alerts_list(),
                                      db_sensor_alerts)
Exemplo n.º 6
0
    def test_add_sensor_alert(self):
        """
        Tests adding of sensor alerts to the database.
        """

        config_logging(logging.ERROR)

        storage = self._init_database()

        system_data = self._create_system_data()
        self._create_objects(storage, system_data)

        sensor_list = system_data.get_sensors_list()
        for i in range(len(sensor_list)):
            target_sensor = sensor_list[i % len(sensor_list)]

            sensor_alert = ManagerObjSensorAlert()
            sensor_alert.sensorId = target_sensor.sensorId
            sensor_alert.state = (i % 2)
            sensor_alert.description = "Sensor Alert %d" % i
            sensor_alert.timeReceived = int(time.time())
            sensor_alert.alertLevels = list(target_sensor.alertLevels)
            sensor_alert.hasOptionalData = False
            sensor_alert.changeState = False
            sensor_alert.hasLatestData = False
            sensor_alert.dataType = SensorDataType.NONE

            system_data.add_sensor_alert(sensor_alert)

        storage._open_connection()
        for sensor_alert in system_data.get_sensor_alerts_list():
            storage._add_sensor_alert(sensor_alert)
        storage._conn.commit()
        storage._close_connection()

        storage._open_connection()
        db_sensor_alerts = storage._get_sensor_alerts()
        storage._close_connection()

        compare_sensor_alerts_content(self,
                                      system_data.get_sensor_alerts_list(),
                                      db_sensor_alerts)
Exemplo n.º 7
0
    def test_sensor_alert(self):
        """
        Test Sensor Alert state change.
        """
        system_data = self._create_sensors()

        for i in range(len(self.sensors)):
            curr_sensor = self.sensors[i]
            stored_sensor = system_data.get_sensor_by_id(curr_sensor.sensorId)

            if (stored_sensor.clientSensorId != curr_sensor.clientSensorId
                    or stored_sensor.description != curr_sensor.description
                    or stored_sensor.alertDelay != curr_sensor.alertDelay
                    or stored_sensor.lastStateUpdated !=
                    curr_sensor.lastStateUpdated
                    or stored_sensor.state != curr_sensor.state
                    or stored_sensor.dataType != curr_sensor.dataType
                    or stored_sensor.data != curr_sensor.data or any(
                        map(lambda x: x not in curr_sensor.alertLevels,
                            stored_sensor.alertLevels))
                    or any(
                        map(lambda x: x not in stored_sensor.alertLevels,
                            curr_sensor.alertLevels))):
                self.fail(
                    "Stored object does not have initially correct content.")

            sensor_alert = ManagerObjSensorAlert()
            sensor_alert.sensorId = curr_sensor.sensorId
            sensor_alert.state = 1 - curr_sensor.state
            sensor_alert.alertLevels = curr_sensor.alertLevels
            sensor_alert.hasOptionalData = False
            sensor_alert.optionalData = None
            sensor_alert.changeState = True
            sensor_alert.hasLatestData = False
            sensor_alert.dataType = SensorDataType.NONE
            sensor_alert.timeReceived = 0
            system_data.add_sensor_alert(sensor_alert)

            if (stored_sensor.clientSensorId != curr_sensor.clientSensorId
                    or stored_sensor.description != curr_sensor.description
                    or stored_sensor.alertDelay != curr_sensor.alertDelay
                    or stored_sensor.lastStateUpdated !=
                    curr_sensor.lastStateUpdated
                    or stored_sensor.dataType != curr_sensor.dataType
                    or stored_sensor.data != curr_sensor.data or any(
                        map(lambda x: x not in curr_sensor.alertLevels,
                            stored_sensor.alertLevels))
                    or any(
                        map(lambda x: x not in stored_sensor.alertLevels,
                            curr_sensor.alertLevels))):
                self.fail(
                    "Stored object does not have correct content after adding Sensor Alert."
                )

            if stored_sensor.state == curr_sensor.state:
                self.fail("State of Sensor object was not updated.")

            # Check nothing has changed in other Sensor objects
            # (update state of current sensor manually for this check).
            curr_sensor.state = stored_sensor.state
            for gt_sensor in self.sensors:
                found = False
                for stored_sensor in system_data.get_sensors_list():
                    if stored_sensor.sensorId == gt_sensor.sensorId:
                        found = True
                        if (stored_sensor.clientSensorId !=
                                gt_sensor.clientSensorId
                                or stored_sensor.description !=
                                gt_sensor.description
                                or stored_sensor.alertDelay !=
                                gt_sensor.alertDelay
                                or stored_sensor.lastStateUpdated !=
                                gt_sensor.lastStateUpdated
                                or stored_sensor.state != gt_sensor.state
                                or stored_sensor.dataType != gt_sensor.dataType
                                or stored_sensor.data != gt_sensor.data or any(
                                    map(
                                        lambda x: x not in gt_sensor.
                                        alertLevels,
                                        stored_sensor.alertLevels))
                                or any(
                                    map(
                                        lambda x: x not in stored_sensor.
                                        alertLevels, gt_sensor.alertLevels))):
                            self.fail("Sensor content has changed.")

                        break

                if not found:
                    self.fail(
                        "Not able to find Sensor object corresponding to created sensors."
                    )

            if len(self.sensors) != len(system_data.get_sensors_list()):
                self.fail(
                    "Number of stored Sensor objects differ from created ones."
                )
Exemplo n.º 8
0
    def test_delete_sensor(self):
        """
        Test Sensor object deleting.
        """
        system_data = self._create_sensors()
        number_sensor_alerts = 3

        for i in range(len(self.sensors)):
            for j in range(number_sensor_alerts):
                temp_sensor_alert = ManagerObjSensorAlert()
                temp_sensor_alert.sensorId = self.sensors[i % len(
                    self.sensors)].sensorId
                temp_sensor_alert.state = j % 2
                temp_sensor_alert.alertLevels = list(
                    self.sensors[i % len(self.sensors)].alertLevels)
                temp_sensor_alert.hasOptionalData = False
                temp_sensor_alert.optionalData = None
                temp_sensor_alert.changeState = (j % 2) == 0
                temp_sensor_alert.hasLatestData = False
                temp_sensor_alert.dataType = SensorDataType.NONE
                temp_sensor_alert.timeReceived = j
                system_data.add_sensor_alert(temp_sensor_alert)

        idx = 0
        for sensor in system_data.get_sensors_list():

            system_data.delete_sensor_by_id(sensor.sensorId)

            if not sensor.is_deleted():
                self.fail("Sensor object not marked as deleted.")

            for stored_sensor in system_data.get_sensors_list():
                if stored_sensor.is_deleted():
                    self.fail("Stored Sensor object marked as deleted.")

                if sensor.sensorId == stored_sensor.sensorId:
                    self.fail(
                        "Store still contains Sensor with id that was deleted."
                    )

            if ((len(self.sensors) - (idx + 1)) * number_sensor_alerts) != len(
                    system_data.get_sensor_alerts_list()):
                self.fail("Wrong number of Sensor Alerts remaining stored.")

            for sensor_alert in system_data.get_sensor_alerts_list():
                if sensor_alert.sensorId == sensor.sensorId:
                    self.fail(
                        "Sensor Alerts corresponding to Sensor object not deleted."
                    )

            idx += 1