github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/plmap/aggmap_test.go (about) 1 // Unless explicitly stated otherwise all files in this repository are licensed 2 // under the MIT License. 3 // This product includes software developed at Guance Cloud (https://www.guance.com/). 4 // Copyright 2021-present Guance, Inc. 5 6 package plmap 7 8 import ( 9 "testing" 10 "time" 11 12 "github.com/GuanceCloud/cliutils/point" 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestAggBuckets(t *testing.T) { 17 ptsLi := map[string][]*point.Point{} 18 var fn UploadFunc = func(cat point.Category, n string, d any) error { 19 ptsLi[n] = append(ptsLi[n], d.([]*point.Point)...) 20 return nil 21 } 22 23 buks := NewAggBuks(fn, nil) 24 buks.CreateBucket(point.Metric, "bucket_a", time.Second*5, 0, false, nil) 25 buks.CreateBucket(point.Metric, "bucket_a", time.Second, 0, false, nil) 26 buks.CreateBucket(point.Metric, "bucket_a", time.Second, 0, false, nil) 27 buks.CreateBucket(point.Metric, "bucket_b", time.Second, 0, false, nil) 28 29 v, ok := buks.GetBucket(point.Metric, "bucket_a") 30 assert.NotEqual(t, nil, v) 31 assert.Equal(t, true, ok) 32 33 if v, ok := buks.GetBucket(point.Metric, "bucket_b"); ok { 34 assert.NotEqual(t, nil, v) 35 v.stopScan() 36 } else { 37 assert.Equal(t, true, ok) 38 } 39 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 1) 40 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 2) 41 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 3) 42 43 buks.StopAllBukScanner() 44 time.Sleep(time.Millisecond * 10) 45 } 46 47 func TestAggBuckets2(t *testing.T) { 48 ptsLi := map[point.Category]map[string][]*point.Point{} 49 var fn UploadFunc = func(cat point.Category, n string, d any) error { 50 if ptsLi[cat] == nil { 51 ptsLi[cat] = map[string][]*point.Point{} 52 } 53 54 ptsLi[cat][n] = append(ptsLi[cat][n], d.([]*point.Point)...) 55 return nil 56 } 57 58 buks := NewAggBuks(fn, nil) 59 buks.CreateBucket(point.Metric, "bucket_a", time.Second*5, 0, false, nil) 60 buks.CreateBucket(point.Metric, "bucket_a", 0, 2, false, nil) 61 buks.CreateBucket(point.Metric, "bucket_a", 0, 2, false, nil) 62 buks.CreateBucket(point.Metric, "bucket_b", 0, 2, false, nil) 63 buks.CreateBucket(point.Logging, "bucket_b", 0, 2, false, nil) 64 65 v, ok := buks.GetBucket(point.Metric, "bucket_a") 66 assert.NotEqual(t, nil, v) 67 assert.Equal(t, true, ok) 68 69 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 1) 70 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 2) 71 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 3) 72 73 if v, ok := buks.GetBucket(point.Metric, "bucket_b"); ok { 74 assert.NotEqual(t, nil, v) 75 76 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 1) 77 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 2) 78 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 3) 79 v.stopScan() 80 } else { 81 assert.Equal(t, true, ok) 82 } 83 84 if v, ok := buks.GetBucket(point.Logging, "bucket_b"); ok { 85 assert.NotEqual(t, nil, v) 86 87 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 1) 88 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 2) 89 v.AddMetric("f1", "avg", []string{"t1"}, []string{"t1_val"}, 3) 90 v.stopScan() 91 } else { 92 assert.Equal(t, true, ok) 93 } 94 95 buks.StopAllBukScanner() 96 97 time.Sleep(time.Millisecond * 100) 98 } 99 100 func TestAggMetric(t *testing.T) { 101 cases := []struct { 102 action string 103 d []any 104 o any 105 failed bool 106 }{ 107 { 108 action: "avg", 109 d: []any{1, 2, 1, 2}, 110 o: 1.5, 111 }, 112 { 113 action: "sum", 114 d: []any{1, 2, 1, 2}, 115 o: 6.0, 116 }, 117 { 118 action: "min", 119 d: []any{1, 2, 3, 5, 1, 2, 1}, 120 o: 1.0, 121 }, 122 { 123 action: "max", 124 d: []any{1, 2, 1, 2}, 125 o: 2.0, 126 }, 127 { 128 action: "set", 129 d: []any{1, 2, 1, 2, -1}, 130 o: -1.0, 131 }, 132 } 133 134 for _, tc := range cases { 135 t.Run(tc.action, func(t *testing.T) { 136 v, ok := NewAggMetric("", tc.action) 137 assert.Equal(t, !tc.failed, ok) 138 if v != nil { 139 for _, d := range tc.d { 140 v.Append(d) 141 } 142 } 143 assert.Equal(t, tc.o, v.Value()) 144 }) 145 } 146 }