예제 #1
0
func (u User) CheckPassword(password string) bool {
	err := bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(password))
	return err == nil
}
예제 #2
0
func TestMergeUser(t *testing.T) {
	tbl := []struct {
		input  User
		merge  User
		expect User
		iserr  bool
	}{
		{
			User{User: "******"},
			User{User: "******"},
			User{},
			true,
		},
		{
			User{User: "******"},
			User{User: "******"},
			User{User: "******", Roles: []string{}},
			false,
		},
		{
			User{User: "******"},
			User{User: "******", Grant: []string{"role1"}},
			User{User: "******", Roles: []string{"role1"}},
			false,
		},
		{
			User{User: "******", Roles: []string{"role1"}},
			User{User: "******", Grant: []string{"role1"}},
			User{},
			true,
		},
		{
			User{User: "******", Roles: []string{"role1"}},
			User{User: "******", Revoke: []string{"role2"}},
			User{},
			true,
		},
		{
			User{User: "******", Roles: []string{"role1"}},
			User{User: "******", Grant: []string{"role2"}},
			User{User: "******", Roles: []string{"role1", "role2"}},
			false,
		},
		{
			User{User: "******"},
			User{User: "******", Password: "******"},
			User{User: "******", Roles: []string{}, Password: "******"},
			false,
		},
	}

	for i, tt := range tbl {
		out, err := tt.input.Merge(tt.merge)
		if err != nil && !tt.iserr {
			t.Fatalf("Got unexpected error on item %d", i)
		}
		if !tt.iserr {
			err := bcrypt.CompareHashAndPassword([]byte(out.Password), []byte(tt.merge.Password))
			if err == nil {
				tt.expect.Password = out.Password
			}
			if !reflect.DeepEqual(out, tt.expect) {
				t.Errorf("Unequal merge expectation on item %d: got: %#v, expect: %#v", i, out, tt.expect)
			}
		}
	}
}