You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
3.7 KiB
89 lines
3.7 KiB
package echomeet
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"yunyan/pb"
|
|
)
|
|
|
|
// testTranscribers 构造仅含转写能力的 provider 集合(不初始化任何 SDK/凭据)。
|
|
func testTranscribers() map[pb.TranscribeService]Transcriber {
|
|
return map[pb.TranscribeService]Transcriber{
|
|
pb.TranscribeService_TranscribeService_ByteDance: &byteDanceTranscriber{},
|
|
pb.TranscribeService_TranscribeService_Ali: &aliTranscriber{},
|
|
}
|
|
}
|
|
|
|
// 阿里转写的语言支持判定:paraformer-v2 不支持西语等,必须返回 false,
|
|
// 否则西语音频会被送进阿里、静默返回 SUCCESS_WITH_NO_VALID_FRAGMENT(看着像"音频没声音")。
|
|
func TestAliTranscriberSupportsLanguage(t *testing.T) {
|
|
tr := &aliTranscriber{}
|
|
for _, l := range []string{"zh-CN", "zh-TW", "yue-HK", "en-US", "ja-JP", "ko-KR", "de-DE", "fr-FR", "ru-RU"} {
|
|
if !tr.SupportsLanguage(l) {
|
|
t.Errorf("paraformer-v2 应支持 %s,却返回 false", l)
|
|
}
|
|
}
|
|
// 这些语种 bcp47ToDashScope 里有映射,但 paraformer-v2 实际不支持
|
|
for _, l := range []string{"es-ES", "es-MX", "pt-BR", "it-IT", "vi-VN", "tr-TR", "pl-PL", "nl-NL", "uk-UA", "th-TH", "ar-SA", "id-ID", "ms-MY", "fil-PH"} {
|
|
if tr.SupportsLanguage(l) {
|
|
t.Errorf("paraformer-v2 不支持 %s,却返回 true(会导致空转写)", l)
|
|
}
|
|
}
|
|
if !tr.SupportsLanguage("") {
|
|
t.Error("空语言应允许 DashScope 自动检测")
|
|
}
|
|
}
|
|
|
|
// 字节转写支持西语,是西语会议兜底的前提。
|
|
func TestByteDanceSupportsSpanish(t *testing.T) {
|
|
if !(&byteDanceTranscriber{}).SupportsLanguage("es-ES") {
|
|
t.Fatal("字节应支持 es-ES(西语兜底目标)")
|
|
}
|
|
}
|
|
|
|
// 核心回归:即使 DefaultService 被固定成 Ali(线上就是这么配的),
|
|
// 西语也不能进阿里,必须改道到支持它的字节。
|
|
func TestPickTranscribeServiceAvoidsUnsupportedLang(t *testing.T) {
|
|
trs := testTranscribers()
|
|
ali := pb.TranscribeService_TranscribeService_Ali
|
|
byteDance := pb.TranscribeService_TranscribeService_ByteDance
|
|
|
|
cases := []struct {
|
|
lang string
|
|
resolved pb.TranscribeService // ResolveServiceType 的结果(DefaultService=Ali)
|
|
wantSvc pb.TranscribeService
|
|
wantChanged bool
|
|
}{
|
|
{"es-ES", ali, byteDance, true}, // 西语:阿里不支持 → 改道字节(本次修复的 bug)
|
|
{"pt-BR", ali, byteDance, true}, // 葡语:同上
|
|
{"zh-CN", ali, ali, false}, // 中文:阿里支持 → 不乱改道
|
|
{"ru-RU", ali, ali, false}, // 俄语:阿里支持 → 维持
|
|
{"en-US", byteDance, byteDance, false}, // 英语:字节支持 → 维持
|
|
}
|
|
for _, c := range cases {
|
|
got, changed, supported := pickTranscribeService(trs, c.resolved, c.lang)
|
|
if got != c.wantSvc || changed != c.wantChanged {
|
|
t.Errorf("lang=%s resolved=%s: got=(%s,changed=%v) want=(%s,changed=%v)",
|
|
c.lang, ServiceTypeName(c.resolved), ServiceTypeName(got), changed,
|
|
ServiceTypeName(c.wantSvc), c.wantChanged)
|
|
}
|
|
if !supported {
|
|
t.Errorf("lang=%s: 选中的 %s 应支持该语言", c.lang, ServiceTypeName(got))
|
|
}
|
|
}
|
|
}
|
|
|
|
// 没有任何服务商支持该语言时:维持原选择、不改道、并明确报告 unsupported(调用方据此告警)。
|
|
func TestPickTranscribeServiceNoneSupports(t *testing.T) {
|
|
// 只放阿里,喂一个阿里不支持的语种 → 无处可去
|
|
trs := map[pb.TranscribeService]Transcriber{
|
|
pb.TranscribeService_TranscribeService_Ali: &aliTranscriber{},
|
|
}
|
|
got, changed, supported := pickTranscribeService(trs, pb.TranscribeService_TranscribeService_Ali, "es-ES")
|
|
if got != pb.TranscribeService_TranscribeService_Ali || changed {
|
|
t.Errorf("无可用兜底时应维持原选择且不改道,got=%s changed=%v", ServiceTypeName(got), changed)
|
|
}
|
|
if supported {
|
|
t.Error("应报告 unsupported=false,让调用方告警")
|
|
}
|
|
}
|
|
|