Skip to content

Commit

Permalink
Add test for core bilibili API wrappers.
Browse files Browse the repository at this point in the history
  • Loading branch information
keuin committed Sep 16, 2022
1 parent 7d8ec5f commit e36b957
Show file tree
Hide file tree
Showing 6 changed files with 235 additions and 0 deletions.
39 changes: 39 additions & 0 deletions bilibili/danmaku_server_info_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package bilibili

import (
"github.com/keuin/slbr/common"
"github.com/keuin/slbr/logging"
"log"
"testing"
)

func TestBilibili_GetDanmakuServerInfo(t *testing.T) {
// get an online live room for testing
liveList, err := common.GetLiveListForGuestUser()
if err != nil {
t.Fatalf("Cannot get live list for testing: %v", err)
}
lives := liveList.Data.Data
if len(lives) <= 0 {
t.Fatalf("No available live for guest user")
}
roomId := common.RoomId(lives[0].Roomid)

logger := log.Default()
bi := NewBilibili(logging.NewWrappedLogger(logger, "test-logger"))
dmInfo, err := bi.GetDanmakuServerInfo(roomId)
if err != nil {
t.Fatalf("GetDanmakuServerInfo: %v", err)
}
if dmInfo.Code != 0 ||
dmInfo.Message != "0" ||
len(dmInfo.Data.Token) < 10 ||
len(dmInfo.Data.HostList) <= 0 {
t.Fatalf("Invalid GetDanmakuServerInfo response: %v", dmInfo)
}
for _, h := range dmInfo.Data.HostList {
if h.Port == 0 || h.WssPort == 0 || h.WsPort == 0 || h.Host == "" {
t.Fatalf("Invalid host: %v", h)
}
}
}
35 changes: 35 additions & 0 deletions bilibili/play_url_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package bilibili

import (
"github.com/keuin/slbr/common"
"github.com/keuin/slbr/logging"
"log"
"testing"
)

func TestBilibili_GetStreamingInfo(t *testing.T) {
// get an online live room for testing
liveList, err := common.GetLiveListForGuestUser()
if err != nil {
t.Fatalf("cannot get live list for testing: %v", err)
}
lives := liveList.Data.Data
if len(lives) <= 0 {
t.Fatalf("no live for guest available")
}
roomId := common.RoomId(lives[0].Roomid)

logger := log.Default()
bi := NewBilibili(logging.NewWrappedLogger(logger, "test-logger"))
info, err := bi.GetStreamingInfo(roomId)
if err != nil {
t.Fatalf("GetStreamingInfo: %v", err)
}
if info.Code != 0 ||
info.Message != "0" ||
len(info.Data.URLs) <= 0 ||
len(info.Data.AcceptQuality) <= 0 ||
len(info.Data.QualityDescription) <= 0 {
t.Fatalf("Invalid GetStreamingInfo response: %v", info)
}
}
36 changes: 36 additions & 0 deletions bilibili/room_profile_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package bilibili

import (
"github.com/keuin/slbr/common"
"github.com/keuin/slbr/logging"
"log"
"testing"
)

func TestBilibili_GetRoomProfile(t *testing.T) {
// get an online live room for testing
liveList, err := common.GetLiveListForGuestUser()
if err != nil {
t.Fatalf("cannot get live list for testing: %v", err)
}
lives := liveList.Data.Data
if len(lives) <= 0 {
t.Fatalf("no live for guest available")
}
roomId := common.RoomId(lives[0].Roomid)

logger := log.Default()
bi := NewBilibili(logging.NewWrappedLogger(logger, "test-logger"))
resp, err := bi.GetRoomProfile(roomId)
if err != nil {
t.Fatalf("GetRoomProfile: %v", err)
}
if resp.Code != 0 ||
resp.Message != "ok" ||
resp.Data.UID <= 0 ||
resp.Data.RoomID != int(roomId) ||
resp.Data.LiveStatus != int(Streaming) ||
resp.Data.Title == "" {
t.Fatalf("Invalid GetRoomProfile response: %v", resp)
}
}
35 changes: 35 additions & 0 deletions bilibili/room_status_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package bilibili

import (
"github.com/keuin/slbr/common"
"github.com/keuin/slbr/logging"
"log"
"testing"
)

func TestBilibili_GetRoomPlayInfo(t *testing.T) {
// get an online live room for testing
liveList, err := common.GetLiveListForGuestUser()
if err != nil {
t.Fatalf("cannot get live list for testing: %v", err)
}
lives := liveList.Data.Data
if len(lives) <= 0 {
t.Fatalf("no live for guest available")
}
roomId := common.RoomId(lives[0].Roomid)

logger := log.Default()
bi := NewBilibili(logging.NewWrappedLogger(logger, "test-logger"))
resp, err := bi.GetRoomPlayInfo(roomId)
if err != nil {
t.Fatalf("GetRoomPlayInfo: %v", err)
}
if resp.Code != 0 ||
resp.Message != "0" ||
resp.Data.UID <= 0 ||
resp.Data.RoomID != uint64(roomId) ||
resp.Data.LiveStatus != Streaming {
t.Fatalf("Invalid GetRoomPlayInfo response: %v", resp)
}
}
44 changes: 44 additions & 0 deletions bilibili/streaming_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package bilibili

import (
"context"
"errors"
"fmt"
"github.com/keuin/slbr/common"
"github.com/keuin/slbr/logging"
"log"
"os"
"testing"
)

func TestBilibili_CopyLiveStream(t *testing.T) {
// get an online live room for testing
liveList, err := common.GetLiveListForGuestUser()
if err != nil {
t.Fatalf("cannot get live list for testing: %v", err)
}
lives := liveList.Data.Data
if len(lives) <= 0 {
t.Fatalf("no live for guest available")
}
roomId := common.RoomId(lives[0].Roomid)

logger := log.Default()
bi := NewBilibili(logging.NewWrappedLogger(logger, "test-logger"))

si, err := bi.GetStreamingInfo(roomId)
if err != nil {
t.Fatalf("GetStreamingInfo: %v", err)
}

// test file open failure
testErr := fmt.Errorf("test error")
err = bi.CopyLiveStream(context.Background(), roomId, si.Data.URLs[0], func() (*os.File, error) {
return nil, testErr
}, 1048576)
if !errors.Is(err, testErr) {
t.Fatalf("Unexpected error from CopyLiveStream: %v", err)
}

// TODO more tests
}
46 changes: 46 additions & 0 deletions common/testutil.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package common

import (
"encoding/json"
"fmt"
"io"
"net/http"
)

/*
Some utility function for test-purpose only.
*/

type LiveList struct {
Code int `json:"code"`
Message string `json:"message"`
TTL int `json:"ttl"`
Data struct {
Count int `json:"count"`
Data []struct {
Face string `json:"face"`
Link string `json:"link"`
Roomid int `json:"roomid"`
Roomname string `json:"roomname"`
Nickname string `json:"nickname"`
} `json:"data"`
} `json:"data"`
}

func GetLiveListForGuestUser() (liveList LiveList, err error) {
url := "https://api.live.bilibili.com/xlive/web-interface/v1/index/WebGetUnLoginRecList"
resp, err := http.Get(url)
if err != nil {
return
}
if resp.StatusCode != http.StatusOK {
err = fmt.Errorf("bad http response: %v", resp.StatusCode)
return
}
b, err := io.ReadAll(resp.Body)
if err != nil {
return
}
err = json.Unmarshal(b, &liveList)
return
}

0 comments on commit e36b957

Please sign in to comment.