Files
kenaito-media-picker/internal/nsfw/detector_restart_test.go
T
odboy 957dfe1134 feat: 断点续传与色情识别提速/修复,支持 Linux 交叉编译
- feat: 新增续传表 scan_log,重扫跳过已归类文件(尺寸/头尾指纹校验)
- fix: 色情识别记录批量入库超 SQLite 999 变量上限,改每 100 条一批
- perf: NudeNet 检测改为多线程推理池(每线程独立模型实例)
- perf: 明暗分析 JPEG(YCbCr) 快路径;SQLite 读并发放开;加阶段耗时统计
- fix: 前端色情识别状态由后端如实上报(配置开关+检测服务是否起来)
- feat: ffprobe 内嵌按平台拆分,Linux 构建回退系统 ffprobe,支持交叉编译
- docs: README 补充断点续传与 CentOS 交叉编译步骤
- chore: organize.workers 默认 8
2025-06-19 21:07:35 +08:00

48 lines
1.3 KiB
Go

package nsfw
import (
"encoding/base64"
"os"
"path/filepath"
"testing"
"time"
)
// 1x1 透明 PNG,当测试图片用(NudeNet 会自己缩放)。
const testPNG = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="
// TestDetectRestart 验证:python 检测服务中途崩溃后,Detect 会自动重启并恢复正常。
func TestDetectRestart(t *testing.T) {
py := resolvePython("")
if py == "" {
t.Skip("无 python")
}
img := filepath.Join(t.TempDir(), "test.png")
if data, err := base64.StdEncoding.DecodeString(testPNG); err != nil {
t.Fatalf("解码测试图片失败: %v", err)
} else if err := os.WriteFile(img, data, 0644); err != nil {
t.Fatalf("写测试图片失败: %v", err)
}
d, err := Start(py, 0.5)
if err != nil {
t.Fatalf("Start: %v", err)
}
defer d.Stop()
if _, _, err := d.Detect(img); err != nil {
t.Fatalf("崩溃前检测失败: %v", err)
}
// 直接杀掉 python 进程,模拟处理某张图时崩溃
if d.cmd != nil && d.cmd.Process != nil {
_ = d.cmd.Process.Kill()
}
time.Sleep(2 * time.Second) // 等进程退出、端口释放
if _, _, err := d.Detect(img); err != nil {
t.Fatalf("崩溃后检测失败(应自动重启): %v", err)
}
t.Log("重启后检测成功")
}