File size: 2,298 Bytes
673435a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import sys
import types

# Helper to mock packages
def mock_package(name):
    m = types.ModuleType(name)
    sys.modules[name] = m
    return m

mock_package("torch")
mock_package("torch.serialization")
mock_package("torchaudio")
mock_package("numpy")
mock_package("pyannote")
mock_package("pyannote.audio")
m_prom = mock_package("prometheus_fastapi_instrumentator")
from unittest.mock import MagicMock
m_prom.Instrumentator = MagicMock()

# Google Cloud complicated namespace
g = mock_package("google")
gc = mock_package("google.cloud")
gcs = mock_package("google.cloud.speech")
gct = mock_package("google.cloud.texttospeech")
gcl = mock_package("google.cloud.language")
# Also mock specific imports used in services
m_gcs = mock_package("google.cloud.speech_v1")
m_gcs.types = MagicMock()

m_gct = mock_package("google.cloud.texttospeech_v1")
m_gct.types = MagicMock()

m_gcl = mock_package("google.cloud.language_v1")
m_gcl.types = MagicMock()

mock_package("edge_tts")
mock_package("librosa")
mock_package("soundfile")
mock_package("faster_whisper")
mock_package("transformers")
mock_package("TTS")
mock_package("melotts")
mock_package("ffmpeg") 
mock_package("pydub")
mock_package("pydantic_settings")
mock_package("dotenv")
mock_package("passlib")
mock_package("passlib.context")
mock_package("jose")
mock_package("multipart")



from fastapi.testclient import TestClient
from app.main import app

client = TestClient(app)

def test_security_headers():
    print("Testing Security Headers...")
    response = client.get("/")
    
    headers = response.headers
    
    # Check for presence of headers
    assert headers.get("X-Frame-Options") == "DENY", "X-Frame-Options missing or incorrect"
    assert headers.get("X-Content-Type-Options") == "nosniff", "X-Content-Type-Options missing or incorrect"
    assert "default-src 'self'" in headers.get("Content-Security-Policy", ""), "CSP missing or incorrect"
    assert "max-age=31536000" in headers.get("Strict-Transport-Security", ""), "HSTS missing or incorrect"
    
    print("✅ All security headers present and correct.")
    print(f"CSP: {headers.get('Content-Security-Policy')}")

if __name__ == "__main__":
    try:
        test_security_headers()
    except Exception as e:
        print(f"❌ Test Failed: {e}")
        exit(1)