2024-05-17 18:30:33 +08:00
|
|
|
// Copyright 2022 GoEdge goedge.cdn@gmail.com. All rights reserved.
|
2022-02-21 17:33:58 +08:00
|
|
|
|
|
|
|
|
package caches_test
|
|
|
|
|
|
|
|
|
|
import (
|
2024-05-07 17:27:10 +08:00
|
|
|
"crypto/md5"
|
|
|
|
|
"encoding/base64"
|
2022-11-19 23:11:05 +08:00
|
|
|
"encoding/json"
|
2022-02-21 17:33:58 +08:00
|
|
|
"github.com/TeaOSLab/EdgeNode/internal/caches"
|
|
|
|
|
"github.com/iwind/TeaGo/assert"
|
|
|
|
|
"github.com/iwind/TeaGo/logs"
|
|
|
|
|
"testing"
|
2022-11-19 23:11:05 +08:00
|
|
|
"time"
|
2022-02-21 17:33:58 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges(t *testing.T) {
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
r.Add(1, 100)
|
|
|
|
|
r.Add(50, 300)
|
|
|
|
|
|
|
|
|
|
r.Add(30, 80)
|
|
|
|
|
r.Add(30, 100)
|
|
|
|
|
r.Add(30, 400)
|
|
|
|
|
r.Add(1000, 10000)
|
|
|
|
|
r.Add(200, 1000)
|
|
|
|
|
r.Add(200, 10040)
|
|
|
|
|
|
2022-03-03 19:36:28 +08:00
|
|
|
logs.PrintAsJSON(r.Ranges, t)
|
|
|
|
|
t.Log("max:", r.Max())
|
2022-02-21 17:33:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges1(t *testing.T) {
|
|
|
|
|
var a = assert.NewAssertion(t)
|
|
|
|
|
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
r.Add(1, 100)
|
|
|
|
|
r.Add(1, 101)
|
|
|
|
|
r.Add(1, 102)
|
|
|
|
|
r.Add(2, 103)
|
|
|
|
|
r.Add(200, 300)
|
|
|
|
|
r.Add(1, 1000)
|
|
|
|
|
|
2022-03-03 19:36:28 +08:00
|
|
|
var rs = r.Ranges
|
2022-02-21 17:33:58 +08:00
|
|
|
logs.PrintAsJSON(rs, t)
|
|
|
|
|
a.IsTrue(len(rs) == 1)
|
|
|
|
|
if len(rs) == 1 {
|
|
|
|
|
a.IsTrue(rs[0][0] == 1)
|
|
|
|
|
a.IsTrue(rs[0][1] == 1000)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges2(t *testing.T) {
|
|
|
|
|
// low -> high
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
r.Add(1, 100)
|
|
|
|
|
r.Add(1, 101)
|
|
|
|
|
r.Add(1, 102)
|
|
|
|
|
r.Add(2, 103)
|
|
|
|
|
r.Add(200, 300)
|
|
|
|
|
r.Add(301, 302)
|
|
|
|
|
r.Add(303, 304)
|
|
|
|
|
r.Add(250, 400)
|
|
|
|
|
|
2022-03-03 19:36:28 +08:00
|
|
|
var rs = r.Ranges
|
2022-02-21 17:33:58 +08:00
|
|
|
logs.PrintAsJSON(rs, t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges3(t *testing.T) {
|
|
|
|
|
// high -> low
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
r.Add(301, 302)
|
|
|
|
|
r.Add(303, 304)
|
|
|
|
|
r.Add(200, 300)
|
|
|
|
|
r.Add(250, 400)
|
|
|
|
|
|
2022-03-03 19:36:28 +08:00
|
|
|
var rs = r.Ranges
|
2022-02-21 17:33:58 +08:00
|
|
|
logs.PrintAsJSON(rs, t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges4(t *testing.T) {
|
|
|
|
|
// nearby
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
r.Add(301, 302)
|
|
|
|
|
r.Add(303, 304)
|
|
|
|
|
r.Add(305, 306)
|
|
|
|
|
|
|
|
|
|
r.Add(417, 417)
|
|
|
|
|
r.Add(410, 415)
|
|
|
|
|
r.Add(400, 409)
|
|
|
|
|
|
2022-03-03 19:36:28 +08:00
|
|
|
var rs = r.Ranges
|
2022-02-21 17:33:58 +08:00
|
|
|
logs.PrintAsJSON(rs, t)
|
|
|
|
|
t.Log(r.Contains(400, 416))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestNewPartialRanges5(t *testing.T) {
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
for j := 0; j < 1000; j++ {
|
|
|
|
|
r.Add(int64(j), int64(j+100))
|
|
|
|
|
}
|
2022-03-03 19:36:28 +08:00
|
|
|
logs.PrintAsJSON(r.Ranges, t)
|
2022-02-21 17:33:58 +08:00
|
|
|
}
|
|
|
|
|
|
2022-03-04 22:42:03 +08:00
|
|
|
func TestNewPartialRanges_Nearest(t *testing.T) {
|
|
|
|
|
{
|
|
|
|
|
// nearby
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-03-04 22:42:03 +08:00
|
|
|
r.Add(301, 400)
|
|
|
|
|
r.Add(401, 500)
|
|
|
|
|
r.Add(501, 600)
|
|
|
|
|
|
|
|
|
|
t.Log(r.Nearest(100, 200))
|
|
|
|
|
t.Log(r.Nearest(300, 350))
|
|
|
|
|
t.Log(r.Nearest(302, 350))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
// nearby
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-03-04 22:42:03 +08:00
|
|
|
r.Add(301, 400)
|
|
|
|
|
r.Add(450, 500)
|
|
|
|
|
r.Add(550, 600)
|
|
|
|
|
|
|
|
|
|
t.Log(r.Nearest(100, 200))
|
|
|
|
|
t.Log(r.Nearest(300, 350))
|
|
|
|
|
t.Log(r.Nearest(302, 350))
|
|
|
|
|
t.Log(r.Nearest(302, 440))
|
|
|
|
|
t.Log(r.Nearest(302, 1000))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-06 14:40:31 +08:00
|
|
|
func TestNewPartialRanges_Large_Range(t *testing.T) {
|
|
|
|
|
var a = assert.NewAssertion(t)
|
|
|
|
|
|
|
|
|
|
var largeSize int64 = 10000000000000
|
|
|
|
|
t.Log(largeSize/1024/1024/1024, "G")
|
|
|
|
|
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-03-06 14:40:31 +08:00
|
|
|
r.Add(1, largeSize)
|
2022-11-19 23:11:05 +08:00
|
|
|
var s = r.String()
|
|
|
|
|
t.Log(s)
|
2022-03-06 14:40:31 +08:00
|
|
|
|
2022-11-19 23:11:05 +08:00
|
|
|
r2, err := caches.NewPartialRangesFromData([]byte(s))
|
2022-03-06 14:40:31 +08:00
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
a.IsTrue(largeSize == r2.Ranges[0][1])
|
2022-11-19 23:11:05 +08:00
|
|
|
logs.PrintAsJSON(r, t)
|
2022-03-06 14:40:31 +08:00
|
|
|
}
|
|
|
|
|
|
2022-11-19 23:11:05 +08:00
|
|
|
func TestPartialRanges_Encode_JSON(t *testing.T) {
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-11-19 23:11:05 +08:00
|
|
|
for i := 0; i < 10; i++ {
|
|
|
|
|
r.Ranges = append(r.Ranges, [2]int64{int64(i * 100), int64(i*100 + 100)})
|
2022-02-21 17:33:58 +08:00
|
|
|
}
|
2022-11-19 23:11:05 +08:00
|
|
|
var before = time.Now()
|
|
|
|
|
data, err := json.Marshal(r)
|
2022-02-21 17:33:58 +08:00
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
2022-11-19 23:11:05 +08:00
|
|
|
t.Log(time.Since(before).Seconds()*1000, "ms")
|
|
|
|
|
t.Log(len(data))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestPartialRanges_Encode_String(t *testing.T) {
|
|
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-11-20 18:07:46 +08:00
|
|
|
r.BodySize = 1024
|
2022-11-19 23:11:05 +08:00
|
|
|
for i := 0; i < 10; i++ {
|
|
|
|
|
r.Ranges = append(r.Ranges, [2]int64{int64(i * 100), int64(i*100 + 100)})
|
|
|
|
|
}
|
2024-05-07 17:27:10 +08:00
|
|
|
|
|
|
|
|
var sum = md5.Sum([]byte("123456"))
|
|
|
|
|
r.ContentMD5 = base64.StdEncoding.EncodeToString(sum[:])
|
|
|
|
|
|
2022-11-19 23:11:05 +08:00
|
|
|
var before = time.Now()
|
|
|
|
|
var data = r.String()
|
2024-05-07 17:27:10 +08:00
|
|
|
t.Log(data)
|
2022-11-19 23:11:05 +08:00
|
|
|
t.Log(time.Since(before).Seconds()*1000, "ms")
|
|
|
|
|
t.Log(len(data))
|
2022-02-21 17:33:58 +08:00
|
|
|
|
2022-11-19 23:11:05 +08:00
|
|
|
r2, err := caches.NewPartialRangesFromData([]byte(data))
|
2022-02-21 17:33:58 +08:00
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
2022-11-19 23:11:05 +08:00
|
|
|
logs.PrintAsJSON(r2, t)
|
2022-02-21 17:33:58 +08:00
|
|
|
}
|
|
|
|
|
|
2022-11-20 18:07:46 +08:00
|
|
|
func TestPartialRanges_Version(t *testing.T) {
|
|
|
|
|
{
|
|
|
|
|
ranges, err := caches.NewPartialRangesFromData([]byte(`e:1668928495
|
|
|
|
|
r:0,1048576
|
|
|
|
|
r:1140260864,1140295164`))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
t.Log("version:", ranges.Version)
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
ranges, err := caches.NewPartialRangesFromData([]byte(`e:1668928495
|
|
|
|
|
r:0,1048576
|
|
|
|
|
r:1140260864,1140295164
|
|
|
|
|
v:0
|
|
|
|
|
`))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
t.Log("version:", ranges.Version)
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
ranges, err := caches.NewPartialRangesFromJSON([]byte(`{}`))
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
t.Log("version:", ranges.Version)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-21 17:33:58 +08:00
|
|
|
func BenchmarkNewPartialRanges(b *testing.B) {
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
2022-11-19 21:20:53 +08:00
|
|
|
var r = caches.NewPartialRanges(0)
|
2022-02-21 17:33:58 +08:00
|
|
|
for j := 0; j < 1000; j++ {
|
|
|
|
|
r.Add(int64(j), int64(j+100))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-11-20 18:07:46 +08:00
|
|
|
|
|
|
|
|
func BenchmarkPartialRanges_String(b *testing.B) {
|
|
|
|
|
var r = caches.NewPartialRanges(0)
|
|
|
|
|
r.BodySize = 1024
|
|
|
|
|
for i := 0; i < 10; i++ {
|
|
|
|
|
r.Ranges = append(r.Ranges, [2]int64{int64(i * 100), int64(i*100 + 100)})
|
|
|
|
|
}
|
|
|
|
|
b.ResetTimer()
|
|
|
|
|
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
|
_ = r.String()
|
|
|
|
|
}
|
|
|
|
|
}
|