github.com/go-graphite/carbonapi@v0.17.0/cmd/carbonapi/http/helper_test.go (about) 1 package http 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 "time" 8 9 "github.com/go-graphite/carbonapi/cmd/carbonapi/config" 10 ) 11 12 func Test_timestampTruncate(t *testing.T) { 13 // reverse sorted 14 durations := []config.DurationTruncate{ 15 {Duration: 30 * 24 * time.Hour, Truncate: 10 * time.Minute}, 16 {Duration: time.Hour, Truncate: time.Minute}, 17 {Duration: 10 * time.Minute, Truncate: 10 * time.Second}, 18 {Duration: 0, Truncate: 2 * time.Second}, 19 } 20 21 tests := []struct { 22 ts int64 23 duration time.Duration 24 durations []config.DurationTruncate 25 want int64 26 }{ 27 { 28 ts: 1628876563, 29 duration: 5 * time.Minute, 30 durations: durations, 31 want: 1628876562, // truncation to 2s 32 }, 33 { 34 ts: 1628876563, 35 duration: 10 * time.Minute, 36 durations: durations, 37 want: 1628876562, // truncate to 2s 38 }, 39 { 40 ts: 1628876563, 41 duration: 10*time.Minute + time.Second, 42 durations: durations, 43 want: 1628876560, // truncate to 10s 44 }, 45 { 46 ts: 1628876563, 47 duration: 2 * time.Hour, 48 durations: durations, 49 want: 1628876520, // truncate to 1m 50 }, 51 { 52 ts: 1628876563, 53 duration: 30 * 24 * time.Hour, 54 durations: durations, 55 want: 1628876520, // truncate to 1m 56 }, 57 { 58 ts: 1628876563, 59 duration: 30*24*time.Hour + time.Second, 60 durations: durations, 61 want: 1628876400, // truncate to 10m 62 }, 63 } 64 for _, tt := range tests { 65 t.Run(fmt.Sprintf("%d -> %d", tt.ts, tt.want), func(t *testing.T) { 66 if got := timestampTruncate(tt.ts, tt.duration, tt.durations); got != tt.want { 67 t.Errorf("timestampTruncate() = %v, want %v", got, tt.want) 68 } 69 }) 70 } 71 } 72 73 func Test_queryLengthLimitExceeded(t *testing.T) { 74 tests := []struct { 75 query []string 76 maxLength uint64 77 want bool 78 }{ 79 { 80 query: []string{"a.b.c.d.e", "a.a.a.a.a.a.a.a.a.a.a.a"}, 81 maxLength: 20, 82 want: true, 83 }, 84 { 85 query: []string{"a.b.c", "a.b.d"}, 86 maxLength: 10, 87 want: false, 88 }, 89 { 90 query: []string{"a.b.c", "a.b.d"}, 91 maxLength: 9, 92 want: true, 93 }, 94 { 95 query: []string{"a.b.c.d.e", "a.a.a.a.a.a.a.a.a.a.a.a"}, 96 maxLength: 0, 97 want: false, 98 }, 99 { 100 query: []string{"a.b.b.c.*", "a.d.e", "a.b.c", "a.b.e", "a.a.a.b", "a.f.s.x.w.g"}, 101 maxLength: 30, 102 want: true, 103 }, 104 { 105 query: []string{"a.b.c.d.e", "a.b.c.d.f", "b.a.*"}, 106 maxLength: 10000, 107 want: false, 108 }, 109 { 110 query: []string{}, 111 maxLength: 0, 112 want: false, 113 }, 114 } 115 116 for _, tt := range tests { 117 t.Run(fmt.Sprintf("queryLengthLimitExceeded([%s], %d) -> %t", strings.Join(tt.query, ", "), tt.maxLength, tt.want), func(t *testing.T) { 118 if got := queryLengthLimitExceeded(tt.query, tt.maxLength); got != tt.want { 119 t.Errorf("queryLengthLimitExceeded() = %t, want %t", got, tt.want) 120 } 121 }) 122 } 123 }