Initial commit
Dieser Commit ist enthalten in:
194
v2_testing/test_sessions.py
Normale Datei
194
v2_testing/test_sessions.py
Normale Datei
@ -0,0 +1,194 @@
|
||||
#!/usr/bin/env python3
|
||||
import requests
|
||||
import urllib3
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
|
||||
# Disable SSL warnings
|
||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
|
||||
base_url = "https://localhost:443"
|
||||
admin_user = {"username": "rac00n", "password": "1248163264"}
|
||||
|
||||
def login(session):
|
||||
"""Login to admin panel"""
|
||||
login_data = {
|
||||
"username": admin_user["username"],
|
||||
"password": admin_user["password"]
|
||||
}
|
||||
response = session.post(f"{base_url}/login", data=login_data, verify=False, allow_redirects=False)
|
||||
return response.status_code == 302
|
||||
|
||||
def test_session_table():
|
||||
"""Test if session table exists and structure"""
|
||||
print("1. Checking Session Table Structure:")
|
||||
print("-" * 40)
|
||||
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank",
|
||||
"-c", "\\d sessions"
|
||||
], capture_output=True, text=True)
|
||||
|
||||
if "Table \"public.sessions\"" in result.stdout:
|
||||
print("✓ Sessions table exists")
|
||||
print("\nTable structure:")
|
||||
print(result.stdout)
|
||||
else:
|
||||
print("✗ Sessions table not found")
|
||||
return False
|
||||
|
||||
# Check if table is empty
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank", "-t",
|
||||
"-c", "SELECT COUNT(*) FROM sessions;"
|
||||
], capture_output=True, text=True)
|
||||
|
||||
count = int(result.stdout.strip())
|
||||
print(f"\nCurrent session count: {count}")
|
||||
if count == 0:
|
||||
print("✓ Session table is empty (as expected - License Server not implemented)")
|
||||
|
||||
return True
|
||||
|
||||
def test_session_page():
|
||||
"""Test the sessions management page"""
|
||||
session = requests.Session()
|
||||
|
||||
if not login(session):
|
||||
return "✗ Failed to login"
|
||||
|
||||
print("\n2. Testing Sessions Page:")
|
||||
print("-" * 40)
|
||||
|
||||
response = session.get(f"{base_url}/sessions", verify=False)
|
||||
|
||||
if response.status_code == 200:
|
||||
print("✓ Sessions page accessible")
|
||||
|
||||
content = response.text
|
||||
|
||||
# Check for expected elements
|
||||
checks = [
|
||||
("Aktive Sessions", "Active sessions section"),
|
||||
("Letzte Sessions", "Recent sessions section"),
|
||||
("IP-Adresse", "IP address column"),
|
||||
("User Agent", "User agent column"),
|
||||
("Heartbeat", "Heartbeat info"),
|
||||
("Session beenden", "End session button")
|
||||
]
|
||||
|
||||
for check_text, description in checks:
|
||||
if check_text in content:
|
||||
print(f"✓ Found: {description}")
|
||||
else:
|
||||
print(f"✗ Missing: {description}")
|
||||
|
||||
# Check for empty state
|
||||
if "Keine aktiven Sessions" in content:
|
||||
print("✓ Shows empty state for active sessions")
|
||||
|
||||
else:
|
||||
print(f"✗ Failed to access sessions page: Status {response.status_code}")
|
||||
|
||||
def test_dashboard_session_count():
|
||||
"""Test if dashboard shows session count"""
|
||||
session = requests.Session()
|
||||
|
||||
if not login(session):
|
||||
return "✗ Failed to login"
|
||||
|
||||
print("\n3. Testing Dashboard Session Counter:")
|
||||
print("-" * 40)
|
||||
|
||||
response = session.get(f"{base_url}/", verify=False)
|
||||
|
||||
if response.status_code == 200:
|
||||
content = response.text
|
||||
|
||||
if "Aktive Sessions" in content or "sessions" in content.lower():
|
||||
print("✓ Dashboard shows session information")
|
||||
|
||||
# Check if it shows 0
|
||||
if "0" in content:
|
||||
print("✓ Shows 0 active sessions (correct)")
|
||||
else:
|
||||
print("✗ No session information on dashboard")
|
||||
|
||||
def simulate_session_data():
|
||||
"""Add test session data directly to database"""
|
||||
print("\n4. Simulating Session Data:")
|
||||
print("-" * 40)
|
||||
|
||||
# Get a license ID
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank", "-t",
|
||||
"-c", "SELECT id FROM licenses WHERE is_active = TRUE LIMIT 1;"
|
||||
], capture_output=True, text=True)
|
||||
|
||||
license_id = result.stdout.strip()
|
||||
if not license_id:
|
||||
print("✗ No active license found for test")
|
||||
return
|
||||
|
||||
# Insert test sessions
|
||||
test_sessions = [
|
||||
# Active session
|
||||
f"""INSERT INTO sessions (license_id, session_id, ip_address, user_agent, is_active)
|
||||
VALUES ({license_id}, 'TEST-SESSION-001', '192.168.1.100',
|
||||
'Mozilla/5.0 Test Browser', TRUE);""",
|
||||
|
||||
# Inactive session from today
|
||||
f"""INSERT INTO sessions (license_id, session_id, ip_address, user_agent,
|
||||
started_at, ended_at, is_active)
|
||||
VALUES ({license_id}, 'TEST-SESSION-002', '10.0.0.50',
|
||||
'Chrome/120.0 Windows',
|
||||
NOW() - INTERVAL '2 hours', NOW() - INTERVAL '1 hour', FALSE);"""
|
||||
]
|
||||
|
||||
for sql in test_sessions:
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank",
|
||||
"-c", sql
|
||||
], capture_output=True, text=True)
|
||||
|
||||
if "INSERT" in result.stdout:
|
||||
print("✓ Test session inserted")
|
||||
else:
|
||||
print("✗ Failed to insert test session")
|
||||
|
||||
# Verify
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank",
|
||||
"-c", "SELECT COUNT(*) as total, COUNT(CASE WHEN is_active THEN 1 END) as active FROM sessions;"
|
||||
], capture_output=True, text=True)
|
||||
print("\nSession count after simulation:")
|
||||
print(result.stdout)
|
||||
|
||||
# Main execution
|
||||
print("Testing Session Management Features")
|
||||
print("=" * 50)
|
||||
|
||||
# Rebuild admin panel
|
||||
print("Rebuilding admin panel with session features...")
|
||||
subprocess.run(["docker-compose", "build", "admin-panel"], capture_output=True)
|
||||
subprocess.run(["docker-compose", "up", "-d"], capture_output=True)
|
||||
subprocess.run(["sleep", "5"], capture_output=True)
|
||||
|
||||
# Run tests
|
||||
test_session_table()
|
||||
test_session_page()
|
||||
test_dashboard_session_count()
|
||||
simulate_session_data()
|
||||
|
||||
# Test again with data
|
||||
print("\n5. Re-testing with simulated data:")
|
||||
print("-" * 40)
|
||||
test_session_page()
|
||||
|
||||
# Cleanup test data
|
||||
print("\n6. Cleaning up test data:")
|
||||
subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank",
|
||||
"-c", "DELETE FROM sessions WHERE session_id LIKE 'TEST-%';"
|
||||
], capture_output=True, text=True)
|
||||
print("✓ Test sessions removed")
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren