handle data_store type changes

fix test input
This commit is contained in:
almog 2021-10-20 16:00:26 +03:00
parent 8d49871bfa
commit a0ef021ecd
No known key found for this signature in database
GPG Key ID: CB2C7BBD0071DFDC
3 changed files with 46 additions and 44 deletions

View File

@ -95,18 +95,20 @@ class DataLayer:
) -> bool:
for change in changelist:
if change["action"] == "insert":
key = Program.from_bytes(bytes(change["key"]))
value = Program.from_bytes(bytes(change["value"]))
key = bytes32(change["key"])
value = bytes32(change["value"])
reference_node_hash = None
if "reference_node_hash" in change:
reference_node_hash = Program.from_bytes(change["reference_node_hash"])
side = None
if side in change:
side = Side(change["side"])
await self.data_store.insert(key, value, tree_id, reference_node_hash, side)
if reference_node_hash or side:
await self.data_store.insert(key, value, tree_id, reference_node_hash, side)
await self.data_store.autoinsert(key, value, tree_id)
else:
assert change["action"] == "delete"
key = Program.from_bytes(change["key"])
key = bytes32(change["key"])
await self.data_store.delete(key, tree_id)
# state = await self.data_store.get_table_state(table)

View File

@ -29,7 +29,7 @@ class DataLayerRpcApi:
async def get_value(self, request: Dict[str, Any]) -> Dict[str, Any]:
store_id = bytes32(bytes(request["id"]))
key = Program.from_bytes(bytes(request["key"]))
key = bytes32(bytes(request["key"]))
value = await self.service.get_value(store_id=store_id, key=key)
return {"data": value}

View File

@ -10,6 +10,7 @@ from chia.rpc.data_layer_rpc_api import DataLayerRpcApi
from chia.types.blockchain_format.program import Program
from chia.util.config import load_config
from chia.util.db_wrapper import DBWrapper
from chia.util.hash import std_hash
from tests.core.data_layer.util import ChiaRoot
@ -26,15 +27,15 @@ async def test_create_insert_get(chia_root: ChiaRoot) -> None:
data_layer.data_store = await DataStore.create(data_layer.db_wrapper)
data_layer.initialized = True
rpc_api = DataLayerRpcApi(data_layer)
key = Program.to("abc")
value = Program.to([1, 2])
changelist: List[Dict[str, str]] = [{"action": "insert", "key": key.as_bin(), "value": value.as_bin()}]
key = std_hash(b"a")
value = std_hash(Program.to([1, 2]))
changelist: List[Dict[str, str]] = [{"action": "insert", "key": key, "value": value}]
res = await rpc_api.create_kv_store()
store_id = res["id"]
await rpc_api.update_kv_store({"id": store_id, "changelist": changelist})
res = await rpc_api.get_value({"id": store_id, "key": key.as_bin()})
res = await rpc_api.get_value({"id": store_id, "key": key})
assert res["data"] == value
changelist = [{"action": "delete", "key": key.as_bin()}]
changelist = [{"action": "delete", "key": key}]
await rpc_api.update_kv_store({"id": store_id, "changelist": changelist})
with pytest.raises(Exception):
val = await rpc_api.get_value({"id": store_id, "key": key.as_bin()})
@ -53,30 +54,29 @@ async def test_create_double_insert(chia_root: ChiaRoot) -> None:
data_layer.data_store = await DataStore.create(data_layer.db_wrapper)
data_layer.initialized = True
rpc_api = DataLayerRpcApi(data_layer)
key1 = Program.to("ab")
value1 = Program.to([1, 2])
key2 = Program.to("ac")
value2 = Program.to([4, 2])
changelist: List[Dict[str, str]] = [{"action": "insert", "key": key1.as_bin(), "value": value1.as_bin()}]
key1 = std_hash(b"a")
value1 = std_hash(Program.to([1, 2]))
key2 = std_hash(b"b")
value2 = std_hash(Program.to([1, 23]))
changelist: List[Dict[str, str]] = [{"action": "insert", "key": key1, "value": value1}]
res = await rpc_api.create_kv_store()
store_id = res["id"]
await rpc_api.update_kv_store({"id": store_id, "changelist": changelist})
res = await rpc_api.get_value({"id": store_id, "key": key1.as_bin()})
res = await rpc_api.get_value({"id": store_id, "key": key1})
assert res["data"] == value1
changelist = [{"action": "insert", "key": key2.as_bin(), "value": value2.as_bin()}]
changelist = [{"action": "insert", "key": key2, "value": value2}]
await rpc_api.update_kv_store({"id": store_id, "changelist": changelist})
res = await rpc_api.get_value({"id": store_id, "key": key2.as_bin()})
assert res["data"] == value1
res = await rpc_api.get_value({"id": store_id, "key": key2})
assert res["data"] == value2
changelist = [{"action": "delete", "key": key1.as_bin()}]
changelist = [{"action": "delete", "key": key1}]
await rpc_api.update_kv_store({"id": store_id, "changelist": changelist})
with pytest.raises(Exception):
val = await rpc_api.get_value({"id": store_id, "key": key1.as_bin()})
val = await rpc_api.get_value({"id": store_id, "key": key1})
await connection.close()
# @pytest.mark.skip("batches are currently broken")
@pytest.mark.asyncio
async def test_get_pairs(chia_root: ChiaRoot) -> None:
root = chia_root.path
@ -89,29 +89,29 @@ async def test_get_pairs(chia_root: ChiaRoot) -> None:
data_layer.data_store = await DataStore.create(data_layer.db_wrapper)
data_layer.initialized = True
rpc_api = DataLayerRpcApi(data_layer)
key1 = Program.to("a")
value1 = Program.to([1, 2])
changelist: List[Dict[str, str]] = [{"action": "insert", "key": key1.as_bin(), "value": value1.as_bin()}]
key2 = Program.to("b")
value2 = Program.to([3, 2])
changelist.append({"action": "insert", "key": key2.as_bin(), "value": value2.as_bin()})
key3 = Program.to("c")
value3 = Program.to([4, 5])
changelist.append({"action": "insert", "key": key3.as_bin(), "value": value3.as_bin()})
key4 = Program.to("d")
value4 = Program.to([6, 3])
changelist.append({"action": "insert", "key": key4.as_bin(), "value": value4.as_bin()})
key5 = Program.to("e")
value5 = Program.to([7, 1])
changelist.append({"action": "insert", "key": key5.as_bin(), "value": value5.as_bin()})
key1 = std_hash(b"a")
value1 = std_hash(Program.to([1, 2]))
changelist: List[Dict[str, str]] = [{"action": "insert", "key": key1, "value": value1}]
key2 = std_hash(b"b")
value2 = std_hash(Program.to([3, 2]))
changelist.append({"action": "insert", "key": key2, "value": value2})
key3 = std_hash(b"c")
value3 = std_hash(Program.to([4, 5]))
changelist.append({"action": "insert", "key": key3, "value": value3})
key4 = std_hash(b"d")
value4 = std_hash(Program.to([6, 3]))
changelist.append({"action": "insert", "key": key4, "value": value4})
key5 = std_hash(b"e")
value5 = std_hash(Program.to([7, 1]))
changelist.append({"action": "insert", "key": key5, "value": value5})
res = await rpc_api.create_kv_store()
tree_id = res["id"]
await rpc_api.update_kv_store({"id": tree_id, "changelist": changelist})
val = await rpc_api.get_value({"id": tree_id, "key": key1.as_bin()})
assert val["data"].value == value1
val = await rpc_api.get_value({"id": tree_id, "key": key1.as_bin()})
# changelist = [{"action": "delete", "key": key.as_bin()}]
# await rpc_api.update_kv_store({"id": tree_id, "changelist": changelist})
# with pytest.raises(Exception):
# val = await rpc_api.get_value({"id": tree_id, "key": key.as_bin()})
val = await rpc_api.get_value({"id": tree_id, "key": key1})
assert val["data"] == value1
val = await rpc_api.get_value({"id": tree_id, "key": key1})
changelist = [{"action": "delete", "key": key1}]
await rpc_api.update_kv_store({"id": tree_id, "changelist": changelist})
with pytest.raises(Exception):
val = await rpc_api.get_value({"id": tree_id, "key": key1})
await connection.close()