From 3ee87d1848e97461e4c2e2f0583e8c730af33810 Mon Sep 17 00:00:00 2001 From: Lorenzo Delgado Date: Wed, 11 Jan 2023 12:19:59 +0100 Subject: [PATCH] feat(archive): respond with error on more than 10 content topics query --- tests/v2/waku_archive/test_waku_archive.nim | 23 +++++++++++++++++++++ waku/v2/protocol/waku_archive/archive.nim | 2 ++ waku/v2/protocol/waku_archive/common.nim | 3 +++ 3 files changed, 28 insertions(+) diff --git a/tests/v2/waku_archive/test_waku_archive.nim b/tests/v2/waku_archive/test_waku_archive.nim index 3d805c6ce..de0520c36 100644 --- a/tests/v2/waku_archive/test_waku_archive.nim +++ b/tests/v2/waku_archive/test_waku_archive.nim @@ -214,6 +214,29 @@ procSuite "Waku Archive - find messages": response.messages.anyIt(it == msg1) response.messages.anyIt(it == msg3) + test "handle query with more than 10 content filters": + ## Setup + let + driver = newTestArchiveDriver() + archive = newTestWakuArchive(driver) + + let queryTopics = toSeq(1..15).mapIt(ContentTopic($it)) + + ## Given + let req = ArchiveQuery(contentTopics: queryTopics) + + ## When + let queryRes = archive.findMessages(req) + + ## Then + check: + queryRes.isErr() + + let error = queryRes.tryError() + check: + error.kind == ArchiveErrorKind.INVALID_QUERY + error.cause == "too many content topics" + test "handle query with pubsub topic filter": ## Setup let diff --git a/waku/v2/protocol/waku_archive/archive.nim b/waku/v2/protocol/waku_archive/archive.nim index 63d1ae459..1fc38e307 100644 --- a/waku/v2/protocol/waku_archive/archive.nim +++ b/waku/v2/protocol/waku_archive/archive.nim @@ -126,6 +126,8 @@ proc findMessages*(w: WakuArchive, query: ArchiveQuery): ArchiveResult {.gcsafe. else: min(query.pageSize, MaxPageSize) qAscendingOrder = query.ascending + if qContentTopics.len > 10: + return err(ArchiveError.invalidQuery("too many content topics")) let queryStartTime = getTime().toUnixFloat() diff --git a/waku/v2/protocol/waku_archive/common.nim b/waku/v2/protocol/waku_archive/common.nim index 5c7c0f366..d6c4f56cc 100644 --- a/waku/v2/protocol/waku_archive/common.nim +++ b/waku/v2/protocol/waku_archive/common.nim @@ -85,3 +85,6 @@ proc `$`*(err: ArchiveError): string = "INVALID_QUERY: " & err.cause of ArchiveErrorKind.UNKNOWN: "UNKNOWN" + +proc invalidQuery*(T: type ArchiveError, cause: string): T = + ArchiveError(kind: ArchiveErrorKind.INVALID_QUERY, cause: cause)