def test_change_node_type_sensor(self):
        """
        Test if a change from an "sensor" node type to another is handled correctly.
        """
        system_data = self._create_alert_levels()
        system_data = self._create_sensors(system_data)
        new_node_type = "alert"

        for i in range(len(self.sensors)):
            sensor = self.sensors[i]
            stored_sensor = system_data.get_sensor_by_id(sensor.sensorId)
            target_node = system_data.get_node_by_id(sensor.nodeId)
            if target_node is None:
                self.fail("Node does not exist.")

            # Update node type.
            new_node = ManagerObjNode().deepcopy(target_node)
            new_node.nodeType = new_node_type
            system_data.update_node(new_node)

            if (len(self.sensors) -
                (i + 1)) != len(system_data.get_sensors_list()):
                self.fail("Wrong number of Sensor objects stored.")

            if target_node.nodeType != new_node_type:
                self.fail("Node type update failed.")

            if len(self.nodes) != len(system_data.get_nodes_list()):
                self.fail("Number of stored nodes changed.")

            if stored_sensor.internal_state != InternalState.DELETED:
                self.fail("Sensor object state not set to DELETED.")
Exemple #2
0
    def test_update_node(self):
        """
        Tests updating of nodes in the database.
        """
        config_logging(logging.ERROR)

        storage = self._init_database()

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

        # Update local objects.
        ctr = 0
        for node in system_data.get_nodes_list():
            temp_node = ManagerObjNode().deepcopy(node)
            temp_node.hostname = "new_hostname_" + str(ctr + 1)
            temp_node.nodeType = ["alert", "manager", "sensor",
                                  "server"][ctr % 4]
            temp_node.instance = "new_instance_" + str(ctr + 1)
            temp_node.connected = (ctr % 2)
            temp_node.version = float(5 + ctr)
            temp_node.rev = ctr
            temp_node.username = "******" + str(ctr + 1)
            temp_node.persistent = (ctr % 2)
            system_data.update_node(temp_node)
            ctr += 1

        # Update database objects.
        storage._open_connection()
        for node in system_data.get_nodes_list():
            storage._update_node(node)
        storage._conn.commit()

        storage._system_data = SystemData()
        storage.synchronize_database_to_system_data()

        compare_nodes_content(self, system_data.get_nodes_list(),
                              storage._system_data.get_nodes_list())

        # Update function of database also deletes all Alert, Manager, and Sensor objects if node type changes.
        compare_alerts_content(self, system_data.get_alerts_list(),
                               storage._system_data.get_alerts_list())
        compare_managers_content(self, system_data.get_managers_list(),
                                 storage._system_data.get_managers_list())
        compare_sensors_content(self, system_data.get_sensors_list(),
                                storage._system_data.get_sensors_list())
Exemple #3
0
    def test_update(self):
        """
        Tests updating of system information in the database.
        """
        config_logging(logging.ERROR)

        storage = self._init_database()

        # Create database objects.
        system_data = self._create_system_data()
        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(),
                                          [])

        # Update local objects.
        ctr = 0
        for option in system_data.get_options_list():
            temp_option = ManagerObjOption().deepcopy(option)
            temp_option.value = float(ctr)
            system_data.update_option(temp_option)
            ctr += 1

        for alert_level in system_data.get_alert_levels_list():
            temp_alert_level = ManagerObjAlertLevel().deepcopy(alert_level)
            temp_alert_level.name = "new_alert_level_" + str(ctr + 1)
            temp_alert_level.triggerAlways = (ctr % 2)
            temp_alert_level.instrumentation_active = (ctr % 2) == 0

            if temp_alert_level.instrumentation_active:
                temp_alert_level.instrumentation_cmd = "alert_level_instrumentation_" + str(
                    ctr + 1)
                temp_alert_level.instrumentation_timeout = 123 + ctr

            system_data.update_alert_level(temp_alert_level)
            ctr += 1

        for node in system_data.get_nodes_list():
            temp_node = ManagerObjNode().deepcopy(node)
            temp_node.hostname = "new_hostname_" + str(ctr + 1)
            temp_node.nodeType = ["alert", "manager", "sensor",
                                  "server"][ctr % 4]
            temp_node.instance = "new_instance_" + str(ctr + 1)
            temp_node.connected = (ctr % 2)
            temp_node.version = float(5 + ctr)
            temp_node.rev = ctr
            temp_node.username = "******" + str(ctr + 1)
            temp_node.persistent = (ctr % 2)
            system_data.update_node(temp_node)
            ctr += 1

        for alert in system_data.get_alerts_list():
            temp_alert = ManagerObjAlert().deepcopy(alert)
            temp_alert.description = "new_alert_" + str(ctr + 1)
            temp_alert.remoteAlertId = ctr
            # We started the alert levels in our test data with level 1.
            temp_alert.alertLevels = [
                (ctr % len(system_data.get_alert_levels_list())) + 1
            ]
            system_data.update_alert(temp_alert)
            ctr += 1

        for manager in system_data.get_managers_list():
            temp_manager = ManagerObjManager().deepcopy(manager)
            temp_manager.description = "new_manager_" + str(ctr + 1)
            system_data.update_manager(temp_manager)
            ctr += 1

        for sensor in system_data.get_sensors_list():
            temp_sensor = ManagerObjSensor().deepcopy(sensor)
            temp_sensor.description = "new_sensor_" + str(ctr + 1)
            temp_sensor.remoteSensorId = ctr
            temp_sensor.alertDelay = ctr + 10
            temp_sensor.lastStateUpdated = ctr + 10
            temp_sensor.state = ctr % 2
            temp_sensor.dataType = SensorDataType.INT
            temp_sensor.data = ctr
            # We started the alert levels in our test data with level 1.
            temp_sensor.alertLevels = [
                (ctr % len(system_data.get_alert_levels_list())) + 1
            ]
            system_data.update_sensor(temp_sensor)
            ctr += 1

        # Update database objects.
        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(),
                                          [])

        storage._system_data = SystemData()
        storage.synchronize_database_to_system_data()

        compare_nodes_content(self, system_data.get_nodes_list(),
                              storage._system_data.get_nodes_list())
        compare_alerts_content(self, system_data.get_alerts_list(),
                               storage._system_data.get_alerts_list())
        compare_managers_content(self, system_data.get_managers_list(),
                                 storage._system_data.get_managers_list())
        compare_sensors_content(self, system_data.get_sensors_list(),
                                storage._system_data.get_sensors_list())
        compare_alert_levels_content(
            self, system_data.get_alert_levels_list(),
            storage._system_data.get_alert_levels_list())
    def _invalid_alert_level_missing(self, system_data: SystemData):
        # Test non-existing alert level.
        node = ManagerObjNode()
        node.nodeId = 1
        node.hostname = "hostname_1"
        node.nodeType = "alert"
        node.instance = "instance_1"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        system_data.update_node(node)

        alert = ManagerObjAlert()
        alert.nodeId = 1
        alert.alertId = 1
        alert.clientAlertId = 1
        alert.alertLevels = [99]
        alert.description = "alert_1"
        is_exception = False
        try:
            system_data.update_alert(alert)
        except ValueError:
            is_exception = True
        if not is_exception:
            self.fail("Exception because of wrong node type expected.")
Exemple #5
0
    def _create_alerts(self,
                       system_data: Optional[SystemData] = None) -> SystemData:

        if system_data is None:
            system_data = self._create_alert_levels()

        node = ManagerObjNode()
        node.nodeId = 1
        node.hostname = "hostname_1"
        node.nodeType = "alert"
        node.instance = "instance_1"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        alert = ManagerObjAlert()
        alert.nodeId = 1
        alert.alertId = 2
        alert.remoteAlertId = 0
        alert.alertLevels = [1]
        alert.description = "alert_1"
        self.alerts.append(alert)
        system_data.update_alert(ManagerObjAlert().deepcopy(alert))

        node = ManagerObjNode()
        node.nodeId = 2
        node.hostname = "hostname_2"
        node.nodeType = "alert"
        node.instance = "instance_2"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        alert = ManagerObjAlert()
        alert.nodeId = 2
        alert.alertId = 1
        alert.remoteAlertId = 3
        alert.alertLevels = [2]
        alert.description = "alert_2"
        self.alerts.append(alert)
        system_data.update_alert(ManagerObjAlert().deepcopy(alert))

        node = ManagerObjNode()
        node.nodeId = 3
        node.hostname = "hostname_3"
        node.nodeType = "alert"
        node.instance = "instance_3"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        alert = ManagerObjAlert()
        alert.nodeId = 3
        alert.alertId = 3
        alert.remoteAlertId = 1
        alert.alertLevels = [1, 2]
        alert.description = "alert_3"
        self.alerts.append(alert)
        system_data.update_alert(ManagerObjAlert().deepcopy(alert))

        return system_data
Exemple #6
0
    def _create_sensors(self,
                        system_data: Optional[SystemData] = None
                        ) -> SystemData:

        if system_data is None:
            system_data = self._create_alert_levels()

        node = ManagerObjNode()
        node.nodeId = 7
        node.hostname = "hostname_7"
        node.nodeType = "sensor"
        node.instance = "instance_7"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        sensor = ManagerObjSensor()
        sensor.nodeId = 7
        sensor.sensorId = 1
        sensor.remoteSensorId = 2
        sensor.alertDelay = 0
        sensor.alertLevels = [2]
        sensor.description = "sensor_1"
        sensor.lastStateUpdated = 0
        sensor.state = 0
        sensor.dataType = SensorDataType.NONE
        self.sensors.append(sensor)
        system_data.update_sensor(ManagerObjSensor().deepcopy(sensor))

        node = ManagerObjNode()
        node.nodeId = 8
        node.hostname = "hostname_8"
        node.nodeType = "sensor"
        node.instance = "instance_8"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        sensor = ManagerObjSensor()
        sensor.nodeId = 8
        sensor.sensorId = 2
        sensor.remoteSensorId = 3
        sensor.alertDelay = 0
        sensor.alertLevels = [1, 2]
        sensor.description = "sensor_2"
        sensor.lastStateUpdated = 0
        sensor.state = 0
        sensor.dataType = SensorDataType.NONE
        self.sensors.append(sensor)
        system_data.update_sensor(ManagerObjSensor().deepcopy(sensor))

        node = ManagerObjNode()
        node.nodeId = 9
        node.hostname = "hostname_9"
        node.nodeType = "sensor"
        node.instance = "instance_9"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        sensor = ManagerObjSensor()
        sensor.nodeId = 9
        sensor.sensorId = 3
        sensor.remoteSensorId = 1
        sensor.alertDelay = 0
        sensor.alertLevels = [1]
        sensor.description = "sensor_3"
        sensor.lastStateUpdated = 0
        sensor.state = 0
        sensor.dataType = SensorDataType.NONE
        self.sensors.append(sensor)
        system_data.update_sensor(ManagerObjSensor().deepcopy(sensor))

        node = ManagerObjNode()
        node.nodeId = 10
        node.hostname = "hostname_server_10"
        node.nodeType = "server"
        node.instance = "instance_10"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        sensor = ManagerObjSensor()
        sensor.nodeId = 10
        sensor.sensorId = 4
        sensor.remoteSensorId = 1
        sensor.alertDelay = 0
        sensor.alertLevels = [3]
        sensor.description = "server_sensor_1"
        sensor.lastStateUpdated = 0
        sensor.state = 0
        sensor.dataType = SensorDataType.NONE
        self.sensors.append(sensor)
        system_data.update_sensor(ManagerObjSensor().deepcopy(sensor))

        node = ManagerObjNode()
        node.nodeId = 11
        node.hostname = "hostname_server_11"
        node.nodeType = "server"
        node.instance = "instance_11"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        sensor = ManagerObjSensor()
        sensor.nodeId = 11
        sensor.sensorId = 5
        sensor.remoteSensorId = 4
        sensor.alertDelay = 0
        sensor.alertLevels = [1, 2]
        sensor.description = "server_sensor_2"
        sensor.lastStateUpdated = 0
        sensor.state = 1
        sensor.dataType = SensorDataType.NONE
        self.sensors.append(sensor)
        system_data.update_sensor(ManagerObjSensor().deepcopy(sensor))

        node = ManagerObjNode()
        node.nodeId = 12
        node.hostname = "hostname_server_12"
        node.nodeType = "server"
        node.instance = "instance_12"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        sensor = ManagerObjSensor()
        sensor.nodeId = 12
        sensor.sensorId = 6
        sensor.remoteSensorId = 1
        sensor.alertDelay = 0
        sensor.alertLevels = [2]
        sensor.description = "server_sensor_3"
        sensor.lastStateUpdated = 0
        sensor.state = 0
        sensor.dataType = SensorDataType.NONE
        self.sensors.append(sensor)
        system_data.update_sensor(ManagerObjSensor().deepcopy(sensor))

        return system_data
Exemple #7
0
    def _create_managers(self,
                         system_data: Optional[SystemData] = None
                         ) -> SystemData:

        if system_data is None:
            system_data = SystemData()
            self.alert_levels = []
            self.alerts = []
            self.managers = []
            self.nodes = []
            self.options = []
            self.sensors = []

        node = ManagerObjNode()
        node.nodeId = 4
        node.hostname = "hostname_4"
        node.nodeType = "manager"
        node.instance = "instance_4"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        manager = ManagerObjManager()
        manager.nodeId = 4
        manager.managerId = 1
        manager.description = "manager_1"
        self.managers.append(manager)
        system_data.update_manager(ManagerObjManager().deepcopy(manager))

        node = ManagerObjNode()
        node.nodeId = 5
        node.hostname = "hostname_5"
        node.nodeType = "manager"
        node.instance = "instance_5"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        manager = ManagerObjManager()
        manager.nodeId = 5
        manager.managerId = 2
        manager.description = "manager_2"
        self.managers.append(manager)
        system_data.update_manager(ManagerObjManager().deepcopy(manager))

        node = ManagerObjNode()
        node.nodeId = 6
        node.hostname = "hostname_6"
        node.nodeType = "manager"
        node.instance = "instance_6"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        self.nodes.append(node)
        system_data.update_node(ManagerObjNode().deepcopy(node))

        manager = ManagerObjManager()
        manager.nodeId = 6
        manager.managerId = 3
        manager.description = "manager_3"
        self.managers.append(manager)
        system_data.update_manager(ManagerObjManager().deepcopy(manager))

        return system_data
Exemple #8
0
    def _invalid_wrong_node_type(self, system_data: SystemData):
        # Test invalid node type.
        node = ManagerObjNode()
        node.nodeId = 1
        node.hostname = "hostname_1"
        node.nodeType = "sensor"
        node.instance = "instance_1"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        system_data.update_node(node)

        manager = ManagerObjManager()
        manager.nodeId = 1
        manager.managerId = 1
        manager.description = "manager_1"
        is_exception = False
        try:
            system_data.update_manager(manager)
        except ValueError:
            is_exception = True
        if not is_exception:
            self.fail("Exception because of wrong node type expected.")
Exemple #9
0
    def _invalid_wrong_node_type(self, system_data: SystemData):
        # Test invalid node type.
        node = ManagerObjNode()
        node.nodeId = 1
        node.hostname = "hostname_1"
        node.nodeType = "alert"
        node.instance = "instance_1"
        node.connected = 1
        node.version = 1.0
        node.rev = 0
        node.username = "******"
        node.persistent = 1
        system_data.update_node(node)

        sensor = ManagerObjSensor()
        sensor.nodeId = 1
        sensor.sensorId = 1
        sensor.clientSensorId = 1
        sensor.alertDelay = 0
        sensor.alertLevels = []
        sensor.description = "sensor_1"
        sensor.lastStateUpdated = 0
        sensor.state = 0
        sensor.dataType = SensorDataType.NONE
        is_exception = False
        try:
            system_data.update_sensor(sensor)
        except ValueError:
            is_exception = True
        if not is_exception:
            self.fail("Exception because of wrong node type expected.")

        system_data = SystemData()