mirror of
https://github.com/yusing/godoxy.git
synced 2025-06-01 09:32:35 +02:00

Some checks are pending
Docker Image CI (socket-proxy) / build (push) Waiting to run
* refactor: simplify io code and make utils module independent * fix(docker): agent and socket-proxy docker event flushing with modified reverse proxy handler * refactor: remove unused code * refactor: remove the use of logging module in most code * refactor: streamline domain mismatch check in certState function * tweak: use ecdsa p-256 for autocert * fix(tests): update health check tests for invalid host and add case for port in host * feat(acme): custom acme directory * refactor: code refactor and improved context and error handling * tweak: optimize memory usage under load * fix(oidc): restore old user matching behavior * docs: add ChatGPT assistant to README --------- Co-authored-by: yusing <yusing@6uo.me>
91 lines
2.4 KiB
Go
91 lines
2.4 KiB
Go
package middleware
|
|
|
|
import (
|
|
_ "embed"
|
|
"net"
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/yusing/go-proxy/internal/gperr"
|
|
"github.com/yusing/go-proxy/internal/serialization"
|
|
. "github.com/yusing/go-proxy/internal/utils/testing"
|
|
)
|
|
|
|
//go:embed test_data/cidr_whitelist_test.yml
|
|
var testCIDRWhitelistCompose []byte
|
|
var deny, accept *Middleware
|
|
|
|
func TestCIDRWhitelistValidation(t *testing.T) {
|
|
const testMessage = "test-message"
|
|
t.Run("valid", func(t *testing.T) {
|
|
_, err := CIDRWhiteList.New(OptionsRaw{
|
|
"allow": []string{"192.168.2.100/32"},
|
|
"message": testMessage,
|
|
})
|
|
ExpectNoError(t, err)
|
|
_, err = CIDRWhiteList.New(OptionsRaw{
|
|
"allow": []string{"192.168.2.100/32"},
|
|
"message": testMessage,
|
|
"status": 403,
|
|
})
|
|
ExpectNoError(t, err)
|
|
_, err = CIDRWhiteList.New(OptionsRaw{
|
|
"allow": []string{"192.168.2.100/32"},
|
|
"message": testMessage,
|
|
"status_code": 403,
|
|
})
|
|
ExpectNoError(t, err)
|
|
})
|
|
t.Run("missing allow", func(t *testing.T) {
|
|
_, err := CIDRWhiteList.New(OptionsRaw{
|
|
"message": testMessage,
|
|
})
|
|
ExpectError(t, serialization.ErrValidationError, err)
|
|
})
|
|
t.Run("invalid cidr", func(t *testing.T) {
|
|
_, err := CIDRWhiteList.New(OptionsRaw{
|
|
"allow": []string{"192.168.2.100/123"},
|
|
"message": testMessage,
|
|
})
|
|
ExpectErrorT[*net.ParseError](t, err)
|
|
})
|
|
t.Run("invalid status code", func(t *testing.T) {
|
|
_, err := CIDRWhiteList.New(OptionsRaw{
|
|
"allow": []string{"192.168.2.100/32"},
|
|
"status_code": 600,
|
|
"message": testMessage,
|
|
})
|
|
ExpectError(t, serialization.ErrValidationError, err)
|
|
})
|
|
}
|
|
|
|
func TestCIDRWhitelist(t *testing.T) {
|
|
errs := gperr.NewBuilder("")
|
|
mids := BuildMiddlewaresFromYAML("", testCIDRWhitelistCompose, errs)
|
|
ExpectNoError(t, errs.Error())
|
|
deny = mids["deny@file"]
|
|
accept = mids["accept@file"]
|
|
if deny == nil || accept == nil {
|
|
panic("bug occurred")
|
|
}
|
|
|
|
t.Run("deny", func(t *testing.T) {
|
|
t.Parallel()
|
|
for range 10 {
|
|
result, err := newMiddlewareTest(deny, nil)
|
|
ExpectNoError(t, err)
|
|
ExpectEqual(t, result.ResponseStatus, cidrWhitelistDefaults.StatusCode)
|
|
ExpectEqual(t, strings.TrimSpace(string(result.Data)), cidrWhitelistDefaults.Message)
|
|
}
|
|
})
|
|
|
|
t.Run("accept", func(t *testing.T) {
|
|
t.Parallel()
|
|
for range 10 {
|
|
result, err := newMiddlewareTest(accept, nil)
|
|
ExpectNoError(t, err)
|
|
ExpectEqual(t, result.ResponseStatus, http.StatusOK)
|
|
}
|
|
})
|
|
}
|