|
9 | 9 | "github.com/vmihailenco/msgpack/v5" |
10 | 10 |
|
11 | 11 | . "github.com/tarantool/go-tarantool/v3" |
12 | | - "github.com/tarantool/go-tarantool/v3/test_helpers" |
13 | 12 | ) |
14 | 13 |
|
15 | 14 | var samples = map[string]BoxError{ |
@@ -215,9 +214,6 @@ func TestMessagePackEncodeNil(t *testing.T) { |
215 | 214 | require.Equal(t, "msgpack: unexpected nil BoxError on encode", err.Error()) |
216 | 215 | } |
217 | 216 |
|
218 | | -var space = "test_error_type" |
219 | | -var index = "primary" |
220 | | - |
221 | 217 | type TupleBoxError struct { |
222 | 218 | pk string // BoxError cannot be used as a primary key. |
223 | 219 | val BoxError |
@@ -295,205 +291,3 @@ func TestErrorTypeMPEncodeDecode(t *testing.T) { |
295 | 291 | }) |
296 | 292 | } |
297 | 293 | } |
298 | | - |
299 | | -func TestErrorTypeEval(t *testing.T) { |
300 | | - test_helpers.SkipIfErrorMessagePackTypeUnsupported(t) |
301 | | - |
302 | | - conn := test_helpers.ConnectWithValidation(t, dialer, opts) |
303 | | - defer conn.Close() |
304 | | - |
305 | | - for name, testcase := range tupleCases { |
306 | | - t.Run(name, func(t *testing.T) { |
307 | | - data, err := conn.Eval("return ...", []interface{}{&testcase.tuple.val}) |
308 | | - require.Nil(t, err) |
309 | | - require.NotNil(t, data) |
310 | | - require.Equal(t, len(data), 1) |
311 | | - actual, ok := data[0].(*BoxError) |
312 | | - require.Truef(t, ok, "Response data has valid type") |
313 | | - require.Equal(t, testcase.tuple.val, *actual) |
314 | | - }) |
315 | | - } |
316 | | -} |
317 | | - |
318 | | -func TestErrorTypeEvalTyped(t *testing.T) { |
319 | | - test_helpers.SkipIfErrorMessagePackTypeUnsupported(t) |
320 | | - |
321 | | - conn := test_helpers.ConnectWithValidation(t, dialer, opts) |
322 | | - defer conn.Close() |
323 | | - |
324 | | - for name, testcase := range tupleCases { |
325 | | - t.Run(name, func(t *testing.T) { |
326 | | - var res []BoxError |
327 | | - err := conn.EvalTyped("return ...", []interface{}{&testcase.tuple.val}, &res) |
328 | | - require.Nil(t, err) |
329 | | - require.NotNil(t, res) |
330 | | - require.Equal(t, len(res), 1) |
331 | | - require.Equal(t, testcase.tuple.val, res[0]) |
332 | | - }) |
333 | | - } |
334 | | -} |
335 | | - |
336 | | -func TestErrorTypeInsert(t *testing.T) { |
337 | | - test_helpers.SkipIfErrorMessagePackTypeUnsupported(t) |
338 | | - |
339 | | - conn := test_helpers.ConnectWithValidation(t, dialer, opts) |
340 | | - defer conn.Close() |
341 | | - |
342 | | - truncateEval := fmt.Sprintf("box.space[%q]:truncate()", space) |
343 | | - _, err := conn.Eval(truncateEval, []interface{}{}) |
344 | | - require.Nil(t, err) |
345 | | - |
346 | | - for name, testcase := range tupleCases { |
347 | | - t.Run(name, func(t *testing.T) { |
348 | | - _, err = conn.Insert(space, &testcase.tuple) |
349 | | - require.Nil(t, err) |
350 | | - |
351 | | - checkEval := fmt.Sprintf(` |
352 | | - local err = rawget(_G, %q) |
353 | | - assert(err ~= nil) |
354 | | -
|
355 | | - local tuple = box.space[%q]:get(%q) |
356 | | - assert(tuple ~= nil) |
357 | | -
|
358 | | - local tuple_err = tuple[2] |
359 | | - assert(tuple_err ~= nil) |
360 | | -
|
361 | | - return compare_box_errors(tuple_err, err) |
362 | | - `, testcase.ttObj, space, testcase.tuple.pk) |
363 | | - |
364 | | - // In fact, compare_box_errors does not check than File and Line |
365 | | - // of connector BoxError are equal to the Tarantool ones |
366 | | - // since they may differ between different Tarantool versions |
367 | | - // and editions. |
368 | | - _, err := conn.Eval(checkEval, []interface{}{}) |
369 | | - require.Nilf(t, err, "Tuple has been successfully inserted") |
370 | | - }) |
371 | | - } |
372 | | -} |
373 | | - |
374 | | -func TestErrorTypeInsertTyped(t *testing.T) { |
375 | | - test_helpers.SkipIfErrorMessagePackTypeUnsupported(t) |
376 | | - |
377 | | - conn := test_helpers.ConnectWithValidation(t, dialer, opts) |
378 | | - defer conn.Close() |
379 | | - |
380 | | - truncateEval := fmt.Sprintf("box.space[%q]:truncate()", space) |
381 | | - _, err := conn.Eval(truncateEval, []interface{}{}) |
382 | | - require.Nil(t, err) |
383 | | - |
384 | | - for name, testcase := range tupleCases { |
385 | | - t.Run(name, func(t *testing.T) { |
386 | | - var res []TupleBoxError |
387 | | - err = conn.InsertTyped(space, &testcase.tuple, &res) |
388 | | - require.Nil(t, err) |
389 | | - require.NotNil(t, res) |
390 | | - require.Equal(t, len(res), 1) |
391 | | - require.Equal(t, testcase.tuple, res[0]) |
392 | | - |
393 | | - checkEval := fmt.Sprintf(` |
394 | | - local err = rawget(_G, %q) |
395 | | - assert(err ~= nil) |
396 | | -
|
397 | | - local tuple = box.space[%q]:get(%q) |
398 | | - assert(tuple ~= nil) |
399 | | -
|
400 | | - local tuple_err = tuple[2] |
401 | | - assert(tuple_err ~= nil) |
402 | | -
|
403 | | - return compare_box_errors(tuple_err, err) |
404 | | - `, testcase.ttObj, space, testcase.tuple.pk) |
405 | | - |
406 | | - // In fact, compare_box_errors does not check than File and Line |
407 | | - // of connector BoxError are equal to the Tarantool ones |
408 | | - // since they may differ between different Tarantool versions |
409 | | - // and editions. |
410 | | - _, err := conn.Eval(checkEval, []interface{}{}) |
411 | | - require.Nilf(t, err, "Tuple has been successfully inserted") |
412 | | - }) |
413 | | - } |
414 | | -} |
415 | | - |
416 | | -func TestErrorTypeSelect(t *testing.T) { |
417 | | - test_helpers.SkipIfErrorMessagePackTypeUnsupported(t) |
418 | | - |
419 | | - conn := test_helpers.ConnectWithValidation(t, dialer, opts) |
420 | | - defer conn.Close() |
421 | | - |
422 | | - truncateEval := fmt.Sprintf("box.space[%q]:truncate()", space) |
423 | | - _, err := conn.Eval(truncateEval, []interface{}{}) |
424 | | - require.Nil(t, err) |
425 | | - |
426 | | - for name, testcase := range tupleCases { |
427 | | - t.Run(name, func(t *testing.T) { |
428 | | - insertEval := fmt.Sprintf(` |
429 | | - local err = rawget(_G, %q) |
430 | | - assert(err ~= nil) |
431 | | -
|
432 | | - local tuple = box.space[%q]:insert{%q, err} |
433 | | - assert(tuple ~= nil) |
434 | | - `, testcase.ttObj, space, testcase.tuple.pk) |
435 | | - |
436 | | - _, err := conn.Eval(insertEval, []interface{}{}) |
437 | | - require.Nilf(t, err, "Tuple has been successfully inserted") |
438 | | - |
439 | | - var offset uint32 = 0 |
440 | | - var limit uint32 = 1 |
441 | | - data, err := conn.Select(space, index, offset, limit, IterEq, |
442 | | - []interface{}{testcase.tuple.pk}) |
443 | | - require.Nil(t, err) |
444 | | - require.NotNil(t, data) |
445 | | - require.Equalf(t, len(data), 1, "Exactly one tuple had been found") |
446 | | - tpl, ok := data[0].([]interface{}) |
447 | | - require.Truef(t, ok, "Tuple has valid type") |
448 | | - require.Equal(t, testcase.tuple.pk, tpl[0]) |
449 | | - actual, ok := tpl[1].(*BoxError) |
450 | | - require.Truef(t, ok, "BoxError tuple field has valid type") |
451 | | - // In fact, CheckEqualBoxErrors does not check than File and Line |
452 | | - // of connector BoxError are equal to the Tarantool ones |
453 | | - // since they may differ between different Tarantool versions |
454 | | - // and editions. |
455 | | - test_helpers.CheckEqualBoxErrors(t, testcase.tuple.val, *actual) |
456 | | - }) |
457 | | - } |
458 | | -} |
459 | | - |
460 | | -func TestErrorTypeSelectTyped(t *testing.T) { |
461 | | - test_helpers.SkipIfErrorMessagePackTypeUnsupported(t) |
462 | | - |
463 | | - conn := test_helpers.ConnectWithValidation(t, dialer, opts) |
464 | | - defer conn.Close() |
465 | | - |
466 | | - truncateEval := fmt.Sprintf("box.space[%q]:truncate()", space) |
467 | | - _, err := conn.Eval(truncateEval, []interface{}{}) |
468 | | - require.Nil(t, err) |
469 | | - |
470 | | - for name, testcase := range tupleCases { |
471 | | - t.Run(name, func(t *testing.T) { |
472 | | - insertEval := fmt.Sprintf(` |
473 | | - local err = rawget(_G, %q) |
474 | | - assert(err ~= nil) |
475 | | -
|
476 | | - local tuple = box.space[%q]:insert{%q, err} |
477 | | - assert(tuple ~= nil) |
478 | | - `, testcase.ttObj, space, testcase.tuple.pk) |
479 | | - |
480 | | - _, err := conn.Eval(insertEval, []interface{}{}) |
481 | | - require.Nilf(t, err, "Tuple has been successfully inserted") |
482 | | - |
483 | | - var offset uint32 = 0 |
484 | | - var limit uint32 = 1 |
485 | | - var resp []TupleBoxError |
486 | | - err = conn.SelectTyped(space, index, offset, limit, IterEq, |
487 | | - []interface{}{testcase.tuple.pk}, &resp) |
488 | | - require.Nil(t, err) |
489 | | - require.NotNil(t, resp) |
490 | | - require.Equalf(t, len(resp), 1, "Exactly one tuple had been found") |
491 | | - require.Equal(t, testcase.tuple.pk, resp[0].pk) |
492 | | - // In fact, CheckEqualBoxErrors does not check than File and Line |
493 | | - // of connector BoxError are equal to the Tarantool ones |
494 | | - // since they may differ between different Tarantool versions |
495 | | - // and editions. |
496 | | - test_helpers.CheckEqualBoxErrors(t, testcase.tuple.val, resp[0].val) |
497 | | - }) |
498 | | - } |
499 | | -} |
0 commit comments