Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: backend e2e test for route with jwt (no algorithm) #1195

Merged
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,15 @@
package e2e

import (
"io/ioutil"
"net/http"
"testing"
"time"

"github.com/stretchr/testify/assert"
)

func TestRoute_With_Auth_Plugin(t *testing.T) {
func TestRoute_With_Jwt_Plugin(t *testing.T) {
tests := []HttpTestCase{
{
Desc: "make sure the route is not created ",
Expand Down Expand Up @@ -173,4 +174,115 @@ func TestRoute_With_Auth_Plugin(t *testing.T) {
testCaseCheck(tc, t)
}

tests = []HttpTestCase{
{
Desc: "create consumer with jwt (no algorithm)",
Object: ManagerApiExpect(t),
Path: "/apisix/admin/consumers",
Method: http.MethodPut,
Body: `{
"username":"consumer_1",
"desc": "test description",
"plugins":{
"jwt-auth":{
"exp":86400,
"key":"user-key",
"secret":"my-secret-key"
}
}
}`,
Headers: map[string]string{"Authorization": token},
ExpectStatus: http.StatusOK,
ExpectBody: "\"code\":0",
},
{
Desc: "get the consumer",
Object: ManagerApiExpect(t),
Path: "/apisix/admin/consumers/consumer_1",
Method: http.MethodGet,
Headers: map[string]string{"Authorization": token},
ExpectStatus: http.StatusOK,
ExpectBody: "\"username\":\"consumer_1\"",
Sleep: sleepTime,
},
{
Desc: "create the route",
Object: ManagerApiExpect(t),
Method: http.MethodPut,
Path: "/apisix/admin/routes/r1",
Body: `{
"uri": "/hello",
"plugins": {
"jwt-auth": {}
},
"upstream": {
"type": "roundrobin",
"nodes": [{
"host": "172.16.238.20",
"port": 1980,
"weight": 1
}]
}
}`,
Headers: map[string]string{"Authorization": token},
ExpectStatus: http.StatusOK,
},
}

for _, tc := range tests {
testCaseCheck(tc, t)
}

// get the token of jwt
basepath := "http://127.0.0.1:9080"
request, _ := http.NewRequest("GET", basepath+"/apisix/plugin/jwt/sign?key=user-key", nil)
request.Header.Add("Authorization", token)
resp, err := http.DefaultClient.Do(request)
assert.Nil(t, err)
defer resp.Body.Close()
assert.Equal(t, 200, resp.StatusCode)
jwttoken, _ := ioutil.ReadAll(resp.Body)

tests = []HttpTestCase{
{
Desc: "hit route with jwt token",
Object: APISIXExpect(t),
Method: http.MethodGet,
Path: "/hello",
Headers: map[string]string{"Authorization": string(jwttoken)},
ExpectStatus: http.StatusOK,
ExpectBody: "hello world",
Sleep: sleepTime,
},
{
Desc: "delete consumer",
Object: ManagerApiExpect(t),
Path: "/apisix/admin/consumers/consumer_1",
Method: http.MethodDelete,
Headers: map[string]string{"Authorization": token},
ExpectStatus: http.StatusOK,
ExpectBody: "\"code\":0",
},
{
Desc: "after delete consumer verify it again",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we could verify it by hitting the route too.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nic-chen

image

Does this need to be updated?

Copy link
Member

@nic-chen nic-chen Jan 13, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why marked this conversation as resolved? If you think it's unnecessary, just leave your comment. @idbeta

Copy link
Contributor Author

@idbeta idbeta Jan 13, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's unnecessary. The same thing has been done here

Desc: "verify route with the jwt token from just deleted consumer",
Object: APISIXExpect(t),
Method: http.MethodGet,
Path: "/hello",
Headers: map[string]string{"Authorization": jwtToken},
ExpectStatus: http.StatusUnauthorized,
ExpectBody: `{"message":"Missing related consumer"}`,
Sleep: sleepTime,

I think it is enough to judge whether the consumer deletion is successful.

Object: ManagerApiExpect(t),
Method: http.MethodGet,
Path: "/apisix/admin/consumers/jack",
Headers: map[string]string{"Authorization": token},
ExpectStatus: http.StatusNotFound,
Sleep: sleepTime,
},
{
Desc: "delete the route",
Object: ManagerApiExpect(t),
Method: http.MethodDelete,
Path: "/apisix/admin/routes/r1",
Headers: map[string]string{"Authorization": token},
ExpectStatus: http.StatusOK,
},
}

for _, tc := range tests {
testCaseCheck(tc, t)
}
}