@ -35,12 +35,6 @@ var (
groupsURL = ""
groupsURL = ""
)
)
type userResponse struct {
User struct {
ID string ` json:"id" `
} ` json:"user" `
}
type groupResponse struct {
type groupResponse struct {
Group struct {
Group struct {
ID string ` json:"id" `
ID string ` json:"id" `
@ -144,7 +138,7 @@ func createUser(t *testing.T, token, userName, userEmail, userPass string) strin
}
}
// delete group or user
// delete group or user
func delet e( t * testing . T , token , id , uri string ) {
func deleteResourc e( t * testing . T , token , id , uri string ) {
t . Helper ( )
t . Helper ( )
client := & http . Client { }
client := & http . Client { }
@ -246,20 +240,86 @@ func TestIncorrectCredentialsLogin(t *testing.T) {
func TestValidUserLogin ( t * testing . T ) {
func TestValidUserLogin ( t * testing . T ) {
setupVariables ( t )
setupVariables ( t )
token , _ := getAdminToken ( t , adminUser , adminPass )
token , _ := getAdminToken ( t , adminUser , adminPass )
userID := createUser ( t , token , testUser , testEmail , testPass )
c := conn { Host : keystoneURL , Domain : testDomain ,
type tUser struct {
AdminUsername : adminUser , AdminPassword : adminPass }
username string
s := connector . Scopes { OfflineAccess : true , Groups : true }
domain string
identity , validPW , err := c . Login ( context . Background ( ) , s , testUser , testPass )
email string
if err != nil {
password string
t . Fatal ( err . Error ( ) )
}
type expect struct {
username string
email string
verifiedEmail bool
}
var tests = [ ] struct {
name string
input tUser
expected expect
} {
{
name : "test with email address" ,
input : tUser {
username : testUser ,
domain : testDomain ,
email : testEmail ,
password : testPass ,
} ,
expected : expect {
username : testUser ,
email : testEmail ,
verifiedEmail : true ,
} ,
} ,
{
name : "test without email address" ,
input : tUser {
username : testUser ,
domain : testDomain ,
email : "" ,
password : testPass ,
} ,
expected : expect {
username : testUser ,
email : "" ,
verifiedEmail : false ,
} ,
} ,
}
}
t . Log ( identity )
if ! validPW {
for _ , tt := range tests {
t . Fatal ( "Valid password was not accepted" )
t . Run ( tt . name , func ( t * testing . T ) {
userID := createUser ( t , token , tt . input . username , tt . input . email , tt . input . password )
defer deleteResource ( t , token , userID , usersURL )
c := conn { Host : keystoneURL , Domain : tt . input . domain ,
AdminUsername : adminUser , AdminPassword : adminPass }
s := connector . Scopes { OfflineAccess : true , Groups : true }
identity , validPW , err := c . Login ( context . Background ( ) , s , tt . input . username , tt . input . password )
if err != nil {
t . Fatal ( err . Error ( ) )
}
t . Log ( identity )
if identity . Username != tt . expected . username {
t . Fatalf ( "Invalid user. Got: %v. Wanted: %v" , identity . Username , tt . expected . username )
}
if identity . UserID == "" {
t . Fatalf ( "Didn't get any UserID back" )
}
if identity . Email != tt . expected . email {
t . Fatalf ( "Invalid email. Got: %v. Wanted: %v" , identity . Email , tt . expected . email )
}
if identity . EmailVerified != tt . expected . verifiedEmail {
t . Fatalf ( "Invalid verifiedEmail. Got: %v. Wanted: %v" , identity . EmailVerified , tt . expected . verifiedEmail )
}
if ! validPW {
t . Fatal ( "Valid password was not accepted" )
}
} )
}
}
delete ( t , token , userID , usersURL )
}
}
func TestUseRefreshToken ( t * testing . T ) {
func TestUseRefreshToken ( t * testing . T ) {
@ -267,6 +327,7 @@ func TestUseRefreshToken(t *testing.T) {
token , adminID := getAdminToken ( t , adminUser , adminPass )
token , adminID := getAdminToken ( t , adminUser , adminPass )
groupID := createGroup ( t , token , "Test group description" , testGroup )
groupID := createGroup ( t , token , "Test group description" , testGroup )
addUserToGroup ( t , token , groupID , adminID )
addUserToGroup ( t , token , groupID , adminID )
defer deleteResource ( t , token , groupID , groupsURL )
c := conn { Host : keystoneURL , Domain : testDomain ,
c := conn { Host : keystoneURL , Domain : testDomain ,
AdminUsername : adminUser , AdminPassword : adminPass }
AdminUsername : adminUser , AdminPassword : adminPass }
@ -282,8 +343,6 @@ func TestUseRefreshToken(t *testing.T) {
t . Fatal ( err . Error ( ) )
t . Fatal ( err . Error ( ) )
}
}
delete ( t , token , groupID , groupsURL )
expectEquals ( t , 1 , len ( identityRefresh . Groups ) )
expectEquals ( t , 1 , len ( identityRefresh . Groups ) )
expectEquals ( t , testGroup , identityRefresh . Groups [ 0 ] )
expectEquals ( t , testGroup , identityRefresh . Groups [ 0 ] )
}
}
@ -307,7 +366,7 @@ func TestUseRefreshTokenUserDeleted(t *testing.T) {
t . Fatal ( err . Error ( ) )
t . Fatal ( err . Error ( ) )
}
}
delet e( t , token , userID , usersURL )
deleteResourc e( t , token , userID , usersURL )
_ , err = c . Refresh ( context . Background ( ) , s , identityLogin )
_ , err = c . Refresh ( context . Background ( ) , s , identityLogin )
if ! strings . Contains ( err . Error ( ) , "does not exist" ) {
if ! strings . Contains ( err . Error ( ) , "does not exist" ) {
@ -319,6 +378,7 @@ func TestUseRefreshTokenGroupsChanged(t *testing.T) {
setupVariables ( t )
setupVariables ( t )
token , _ := getAdminToken ( t , adminUser , adminPass )
token , _ := getAdminToken ( t , adminUser , adminPass )
userID := createUser ( t , token , testUser , testEmail , testPass )
userID := createUser ( t , token , testUser , testEmail , testPass )
defer deleteResource ( t , token , userID , usersURL )
c := conn { Host : keystoneURL , Domain : testDomain ,
c := conn { Host : keystoneURL , Domain : testDomain ,
AdminUsername : adminUser , AdminPassword : adminPass }
AdminUsername : adminUser , AdminPassword : adminPass }
@ -338,15 +398,13 @@ func TestUseRefreshTokenGroupsChanged(t *testing.T) {
groupID := createGroup ( t , token , "Test group" , testGroup )
groupID := createGroup ( t , token , "Test group" , testGroup )
addUserToGroup ( t , token , groupID , userID )
addUserToGroup ( t , token , groupID , userID )
defer deleteResource ( t , token , groupID , groupsURL )
identityRefresh , err = c . Refresh ( context . Background ( ) , s , identityLogin )
identityRefresh , err = c . Refresh ( context . Background ( ) , s , identityLogin )
if err != nil {
if err != nil {
t . Fatal ( err . Error ( ) )
t . Fatal ( err . Error ( ) )
}
}
delete ( t , token , groupID , groupsURL )
delete ( t , token , userID , usersURL )
expectEquals ( t , 1 , len ( identityRefresh . Groups ) )
expectEquals ( t , 1 , len ( identityRefresh . Groups ) )
}
}
@ -354,6 +412,7 @@ func TestNoGroupsInScope(t *testing.T) {
setupVariables ( t )
setupVariables ( t )
token , _ := getAdminToken ( t , adminUser , adminPass )
token , _ := getAdminToken ( t , adminUser , adminPass )
userID := createUser ( t , token , testUser , testEmail , testPass )
userID := createUser ( t , token , testUser , testEmail , testPass )
defer deleteResource ( t , token , userID , usersURL )
c := conn { Host : keystoneURL , Domain : testDomain ,
c := conn { Host : keystoneURL , Domain : testDomain ,
AdminUsername : adminUser , AdminPassword : adminPass }
AdminUsername : adminUser , AdminPassword : adminPass }
@ -361,6 +420,7 @@ func TestNoGroupsInScope(t *testing.T) {
groupID := createGroup ( t , token , "Test group" , testGroup )
groupID := createGroup ( t , token , "Test group" , testGroup )
addUserToGroup ( t , token , groupID , userID )
addUserToGroup ( t , token , groupID , userID )
defer deleteResource ( t , token , groupID , groupsURL )
identityLogin , _ , err := c . Login ( context . Background ( ) , s , testUser , testPass )
identityLogin , _ , err := c . Login ( context . Background ( ) , s , testUser , testPass )
if err != nil {
if err != nil {
@ -373,9 +433,6 @@ func TestNoGroupsInScope(t *testing.T) {
t . Fatal ( err . Error ( ) )
t . Fatal ( err . Error ( ) )
}
}
expectEquals ( t , 0 , len ( identityRefresh . Groups ) )
expectEquals ( t , 0 , len ( identityRefresh . Groups ) )
delete ( t , token , groupID , groupsURL )
delete ( t , token , userID , usersURL )
}
}
func setupVariables ( t * testing . T ) {
func setupVariables ( t * testing . T ) {