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.
 
 
 
 
 
 

77 lines
1.8 KiB

package speech_test
import (
"yunyan/sys/google/speech"
"fmt"
"testing"
"time"
)
// 运行前替换为真实的服务账号 JSON 路径与 gs:// 音频地址
const (
kGoogleSaJson = "" // 例:/Users/.../smart-bluetooth-447104-2b269474bd72.json
kTestGsURI = "" // 例:gs://your-bucket/your-audio.wav
)
func newTestSys(t *testing.T) speech.ISys {
if kGoogleSaJson == "" {
t.Skip("kGoogleSaJson is empty, skip")
}
sys, err := speech.NewSys(
speech.SetJsonPath(kGoogleSaJson),
)
if err != nil {
t.Fatalf("NewSys err: %v", err)
}
return sys
}
func Test_E2E(t *testing.T) {
if kTestGsURI == "" {
t.Skip("kTestGsURI is empty, skip")
}
sys := newTestSys(t)
taskID, err := sys.CreateTask(kTestGsURI, "en-US", true, "")
if err != nil {
t.Fatalf("CreateTask err: %v", err)
}
fmt.Printf("CreateTask ok, taskID=%s\n", taskID)
deadline := time.Now().Add(10 * time.Minute)
for time.Now().Before(deadline) {
status, contexts, err := sys.QueryTask(taskID)
if err != nil {
t.Fatalf("QueryTask err: %v", err)
}
fmt.Printf("status=%s sentences=%d\n", status, len(contexts))
if status == speech.StatusSuccess {
for i, c := range contexts {
if i > 5 {
break
}
fmt.Printf(" [%s %d-%d] %s\n", c.Speaker, c.StartTime, c.EndTime, c.Content)
}
return
}
if status == speech.StatusFailed {
t.Fatalf("task failed")
}
time.Sleep(15 * time.Second)
}
t.Fatalf("task did not finish")
}
func Test_MissingKey(t *testing.T) {
_, err := speech.NewSys()
if err == nil {
t.Errorf("expect error when JSON missing, got nil")
}
}
func Test_RejectHttpURL(t *testing.T) {
sys := newTestSys(t)
_, err := sys.CreateTask("https://example.com/foo.wav", "en-US", false, "")
if err == nil {
t.Errorf("expect error for http URL, got nil")
}
}