dex/admin/api_test.go
Eric Chiang 69dcfec1be admin: add build ignore tag to tests that don't compile
These tests aren't included in the top level test script so have
unintentionally been ignored and currently don't compile. Until
this is fixed (see #257) add a build tag so tools ignore them.
2016-01-11 11:58:17 -08:00

200 lines
3.7 KiB
Go

// NOTE: These tests are begin updated so they compile (see #257). Until then ignore.
// +build ignore
package admin
import (
"net/http"
"testing"
"github.com/coreos/dex/schema/adminschema"
"github.com/coreos/dex/user"
"github.com/kylelemons/godebug/pretty"
)
type testFixtures struct {
ur user.UserRepo
pwr user.PasswordInfoRepo
adAPI *AdminAPI
}
func makeTestFixtures() *testFixtures {
f := &testFixtures{}
f.ur = user.NewUserRepoFromUsers([]user.UserWithRemoteIdentities{
{
User: user.User{
ID: "ID-1",
Name: "Name-1",
},
},
})
f.pwr = user.NewPasswordInfoRepoFromPasswordInfos([]user.PasswordInfo{
{
UserID: "ID-1",
Password: []byte("hi."),
},
})
f.adAPI = NewAdminAPI(f.ur, f.pwr)
return f
}
func TestGetAdmin(t *testing.T) {
tests := []struct {
id string
errCode int
}{
{
id: "ID-1",
errCode: -1,
},
{
id: "ID-2",
errCode: http.StatusNotFound,
},
}
for i, tt := range tests {
f := makeTestFixtures()
admn, err := f.adAPI.GetAdmin(tt.id)
if tt.errCode != -1 {
if err == nil {
t.Errorf("case %d: err was nil", i)
continue
}
aErr, ok := err.(Error)
if !ok {
t.Errorf("case %d: not an admin.Error: %q", i, err)
continue
}
if aErr.Code != tt.errCode {
t.Errorf("case %d: want=%d, got=%d", i, tt.errCode, aErr.Code)
continue
}
} else {
if err != nil {
t.Errorf("case %d: err != nil: %q", i, err)
}
continue
if admn.Id != "ID-1" {
t.Errorf("case %d: want=%q, got=%q", i, tt.id, admn.Id)
}
}
}
}
func TestCreateAdmin(t *testing.T) {
tests := []struct {
admn adminschema.Admin
errCode int
}{
{
admn: adminschema.Admin{
Name: "foo",
PasswordHash: user.Password([]byte("foopass")).EncodeBase64(),
},
errCode: -1,
},
{
// duplicate Name
admn: adminschema.Admin{
Name: "Name-1",
PasswordHash: user.Password([]byte("foopass")).EncodeBase64(),
},
errCode: http.StatusBadRequest,
},
{
// missing Name
admn: adminschema.Admin{
PasswordHash: user.Password([]byte("foopass")).EncodeBase64(),
},
errCode: http.StatusBadRequest,
},
}
for i, tt := range tests {
f := makeTestFixtures()
id, err := f.adAPI.CreateAdmin(tt.admn)
if tt.errCode != -1 {
if err == nil {
t.Errorf("case %d: err was nil", i)
continue
}
aErr, ok := err.(Error)
if !ok {
t.Errorf("case %d: not a admin.Error: %#v", i, err)
continue
}
if aErr.Code != tt.errCode {
t.Errorf("case %d: want=%d, got=%d", i, tt.errCode, aErr.Code)
continue
}
} else {
if err != nil {
t.Errorf("case %d: err != nil: %q", i, err)
}
gotAdmn, err := f.adAPI.GetAdmin(id)
if err != nil {
t.Errorf("case %d: err != nil: %q", i, err)
}
tt.admn.Id = id
if diff := pretty.Compare(tt.admn, gotAdmn); diff != "" {
t.Errorf("case %d: Compare(want, got) = %v", i, diff)
}
}
}
}
func TestGetState(t *testing.T) {
tests := []struct {
addUsers []user.User
want adminschema.State
}{
{
addUsers: []user.User{
user.User{
Name: "Admin",
Admin: true,
},
},
want: adminschema.State{
AdminUserCreated: true,
},
},
{
want: adminschema.State{
AdminUserCreated: false,
},
},
}
for i, tt := range tests {
f := makeTestFixtures()
for _, usr := range tt.addUsers {
_, err := f.ur.Create(usr)
if err != nil {
t.Fatalf("case %d: err != nil", i, err)
}
}
got, err := f.adAPI.GetState()
if err != nil {
t.Errorf("case %d: err != nil", i, err)
}
if diff := pretty.Compare(tt.want, got); diff != "" {
t.Errorf("case %d: Compare(want, got) = %v", i, diff)
}
}
}