github.com/xtls/xray-core@v1.8.12-0.20240518155711-3168d27b0bdb/app/stats/command/command_test.go (about) 1 package command_test 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/google/go-cmp/cmp" 8 "github.com/google/go-cmp/cmp/cmpopts" 9 "github.com/xtls/xray-core/app/stats" 10 . "github.com/xtls/xray-core/app/stats/command" 11 "github.com/xtls/xray-core/common" 12 ) 13 14 func TestGetStats(t *testing.T) { 15 m, err := stats.NewManager(context.Background(), &stats.Config{}) 16 common.Must(err) 17 18 sc, err := m.RegisterCounter("test_counter") 19 common.Must(err) 20 21 sc.Set(1) 22 23 s := NewStatsServer(m) 24 25 testCases := []struct { 26 name string 27 reset bool 28 value int64 29 err bool 30 }{ 31 { 32 name: "counterNotExist", 33 err: true, 34 }, 35 { 36 name: "test_counter", 37 reset: true, 38 value: 1, 39 }, 40 { 41 name: "test_counter", 42 value: 0, 43 }, 44 } 45 for _, tc := range testCases { 46 resp, err := s.GetStats(context.Background(), &GetStatsRequest{ 47 Name: tc.name, 48 Reset_: tc.reset, 49 }) 50 if tc.err { 51 if err == nil { 52 t.Error("nil error: ", tc.name) 53 } 54 } else { 55 common.Must(err) 56 if r := cmp.Diff(resp.Stat, &Stat{Name: tc.name, Value: tc.value}, cmpopts.IgnoreUnexported(Stat{})); r != "" { 57 t.Error(r) 58 } 59 } 60 } 61 } 62 63 func TestQueryStats(t *testing.T) { 64 m, err := stats.NewManager(context.Background(), &stats.Config{}) 65 common.Must(err) 66 67 sc1, err := m.RegisterCounter("test_counter") 68 common.Must(err) 69 sc1.Set(1) 70 71 sc2, err := m.RegisterCounter("test_counter_2") 72 common.Must(err) 73 sc2.Set(2) 74 75 sc3, err := m.RegisterCounter("test_counter_3") 76 common.Must(err) 77 sc3.Set(3) 78 79 s := NewStatsServer(m) 80 resp, err := s.QueryStats(context.Background(), &QueryStatsRequest{ 81 Pattern: "counter_", 82 }) 83 common.Must(err) 84 if r := cmp.Diff(resp.Stat, []*Stat{ 85 {Name: "test_counter_2", Value: 2}, 86 {Name: "test_counter_3", Value: 3}, 87 }, cmpopts.SortSlices(func(s1, s2 *Stat) bool { return s1.Name < s2.Name }), 88 cmpopts.IgnoreUnexported(Stat{})); r != "" { 89 t.Error(r) 90 } 91 }