mirror of
https://github.com/wahyd4/loginsrv.git
synced 2026-08-09 04:46:29 +10:00
51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/dgrijalva/jwt-go"
|
|
. "github.com/stretchr/testify/assert"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func Test_BasicEndToEnd(t *testing.T) {
|
|
|
|
originalArgs := os.Args
|
|
|
|
secret := "theSecret"
|
|
os.Args = []string{"loginsrv", "-jwt-secret", secret, "-host=localhost", "-port=3000", "-backend=provider=simple,bob=secret"}
|
|
defer func() { os.Args = originalArgs }()
|
|
|
|
go main()
|
|
|
|
time.Sleep(time.Second)
|
|
|
|
// success
|
|
req, err := http.NewRequest("POST", "http://localhost:3000/login", strings.NewReader(`{"username": "bob", "password": "secret"}`))
|
|
NoError(t, err)
|
|
req.Header.Set("Content-Type", "application/json")
|
|
req.Header.Set("Accept", "application/jwt")
|
|
r, err := http.DefaultClient.Do(req)
|
|
NoError(t, err)
|
|
|
|
Equal(t, 200, r.StatusCode)
|
|
Equal(t, r.Header.Get("Content-Type"), "application/jwt")
|
|
|
|
b, err := ioutil.ReadAll(r.Body)
|
|
NoError(t, err)
|
|
|
|
token, err := jwt.Parse(string(b), func(*jwt.Token) (interface{}, error) {
|
|
return []byte(secret), nil
|
|
})
|
|
NoError(t, err)
|
|
|
|
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
|
|
Equal(t, "bob", claims["sub"])
|
|
} else {
|
|
t.Fail()
|
|
}
|
|
}
|