mirror of
https://github.com/Chia-Network/chia-blockchain.git
synced 2024-09-21 00:24:37 +03:00
handle data_store type changes
fix test input
This commit is contained in:
parent
8d49871bfa
commit
a0ef021ecd
@ -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)
|
||||
|
@ -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}
|
||||
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user