mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-02-11 13:35:17 +00:00
102 lines
3.1 KiB
YAML
102 lines
3.1 KiB
YAML
|
desc: Test changefeeds on a table
|
||
|
table_variable_name: tbl
|
||
|
tests:
|
||
|
|
||
|
# ==== regular tables
|
||
|
|
||
|
# - start feeds
|
||
|
|
||
|
- cd: all = tbl.changes()
|
||
|
|
||
|
# - note: no initial values from table changefeeds
|
||
|
|
||
|
# - inserts
|
||
|
|
||
|
- cd: tbl.insert([{'id':1}, {'id':2}])
|
||
|
ot: partial({'errors':0, 'inserted':2})
|
||
|
- cd: fetch(all, 2)
|
||
|
ot: bag([{'old_val':null, 'new_val':{'id':1}}, {'old_val':null, 'new_val':{'id':2}}])
|
||
|
|
||
|
# - updates
|
||
|
|
||
|
- cd: tbl.get(1).update({'version':1})
|
||
|
ot: partial({'errors':0, 'replaced':1})
|
||
|
- cd: fetch(all, 1)
|
||
|
ot: [{'old_val':{'id':1}, 'new_val':{'id':1, 'version':1}}]
|
||
|
|
||
|
# - deletions
|
||
|
|
||
|
- cd: tbl.get(1).delete()
|
||
|
ot: partial({'errors':0, 'deleted':1})
|
||
|
- cd: fetch(all, 1)
|
||
|
ot: [{'old_val':{'id':1, 'version':1}, 'new_val':null}]
|
||
|
|
||
|
# - pluck on values
|
||
|
|
||
|
- cd: pluck = tbl.changes().pluck({'new_val':['version']})
|
||
|
- cd: tbl.insert([{'id':5, 'version':5}])
|
||
|
ot: partial({'errors':0, 'inserted':1})
|
||
|
- cd: fetch(pluck, 1)
|
||
|
ot: [{'new_val':{'version':5}}]
|
||
|
|
||
|
# - order by
|
||
|
|
||
|
- cd: tbl.changes().order_by('id')
|
||
|
ot: err('ReqlQueryLogicError', "Cannot call a terminal (`reduce`, `count`, etc.) on an infinite stream (such as a changefeed).")
|
||
|
#
|
||
|
# ToDo: enable this when #4067 is done
|
||
|
#
|
||
|
# - js: orderedLimit = tbl.changes().limit(5).order_by(r.desc('id'))('new_val')('id')
|
||
|
# cd: orderedLimit = tbl.changes().limit(5).order_by(r.desc('id'))['new_val']['id']
|
||
|
# - js: tbl.range(100, 105).map(function (row) { return {'id':row} })
|
||
|
# py: tbl.range(100, 105).map({'id':r.row})
|
||
|
# rb: tbl.range(100, 105).map{|row| {'id':row}}
|
||
|
# - cd: fetch(orderedLimit)
|
||
|
# ot: [104, 103, 102, 101, 100]
|
||
|
|
||
|
# - changes overflow
|
||
|
|
||
|
- cd: overflow = tbl.changes()
|
||
|
runopts:
|
||
|
changefeed_queue_size: 100
|
||
|
# add enough entries to make sure we get the overflow error
|
||
|
- js: tbl.insert(r.range(200).map(function(x) { return({}); }))
|
||
|
py: tbl.insert(r.range(200).map(lambda x: {}))
|
||
|
rb: tbl.insert(r.range(200).map{|x| {}})
|
||
|
- cd: fetch(overflow, 90)
|
||
|
ot: partial([{'error': regex('Changefeed cache over array size limit, skipped \d+ elements.')}])
|
||
|
|
||
|
# ==== virtual tables
|
||
|
|
||
|
- def: vtbl = r.db('rethinkdb').table('_debug_scratch')
|
||
|
- cd: allVirtual = vtbl.changes()
|
||
|
|
||
|
# - inserts
|
||
|
|
||
|
- cd: vtbl.insert([{'id':1}, {'id':2}])
|
||
|
ot: partial({'errors':0, 'inserted':2})
|
||
|
- cd: fetch(allVirtual, 2)
|
||
|
ot: bag([{'old_val':null, 'new_val':{'id':1}}, {'old_val':null, 'new_val':{'id':2}}])
|
||
|
|
||
|
# - updates
|
||
|
|
||
|
- cd: vtbl.get(1).update({'version':1})
|
||
|
ot: partial({'errors':0, 'replaced':1})
|
||
|
- cd: fetch(allVirtual, 1)
|
||
|
ot: [{'old_val':{'id':1}, 'new_val':{'id':1, 'version':1}}]
|
||
|
|
||
|
# - deletions
|
||
|
|
||
|
- cd: vtbl.get(1).delete()
|
||
|
ot: partial({'errors':0, 'deleted':1})
|
||
|
- cd: fetch(allVirtual, 1)
|
||
|
ot: [{'old_val':{'id':1, 'version':1}, 'new_val':null}]
|
||
|
|
||
|
# - pluck on values
|
||
|
|
||
|
- cd: vpluck = vtbl.changes().pluck({'new_val':['version']})
|
||
|
- cd: vtbl.insert([{'id':5, 'version':5}])
|
||
|
ot: partial({'errors':0, 'inserted':1})
|
||
|
- cd: fetch(vpluck, 1)
|
||
|
ot: [{'new_val':{'version':5}}]
|