Files
wehub-resource-sync 5357c39144
Fuzzer / Run Fuzzer (push) Has been cancelled
Race tests / Go race tests (ubuntu-22.04) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:01:40 +08:00

109 lines
2.4 KiB
Go

// Copyright 2025 Dolthub, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package http
import (
nethttp "net/http"
"testing"
)
func TestIsLocalRequest(t *testing.T) {
tests := []struct {
name string
remoteAddr string
headers map[string]string
wantLocal bool
wantErr bool
}{
{
name: "ipv4 loopback",
remoteAddr: "127.0.0.1:12345",
headers: nil,
wantLocal: true,
},
{
name: "ipv6 loopback",
remoteAddr: "[::1]:54321",
headers: nil,
wantLocal: true,
},
{
name: "unix socket path",
remoteAddr: "/var/run/socket",
headers: nil,
wantLocal: true,
},
{
name: "abstract unix socket",
remoteAddr: "@abstractsocket",
headers: nil,
wantLocal: true,
},
{
name: "non-local ip",
remoteAddr: "192.168.1.10:8080",
headers: nil,
wantLocal: false,
},
{
name: "forwarded header present",
remoteAddr: "127.0.0.1:1111",
headers: map[string]string{
"X-Forwarded-For": "203.0.113.1",
},
wantLocal: false,
},
{
name: "malformed remote addr (no IP)",
remoteAddr: "not-an-ip",
headers: nil,
wantErr: true,
},
{
name: "hostname remote addr",
remoteAddr: "localhost:9999",
headers: nil,
wantErr: true,
},
}
for _, tc := range tests {
tc := tc
t.Run(tc.name, func(t *testing.T) {
req := &nethttp.Request{
Header: make(nethttp.Header),
RemoteAddr: tc.remoteAddr,
}
for k, v := range tc.headers {
req.Header.Set(k, v)
}
got, err := IsLocalRequest(req)
if tc.wantErr {
if err == nil {
t.Fatalf("expected error but got nil (got=%v)", got)
}
return
}
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if got != tc.wantLocal {
t.Fatalf("unexpected result: got=%v want=%v", got, tc.wantLocal)
}
})
}
}