From 7141c0a055f2d6f92cb3bf8ff515d5a53e8ee15f Mon Sep 17 00:00:00 2001 From: "Enot (ded) Skelly" Date: Mon, 15 Jun 2026 14:23:39 -0700 Subject: [PATCH] tests(ws): add limiter tests --- internal/ws/limiter_test.go | 61 +++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 internal/ws/limiter_test.go diff --git a/internal/ws/limiter_test.go b/internal/ws/limiter_test.go new file mode 100644 index 0000000..9d527bf --- /dev/null +++ b/internal/ws/limiter_test.go @@ -0,0 +1,61 @@ +// Copyright 2026 Beacon Contributors +// SPDX-License-Identifier: AGPL-3.0-or-later + +package ws + +import ( + "testing" +) + +func TestIPLimiter_AcquireWithinLimit(t *testing.T) { + l := newIPLimiter(3) + if !l.acquire("1.2.3.4") { + t.Error("expected acquire to succeed within limit") + } + if !l.acquire("1.2.3.4") { + t.Error("expected second acquire to succeed within limit") + } + if !l.acquire("1.2.3.4") { + t.Error("expected third acquire to succeed at limit") + } +} + +func TestIPLimiter_AcquireAtLimit_Fails(t *testing.T) { + l := newIPLimiter(2) + l.acquire("1.2.3.4") + l.acquire("1.2.3.4") + if l.acquire("1.2.3.4") { + t.Error("expected acquire to fail at limit") + } +} + +func TestIPLimiter_Release_AllowsNewConnection(t *testing.T) { + l := newIPLimiter(1) + l.acquire("1.2.3.4") + l.release("1.2.3.4") + if !l.acquire("1.2.3.4") { + t.Error("expected acquire to succeed after release") + } +} + +func TestIPLimiter_Release_CleansUpMap(t *testing.T) { + l := newIPLimiter(2) + l.acquire("1.2.3.4") + l.release("1.2.3.4") + if _, ok := l.count["1.2.3.4"]; ok { + t.Error("expected map entry to be deleted after count reaches zero") + } +} + +func TestIPLimiter_DifferentIPs_Independent(t *testing.T) { + l := newIPLimiter(1) + if !l.acquire("1.2.3.4") { + t.Error("expected first IP to acquire") + } + if !l.acquire("5.6.7.8") { + t.Error("expected second IP to acquire independently") + } + if l.acquire("1.2.3.4") { + t.Error("expected first IP to be at limit") + } +}