101 lines
3.6 KiB
Python
101 lines
3.6 KiB
Python
import pytest
|
|
|
|
from ._helpers import make_event, make_heartbeat
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_agents_cursor(app_client, auth_headers):
|
|
for i in range(5):
|
|
await app_client.post(
|
|
"/api/v1/heartbeat", json=make_heartbeat(f"a-{i}"), headers=auth_headers
|
|
)
|
|
r1 = await app_client.get("/api/v1/agents?limit=2", headers=auth_headers)
|
|
p1 = r1.json()
|
|
assert len(p1["items"]) == 2
|
|
assert p1["next_cursor"]
|
|
|
|
r2 = await app_client.get(
|
|
f"/api/v1/agents?limit=2&cursor={p1['next_cursor']}", headers=auth_headers
|
|
)
|
|
p2 = r2.json()
|
|
assert len(p2["items"]) == 2
|
|
ids1 = {x["agent_id"] for x in p1["items"]}
|
|
ids2 = {x["agent_id"] for x in p2["items"]}
|
|
assert ids1.isdisjoint(ids2)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_checks_cursor(app_client, auth_headers):
|
|
await app_client.post("/api/v1/heartbeat", json=make_heartbeat(), headers=auth_headers)
|
|
for i in range(4):
|
|
ev = make_event(check_id=f"chk-{i}")
|
|
await app_client.post(
|
|
"/api/v1/events", json={"agent_id": "agent-1", "events": [ev]}, headers=auth_headers
|
|
)
|
|
r1 = await app_client.get("/api/v1/checks?limit=2", headers=auth_headers)
|
|
p1 = r1.json()
|
|
assert len(p1["items"]) == 2
|
|
assert p1["next_cursor"]
|
|
r2 = await app_client.get(
|
|
f"/api/v1/checks?limit=2&cursor={p1['next_cursor']}", headers=auth_headers
|
|
)
|
|
p2 = r2.json()
|
|
assert len(p2["items"]) == 2
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_checks_rejects_invalid_agent_id_query(app_client, auth_headers):
|
|
r = await app_client.get("/api/v1/checks?agent_id=bad%20id", headers=auth_headers)
|
|
assert r.status_code == 400
|
|
assert r.json()["error"]["code"] == "validation"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_events_query_rejects_invalid_id_queries(app_client, auth_headers):
|
|
r = await app_client.get("/api/v1/events/query?agent_id=bad%20id", headers=auth_headers)
|
|
assert r.status_code == 400
|
|
assert r.json()["error"]["code"] == "validation"
|
|
|
|
r = await app_client.get("/api/v1/events/query?check_id=bad%20id", headers=auth_headers)
|
|
assert r.status_code == 400
|
|
assert r.json()["error"]["code"] == "validation"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_incidents_cursor(app_client, auth_headers):
|
|
await app_client.post("/api/v1/heartbeat", json=make_heartbeat(), headers=auth_headers)
|
|
for i in range(3):
|
|
ev = make_event(check_id=f"chk-{i}", status="critical", exit_code=2)
|
|
await app_client.post(
|
|
"/api/v1/events", json={"agent_id": "agent-1", "events": [ev]}, headers=auth_headers
|
|
)
|
|
r1 = await app_client.get("/api/v1/incidents?limit=2", headers=auth_headers)
|
|
p1 = r1.json()
|
|
assert len(p1["items"]) == 2
|
|
assert p1["next_cursor"]
|
|
r2 = await app_client.get(
|
|
f"/api/v1/incidents?limit=2&cursor={p1['next_cursor']}", headers=auth_headers
|
|
)
|
|
p2 = r2.json()
|
|
assert len(p2["items"]) == 1
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_outbox_cursor(app_client, auth_headers):
|
|
await app_client.post("/api/v1/heartbeat", json=make_heartbeat(), headers=auth_headers)
|
|
for i in range(3):
|
|
ev = make_event(check_id=f"chk-{i}", status="critical", exit_code=2)
|
|
await app_client.post(
|
|
"/api/v1/events", json={"agent_id": "agent-1", "events": [ev]}, headers=auth_headers
|
|
)
|
|
r1 = await app_client.get("/api/v1/notifiers/outbox?limit=2", headers=auth_headers)
|
|
p1 = r1.json()
|
|
assert len(p1["items"]) == 2
|
|
assert p1["next_cursor"]
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_invalid_cursor_400(app_client, auth_headers):
|
|
r = await app_client.get("/api/v1/agents?cursor=$$$bad", headers=auth_headers)
|
|
assert r.status_code == 400
|