summaryrefslogtreecommitdiff
path: root/ext/librethinkdbxx/test/upstream/changefeeds/table.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'ext/librethinkdbxx/test/upstream/changefeeds/table.yaml')
-rw-r--r--ext/librethinkdbxx/test/upstream/changefeeds/table.yaml101
1 files changed, 101 insertions, 0 deletions
diff --git a/ext/librethinkdbxx/test/upstream/changefeeds/table.yaml b/ext/librethinkdbxx/test/upstream/changefeeds/table.yaml
new file mode 100644
index 00000000..c089abc9
--- /dev/null
+++ b/ext/librethinkdbxx/test/upstream/changefeeds/table.yaml
@@ -0,0 +1,101 @@
+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}}]