forwardproxy/acl_test.go
sergeyfrolov 7791846e12
Add Access Control Lists (#31)
We settled on a powerful, but a bit complicated acl design.
This commit makes a couple of cosmetic improvements. It also removes
http.Transport, which was previously used to dial and write http
requests for insecure GET requests. Now we have to dial manually,
so we can check the access control list.
2018-06-26 10:53:24 -04:00

199 lines
6.1 KiB
Go

package forwardproxy
import (
"net/http"
"testing"
)
/*
test port blocking working
test blacklist allowed
test blacklist refused with correct status
*/
func TestWhitelistAllowing(t *testing.T) {
useTls := true
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy(caddyTestTarget.addr, resource, caddyForwardProxyWhiteListing.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if err = responseExpected(response, caddyTestTarget.contents[resource]); err != nil {
t.Fatal(err)
}
}
}
}
func TestWhitelistBlocking(t *testing.T) {
useTls := true
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy(caddyHTTPTestTarget.addr, resource, caddyForwardProxyWhiteListing.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy("google.com:6451", resource, caddyForwardProxyWhiteListing.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
}
func TestLocalhostDefaultForbidden(t *testing.T) {
useTls := true
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy("localhost:6451", resource, caddyForwardProxyNoBlacklistOverride.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy("127.0.0.1:808", resource, caddyForwardProxyNoBlacklistOverride.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy("[::1]:8080", resource, caddyForwardProxyNoBlacklistOverride.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
}
func TestLocalNetworksDefaultForbidden(t *testing.T) {
useTls := true
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy("10.0.0.0:80", resource, caddyForwardProxyNoBlacklistOverride.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy("127.222.34.1:443", resource, caddyForwardProxyNoBlacklistOverride.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy("172.16.0.1:8080", resource, caddyForwardProxyNoBlacklistOverride.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy("192.168.192.168:888", resource, caddyForwardProxyNoBlacklistOverride.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
}
func TestBlacklistBlocking(t *testing.T) {
useTls := true
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy(blacklistedDomain, resource, caddyForwardProxyBlackListing.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy(blacklistedIPv4, resource, caddyForwardProxyBlackListing.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy(blacklistedIPv6, resource, caddyForwardProxyBlackListing.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if response.StatusCode != http.StatusForbidden {
t.Fatal("Expected response \"403 Forbidden\", got:", response.StatusCode)
}
}
}
}
func TestBlacklistAllowing(t *testing.T) {
useTls := true
for _, httpTargetVer := range testHttpVersions {
for _, resource := range testResources {
response, err := getViaProxy(caddyTestTarget.addr, resource, caddyForwardProxyBlackListing.addr, httpTargetVer,
"", useTls)
if err != nil {
t.Fatal(err)
} else if err = responseExpected(response, caddyTestTarget.contents[resource]); err != nil {
t.Fatal(err)
}
}
}
}