Skip to content

Commit 4e5f15a

Browse files
committed
test: make output of box-py/call.test.py deterministic
Response object is a unpacked msgpack structure, returned by Tarantool. Nor msgpack-python [1] that used in tarantool-python nor msgpack [2] itself cannot guarantee an order of keys in unpacked dictionaries. Therefore we have different keys order with running tests under Python 2 and Python 3, for example box-py/call.test.py. To workaround a problem proposed a conversion of dictionaries in a tuple to lists before printing Response object. Requires changes in tarantool-python [3]. 1. msgpack/msgpack-python#164 2. msgpack/msgpack#215 3. tarantool/tarantool-python#186 Part of #5652 Follows up #5538 (cherry picked from commit 45972c9)
1 parent a62740e commit 4e5f15a

File tree

2 files changed

+73
-58
lines changed

2 files changed

+73
-58
lines changed

test/box-py/call.result

Lines changed: 54 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -320,22 +320,22 @@ call f()
320320
- 3
321321
eval (return true)()
322322
---
323-
- True
323+
- true
324324
function f(...) return true end
325325
---
326326
...
327327
call f()
328328
---
329-
- True
329+
- true
330330
eval (return nil)()
331331
---
332-
- None
332+
- null
333333
function f(...) return nil end
334334
---
335335
...
336336
call f()
337337
---
338-
- None
338+
- null
339339
eval (return )()
340340
---
341341

@@ -374,96 +374,96 @@ call f()
374374
- [1, 2, 3]
375375
eval (return {k1 = 'v1', k2 = 'v2'})()
376376
---
377-
- {'k2': 'v2', 'k1': 'v1'}
377+
- {"k1": "v1", "k2": "v2"}
378378
function f(...) return {k1 = 'v1', k2 = 'v2'} end
379379
---
380380
...
381381
call f()
382382
---
383-
- {'k2': 'v2', 'k1': 'v1'}
383+
- {"k1": "v1", "k2": "v2"}
384384
eval (return {k1 = 'v1', k2 = 'v2'})()
385385
---
386-
- {'k2': 'v2', 'k1': 'v1'}
386+
- {"k1": "v1", "k2": "v2"}
387387
function f(...) return {k1 = 'v1', k2 = 'v2'} end
388388
---
389389
...
390390
call f()
391391
---
392-
- {'k2': 'v2', 'k1': 'v1'}
392+
- {"k1": "v1", "k2": "v2"}
393393
eval (return {s = {1, 1428578535}, u = 1428578535, v = {}, c = {['2'] = {1, 1428578535}, ['106'] = { 1, 1428578535} }, pc = {['2'] = {1, 1428578535, 9243}, ['106'] = {1, 1428578535, 9243}}})()
394394
---
395-
- {'pc': {'2': [1, 1428578535, 9243], '106': [1, 1428578535, 9243]}, 's': [1, 1428578535], 'u': 1428578535, 'c': {'2': [1, 1428578535], '106': [1, 1428578535]}, 'v': []}
395+
- {"c": {"106": [1, 1428578535], "2": [1, 1428578535]}, "pc": {"106": [1, 1428578535, 9243], "2": [1, 1428578535, 9243]}, "s": [1, 1428578535], "u": 1428578535, "v": []}
396396
function f(...) return {s = {1, 1428578535}, u = 1428578535, v = {}, c = {['2'] = {1, 1428578535}, ['106'] = { 1, 1428578535} }, pc = {['2'] = {1, 1428578535, 9243}, ['106'] = {1, 1428578535, 9243}}} end
397397
---
398398
...
399399
call f()
400400
---
401-
- {'pc': {'2': [1, 1428578535, 9243], '106': [1, 1428578535, 9243]}, 's': [1, 1428578535], 'u': 1428578535, 'c': {'2': [1, 1428578535], '106': [1, 1428578535]}, 'v': []}
401+
- {"c": {"106": [1, 1428578535], "2": [1, 1428578535]}, "pc": {"106": [1, 1428578535, 9243], "2": [1, 1428578535, 9243]}, "s": [1, 1428578535], "u": 1428578535, "v": []}
402402
eval (return true, {s = {1, 1428578535}, u = 1428578535, v = {}, c = {['2'] = {1, 1428578535}, ['106'] = { 1, 1428578535} }, pc = {['2'] = {1, 1428578535, 9243}, ['106'] = {1, 1428578535, 9243}}})()
403403
---
404-
- True
405-
- {'pc': {'2': [1, 1428578535, 9243], '106': [1, 1428578535, 9243]}, 's': [1, 1428578535], 'u': 1428578535, 'c': {'2': [1, 1428578535], '106': [1, 1428578535]}, 'v': []}
404+
- true
405+
- {"c": {"106": [1, 1428578535], "2": [1, 1428578535]}, "pc": {"106": [1, 1428578535, 9243], "2": [1, 1428578535, 9243]}, "s": [1, 1428578535], "u": 1428578535, "v": []}
406406
function f(...) return true, {s = {1, 1428578535}, u = 1428578535, v = {}, c = {['2'] = {1, 1428578535}, ['106'] = { 1, 1428578535} }, pc = {['2'] = {1, 1428578535, 9243}, ['106'] = {1, 1428578535, 9243}}} end
407407
---
408408
...
409409
call f()
410410
---
411-
- True
412-
- {'pc': {'2': [1, 1428578535, 9243], '106': [1, 1428578535, 9243]}, 's': [1, 1428578535], 'u': 1428578535, 'c': {'2': [1, 1428578535], '106': [1, 1428578535]}, 'v': []}
411+
- true
412+
- {"c": {"106": [1, 1428578535], "2": [1, 1428578535]}, "pc": {"106": [1, 1428578535, 9243], "2": [1, 1428578535, 9243]}, "s": [1, 1428578535], "u": 1428578535, "v": []}
413413
eval (return {s = {1, 1428578535}, u = 1428578535, v = {}, c = {['2'] = {1, 1428578535}, ['106'] = { 1, 1428578535} }, pc = {['2'] = {1, 1428578535, 9243}, ['106'] = {1, 1428578535, 9243}}}, true)()
414414
---
415-
- {'pc': {'2': [1, 1428578535, 9243], '106': [1, 1428578535, 9243]}, 's': [1, 1428578535], 'u': 1428578535, 'c': {'2': [1, 1428578535], '106': [1, 1428578535]}, 'v': []}
416-
- True
415+
- {"c": {"106": [1, 1428578535], "2": [1, 1428578535]}, "pc": {"106": [1, 1428578535, 9243], "2": [1, 1428578535, 9243]}, "s": [1, 1428578535], "u": 1428578535, "v": []}
416+
- true
417417
function f(...) return {s = {1, 1428578535}, u = 1428578535, v = {}, c = {['2'] = {1, 1428578535}, ['106'] = { 1, 1428578535} }, pc = {['2'] = {1, 1428578535, 9243}, ['106'] = {1, 1428578535, 9243}}}, true end
418418
---
419419
...
420420
call f()
421421
---
422-
- {'pc': {'2': [1, 1428578535, 9243], '106': [1, 1428578535, 9243]}, 's': [1, 1428578535], 'u': 1428578535, 'c': {'2': [1, 1428578535], '106': [1, 1428578535]}, 'v': []}
423-
- True
422+
- {"c": {"106": [1, 1428578535], "2": [1, 1428578535]}, "pc": {"106": [1, 1428578535, 9243], "2": [1, 1428578535, 9243]}, "s": [1, 1428578535], "u": 1428578535, "v": []}
423+
- true
424424
t = box.tuple.new('tuple', {1, 2, 3}, { k1 = 'v', k2 = 'v2'})
425425
---
426426
...
427427
eval (return t)()
428428
---
429-
- ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]
429+
- ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]
430430
function f(...) return t end
431431
---
432432
...
433433
call f()
434434
---
435-
- ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]
435+
- ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]
436436
eval (return t, t, t)()
437437
---
438-
- ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]
439-
- ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]
440-
- ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]
438+
- ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]
439+
- ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]
440+
- ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]
441441
function f(...) return t, t, t end
442442
---
443443
...
444444
call f()
445445
---
446-
- ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]
447-
- ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]
448-
- ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]
446+
- ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]
447+
- ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]
448+
- ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]
449449
eval (return {t})()
450450
---
451-
- [['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]]
451+
- [["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]]
452452
function f(...) return {t} end
453453
---
454454
...
455455
call f()
456456
---
457-
- [['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]]
457+
- [["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]]
458458
eval (return {t, t, t})()
459459
---
460-
- [['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}], ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}], ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]]
460+
- [["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}], ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}], ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]]
461461
function f(...) return {t, t, t} end
462462
---
463463
...
464464
call f()
465465
---
466-
- [['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}], ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}], ['tuple', [1, 2, 3], {'k2': 'v2', 'k1': 'v'}]]
466+
- [["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}], ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}], ["tuple", [1, 2, 3], {"k1": "v", "k2": "v2"}]]
467467
eval (return error('exception'))()
468468
---
469469
{
@@ -501,79 +501,79 @@ function f(...) return ... end
501501
call f()
502502
---
503503

504-
eval (return ...)(1,2,3)
504+
eval (return ...)(1, 2, 3)
505505
---
506506
- 1
507507
- 2
508508
- 3
509509
function f(...) return ... end
510510
---
511511
...
512-
call f(1,2,3)
512+
call f(1, 2, 3)
513513
---
514514
- 1
515515
- 2
516516
- 3
517-
eval (return ...)(None,None,None)
517+
eval (return ...)(null, null, null)
518518
---
519-
- None
520-
- None
521-
- None
519+
- null
520+
- null
521+
- null
522522
function f(...) return ... end
523523
---
524524
...
525-
call f(None,None,None)
525+
call f(null, null, null)
526526
---
527-
- None
528-
- None
529-
- None
530-
eval (return ...)({'k2': 'v2', 'k1': 'v1'})
527+
- null
528+
- null
529+
- null
530+
eval (return ...)({"k1": "v1", "k2": "v2"})
531531
---
532-
- {'k2': 'v2', 'k1': 'v1'}
532+
- {"k1": "v1", "k2": "v2"}
533533
function f(...) return ... end
534534
---
535535
...
536-
call f({'k2': 'v2', 'k1': 'v1'})
536+
call f({"k1": "v1", "k2": "v2"})
537537
---
538-
- {'k2': 'v2', 'k1': 'v1'}
538+
- {"k1": "v1", "k2": "v2"}
539539
eval (return space:auto_increment({"transaction"}))()
540540
---
541-
- [1, 'transaction']
541+
- [1, "transaction"]
542542
function f(...) return space:auto_increment({"transaction"}) end
543543
---
544544
...
545545
call f()
546546
---
547-
- [2, 'transaction']
547+
- [2, "transaction"]
548548
eval (return space:select{})()
549549
---
550-
- [[1, 'transaction'], [2, 'transaction']]
550+
- [[1, "transaction"], [2, "transaction"]]
551551
function f(...) return space:select{} end
552552
---
553553
...
554554
call f()
555555
---
556-
- [[1, 'transaction'], [2, 'transaction']]
556+
- [[1, "transaction"], [2, "transaction"]]
557557
eval (return box.begin(), space:auto_increment({"failed"}), box.rollback())()
558558
---
559-
- None
560-
- [3, 'failed']
559+
- null
560+
- [3, "failed"]
561561
function f(...) return box.begin(), space:auto_increment({"failed"}), box.rollback() end
562562
---
563563
...
564564
call f()
565565
---
566-
- None
567-
- [3, 'failed']
566+
- null
567+
- [3, "failed"]
568568
eval (return space:select{})()
569569
---
570-
- [[1, 'transaction'], [2, 'transaction']]
570+
- [[1, "transaction"], [2, "transaction"]]
571571
function f(...) return space:select{} end
572572
---
573573
...
574574
call f()
575575
---
576-
- [[1, 'transaction'], [2, 'transaction']]
576+
- [[1, "transaction"], [2, "transaction"]]
577577
eval (return require("fiber").sleep(0))()
578578
---
579579

test/box-py/call.test.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import os
44
import sys
5+
import json
56

67
def call(name, *args):
78
return iproto.call(name, *args)
@@ -136,16 +137,30 @@ def call(name, *args):
136137
admin("space = box.schema.space.create('tweedledum')")
137138
admin("index = space:create_index('primary', { type = 'tree' })")
138139

140+
json_dumps_kwargs=dict(sort_keys=True, separators=(', ', ': '))
141+
142+
def dump_args(*args):
143+
return json.dumps(args, **json_dumps_kwargs)[1:-1]
144+
145+
def dump_response(response):
146+
if response.return_code:
147+
return str(response)
148+
if not response.data:
149+
return ''
150+
res = []
151+
for item in response.data:
152+
res.append(json.dumps(item, **json_dumps_kwargs))
153+
return '- ' + '\n- '.join(res)
139154

140155
def lua_eval(name, *args):
141-
print("eval ({})({})".format(name, ",".join([ str(arg) for arg in args])))
156+
print("eval ({})({})".format(name, dump_args(*args)))
142157
print("---")
143-
print(iproto.py_con.eval(name, args))
158+
print(dump_response(iproto.py_con.eval(name, args)))
144159

145160
def lua_call(name, *args):
146-
print("call {}({})".format(name, ",".join([ str(arg) for arg in args])))
161+
print("call {}({})".format(name, dump_args(*args)))
147162
print("---")
148-
print(iproto.py_con.call(name, args))
163+
print(dump_response(iproto.py_con.call(name, args)))
149164

150165
def test(expr, *args):
151166
lua_eval("return " + expr, *args)

0 commit comments

Comments
 (0)