forked from mystiq/dex
ac73d3cdf2
In --no-db mode, load passwords from the users file instead of the connectors file. This allows us to remove the password infos field from the local connector and stop loading them during connector registration, a case that was causing panics when using a real database (see #286). Fixes #286 Closes #340
78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package server
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/coreos/dex/user"
|
|
"github.com/kylelemons/godebug/pretty"
|
|
)
|
|
|
|
func TestLoadUsers(t *testing.T) {
|
|
tests := []struct {
|
|
// The raw JSON file
|
|
raw string
|
|
expUsers []user.UserWithRemoteIdentities
|
|
// userid -> plaintext password
|
|
expPasswds map[string]string
|
|
}{
|
|
{
|
|
raw: `[
|
|
{
|
|
"id": "elroy-id",
|
|
"email": "elroy77@example.com",
|
|
"displayName": "Elroy Jonez",
|
|
"password": "bones",
|
|
"remoteIdentities": [
|
|
{
|
|
"connectorId": "local",
|
|
"id": "elroy-id"
|
|
}
|
|
]
|
|
}
|
|
]`,
|
|
expUsers: []user.UserWithRemoteIdentities{
|
|
{
|
|
User: user.User{
|
|
ID: "elroy-id",
|
|
Email: "elroy77@example.com",
|
|
DisplayName: "Elroy Jonez",
|
|
},
|
|
RemoteIdentities: []user.RemoteIdentity{
|
|
{
|
|
ConnectorID: "local",
|
|
ID: "elroy-id",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
expPasswds: map[string]string{
|
|
"elroy-id": "bones",
|
|
},
|
|
},
|
|
}
|
|
|
|
for i, tt := range tests {
|
|
users, pwInfos, err := loadUsersFromReader(strings.NewReader(tt.raw))
|
|
if err != nil {
|
|
t.Errorf("case %d: failed to load user: %v", i, err)
|
|
return
|
|
}
|
|
|
|
if diff := pretty.Compare(tt.expUsers, users); diff != "" {
|
|
t.Errorf("case: %d: wantUsers!=gotUsers: %s", i, diff)
|
|
}
|
|
|
|
// For each password info loaded, verify the password.
|
|
for _, pwInfo := range pwInfos {
|
|
expPW, ok := tt.expPasswds[pwInfo.UserID]
|
|
if !ok {
|
|
t.Errorf("no password entry for %s", pwInfo.UserID)
|
|
continue
|
|
}
|
|
if _, err := pwInfo.Authenticate(expPW); err != nil {
|
|
t.Errorf("case %d: user %s's password did not match", i, pwInfo.UserID)
|
|
}
|
|
}
|
|
}
|
|
}
|