SIENTIAPDE-988

Add temporary functiontal tests, that must be removed soon.

Refactor tests: Remove outdated resource manager tests and add functional tests with Docker and Kafka integration

- Deleted existing unit tests for ResourceManager.
- Introduced new functional tests for single node operations with Redis and Kafka.
- Added Docker Compose setup for test environment.
- Implemented fixtures for Redis and Kafka consumers.
- Created comprehensive tests for data publishing and slot management.
- Added unit tests for DataManager and IngestorManager with mocked dependencies.
- Included tests for OpcManager covering connection, subscription, and data change notifications.
This commit is contained in:
vitor-aignosi
2025-04-22 17:56:54 -03:00
parent fa51d142e8
commit 4208412eca
17 changed files with 313 additions and 34 deletions

View File

@@ -1,27 +1,47 @@
import json
from logging import Logger
from time import sleep
from kafka import KafkaProducer
from kafka.errors import NoBrokersAvailable
class DataManager():
def __init__(self, kafka_servers: str, logger: Logger) -> None:
self.kafka_producer = KafkaProducer(
bootstrap_servers=kafka_servers,
value_serializer=lambda v: json.dumps(v).encode(
'utf-8'), # Serialize JSON messages
key_serializer=lambda k: str(k).encode('utf-8') if k else None,
)
for i in range(0, 3):
logger.info(
f"Trying ({i}) to initializing DataManager with Kafka servers: {kafka_servers}")
try:
self.kafka_producer = KafkaProducer(
bootstrap_servers=kafka_servers,
value_serializer=lambda v: json.dumps(v).encode(
'utf-8'), # Serialize JSON messages
key_serializer=lambda k: str(
k).encode('utf-8') if k else None,
)
break
except NoBrokersAvailable:
logger.error(
f"Kafka servers {kafka_servers} are not available. Retrying...")
sleep(5)
else:
logger.error(
f"Failed to connect to Kafka servers {kafka_servers} after 3 attempts.")
raise NoBrokersAvailable(
f"Failed to connect to Kafka servers {kafka_servers} after 3 attempts.")
logger.info(
f"DataManager initialized with Kafka servers: {kafka_servers}")
self.logger = logger
def __del__(self):
"""Destructor to close the producer connection."""
self.logger.info("Closing Kafka producer...")
print("Closing Kafka producer...")
self.kafka_producer.flush()
self.kafka_producer.close()
def delivery_report(self, msg: str):
"""Callback for delivery reports from Kafka."""
self.logger.info(
self.logger.debug(
f"Record successfully produced to {msg.topic} [{msg.partition}] at offset {msg.offset}")
def delivery_error(self, err: str):
@@ -45,7 +65,7 @@ class DataManager():
try:
self.logger.info(
self.logger.debug(
f"Publishing message to topic {topic}: {data}")
self.kafka_producer.send(
topic=topic, value=data).add_callback(