mirror of
https://github.com/oneclickvirt/backtrace.git
synced 2026-07-23 11:20:13 +08:00
59 lines
1.9 KiB
Go
59 lines
1.9 KiB
Go
package bgptools
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestResolveOriginASNOfflineFixture(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if got := r.URL.Query().Get("resource"); got != "192.0.2.1" {
|
|
t.Errorf("resource = %q", got)
|
|
}
|
|
_, _ = w.Write([]byte(`{"status":"ok","data":{"asns":["AS64500",64501],"prefix":"192.0.2.0/24"}}`))
|
|
}))
|
|
defer server.Close()
|
|
|
|
asn, err := ResolveOriginASNWithConfig(context.Background(), "192.0.2.1", OriginASNConfig{
|
|
Client: server.Client(), BaseURL: server.URL, Timeout: time.Second,
|
|
})
|
|
if err != nil || asn != "64500" {
|
|
t.Fatalf("ResolveOriginASNWithConfig() = %q, %v", asn, err)
|
|
}
|
|
}
|
|
|
|
func TestResolveOriginASNRejectsMissingAndDriftedData(t *testing.T) {
|
|
for _, payload := range []string{
|
|
`{"status":"ok","data":{"asns":[]}}`,
|
|
`{"status":"ok","data":{"asns":"64500"}}`,
|
|
`{"status":"ok","data":{"asns":["not-an-asn"]}}`,
|
|
`{"status":"error","data":{"asns":[64500]}}`,
|
|
} {
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
|
|
_, _ = w.Write([]byte(payload))
|
|
}))
|
|
_, err := ResolveOriginASNWithConfig(context.Background(), "2001:db8::1", OriginASNConfig{
|
|
Client: server.Client(), BaseURL: server.URL, Timeout: time.Second,
|
|
})
|
|
server.Close()
|
|
if err == nil {
|
|
t.Fatalf("payload %s unexpectedly succeeded", payload)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestResolveOriginASNReportsRateLimit(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
|
|
w.WriteHeader(http.StatusTooManyRequests)
|
|
}))
|
|
defer server.Close()
|
|
_, err := ResolveOriginASNWithConfig(context.Background(), "192.0.2.1", OriginASNConfig{Client: server.Client(), BaseURL: server.URL})
|
|
if !errors.Is(err, ErrOriginASNRateLimited) {
|
|
t.Fatalf("rate limit error = %v", err)
|
|
}
|
|
}
|