You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lal/pkg/base/t_http_an__test.go

134 lines
3.7 KiB
Go

package base
import (
"fmt"
"strings"
"testing"
)
func ringBufToStr(ringBuf []RecordPerSec) string {
var buf strings.Builder
for idx, record := range ringBuf {
if record.UnixSec == 0 {
continue
}
record_str := fmt.Sprintf(" [%d]:{%d,%d}", idx, record.UnixSec, record.V)
buf.WriteString(record_str)
}
return buf.String()
}
func TestPeriodRecord(t *testing.T) {
records := NewPeriodRecord(16)
expected_fps := []RecordPerSec{
{UnixSec: 1, V: 11},
{UnixSec: 3, V: 13},
{UnixSec: 9, V: 19},
{UnixSec: 16, V: 26},
{UnixSec: 17, V: 27}, // fpsRingBuf len 16, so replace 1
{UnixSec: 19, V: 29}, // replace 3
{UnixSec: 25, V: 35}, // replace 9
{UnixSec: 26, V: 36},
}
expected_n := 5
for _, record := range expected_fps {
records.Add(record.UnixSec, 1)
records.Add(record.UnixSec, 2)
records.Add(record.UnixSec, 3)
records.Add(record.UnixSec, record.V-6)
t.Logf("records.nRecord:%d", records.nRecord)
}
if records.nRecord != expected_n {
t.Fatalf("nFpsRecord not match, got:%d expect:%d, %s",
records.nRecord, expected_n, ringBufToStr(records.ringBuf))
}
nowUnixSec := int64(26)
expected_n = 4 // 26 not complete
statSess := StatGroup{}
statSess.GetFpsFrom(&records, nowUnixSec)
// { 16, 17, 19, 25 }
// 26 not complete
if len(statSess.Fps) != expected_n {
t.Fatalf("len(statSess.Fps) not match, got:%d expect:%d, %s",
len(statSess.Fps), expected_n, ringBufToStr(statSess.Fps))
}
funCmpRecord := func(index int, record *RecordPerSec, expect *RecordPerSec) {
if record.UnixSec != expect.UnixSec {
t.Fatalf("index:%d UnixSec not match, got:%d expect:%d",
index, record.UnixSec, expect.UnixSec)
}
if record.V != expect.V {
t.Fatalf("index:%d V not match, got:%d expect:%d", index, record.V, expect.V)
}
}
funCmpRecord(0, &statSess.Fps[0], &expected_fps[3])
funCmpRecord(1, &statSess.Fps[1], &expected_fps[4])
funCmpRecord(2, &statSess.Fps[2], &expected_fps[5])
funCmpRecord(3, &statSess.Fps[3], &expected_fps[6])
t.Log(ringBufToStr(statSess.Fps))
t.Log("2nd period record test")
expected_fps_2nd := []RecordPerSec{
{UnixSec: 0 + 16*2, V: 10 + 16*2},
{UnixSec: 1 + 16*2, V: 11 + 16*2},
{UnixSec: 3 + 16*2, V: 3 + 16*2},
{UnixSec: 9 + 16*2, V: 9 + 16*2},
{UnixSec: 11 + 16*2, V: 11 + 16*2},
}
nowUnixSec = 11 + 16*2
expected_n = 5
// records = { 26 }
for _, record := range expected_fps_2nd {
records.Add(record.UnixSec, record.V)
}
statSess.GetFpsFrom(&records, nowUnixSec)
// {32, 33, 35, 41, 26}
// 11 + 16*2 not complete
if len(statSess.Fps) != expected_n {
t.Fatalf("len(statSess.Fps) not match, got:%d expect:%d, %s",
len(statSess.Fps), expected_n, ringBufToStr(statSess.Fps))
}
funCmpRecord(0, &statSess.Fps[0], &expected_fps_2nd[0])
funCmpRecord(1, &statSess.Fps[1], &expected_fps_2nd[1])
funCmpRecord(2, &statSess.Fps[2], &expected_fps_2nd[2])
funCmpRecord(3, &statSess.Fps[3], &expected_fps_2nd[3])
funCmpRecord(4, &statSess.Fps[4], &expected_fps[7])
t.Log(ringBufToStr(statSess.Fps))
t.Log("3rd period record test")
expected_fps = []RecordPerSec{
{UnixSec: 0 + 16*3, V: 10 + 16*3},
{UnixSec: 1 + 16*3, V: 11 + 16*3},
{UnixSec: 3 + 16*3, V: 13 + 16*3},
}
nowUnixSec = 3 + 16*3 + 1
expected_n = 4
// records = { 11 + 16*2 }
for _, record := range expected_fps {
records.Add(record.UnixSec, record.V)
}
statSess.GetFpsFrom(&records, nowUnixSec)
if len(statSess.Fps) != expected_n {
t.Fatalf("len(statSess.Fps) not match, got:%d expect:%d, %s",
len(statSess.Fps), expected_n, ringBufToStr(statSess.Fps))
}
funCmpRecord(0, &statSess.Fps[0], &expected_fps[0])
funCmpRecord(1, &statSess.Fps[1], &expected_fps[1])
funCmpRecord(2, &statSess.Fps[2], &expected_fps[2])
funCmpRecord(3, &statSess.Fps[3], &expected_fps_2nd[4])
t.Log(ringBufToStr(statSess.Fps))
}