mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 04:42:33 +02:00

* feat: idle sleep for proxmox LXCs * refactor: replace deprecated docker api types * chore(api): remove debug task list endpoint * refactor: move servemux to gphttp/servemux; favicon.go to v1/favicon * refactor: introduce Pool interface, move agent_pool to agent module * refactor: simplify api code * feat: introduce debug api * refactor: remove net.URL and net.CIDR types, improved unmarshal handling * chore: update Makefile for debug build tag, update README * chore: add gperr.Unwrap method * feat: relative time and duration formatting * chore: add ROOT_DIR environment variable, refactor * migration: move homepage override and icon cache to $BASE_DIR/data, add migration code * fix: nil dereference on marshalling service health * fix: wait for route deletion * chore: enhance tasks debuggability * feat: stdout access logger and MultiWriter * fix(agent): remove agent properly on verify error * fix(metrics): disk exclusion logic and added corresponding tests * chore: update schema and prettify, fix package.json and Makefile * fix: I/O buffer not being shrunk before putting back to pool * feat: enhanced error handling module * chore: deps upgrade * feat: better value formatting and handling --------- Co-authored-by: yusing <yusing@6uo.me>
76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
package middleware
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/yusing/go-proxy/internal/net/gphttp/httpheaders"
|
|
. "github.com/yusing/go-proxy/internal/utils/testing"
|
|
)
|
|
|
|
func TestSetRealIPOpts(t *testing.T) {
|
|
opts := OptionsRaw{
|
|
"header": httpheaders.HeaderXRealIP,
|
|
"from": []string{
|
|
"127.0.0.0/8",
|
|
"192.168.0.0/16",
|
|
"172.16.0.0/12",
|
|
},
|
|
"recursive": true,
|
|
}
|
|
optExpected := &RealIPOpts{
|
|
Header: httpheaders.HeaderXRealIP,
|
|
From: []*net.IPNet{
|
|
{
|
|
IP: net.ParseIP("127.0.0.0"),
|
|
Mask: net.IPv4Mask(255, 0, 0, 0),
|
|
},
|
|
{
|
|
IP: net.ParseIP("192.168.0.0"),
|
|
Mask: net.IPv4Mask(255, 255, 0, 0),
|
|
},
|
|
{
|
|
IP: net.ParseIP("172.16.0.0"),
|
|
Mask: net.IPv4Mask(255, 240, 0, 0),
|
|
},
|
|
},
|
|
Recursive: true,
|
|
}
|
|
|
|
ri, err := RealIP.New(opts)
|
|
ExpectNoError(t, err)
|
|
ExpectEqual(t, ri.impl.(*realIP).Header, optExpected.Header)
|
|
ExpectEqual(t, ri.impl.(*realIP).Recursive, optExpected.Recursive)
|
|
for i, CIDR := range ri.impl.(*realIP).From {
|
|
ExpectEqual(t, CIDR.String(), optExpected.From[i].String())
|
|
}
|
|
}
|
|
|
|
func TestSetRealIP(t *testing.T) {
|
|
const (
|
|
testHeader = httpheaders.HeaderXRealIP
|
|
testRealIP = "192.168.1.1"
|
|
)
|
|
opts := OptionsRaw{
|
|
"header": testHeader,
|
|
"from": []string{"0.0.0.0/0"},
|
|
}
|
|
optsMr := OptionsRaw{
|
|
"set_headers": map[string]string{testHeader: testRealIP},
|
|
}
|
|
realip, err := RealIP.New(opts)
|
|
ExpectNoError(t, err)
|
|
|
|
mr, err := ModifyRequest.New(optsMr)
|
|
ExpectNoError(t, err)
|
|
|
|
mid := NewMiddlewareChain("test", []*Middleware{mr, realip})
|
|
|
|
result, err := newMiddlewareTest(mid, nil)
|
|
ExpectNoError(t, err)
|
|
t.Log(traces)
|
|
ExpectEqual(t, result.ResponseStatus, http.StatusOK)
|
|
ExpectEqual(t, strings.Split(result.RemoteAddr, ":")[0], testRealIP)
|
|
}
|