Publish Docker image (Multi-arch) / Build & push (amd64) (push) Failing after 9m20s
Release (Linux, macOS, Windows) / Linux Release (push) Failing after 55m7s
Publish Docker image (Multi-arch) / Build & push (arm64) (push) Canceled after 0s
Release (Linux, macOS, Windows) / macOS Release (push) Canceled after 0s
Release (Linux, macOS, Windows) / Windows Release (push) Canceled after 0s
Publish Docker image (Multi-arch) / Create multi-arch manifests (push) Canceled after 0s
35 lines
1.2 KiB
Go
35 lines
1.2 KiB
Go
package middleware
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestModelRedisRateLimitUsesUTCRegardlessOfLocalTimezone(t *testing.T) {
|
|
redisServer, redisClient := useRateLimitMiniRedis(t)
|
|
previousLocation := time.Local
|
|
time.Local = time.FixedZone("test-utc-plus-eight", 8*60*60)
|
|
t.Cleanup(func() { time.Local = previousLocation })
|
|
|
|
ctx := context.Background()
|
|
recordKey := "rateLimit:model-utc-record"
|
|
recordRedisRequest(ctx, redisClient, recordKey, 2)
|
|
recorded, err := redisClient.LIndex(ctx, recordKey, 0).Result()
|
|
require.NoError(t, err)
|
|
recordedAt, err := time.Parse(modelRateLimitTimeFormat, recorded)
|
|
require.NoError(t, err)
|
|
assert.WithinDuration(t, time.Now().UTC(), recordedAt, 2*time.Second)
|
|
|
|
checkKey := "rateLimit:model-utc-check"
|
|
withinWindow := time.Now().UTC().Add(-30 * time.Second).Format(modelRateLimitTimeFormat)
|
|
_, err = redisServer.Push(checkKey, withinWindow, withinWindow)
|
|
require.NoError(t, err)
|
|
allowed, err := checkRedisRateLimit(ctx, redisClient, checkKey, 2, 60)
|
|
require.NoError(t, err)
|
|
assert.False(t, allowed, "an existing UTC timestamp inside the window must remain limited on a non-UTC host")
|
|
}
|