master
go 70 lines 1.83 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package redis
4
5 import (
6 "testing"
7
8 "github.com/netdata/netdata/go/plugins/pkg/funcapi"
9 "github.com/stretchr/testify/assert"
10 )
11
12 func TestRedisMethods(t *testing.T) {
13 methods := redisMethods()
14
15 require := assert.New(t)
16 require.Len(methods, 1)
17 require.Equal("top-queries", methods[0].ID)
18 require.Equal("Top Queries", methods[0].Name)
19 require.NotEmpty(methods[0].RequiredParams)
20
21 var sortParam *funcapi.ParamConfig
22 for i := range methods[0].RequiredParams {
23 if methods[0].RequiredParams[i].ID == "__sort" {
24 sortParam = &methods[0].RequiredParams[i]
25 break
26 }
27 }
28 require.NotNil(sortParam, "expected __sort required param")
29 require.NotEmpty(sortParam.Options)
30
31 hasDefault := false
32 for _, opt := range sortParam.Options {
33 if opt.Default {
34 hasDefault = true
35 require.Equal("duration", opt.ID)
36 break
37 }
38 }
39 require.True(hasDefault, "should have a default sort option")
40 }
41
42 func TestRedisAllColumns_HasRequiredColumns(t *testing.T) {
43 required := []string{"timestamp", "command", "duration"}
44
45 cs := redisColumnSet(redisAllColumns)
46 for _, id := range required {
47 assert.True(t, cs.ContainsColumn(id), "column %s should be defined", id)
48 }
49 }
50
51 func TestMapRedisSortColumn(t *testing.T) {
52 tests := map[string]struct {
53 input string
54 expected string
55 }{
56 "duration": {input: "duration", expected: "duration"},
57 "timestamp": {input: "timestamp", expected: "timestamp"},
58 "id": {input: "id", expected: "id"},
59 "unknown": {input: "unknown", expected: "duration"},
60 "empty": {input: "", expected: "duration"},
61 "injection": {input: "duration;drop table", expected: "duration"},
62 "cmd_name": {input: "command_name", expected: "command_name"},
63 }
64
65 for name, tc := range tests {
66 t.Run(name, func(t *testing.T) {
67 assert.Equal(t, tc.expected, mapRedisSortColumn(tc.input))
68 })
69 }
70 }