Files
gb-cms/live_benchmark_test.go
2025-08-26 17:36:04 +08:00

129 lines
2.2 KiB
Go

package main
import (
"bytes"
"encoding/json"
"gb-cms/stack"
"io"
"net/http"
"testing"
"time"
)
func request(url string, body []byte) (*http.Response, error) {
client := &http.Client{}
request, err := http.NewRequest("post", url, bytes.NewBuffer(body))
if err != nil {
return nil, err
}
request.Header.Set("Content-Type", "application/json")
return client.Do(request)
}
func queryAllDevices() []stack.Device {
response, err := request("http://localhost:9000/api/v1/device/list", nil)
if err != nil {
panic(err)
}
all, err := io.ReadAll(response.Body)
if err != nil {
panic(err)
}
v := struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data []stack.Device `json:"data,omitempty"`
}{}
err = json.Unmarshal(all, &v)
if err != nil {
panic(err)
}
return v.Data
}
func startLive(deviceId, channelId, setup string) (bool, string) {
params := map[string]string{
"device_id": deviceId,
"channel_id": channelId,
"setup": setup,
}
requestBody, err := json.Marshal(params)
if err != nil {
panic(err)
}
response, err := request("http://localhost:9000/api/v1/live/start", requestBody)
if err != nil {
panic(err)
}
if response.StatusCode != 200 {
return false, ""
}
all, err := io.ReadAll(response.Body)
if len(all) == 0 {
return true, ""
}
v := struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data map[string]string `json:"data,omitempty"`
}{}
err = json.Unmarshal(all, &v)
if err != nil {
panic(err)
}
return true, v.Data["stream_id"]
}
func startLiveAll(setup string) {
//devices := queryAllDevices()
//if len(devices) == 0 {
// return
//}
//
//max := 50
//for _, device := range devices {
// for _, channel := range device.Channels {
// go startLive(device.DeviceID, channel.DeviceID, setup)
// max--
// if max < 1 {
// return
// }
// }
//}
}
func TestLiveAll(t *testing.T) {
index := 0
for {
index++
var setup string
if index%1 == 0 {
setup = "udp"
} else if index%2 == 0 {
setup = "passive"
} else if index%3 == 0 {
setup = "active"
} else if index%4 == 0 {
//关闭所有流,再请求
}
go startLiveAll(setup)
time.Sleep(60 * time.Second)
}
}