2022-02-16 12:30:49 +00:00
package initialise
import (
"database/sql"
"errors"
"testing"
)
func Test_verifyGrant ( t * testing . T ) {
type args struct {
2022-03-15 06:19:02 +00:00
db db
database string
username string
2022-02-16 12:30:49 +00:00
}
tests := [ ] struct {
name string
args args
targetErr error
} {
{
name : "exists fails" ,
args : args {
2022-03-15 06:19:02 +00:00
db : prepareDB ( t , expectQueryErr ( "SELECT EXISTS(SELECT * FROM [SHOW GRANTS ON DATABASE zitadel] where grantee = $1 AND privilege_type = 'ALL'" , sql . ErrConnDone , "zitadel-user" ) ) ,
database : "zitadel" ,
username : "zitadel-user" ,
2022-02-16 12:30:49 +00:00
} ,
targetErr : sql . ErrConnDone ,
} ,
{
name : "doesn't exists, create fails" ,
args : args {
db : prepareDB ( t ,
expectExists ( "SELECT EXISTS(SELECT * FROM [SHOW GRANTS ON DATABASE zitadel] where grantee = $1 AND privilege_type = 'ALL'" , false , "zitadel-user" ) ,
expectExec ( "GRANT ALL ON DATABASE zitadel TO zitadel-user" , sql . ErrTxDone ) ,
) ,
2022-03-15 06:19:02 +00:00
database : "zitadel" ,
username : "zitadel-user" ,
2022-02-16 12:30:49 +00:00
} ,
targetErr : sql . ErrTxDone ,
} ,
{
name : "correct" ,
args : args {
db : prepareDB ( t ,
expectExists ( "SELECT EXISTS(SELECT * FROM [SHOW GRANTS ON DATABASE zitadel] where grantee = $1 AND privilege_type = 'ALL'" , false , "zitadel-user" ) ,
expectExec ( "GRANT ALL ON DATABASE zitadel TO zitadel-user" , nil ) ,
) ,
2022-03-15 06:19:02 +00:00
database : "zitadel" ,
username : "zitadel-user" ,
2022-02-16 12:30:49 +00:00
} ,
targetErr : nil ,
} ,
{
name : "already exists" ,
args : args {
db : prepareDB ( t ,
expectExists ( "SELECT EXISTS(SELECT * FROM [SHOW GRANTS ON DATABASE zitadel] where grantee = $1 AND privilege_type = 'ALL'" , true , "zitadel-user" ) ,
) ,
2022-03-15 06:19:02 +00:00
database : "zitadel" ,
username : "zitadel-user" ,
2022-02-16 12:30:49 +00:00
} ,
targetErr : nil ,
} ,
}
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
2022-03-15 06:19:02 +00:00
if err := VerifyGrant ( tt . args . database , tt . args . username ) ( tt . args . db . db ) ; ! errors . Is ( err , tt . targetErr ) {
t . Errorf ( "VerifyGrant() error = %v, want: %v" , err , tt . targetErr )
2022-02-16 12:30:49 +00:00
}
if err := tt . args . db . mock . ExpectationsWereMet ( ) ; err != nil {
t . Error ( err )
}
} )
}
}