# -*- coding: utf-8 -*-
"""
测试登录认证功能
"""

import paramiko
import json
import time
import os

def test_login_auth():
    """测试登录认证功能"""
    # 从环境变量读取配置
    ssh_host = os.environ.get('SSH_HOST', '192.168.5.60')
    ssh_user = os.environ.get('SSH_USER', 'ubains')
    ssh_password = os.environ.get('SSH_PASSWORD', '')

    if not ssh_password:
        print("错误：SSH_PASSWORD 环境变量未设置")
        print("请设置环境变量或创建 .env 文件")
        return

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(ssh_host, username=ssh_user, password=ssh_password)

    print('='*60)
    print('功能测试验证')
    print('='*60)

    # 测试1: 访问登录页
    print('\n测试1: 访问登录页')
    stdin, stdout, stderr = ssh.exec_command('curl -s http://localhost:8088/login')
    result = stdout.read().decode()
    if '登录' in result and '用户名' in result:
        print('  OK: 登录页面正常显示')
    else:
        print('  错误: 登录页面内容不正确')

    # 测试2: 登录验证
    print('\n测试2: 测试登录功能')
    login_data = '{"username":"admin","password":"Admin@2026"}'
    cmd = f'curl -s -X POST http://localhost:8088/login -H "Content-Type: application/json" -d \'{login_data}\' -c /tmp/cookies.txt'
    stdin, stdout, stderr = ssh.exec_command(cmd)
    result = stdout.read().decode()
    try:
        data = json.loads(result)
        if data.get('success'):
            print('  OK: 登录成功')
            print(f'  用户: {data["user"]["username"]}')
            print(f'  角色: {data["user"]["role"]}')
        else:
            print(f'  失败: {data.get("error")}')
    except Exception as e:
        print(f'  结果: {result[:200]}')

    # 测试3: 获取用户信息
    print('\n测试3: 获取用户信息（需登录）')
    time.sleep(1)
    stdin, stdout, stderr = ssh.exec_command('curl -s http://localhost:8088/api/user/info -b /tmp/cookies.txt')
    result = stdout.read().decode()
    try:
        data = json.loads(result)
        if data.get('success'):
            print('  OK: 用户信息获取成功')
            print(f'  用户: {data["user"]["username"]}')
        else:
            print(f'  失败: {data.get("error")}')
    except:
        print(f'  结果: {result[:200]}')

    # 测试4: 缓存管理权限（管理员）
    print('\n测试4: 缓存统计接口（管理员权限）')
    stdin, stdout, stderr = ssh.exec_command('curl -s http://localhost:8088/api/cache/stats -b /tmp/cookies.txt')
    result = stdout.read().decode()
    try:
        data = json.loads(result)
        if data.get('success'):
            print('  OK: 管理员可访问缓存统计')
            stats = data.get('stats', {})
            print(f'  缓存文件数: {stats.get("total_files")}')
            print(f'  缓存大小: {stats.get("total_size_mb")} MB')
        elif data.get('code') == 403:
            print('  错误: 权限不足')
        else:
            print(f'  结果: {data}')
    except:
        print(f'  结果: {result[:200]}')

    # 测试5: 注销登录
    print('\n测试5: 注销登录')
    stdin, stdout, stderr = ssh.exec_command('curl -s -X POST http://localhost:8088/logout -b /tmp/cookies.txt')
    result = stdout.read().decode()
    try:
        data = json.loads(result)
        if data.get('success'):
            print('  OK: 注销成功')
    except:
        print(f'  结果: {result[:200]}')

    # 测试6: 注销后访问用户信息
    print('\n测试6: 注销后访问用户信息（应返回401）')
    stdin, stdout, stderr = ssh.exec_command('curl -s http://localhost:8088/api/user/info -b /tmp/cookies.txt')
    result = stdout.read().decode()
    try:
        data = json.loads(result)
        if data.get('code') == 401:
            print('  OK: 未登录正确返回401')
        else:
            print(f'  结果: {data}')
    except:
        print(f'  结果: {result[:200]}')

    ssh.close()
    print('\n' + '='*60)
    print('所有测试完成')
    print('='*60)

if __name__ == '__main__':
    test_login_auth()