Files
icq/test/auth_test.py

57 lines
2.6 KiB
Python

#!/usr/bin/env python3
"""Тест авторизации на Prosody 13.0 (test.nixg.ru:15222)."""
import asyncio, sys, logging, ssl
import slixmpp
logging.basicConfig(level=logging.WARNING, format='%(levelname)s %(name)s: %(message)s')
async def try_login(jid, password, expect_ok=True):
class T(slixmpp.ClientXMPP):
def __init__(self):
super().__init__(jid, password)
self.ok = None
# Отключаем проверку сертификата (тестовый стенд, самоподписанный)
self.ssl_context = ssl.create_default_context()
self.ssl_context.check_hostname = False
self.ssl_context.verify_mode = ssl.CERT_NONE
self.add_event_handler('session_start', self.on_start)
self.add_event_handler('failed_auth', self.on_fail)
self.add_event_handler('disconnected', self.on_disc)
self.add_event_handler('connected', self.on_conn)
def on_conn(self, ev): print(f" [connected] {jid}")
def on_start(self, ev):
self.ok = True
print(f" [AUTH OK] {jid} — session_start, full JID={self.boundjid}")
self.disconnect()
def on_fail(self, ev):
self.ok = False
print(f" [AUTH FAILED] {jid} — incorrect credentials rejected correctly")
self.disconnect()
def on_disc(self, ev):
if self.ok is None:
print(f" [DISCONNECTED before auth] {jid} reason={ev}")
x = T()
# Явно указываем хост/порт тестового сервера (15222 = нестандартный c2s)
try:
await x.connect('127.0.0.1', 15222)
await asyncio.wait_for(x.wait_until('session_start' if expect_ok else 'failed_auth'), 15)
except asyncio.TimeoutError:
print(f" [TIMEOUT] {jid} — no auth result in 15s")
x.disconnect()
except Exception as e:
print(f" [ERROR] {jid}: {type(e).__name__}: {e}")
finally:
try: x.disconnect()
except: pass
async def main():
print("=== 1. Верный пароль: testuser1@test.nixg.ru ===")
await try_login("testuser1@test.nixg.ru", "pass12345", True)
print("=== 2. Верный пароль: testuser2@test.nixg.ru ===")
await try_login("testuser2@test.nixg.ru", "pass12345", True)
print("=== 3. Админ ===")
await try_login("admin@test.nixg.ru", "adminpass123", True)
print("=== 4. НЕВЕРНЫЙ пароль (должен отказать) ===")
await try_login("testuser1@test.nixg.ru", "WRONG", False)
asyncio.run(main())