File size: 4,443 Bytes
24fd742
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#!/bin/bash

# 聊天应用测试脚本

echo "🧪 聊天应用功能测试"
echo "=================="
echo

# 测试后端API
echo "🔧 测试后端API..."

# 健康检查
echo -n "  健康检查: "
if curl -f -s http://localhost:5000/api/health > /dev/null; then
    echo "✅ 通过"
    HEALTH=$(curl -s http://localhost:5000/api/health | jq -r '.status')
    echo "    状态: $HEALTH"
else
    echo "❌ 失败"
fi

# 测试注册API
echo -n "  注册API: "
REGISTER_RESPONSE=$(curl -s -X POST http://localhost:5000/api/register \
    -H "Content-Type: application/json" \
    -d '{
        "username": "testuser",
        "email": "test@example.com",
        "password": "testpass123"
    }')

if echo "$REGISTER_RESPONSE" | jq -e '.token' > /dev/null 2>&1; then
    echo "✅ 通过"
    TOKEN=$(echo "$REGISTER_RESPONSE" | jq -r '.token')
else
    echo "⚠️  用户可能已存在"
    # 尝试登录
    LOGIN_RESPONSE=$(curl -s -X POST http://localhost:5000/api/login \
        -H "Content-Type: application/json" \
        -d '{
            "email": "test@example.com",
            "password": "testpass123"
        }')
    
    if echo "$LOGIN_RESPONSE" | jq -e '.token' > /dev/null 2>&1; then
        echo "    登录成功"
        TOKEN=$(echo "$LOGIN_RESPONSE" | jq -r '.token')
    else
        echo "    ❌ 登录失败"
        TOKEN=""
    fi
fi

# 测试获取消息API
if [ -n "$TOKEN" ]; then
    echo -n "  消息API: "
    if curl -f -s -H "Authorization: Bearer $TOKEN" http://localhost:5000/api/messages > /dev/null; then
        echo "✅ 通过"
    else
        echo "❌ 失败"
    fi
fi

echo

# 测试前端
echo "🌐 测试前端服务..."
echo -n "  前端可访问性: "
if curl -f -s http://localhost:3000 > /dev/null; then
    echo "✅ 通过"
else
    echo "❌ 失败"
fi

echo -n "  静态资源: "
if curl -f -s http://localhost:3000/vite.svg > /dev/null; then
    echo "✅ 通过"
else
    echo "❌ 失败"
fi

echo

# 测试数据库
echo "📊 测试数据库..."
echo -n "  MongoDB连接: "
if docker exec chat-mongo mongosh --eval "db.adminCommand('ping')" > /dev/null 2>&1; then
    echo "✅ 通过"
    
    # 获取数据库统计
    echo "  数据库统计:"
    docker exec chat-mongo mongosh chatapp --eval "
        print('    用户数量: ' + db.users.countDocuments());
        print('    消息数量: ' + db.messages.countDocuments());
    " 2>/dev/null
else
    echo "❌ 失败"
fi

echo

# 测试Socket.IO连接
echo "🔌 测试Socket.IO..."
echo -n "  WebSocket连接: "

# 使用Node.js测试Socket.IO连接
node -e "
const io = require('socket.io-client');
const socket = io('http://localhost:5000');

socket.on('connect', () => {
    console.log('✅ 通过');
    socket.disconnect();
    process.exit(0);
});

socket.on('connect_error', (error) => {
    console.log('❌ 失败:', error.message);
    process.exit(1);
});

setTimeout(() => {
    console.log('❌ 超时');
    process.exit(1);
}, 5000);
" 2>/dev/null || echo "⚠️  需要安装socket.io-client进行测试"

echo

# 性能测试
echo "⚡ 性能测试..."
echo -n "  API响应时间: "
RESPONSE_TIME=$(curl -o /dev/null -s -w '%{time_total}' http://localhost:5000/api/health)
echo "${RESPONSE_TIME}s"

echo -n "  前端加载时间: "
FRONTEND_TIME=$(curl -o /dev/null -s -w '%{time_total}' http://localhost:3000)
echo "${FRONTEND_TIME}s"

echo

# 安全测试
echo "🔒 基础安全检查..."
echo -n "  CORS配置: "
CORS_HEADER=$(curl -s -I http://localhost:5000/api/health | grep -i "access-control-allow-origin")
if [ -n "$CORS_HEADER" ]; then
    echo "✅ 已配置"
else
    echo "⚠️  未检测到CORS头"
fi

echo -n "  JWT验证: "
UNAUTH_RESPONSE=$(curl -s -o /dev/null -w '%{http_code}' http://localhost:5000/api/messages)
if [ "$UNAUTH_RESPONSE" = "401" ]; then
    echo "✅ 正常(未授权访问被拒绝)"
else
    echo "⚠️  可能存在安全问题"
fi

echo

# 总结
echo "📋 测试总结"
echo "==========="
echo "✅ 通过的测试将显示绿色勾号"
echo "❌ 失败的测试将显示红色叉号"
echo "⚠️  警告或需要注意的项目将显示黄色感叹号"
echo
echo "💡 如果有测试失败,请检查:"
echo "   1. 服务是否正常启动"
echo "   2. 端口是否被占用"
echo "   3. 防火墙设置"
echo "   4. Docker容器状态"
echo
echo "🔧 查看详细日志: make logs"
echo "📊 查看监控信息: ./monitor.sh"