def test_comparison_type(): # test using `comparison` directly v = kv.comparison('foo', 'value', '==', b'bar') assert v == (kv.value('foo') == b'bar') o = kv.comparison('foo', 'owner', '==', 'bar_1') assert o == (kv.owner('foo') == 'bar_1') with pytest.raises(TypeError): kv.comparison(1, 'value', '==', b'bar') with pytest.raises(ValueError): kv.comparison('foo', 'unknown', '==', b'bar') with pytest.raises(ValueError): kv.comparison('foo', 'value', 'unknown', b'bar') with pytest.raises(TypeError): kv.comparison('foo', 'owner', '<=', None)
def test_transaction_conditions(kv_test_app): cid = kv_test_app.get_containers()[0].id service, instance = cid.split('_') instance = int(instance) cid_larger = '%s_%d' % (service, instance + 1) cid_smaller = '%s_%d' % (service, instance - 1) val = b'bcd' larger = b'bce' smaller = b'bcc' kv_test_app.kv.put('owner', val, owner=cid) kv_test_app.kv.put('no_owner', val) def run(*conds): return kv_test_app.kv.transaction(conds).succeeded # -- value -- # exists assert run(kv.exists('owner')) assert not run(kv.exists('missing')) assert run(kv.missing('missing')) assert not run(kv.missing('owner')) # == assert run(kv.value('owner') == val) assert not run(kv.value('owner') == larger) assert not run(kv.value('missing') == val) # != assert run(kv.value('owner') != larger) assert not run(kv.value('owner') != val) assert run(kv.value('missing') != val) # < assert run(kv.value('owner') < larger) assert not run(kv.value('owner') < val) assert not run(kv.value('owner') < smaller) assert not run(kv.value('missing') < val) # <= assert run(kv.value('owner') <= larger) assert run(kv.value('owner') <= val) assert not run(kv.value('owner') <= smaller) assert not run(kv.value('missing') <= val) # > assert not run(kv.value('owner') > larger) assert not run(kv.value('owner') > val) assert run(kv.value('owner') > smaller) assert not run(kv.value('missing') > val) # >= assert not run(kv.value('owner') >= larger) assert run(kv.value('owner') >= val) assert run(kv.value('owner') >= smaller) assert not run(kv.value('missing') >= val) # -- owner -- # Owner presence/absence assert run(kv.owner('owner') != None) # noqa assert not run(kv.owner('owner') == None) # noqa assert run(kv.owner('no_owner') == None) # noqa assert not run(kv.owner('no_owner') != None) # noqa # == assert run(kv.owner('owner') == cid) assert not run(kv.owner('owner') == cid_larger) assert not run(kv.owner('no_owner') == cid) # != assert run(kv.owner('owner') != cid_larger) assert not run(kv.owner('owner') != cid) assert run(kv.owner('no_owner') != cid) # < assert run(kv.owner('owner') < cid_larger) assert not run(kv.owner('owner') < cid) assert not run(kv.owner('owner') < cid_smaller) assert not run(kv.owner('no_owner') < cid) # <= assert run(kv.owner('owner') <= cid_larger) assert run(kv.owner('owner') <= cid) assert not run(kv.owner('owner') <= cid_smaller) assert not run(kv.owner('no_owner') <= cid) # > assert not run(kv.owner('owner') > cid_larger) assert not run(kv.owner('owner') > cid) assert run(kv.owner('owner') > cid_smaller) assert not run(kv.owner('no_owner') > cid) # >= assert not run(kv.owner('owner') >= cid_larger) assert run(kv.owner('owner') >= cid) assert run(kv.owner('owner') >= cid_smaller) assert not run(kv.owner('no_owner') >= cid) # No conditions assert run() # Multiple conditions true1 = kv.exists('owner') true2 = kv.exists('no_owner') false = kv.exists('missing') assert run(true1, true2) assert not run(false, true1) assert not run(true1, false, true2)