updated services api
This commit is contained in:
93
ServicesApi/Controllers/Mongo/local_test.py
Normal file
93
ServicesApi/Controllers/Mongo/local_test.py
Normal file
@@ -0,0 +1,93 @@
|
||||
"""
|
||||
Test script for MongoDB handler with a local MongoDB instance.
|
||||
"""
|
||||
|
||||
import os
|
||||
from datetime import datetime
|
||||
from .database import MongoDBHandler, CollectionContext
|
||||
|
||||
# Create a custom handler class for local testing
|
||||
class LocalMongoDBHandler(MongoDBHandler):
|
||||
"""A MongoDB handler for local testing without authentication."""
|
||||
|
||||
def __init__(self):
|
||||
"""Initialize with a direct MongoDB URI."""
|
||||
self._initialized = False
|
||||
self.uri = "mongodb://localhost:27017/test"
|
||||
self.client_options = {
|
||||
"maxPoolSize": 5,
|
||||
"minPoolSize": 2,
|
||||
"maxIdleTimeMS": 30000,
|
||||
"waitQueueTimeoutMS": 2000,
|
||||
"serverSelectionTimeoutMS": 5000,
|
||||
}
|
||||
self._initialized = True
|
||||
|
||||
|
||||
# Create a custom handler for local testing
|
||||
def create_local_handler():
|
||||
"""Create a MongoDB handler for local testing."""
|
||||
# Create a fresh instance with direct MongoDB URI
|
||||
handler = LocalMongoDBHandler()
|
||||
return handler
|
||||
|
||||
|
||||
def test_connection_monitoring():
|
||||
"""Test connection monitoring with the MongoDB handler."""
|
||||
print("\nTesting connection monitoring...")
|
||||
|
||||
# Create a local handler
|
||||
local_handler = create_local_handler()
|
||||
|
||||
# Add connection tracking to the handler
|
||||
local_handler._open_connections = 0
|
||||
|
||||
# Modify the CollectionContext class to track connections
|
||||
original_enter = CollectionContext.__enter__
|
||||
original_exit = CollectionContext.__exit__
|
||||
|
||||
def tracked_enter(self):
|
||||
result = original_enter(self)
|
||||
self.db_handler._open_connections += 1
|
||||
print(f"Connection opened. Total open: {self.db_handler._open_connections}")
|
||||
return result
|
||||
|
||||
def tracked_exit(self, exc_type, exc_val, exc_tb):
|
||||
self.db_handler._open_connections -= 1
|
||||
print(f"Connection closed. Total open: {self.db_handler._open_connections}")
|
||||
return original_exit(self, exc_type, exc_val, exc_tb)
|
||||
|
||||
# Apply the tracking methods
|
||||
CollectionContext.__enter__ = tracked_enter
|
||||
CollectionContext.__exit__ = tracked_exit
|
||||
|
||||
try:
|
||||
# Test with multiple operations
|
||||
for i in range(3):
|
||||
print(f"\nTest iteration {i+1}:")
|
||||
try:
|
||||
with local_handler.collection("test_collection") as collection:
|
||||
# Try a simple operation
|
||||
try:
|
||||
collection.find_one({})
|
||||
print("Operation succeeded")
|
||||
except Exception as e:
|
||||
print(f"Operation failed: {e}")
|
||||
except Exception as e:
|
||||
print(f"Connection failed: {e}")
|
||||
|
||||
# Final connection count
|
||||
print(f"\nFinal open connections: {local_handler._open_connections}")
|
||||
if local_handler._open_connections == 0:
|
||||
print("✅ All connections were properly closed")
|
||||
else:
|
||||
print(f"❌ {local_handler._open_connections} connections remain open")
|
||||
|
||||
finally:
|
||||
# Restore original methods
|
||||
CollectionContext.__enter__ = original_enter
|
||||
CollectionContext.__exit__ = original_exit
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_connection_monitoring()
|
||||
Reference in New Issue
Block a user