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.")
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())
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.")
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
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
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
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.")
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()