mirror of
https://github.com/logos-messaging/nim-chat-sdk.git
synced 2026-01-04 07:03:09 +00:00
fix: added test for getMessageStatus
This commit is contained in:
parent
b21ff2d1cd
commit
f71cf7b701
@ -14,6 +14,6 @@ CREATE TABLE IF NOT EXISTS ratelimit_queues (
|
|||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS ratelimit_message_status (
|
CREATE TABLE IF NOT EXISTS ratelimit_message_status (
|
||||||
msg_id TEXT PRIMARY KEY,
|
msg_id TEXT PRIMARY KEY,
|
||||||
"status" INTEGER NOT NULL,
|
"status" TEXT NOT NULL,
|
||||||
updated_at INTEGER NOT NULL
|
updated_at INTEGER NOT NULL
|
||||||
);
|
);
|
||||||
@ -178,7 +178,7 @@ proc sendOrEnqueue*[T](
|
|||||||
of Priority.Normal:
|
of Priority.Normal:
|
||||||
return await manager.pushToQueueUpdatingStatus(QueueType.Normal, msgs)
|
return await manager.pushToQueueUpdatingStatus(QueueType.Normal, msgs)
|
||||||
of Priority.Optional:
|
of Priority.Optional:
|
||||||
return MessageStatus.Dropped
|
return await manager.updateStatuses(msgs, MessageStatus.Dropped)
|
||||||
of CapacityState.None:
|
of CapacityState.None:
|
||||||
case priority
|
case priority
|
||||||
of Priority.Critical:
|
of Priority.Critical:
|
||||||
|
|||||||
@ -11,7 +11,7 @@ type
|
|||||||
normalLength: int
|
normalLength: int
|
||||||
nextBatchId: int
|
nextBatchId: int
|
||||||
|
|
||||||
BucketState* {.pure} = object
|
BucketState* {.pure.} = object
|
||||||
budget*: int
|
budget*: int
|
||||||
budgetCap*: int
|
budgetCap*: int
|
||||||
lastTimeFull*: Moment
|
lastTimeFull*: Moment
|
||||||
@ -31,7 +31,7 @@ const BUCKET_STATE_KEY = "rate_limit_bucket_state"
|
|||||||
|
|
||||||
## TODO find a way to make these procs async
|
## TODO find a way to make these procs async
|
||||||
|
|
||||||
proc new*[T](M: type[RateLimitStore[T]], db: DbConn): Future[M] {.async} =
|
proc new*[T](M: type[RateLimitStore[T]], db: DbConn): Future[M] {.async.} =
|
||||||
result = M(db: db, criticalLength: 0, normalLength: 0, nextBatchId: 1)
|
result = M(db: db, criticalLength: 0, normalLength: 0, nextBatchId: 1)
|
||||||
|
|
||||||
# Initialize cached lengths from database
|
# Initialize cached lengths from database
|
||||||
@ -227,7 +227,7 @@ proc getMessageStatus*[T](
|
|||||||
if statusStr == "":
|
if statusStr == "":
|
||||||
return none(MessageStatus)
|
return none(MessageStatus)
|
||||||
|
|
||||||
return some(MessageStatus.parse(statusStr))
|
return some(parseEnum[MessageStatus](statusStr))
|
||||||
|
|
||||||
proc getQueueLength*[T](store: RateLimitStore[T], queueType: QueueType): int =
|
proc getQueueLength*[T](store: RateLimitStore[T], queueType: QueueType): int =
|
||||||
case queueType
|
case queueType
|
||||||
|
|||||||
@ -50,6 +50,12 @@ suite "Queue RateLimitManager":
|
|||||||
sentMessages[0].msgId == "msg1"
|
sentMessages[0].msgId == "msg1"
|
||||||
sentMessages[0].msg == "Hello World"
|
sentMessages[0].msg == "Hello World"
|
||||||
|
|
||||||
|
# Check message status
|
||||||
|
let status = await manager.getMessageStatus("msg1")
|
||||||
|
check:
|
||||||
|
status.isSome()
|
||||||
|
status.get() == MessageStatus.PassedToSender
|
||||||
|
|
||||||
asyncTest "sendOrEnqueue - multiple messages":
|
asyncTest "sendOrEnqueue - multiple messages":
|
||||||
## Given
|
## Given
|
||||||
let store = await RateLimitStore[string].new(db)
|
let store = await RateLimitStore[string].new(db)
|
||||||
@ -71,6 +77,15 @@ suite "Queue RateLimitManager":
|
|||||||
sentMessages[1].msgId == "msg2"
|
sentMessages[1].msgId == "msg2"
|
||||||
sentMessages[1].msg == "Second"
|
sentMessages[1].msg == "Second"
|
||||||
|
|
||||||
|
# Check message statuses
|
||||||
|
let status1 = await manager.getMessageStatus("msg1")
|
||||||
|
let status2 = await manager.getMessageStatus("msg2")
|
||||||
|
check:
|
||||||
|
status1.isSome()
|
||||||
|
status1.get() == MessageStatus.PassedToSender
|
||||||
|
status2.isSome()
|
||||||
|
status2.get() == MessageStatus.PassedToSender
|
||||||
|
|
||||||
asyncTest "start and stop - drop large batch":
|
asyncTest "start and stop - drop large batch":
|
||||||
## Given
|
## Given
|
||||||
let store = await RateLimitStore[string].new(db)
|
let store = await RateLimitStore[string].new(db)
|
||||||
@ -132,6 +147,18 @@ suite "Queue RateLimitManager":
|
|||||||
r10 == PassedToSender
|
r10 == PassedToSender
|
||||||
r11 == Enqueued
|
r11 == Enqueued
|
||||||
|
|
||||||
|
# Check message statuses
|
||||||
|
let status1 = await manager.getMessageStatus("msg1")
|
||||||
|
let status10 = await manager.getMessageStatus("msg10")
|
||||||
|
let status11 = await manager.getMessageStatus("msg11")
|
||||||
|
check:
|
||||||
|
status1.isSome()
|
||||||
|
status1.get() == MessageStatus.PassedToSender
|
||||||
|
status10.isSome()
|
||||||
|
status10.get() == MessageStatus.PassedToSender
|
||||||
|
status11.isSome()
|
||||||
|
status11.get() == MessageStatus.Enqueued
|
||||||
|
|
||||||
asyncTest "enqueue - enqueue normal on 70% capacity":
|
asyncTest "enqueue - enqueue normal on 70% capacity":
|
||||||
## Given
|
## Given
|
||||||
let store = await RateLimitStore[string].new(db)
|
let store = await RateLimitStore[string].new(db)
|
||||||
@ -177,6 +204,21 @@ suite "Queue RateLimitManager":
|
|||||||
r11 == PassedToSender
|
r11 == PassedToSender
|
||||||
r12 == Dropped
|
r12 == Dropped
|
||||||
|
|
||||||
|
# Check message statuses for different outcomes
|
||||||
|
let statusSent = await manager.getMessageStatus("msg1")
|
||||||
|
let statusEnqueued = await manager.getMessageStatus("msg8")
|
||||||
|
let statusCritical = await manager.getMessageStatus("msg11")
|
||||||
|
let statusDropped = await manager.getMessageStatus("msg12")
|
||||||
|
check:
|
||||||
|
statusSent.isSome()
|
||||||
|
statusSent.get() == MessageStatus.PassedToSender
|
||||||
|
statusEnqueued.isSome()
|
||||||
|
statusEnqueued.get() == MessageStatus.Enqueued
|
||||||
|
statusCritical.isSome()
|
||||||
|
statusCritical.get() == MessageStatus.PassedToSender
|
||||||
|
statusDropped.isSome()
|
||||||
|
statusDropped.get() == MessageStatus.Dropped
|
||||||
|
|
||||||
asyncTest "enqueue - process queued messages":
|
asyncTest "enqueue - process queued messages":
|
||||||
## Given
|
## Given
|
||||||
let store = await RateLimitStore[string].new(db)
|
let store = await RateLimitStore[string].new(db)
|
||||||
@ -256,3 +298,15 @@ suite "Queue RateLimitManager":
|
|||||||
sentMessages[11].msgId == "8"
|
sentMessages[11].msgId == "8"
|
||||||
sentMessages[12].msgId == "9"
|
sentMessages[12].msgId == "9"
|
||||||
sentMessages[13].msgId == "10"
|
sentMessages[13].msgId == "10"
|
||||||
|
|
||||||
|
# Check message statuses after queue processing
|
||||||
|
let statusProcessed8 = await manager.getMessageStatus("8")
|
||||||
|
let statusProcessed15 = await manager.getMessageStatus("15")
|
||||||
|
let statusDropped12 = await manager.getMessageStatus("12")
|
||||||
|
check:
|
||||||
|
statusProcessed8.isSome()
|
||||||
|
statusProcessed8.get() == MessageStatus.PassedToSender
|
||||||
|
statusProcessed15.isSome()
|
||||||
|
statusProcessed15.get() == MessageStatus.PassedToSender
|
||||||
|
statusDropped12.isSome()
|
||||||
|
statusDropped12.get() == MessageStatus.Dropped
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user