mirror of https://github.com/dexidp/dex.git
3 changed files with 264 additions and 77 deletions
@ -1,55 +0,0 @@
|
||||
package memory |
||||
|
||||
import ( |
||||
"os" |
||||
"reflect" |
||||
"testing" |
||||
|
||||
"github.com/Sirupsen/logrus" |
||||
"github.com/coreos/dex/storage" |
||||
) |
||||
|
||||
func TestStaticClients(t *testing.T) { |
||||
logger := &logrus.Logger{ |
||||
Out: os.Stderr, |
||||
Formatter: &logrus.TextFormatter{DisableColors: true}, |
||||
Level: logrus.DebugLevel, |
||||
} |
||||
s := New(logger) |
||||
|
||||
c1 := storage.Client{ID: "foo", Secret: "foo_secret"} |
||||
c2 := storage.Client{ID: "bar", Secret: "bar_secret"} |
||||
s.CreateClient(c1) |
||||
s2 := storage.WithStaticClients(s, []storage.Client{c2}) |
||||
|
||||
tests := []struct { |
||||
id string |
||||
s storage.Storage |
||||
wantErr bool |
||||
wantClient storage.Client |
||||
}{ |
||||
{"foo", s, false, c1}, |
||||
{"bar", s, true, storage.Client{}}, |
||||
{"foo", s2, true, storage.Client{}}, |
||||
{"bar", s2, false, c2}, |
||||
} |
||||
|
||||
for i, tc := range tests { |
||||
gotClient, err := tc.s.GetClient(tc.id) |
||||
if err != nil { |
||||
if !tc.wantErr { |
||||
t.Errorf("case %d: GetClient(%q) %v", i, tc.id, err) |
||||
} |
||||
continue |
||||
} |
||||
|
||||
if tc.wantErr { |
||||
t.Errorf("case %d: GetClient(%q) expected error", i, tc.id) |
||||
continue |
||||
} |
||||
|
||||
if !reflect.DeepEqual(tc.wantClient, gotClient) { |
||||
t.Errorf("case %d: expected=%#v got=%#v", i, tc.wantClient, gotClient) |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,192 @@
|
||||
package memory |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"strings" |
||||
"testing" |
||||
|
||||
"github.com/Sirupsen/logrus" |
||||
"github.com/coreos/dex/storage" |
||||
) |
||||
|
||||
func TestStaticClients(t *testing.T) { |
||||
logger := &logrus.Logger{ |
||||
Out: os.Stderr, |
||||
Formatter: &logrus.TextFormatter{DisableColors: true}, |
||||
Level: logrus.DebugLevel, |
||||
} |
||||
backing := New(logger) |
||||
|
||||
c1 := storage.Client{ID: "foo", Secret: "foo_secret"} |
||||
c2 := storage.Client{ID: "bar", Secret: "bar_secret"} |
||||
c3 := storage.Client{ID: "spam", Secret: "spam_secret"} |
||||
|
||||
backing.CreateClient(c1) |
||||
s := storage.WithStaticClients(backing, []storage.Client{c2}) |
||||
|
||||
tests := []struct { |
||||
name string |
||||
action func() error |
||||
wantErr bool |
||||
}{ |
||||
{ |
||||
name: "get client from static storage", |
||||
action: func() error { |
||||
_, err := s.GetClient(c2.ID) |
||||
return err |
||||
}, |
||||
}, |
||||
{ |
||||
name: "get client from backing storage", |
||||
action: func() error { |
||||
_, err := s.GetClient(c1.ID) |
||||
return err |
||||
}, |
||||
}, |
||||
{ |
||||
name: "update static client", |
||||
action: func() error { |
||||
updater := func(c storage.Client) (storage.Client, error) { |
||||
c.Secret = "new_" + c.Secret |
||||
return c, nil |
||||
} |
||||
return s.UpdateClient(c2.ID, updater) |
||||
}, |
||||
wantErr: true, |
||||
}, |
||||
{ |
||||
name: "update non-static client", |
||||
action: func() error { |
||||
updater := func(c storage.Client) (storage.Client, error) { |
||||
c.Secret = "new_" + c.Secret |
||||
return c, nil |
||||
} |
||||
return s.UpdateClient(c1.ID, updater) |
||||
}, |
||||
}, |
||||
{ |
||||
name: "list clients", |
||||
action: func() error { |
||||
clients, err := s.ListClients() |
||||
if err != nil { |
||||
return err |
||||
} |
||||
if n := len(clients); n != 2 { |
||||
return fmt.Errorf("expected 2 clients got %d", n) |
||||
} |
||||
return nil |
||||
}, |
||||
}, |
||||
{ |
||||
name: "create client", |
||||
action: func() error { |
||||
return s.CreateClient(c3) |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
for _, tc := range tests { |
||||
err := tc.action() |
||||
if err != nil && !tc.wantErr { |
||||
t.Errorf("%s: %v", tc.name, err) |
||||
} |
||||
if err == nil && tc.wantErr { |
||||
t.Errorf("%s: expected error, didn't get one", tc.name) |
||||
} |
||||
} |
||||
} |
||||
|
||||
func TestStaticPasswords(t *testing.T) { |
||||
logger := &logrus.Logger{ |
||||
Out: os.Stderr, |
||||
Formatter: &logrus.TextFormatter{DisableColors: true}, |
||||
Level: logrus.DebugLevel, |
||||
} |
||||
backing := New(logger) |
||||
|
||||
p1 := storage.Password{Email: "foo@example.com", Username: "foo_secret"} |
||||
p2 := storage.Password{Email: "bar@example.com", Username: "bar_secret"} |
||||
p3 := storage.Password{Email: "spam@example.com", Username: "spam_secret"} |
||||
|
||||
backing.CreatePassword(p1) |
||||
s := storage.WithStaticPasswords(backing, []storage.Password{p2}) |
||||
|
||||
tests := []struct { |
||||
name string |
||||
action func() error |
||||
wantErr bool |
||||
}{ |
||||
{ |
||||
name: "get password from static storage", |
||||
action: func() error { |
||||
_, err := s.GetPassword(p2.Email) |
||||
return err |
||||
}, |
||||
}, |
||||
{ |
||||
name: "get password from backing storage", |
||||
action: func() error { |
||||
_, err := s.GetPassword(p1.Email) |
||||
return err |
||||
}, |
||||
}, |
||||
{ |
||||
name: "get password from static storage with casing", |
||||
action: func() error { |
||||
_, err := s.GetPassword(strings.ToUpper(p2.Email)) |
||||
return err |
||||
}, |
||||
}, |
||||
{ |
||||
name: "update static password", |
||||
action: func() error { |
||||
updater := func(p storage.Password) (storage.Password, error) { |
||||
p.Username = "new_" + p.Username |
||||
return p, nil |
||||
} |
||||
return s.UpdatePassword(p2.Email, updater) |
||||
}, |
||||
wantErr: true, |
||||
}, |
||||
{ |
||||
name: "update non-static password", |
||||
action: func() error { |
||||
updater := func(p storage.Password) (storage.Password, error) { |
||||
p.Username = "new_" + p.Username |
||||
return p, nil |
||||
} |
||||
return s.UpdatePassword(p1.Email, updater) |
||||
}, |
||||
}, |
||||
{ |
||||
name: "list passwords", |
||||
action: func() error { |
||||
passwords, err := s.ListPasswords() |
||||
if err != nil { |
||||
return err |
||||
} |
||||
if n := len(passwords); n != 2 { |
||||
return fmt.Errorf("expected 2 passwords got %d", n) |
||||
} |
||||
return nil |
||||
}, |
||||
}, |
||||
{ |
||||
name: "create password", |
||||
action: func() error { |
||||
return s.CreatePassword(p3) |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
for _, tc := range tests { |
||||
err := tc.action() |
||||
if err != nil && !tc.wantErr { |
||||
t.Errorf("%s: %v", tc.name, err) |
||||
} |
||||
if err == nil && tc.wantErr { |
||||
t.Errorf("%s: expected error, didn't get one", tc.name) |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue