go-common/app/admin/main/videoup/service/task_test.go
2019-04-22 18:49:16 +08:00

128 lines
2.1 KiB
Go

package service
import (
"context"
"fmt"
"sync"
"testing"
"time"
"go-common/app/admin/main/videoup/model/archive"
"go-common/app/admin/main/videoup/model/utils"
)
func TestLockVideo(t *testing.T) {
svr.lockVideo()
}
func TestConsumer(t *testing.T) {
var c = context.TODO()
e := svr.HandsUp(c, 10, "10")
if e != nil {
t.Fatal(e)
}
e = svr.HandsUp(c, 20, "20")
if e != nil {
t.Fatal(e)
}
e = svr.HandsOff(c, 10, 20)
if e != nil {
t.Fatal(e)
}
e = svr.HandsUp(c, 20, "20")
if e != nil {
t.Fatal(e)
}
e = svr.HandsOff(c, 20, 10)
if e == nil {
t.Fatal("只有组长能强制踢出")
}
cms, err := svr.Online(c)
if err != nil {
t.Fatal(err)
}
if len(cms) != 2 {
t.Fatal("在线人数错误")
}
for _, v := range cms {
if (v.UID != 10 && v.UID != 20) || v.State != 1 {
t.Fatal("在线人信息错误")
}
}
}
func BenchmarkMultiGetNextTask(b *testing.B) {
var (
mux sync.RWMutex
wg = sync.WaitGroup{}
ConMap = make(map[int64]struct{})
)
Audit := func(w *sync.WaitGroup, uid int64) {
defer w.Done()
for {
tl, err := svr.Next(context.TODO(), uid)
if err != nil {
panic(err)
}
if tl == nil {
fmt.Println("任务领取完成")
return
}
mux.RLock()
_, ok := ConMap[tl.ID]
mux.RUnlock()
if ok {
panic(fmt.Sprintf("%d 重复下发:%d", uid, tl.ID))
} else {
mux.Lock()
ConMap[tl.ID] = struct{}{}
mux.Unlock()
}
fmt.Printf("uid=%d 领取任务:%d, weight=%d\n", uid, tl.ID, tl.Weight)
time.Sleep(time.Millisecond * 50)
if err = svr.Delay(context.TODO(), tl.ID, uid, "test-reson"); err != nil {
panic(err)
}
}
}
for i := 1; i <= 10; i++ {
wg.Add(1)
go Audit(&wg, int64(i))
}
wg.Wait()
}
func TestFree(t *testing.T) {
var c = context.TODO()
rows := svr.Free(c, 481)
if rows == 0 {
t.Fail()
}
t.Fail()
}
func Test_setWeightConf(t *testing.T) {
err := svr.setWeightConf(context.TODO(), "7", map[int64]*archive.WCItem{
7: {
Radio: 4,
Weight: 18,
Mtime: utils.NewFormatTime(time.Now()),
Desc: "指派回流任务",
},
})
if err != nil {
t.Fatal(err)
}
}