cloudflare/cloudflared

Public

mirrored from https://github.com/cloudflare/cloudflaredAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
2020.3.2

Branches

Tags

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

Clone

HTTPS

Download ZIP

dbconnect/client_test.go

183lines · modeblame

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