summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/test_rate_limit.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/tools/test_rate_limit.go b/tools/test_rate_limit.go
new file mode 100644
index 0000000..7c25d20
--- /dev/null
+++ b/tools/test_rate_limit.go
@@ -0,0 +1,60 @@
+package main
+
+import (
+ "crypto/tls"
+ "fmt"
+ "log"
+ "net"
+ "time"
+)
+
+const addr = "localhost:7223"
+
+var tlsConfig = &tls.Config{
+ InsecureSkipVerify: true, // skip cert verification
+}
+
+func connect(n int, label string) {
+ fmt.Println("----", label)
+ conns := make([]net.Conn, 0, n)
+ for i := 0; i < n; i++ {
+ conn, err := tls.Dial("tcp", addr, tlsConfig)
+ if err != nil {
+ log.Printf("connect %d failed: %v", i, err)
+ continue
+ }
+ conns = append(conns, conn)
+ }
+ time.Sleep(300 * time.Millisecond)
+ for _, c := range conns {
+ c.Close()
+ }
+ time.Sleep(200 * time.Millisecond)
+}
+
+func wait() {
+ time.Sleep(1100 * time.Millisecond) // ensure we roll over fixed 1s window
+}
+
+func main() {
+ // 1. Single connection, then disconnect, should not rate limit
+ connect(1, "single connection")
+ wait()
+
+ // 2. Two connections (under threshold), should show info
+ connect(2, "two connections")
+ wait()
+ connect(2, "two connections again")
+ wait()
+
+ // 3. Hit 5 times to trigger suspicious threshold once
+ connect(5, "5 suspicious connections")
+ wait()
+ connect(5, "5 more suspicious")
+ wait()
+
+ // 4. Hit 15 times to trigger malicious
+ connect(15, "15 malicious connections")
+ wait()
+ connect(15, "15 more malicious connections")
+}