@@ -25,6 +25,7 @@ import (
25
25
"os"
26
26
"strconv"
27
27
"strings"
28
+ "time"
28
29
29
30
"github.com/pingcap/errors"
30
31
log "github.com/sirupsen/logrus"
@@ -113,14 +114,31 @@ func (t *Tester) addSuccess() {
113
114
114
115
}
115
116
117
+ func (t * Tester ) getVschema () []byte {
118
+ httpClient := & http.Client {Timeout : 5 * time .Second }
119
+ resp , err := httpClient .Get (t .clusterInstance .VtgateProcess .VSchemaURL )
120
+ if err != nil {
121
+ log .Errorf (err .Error ())
122
+ return nil
123
+ }
124
+ defer resp .Body .Close ()
125
+ res , err := io .ReadAll (resp .Body )
126
+ if err != nil {
127
+ log .Errorf (err .Error ())
128
+ return nil
129
+ }
130
+
131
+ return res
132
+ }
133
+
116
134
func (t * Tester ) Run () error {
117
135
t .preProcess ()
118
136
if t .autoVSchema () {
119
137
defer t .postProcess ()
120
138
}
121
139
queries , err := t .loadQueries ()
122
140
if err != nil {
123
- t .reporter .AddFailure (t .vschema , err )
141
+ t .reporter .AddFailure (t .getVschema () , err )
124
142
return err
125
143
}
126
144
@@ -142,26 +160,26 @@ func (t *Tester) Run() error {
142
160
case Q_SKIP :
143
161
t .skipNext = true
144
162
case Q_BEGIN_CONCURRENT , Q_END_CONCURRENT , Q_CONNECT , Q_CONNECTION , Q_DISCONNECT , Q_LET , Q_REPLACE_COLUMN :
145
- t .reporter .AddFailure (t .vschema , fmt .Errorf ("%s not supported" , String (q .tp )))
163
+ t .reporter .AddFailure (t .getVschema () , fmt .Errorf ("%s not supported" , String (q .tp )))
146
164
case Q_SKIP_IF_BELOW_VERSION :
147
165
strs := strings .Split (q .Query , " " )
148
166
if len (strs ) != 3 {
149
- t .reporter .AddFailure (t .vschema , fmt .Errorf ("incorrect syntax for Q_SKIP_IF_BELOW_VERSION in: %v" , q .Query ))
167
+ t .reporter .AddFailure (t .getVschema () , fmt .Errorf ("incorrect syntax for Q_SKIP_IF_BELOW_VERSION in: %v" , q .Query ))
150
168
continue
151
169
}
152
170
t .skipBinary = strs [1 ]
153
171
var err error
154
172
t .skipVersion , err = strconv .Atoi (strs [2 ])
155
173
if err != nil {
156
- t .reporter .AddFailure (t .vschema , err )
174
+ t .reporter .AddFailure (t .getVschema () , err )
157
175
continue
158
176
}
159
177
case Q_ERROR :
160
178
t .expectedErrs = true
161
179
case Q_VEXPLAIN :
162
180
strs := strings .Split (q .Query , " " )
163
181
if len (strs ) != 2 {
164
- t .reporter .AddFailure (t .vschema , fmt .Errorf ("incorrect syntax for Q_VEXPLAIN in: %v" , q .Query ))
182
+ t .reporter .AddFailure (t .getVschema () , fmt .Errorf ("incorrect syntax for Q_VEXPLAIN in: %v" , q .Query ))
165
183
continue
166
184
}
167
185
@@ -185,14 +203,14 @@ func (t *Tester) Run() error {
185
203
result , err := t .curr .VtConn .ExecuteFetch ("vexplain " + t .vexplain + " " + q .Query , - 1 , false )
186
204
t .vexplain = ""
187
205
if err != nil {
188
- t .reporter .AddFailure (t .vschema , err )
206
+ t .reporter .AddFailure (t .getVschema () , err )
189
207
continue
190
208
}
191
209
192
210
t .reporter .AddInfo (fmt .Sprintf ("VExplain Output:\n %s\n " , result .Rows [0 ][0 ].ToString ()))
193
211
}
194
212
if err = t .execute (q ); err != nil && ! t .expectedErrs {
195
- t .reporter .AddFailure (t .vschema , err )
213
+ t .reporter .AddFailure (t .getVschema () , err )
196
214
}
197
215
t .reporter .EndTestCase ()
198
216
// clear expected errors and current query after we execute any query
@@ -203,7 +221,7 @@ func (t *Tester) Run() error {
203
221
return errors .Annotate (err , "failed to remove file" )
204
222
}
205
223
default :
206
- t .reporter .AddFailure (t .vschema , fmt .Errorf ("%s not supported" , String (q .tp )))
224
+ t .reporter .AddFailure (t .getVschema () , fmt .Errorf ("%s not supported" , String (q .tp )))
207
225
}
208
226
}
209
227
fmt .Printf ("%s\n " , t .reporter .Report ())
@@ -237,21 +255,21 @@ func (t *Tester) waitAuthoritative(query string) {
237
255
var err error
238
256
ksName , err = t .findTable (tblName )
239
257
if err != nil {
240
- t .reporter .AddFailure (t .vschema , err )
258
+ t .reporter .AddFailure (t .getVschema () , err )
241
259
return
242
260
}
243
261
case 3 :
244
262
tblName = strs [1 ]
245
263
ksName = strs [2 ]
246
264
247
265
default :
248
- t .reporter .AddFailure (t .vschema , fmt .Errorf ("expected table name and keyspace for wait_authoritative in: %v" , query ))
266
+ t .reporter .AddFailure (t .getVschema () , fmt .Errorf ("expected table name and keyspace for wait_authoritative in: %v" , query ))
249
267
}
250
268
251
269
log .Infof ("Waiting for authoritative schema for table %s" , tblName )
252
270
err := utils .WaitForAuthoritative (t , ksName , tblName , t .clusterInstance .VtgateProcess .ReadVSchema )
253
271
if err != nil {
254
- t .reporter .AddFailure (t .vschema , fmt .Errorf ("failed to wait for authoritative schema for table %s: %v" , tblName , err ))
272
+ t .reporter .AddFailure (t .getVschema () , fmt .Errorf ("failed to wait for authoritative schema for table %s: %v" , tblName , err ))
255
273
}
256
274
}
257
275
@@ -439,7 +457,7 @@ func (t *Tester) handleCreateTable(create *sqlparser.CreateTable) {
439
457
}
440
458
441
459
func (t * Tester ) Errorf (format string , args ... interface {}) {
442
- t .reporter .AddFailure (t .vschema , errors .Errorf (format , args ... ))
460
+ t .reporter .AddFailure (t .getVschema () , errors .Errorf (format , args ... ))
443
461
}
444
462
445
463
func (t * Tester ) FailNow () {
0 commit comments