128 lines
2.1 KiB
Go
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)
|
||
|
}
|
||
|
}
|