Files
wehub-resource-sync c889a57b6b
Test Suites / Build CI Environment (push) Has been cancelled
Test Suites / Basic Tests (push) Has been cancelled
Test Suites / End-to-End Tests (push) Has been cancelled
Test Suites / CLI Tests (push) Has been cancelled
Test Suites / Slow End-to-End Tests (push) Has been cancelled
Test Suites / Graph Database Tests (push) Has been cancelled
Test Suites / Vector DB Tests (push) Has been cancelled
Test Suites / Temporal Graph Test (push) Has been cancelled
Test Suites / Search Test on Different DBs (push) Has been cancelled
Test Suites / Example Tests (push) Has been cancelled
Test Suites / Notebook Tests (push) Has been cancelled
Test Suites / OS and Python Tests Ubuntu (push) Has been cancelled
Test Suites / OS and Python Tests Extended (push) Has been cancelled
Test Suites / LLM Test Suite (push) Has been cancelled
Test Suites / S3 File Storage Test (push) Has been cancelled
Test Suites / Run Integration Tests (push) Has been cancelled
Test Suites / MCP Tests (push) Has been cancelled
Test Suites / Docker Compose Test (push) Has been cancelled
Test Suites / Docker CI test (push) Has been cancelled
Test Suites / Relational DB Migration Tests (push) Has been cancelled
Test Suites / Distributed Cognee Test (push) Has been cancelled
Test Suites / DB Examples Tests (push) Has been cancelled
Test Suites / Test Completion Status (push) Has been cancelled
Test Suites / Claude Code Review (push) Has been cancelled
Test Suites / basic checks (push) Has been cancelled
build | Build and Push Cognee MCP Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
build | Build and Push Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.11) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.12) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (kuzu, kuzu) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (neo4j, neo4j) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Examples (push) Has been cancelled
Weighted Edges Tests / Code Quality for Weighted Edges (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:02:24 +08:00

121 lines
3.6 KiB
Python

import sys
from types import SimpleNamespace
import pytest
import distributed.tasks.queued_add_nodes as qan_module
import distributed.tasks.queued_add_edges as qae_module
from distributed.tasks.queued_add_edges import queued_add_edges
from distributed.tasks.queued_add_nodes import queued_add_nodes
class _FakePut:
def __init__(self):
self.items = []
async def aio(self, item):
self.items.append(item)
class _FakeGRPCError(Exception):
"""Stand-in for grpclib.GRPCError so the split path is testable without grpclib."""
class _RaisingPut:
"""Raises a (fake) grpc error on the first put only, records the rest.
Lets us exercise the oversized-batch split without a real Modal/grpc backend.
"""
def __init__(self):
self.items = []
self._raised = False
async def aio(self, item):
if not self._raised:
self._raised = True
raise _FakeGRPCError()
self.items.append(item)
def _install_fake_graph_queue(monkeypatch, put=None):
put = put or _FakePut()
fake_queue = SimpleNamespace(put=put)
monkeypatch.setitem(
sys.modules,
"distributed.queues",
SimpleNamespace(add_nodes_and_edges_queue=fake_queue),
)
return put.items
@pytest.mark.asyncio
async def test_queued_add_nodes_defaults_none_provenance(monkeypatch):
queued_items = _install_fake_graph_queue(monkeypatch)
await queued_add_nodes(["node-1"])
assert queued_items == [(["node-1"], [], None, None)]
@pytest.mark.asyncio
async def test_queued_add_edges_defaults_none_provenance(monkeypatch):
queued_items = _install_fake_graph_queue(monkeypatch)
await queued_add_edges([("source", "target", "REL", {})])
assert queued_items == [([], [("source", "target", "REL", {})], None, None)]
@pytest.mark.asyncio
async def test_queued_add_nodes_carries_provenance_in_payload(monkeypatch):
queued_items = _install_fake_graph_queue(monkeypatch)
await queued_add_nodes(["node-1"], source_ref_key="source-ref", pipeline_run_id="run-id")
assert queued_items == [(["node-1"], [], "source-ref", "run-id")]
@pytest.mark.asyncio
async def test_queued_add_edges_carries_provenance_in_payload(monkeypatch):
queued_items = _install_fake_graph_queue(monkeypatch)
await queued_add_edges(
[("source", "target", "REL", {})], source_ref_key="source-ref", pipeline_run_id="run-id"
)
assert queued_items == [([], [("source", "target", "REL", {})], "source-ref", "run-id")]
@pytest.mark.asyncio
async def test_queued_add_nodes_splits_and_preserves_provenance_on_grpc_error(monkeypatch):
queued_items = _install_fake_graph_queue(monkeypatch, put=_RaisingPut())
monkeypatch.setattr(
qan_module, "_is_grpc_error", lambda error: isinstance(error, _FakeGRPCError)
)
await queued_add_nodes(["a", "b", "c", "d"], source_ref_key="sr", pipeline_run_id="run")
# The full batch's put raised, so it splits into halves — each still tagged
# with the same provenance.
assert queued_items == [
(["a", "b"], [], "sr", "run"),
(["c", "d"], [], "sr", "run"),
]
@pytest.mark.asyncio
async def test_queued_add_edges_splits_and_preserves_provenance_on_grpc_error(monkeypatch):
queued_items = _install_fake_graph_queue(monkeypatch, put=_RaisingPut())
monkeypatch.setattr(
qae_module, "_is_grpc_error", lambda error: isinstance(error, _FakeGRPCError)
)
edges = [("a", "b", "R", {}), ("c", "d", "R", {})]
await queued_add_edges(edges, source_ref_key="sr", pipeline_run_id="run")
assert queued_items == [
([], [edges[0]], "sr", "run"),
([], [edges[1]], "sr", "run"),
]