You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.2 KiB
50 lines
1.2 KiB
package request_id
|
|
|
|
import (
|
|
"net/http/httptest"
|
|
"regexp"
|
|
"testing"
|
|
)
|
|
|
|
var requestIDPattern = regexp.MustCompile(`^[0-9A-F]+$`)
|
|
|
|
func TestNewUsesUppercaseHexFormat(t *testing.T) {
|
|
id := New()
|
|
if !requestIDPattern.MatchString(id) {
|
|
t.Fatalf("expected uppercase hex request id, got %q", id)
|
|
}
|
|
if len(id) < 24 {
|
|
t.Fatalf("expected request id to be at least 24 characters, got %q (len=%d)", id, len(id))
|
|
}
|
|
}
|
|
|
|
func TestNewIsUnique(t *testing.T) {
|
|
a := New()
|
|
b := New()
|
|
if a == b {
|
|
t.Fatalf("expected unique request ids, got %q twice", a)
|
|
}
|
|
}
|
|
|
|
func TestEnsureIgnoresClientHeader(t *testing.T) {
|
|
req := httptest.NewRequest("GET", "/", nil)
|
|
req.Header.Set(AmzRequestIDHeader, "spoofed-id")
|
|
|
|
req, id := Ensure(req)
|
|
if id == "spoofed-id" {
|
|
t.Fatal("Ensure should not trust client-sent x-amz-request-id header")
|
|
}
|
|
if !requestIDPattern.MatchString(id) {
|
|
t.Fatalf("expected server-generated hex id, got %q", id)
|
|
}
|
|
}
|
|
|
|
func TestEnsureReusesContextID(t *testing.T) {
|
|
req := httptest.NewRequest("GET", "/", nil)
|
|
req = req.WithContext(Set(req.Context(), "ctx-id-123"))
|
|
|
|
req, id := Ensure(req)
|
|
if id != "ctx-id-123" {
|
|
t.Fatalf("expected context id ctx-id-123, got %q", id)
|
|
}
|
|
}
|