Skip to content

Commit aac69c9

Browse files
committed
fix: lack test file (#12)
Signed-off-by: closetool <c299999999@qq.com>
1 parent 7d45ea9 commit aac69c9

7 files changed

+506
-10
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@
1414
.glide/
1515

1616
.idea/
17-
*.iml
17+
*.iml
18+
caddy

.travis.yml

+7-5
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ go:
77
- 1.15
88

99
env:
10-
- GO111MODULE=on
10+
- GO111MODULE=on
1111

12-
before_install:
13-
- go get github.com/mattn/goveralls
1412

1513
install:
16-
- go get -t ./...
14+
- go get -t ./...
15+
- go get -u github.com/caddyserver/xcaddy/cmd/xcaddy
16+
17+
before_script:
18+
- xcaddy build
1719

1820
script:
19-
- $GOPATH/bin/goveralls -service=travis-ci
21+
- go test -v -coverprofile="cover-profile.out" -short -race ./...

Caddyfile Caddyfile.example

File renamed without changes.

authz.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ func (a *Authorizer) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
8383

8484
// parseCaddyfile unmarshals tokens from h into a new Authorizer.
8585
func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) {
86-
fmt.Println("parse")
8786
var m Authorizer
8887
err := m.UnmarshalCaddyfile(h.Dispenser)
8988
return m, err
@@ -92,7 +91,7 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error)
9291
// GetUserName gets the user name from the request.
9392
// Currently, only HTTP basic authentication is supported
9493
func (a *Authorizer) GetUserName(r *http.Request) string {
95-
username, _, _ := r.BasicAuth()
94+
username := r.Header.Get("Authorization")
9695
return username
9796
}
9897

authz_test.go

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package authz
2+
3+
import (
4+
"fmt"
5+
"net/http"
6+
"testing"
7+
8+
"github.com/caddyserver/caddy/v2/caddytest"
9+
)
10+
11+
var tester *caddytest.Tester
12+
13+
func testRequest(t *testing.T, user string, path string, method string, code int) {
14+
req, err := http.NewRequest(method, fmt.Sprintf("http://localhost:9080%s", path), nil)
15+
if err != nil {
16+
t.Fatalf("unable to create request %s", err)
17+
}
18+
req.Header.Set("Authorization", user)
19+
tester.AssertResponse(req, code, "")
20+
}
21+
22+
func initTester(t *testing.T) {
23+
tester = caddytest.NewTester(t)
24+
tester.InitServer(`
25+
{
26+
http_port 9080
27+
https_port 9443
28+
}
29+
localhost:9080 {
30+
route /* {
31+
authz "authz_model.conf" "authz_policy.csv"
32+
respond ""
33+
}
34+
}`, "caddyfile")
35+
}
36+
37+
func TestBasic(t *testing.T) {
38+
initTester(t)
39+
40+
testRequest(t, "alice", "/dataset1/resource1", "GET", 200)
41+
testRequest(t, "alice", "/dataset1/resource1", "POST", 200)
42+
testRequest(t, "alice", "/dataset1/resource2", "GET", 200)
43+
testRequest(t, "alice", "/dataset1/resource2", "POST", 403)
44+
}
45+
46+
func TestPathWildcard(t *testing.T) {
47+
initTester(t)
48+
49+
testRequest(t, "bob", "/dataset2/resource1", "GET", 200)
50+
testRequest(t, "bob", "/dataset2/resource1", "POST", 200)
51+
testRequest(t, "bob", "/dataset2/resource1", "DELETE", 200)
52+
testRequest(t, "bob", "/dataset2/resource2", "GET", 200)
53+
testRequest(t, "bob", "/dataset2/resource2", "POST", 403)
54+
testRequest(t, "bob", "/dataset2/resource2", "DELETE", 403)
55+
56+
testRequest(t, "bob", "/dataset2/folder1/item1", "GET", 403)
57+
testRequest(t, "bob", "/dataset2/folder1/item1", "POST", 200)
58+
testRequest(t, "bob", "/dataset2/folder1/item1", "DELETE", 403)
59+
testRequest(t, "bob", "/dataset2/folder1/item2", "GET", 403)
60+
testRequest(t, "bob", "/dataset2/folder1/item2", "POST", 200)
61+
testRequest(t, "bob", "/dataset2/folder1/item2", "DELETE", 403)
62+
}
63+
64+
func TestRBAC(t *testing.T) {
65+
initTester(t)
66+
67+
// cathy can access all /dataset1/* resources via all methods because it has the dataset1_admin role.
68+
testRequest(t, "cathy", "/dataset1/item", "GET", 200)
69+
testRequest(t, "cathy", "/dataset1/item", "POST", 200)
70+
testRequest(t, "cathy", "/dataset1/item", "DELETE", 200)
71+
testRequest(t, "cathy", "/dataset2/item", "GET", 403)
72+
testRequest(t, "cathy", "/dataset2/item", "POST", 403)
73+
testRequest(t, "cathy", "/dataset2/item", "DELETE", 403)
74+
}

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ module github.com/casbin/caddy-authz/v2
33
go 1.14
44

55
require (
6-
github.com/caddyserver/caddy/v2 v2.1.1
6+
github.com/caddyserver/caddy/v2 v2.2.1
77
github.com/casbin/casbin/v2 v2.8.6
88
)

0 commit comments

Comments
 (0)