cloudflare/cloudflared

Public

mirrored fromhttps://github.com/cloudflare/cloudflaredAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
2020.6.1

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

dbconnect/client_test.go

183lines · modecode

1package dbconnect
2
3import (
4 "encoding/json"
5 "strings"
6 "testing"
7 "time"
8
9 "github.com/stretchr/testify/assert"
10)
11
12func TestCommandValidateEmpty(t *testing.T) {
13 stmts := []string{
14 "",
15 ";",
16 " \n\t",
17 ";\n;\t;",
18 }
19
20 for _, stmt := range stmts {
21 cmd := Command{Statement: stmt}
22
23 assert.Error(t, cmd.Validate(), stmt)
24 }
25}
26
27func TestCommandValidateMode(t *testing.T) {
28 modes := []string{
29 "",
30 "query",
31 "ExEc",
32 "PREPARE",
33 }
34
35 for _, mode := range modes {
36 cmd := Command{Statement: "Ok", Mode: mode}
37
38 assert.NoError(t, cmd.Validate(), mode)
39 assert.Equal(t, strings.ToLower(mode), cmd.Mode)
40 }
41}
42
43func TestCommandValidateIsolation(t *testing.T) {
44 isos := []string{
45 "",
46 "default",
47 "read_committed",
48 "SNAPshot",
49 }
50
51 for _, iso := range isos {
52 cmd := Command{Statement: "Ok", Isolation: iso}
53
54 assert.NoError(t, cmd.Validate(), iso)
55 assert.Equal(t, strings.ToLower(iso), cmd.Isolation)
56 }
57}
58
59func TestCommandValidateTimeout(t *testing.T) {
60 cmd := Command{Statement: "Ok", Timeout: 0}
61
62 assert.NoError(t, cmd.Validate())
63 assert.NotZero(t, cmd.Timeout)
64
65 cmd = Command{Statement: "Ok", Timeout: 1 * time.Second}
66
67 assert.NoError(t, cmd.Validate())
68 assert.Equal(t, 1*time.Second, cmd.Timeout)
69}
70
71func TestCommandValidateArguments(t *testing.T) {
72 cmd := Command{Statement: "Ok", Arguments: Arguments{
73 Named: map[string]interface{}{"key": "val"},
74 Positional: []interface{}{"val"},
75 }}
76
77 assert.Error(t, cmd.Validate())
78}
79
80func TestCommandUnmarshalJSON(t *testing.T) {
81 strs := []string{
82 "{\"statement\":\"Ok\"}",
83 "{\"statement\":\"Ok\",\"arguments\":[0, 3.14, \"apple\"],\"mode\":\"query\"}",
84 "{\"statement\":\"Ok\",\"isolation\":\"read_uncommitted\",\"timeout\":1000}",
85 }
86
87 for _, str := range strs {
88 var cmd Command
89 assert.NoError(t, json.Unmarshal([]byte(str), &cmd), str)
90 }
91
92 strs = []string{
93 "",
94 "\"",
95 "{}",
96 "{\"argument\":{\"key\":\"val\"}}",
97 "{\"statement\":[\"Ok\"]}",
98 }
99
100 for _, str := range strs {
101 var cmd Command
102 assert.Error(t, json.Unmarshal([]byte(str), &cmd), str)
103 }
104}
105
106func TestArgumentsValidateNotNil(t *testing.T) {
107 args := Arguments{}
108
109 assert.NoError(t, args.Validate())
110 assert.NotNil(t, args.Named)
111 assert.NotNil(t, args.Positional)
112}
113
114func TestArgumentsValidateMutuallyExclusive(t *testing.T) {
115 args := []Arguments{
116 Arguments{},
117 Arguments{Named: map[string]interface{}{"key": "val"}},
118 Arguments{Positional: []interface{}{"val"}},
119 }
120
121 for _, arg := range args {
122 assert.NoError(t, arg.Validate())
123 assert.False(t, len(arg.Named) > 0 && len(arg.Positional) > 0)
124 }
125
126 args = []Arguments{
127 Arguments{
128 Named: map[string]interface{}{"key": "val"},
129 Positional: []interface{}{"val"},
130 },
131 }
132
133 for _, arg := range args {
134 assert.Error(t, arg.Validate())
135 assert.True(t, len(arg.Named) > 0 && len(arg.Positional) > 0)
136 }
137}
138
139func TestArgumentsValidateKeys(t *testing.T) {
140 keys := []string{
141 "",
142 "_",
143 "_key",
144 "1",
145 "1key",
146 "\xf0\x28\x8c\xbc", // non-utf8
147 }
148
149 for _, key := range keys {
150 args := Arguments{Named: map[string]interface{}{key: "val"}}
151
152 assert.Error(t, args.Validate(), key)
153 }
154}
155
156func TestArgumentsUnmarshalJSON(t *testing.T) {
157 strs := []string{
158 "{}",
159 "{\"key\":\"val\"}",
160 "{\"key\":[1, 3.14, {\"key\":\"val\"}]}",
161 "[]",
162 "[\"key\",\"val\"]",
163 "[{}]",
164 }
165
166 for _, str := range strs {
167 var args Arguments
168 assert.NoError(t, json.Unmarshal([]byte(str), &args), str)
169 }
170
171 strs = []string{
172 "",
173 "\"",
174 "1",
175 "\"key\"",
176 "{\"key\",\"val\"}",
177 }
178
179 for _, str := range strs {
180 var args Arguments
181 assert.Error(t, json.Unmarshal([]byte(str), &args), str)
182 }
183}
184