diff --git a/integration/users_test.go b/integration/users_test.go index 6c9ef8059..ac1c40f01 100644 --- a/integration/users_test.go +++ b/integration/users_test.go @@ -20,39 +20,31 @@ import ( "bytes" "encoding/json" "fmt" + "io" "log" "net/http" + "strconv" "testing" "time" "github.com/stretchr/testify/assert" ) -func TestAddUser(t *testing.T) { +func AddUser(accessKey string, secretKey string, groups []string, policies []string) (*http.Response, error) { /* - This is an atomic API Test to add a user via api/v1/users, the intention - is simple, add a user and make sure the response is 201 meaning that the - user got added successfully. - After test completion, it is expected that user is removed, so other - tests like users.ts can run over clean data and we don't collide against - it. + This is an atomic function to add user and can be reused across + different functions. */ - - assert := assert.New(t) - client := &http.Client{ Timeout: 3 * time.Second, } - var x [0]string - fmt.Println(x) - fmt.Println(".......................TestAddUser(): Create Data to add user") requestDataAdd := map[string]interface{}{ - "accessKey": "accessKey", - "secretKey": "secretKey", - "groups": x, - "policies": x, + "accessKey": accessKey, + "secretKey": secretKey, + "groups": groups, + "policies": policies, } fmt.Println("..............................TestAddUser(): Prepare the POST") @@ -62,13 +54,79 @@ func TestAddUser(t *testing.T) { "POST", "http://localhost:9090/api/v1/users", requestDataBody) if err != nil { log.Println(err) - return } request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) request.Header.Add("Content-Type", "application/json") fmt.Println(".................................TestAddUser(): Make the POST") response, err := client.Do(request) + return response, err +} + +func DeleteUser(bucketName string) (*http.Response, error) { + /* + This is an atomic function to delete user and can be reused across + different functions. + */ + client := &http.Client{ + Timeout: 3 * time.Second, + } + fmt.Println("...................................TestAddUser(): Remove user") + request, err := http.NewRequest( + "DELETE", "http://localhost:9090/api/v1/user?name="+bucketName, nil) + if err != nil { + log.Println(err) + } + request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) + request.Header.Add("Content-Type", "application/json") + + fmt.Println("...............................TestAddUser(): Make the DELETE") + response, err := client.Do(request) + return response, err +} + +func ListUsers(offset string, limit string) (*http.Response, error) { + /* + This is an atomic function to list users. + {{baseUrl}}/users?offset=-5480083&limit=-5480083 + */ + client := &http.Client{ + Timeout: 3 * time.Second, + } + fmt.Println("...................................TestAddUser(): Remove user") + request, err := http.NewRequest( + "GET", + "http://localhost:9090/api/v1/users?offset="+offset+"&limit="+limit, + nil) + if err != nil { + log.Println(err) + } + request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) + request.Header.Add("Content-Type", "application/json") + + fmt.Println("...............................TestAddUser(): Make the DELETE") + response, err := client.Do(request) + return response, err +} + +func TestAddUser(t *testing.T) { + /* + This is an API Test to add a user via api/v1/users, the intention + is simple, add a user and make sure the response is 201 meaning that the + user got added successfully. + After test completion, it is expected that user is removed, so other + tests like users.ts can run over clean data and we don't collide against + it. + */ + + assert := assert.New(t) + + // With no groups & no policies + var groups = []string{} + var policies = []string{} + + fmt.Println(".................................TestAddUser(): Make the POST") + response, err := AddUser("accessKey", "secretKey", groups, policies) if err != nil { log.Println(err) return @@ -83,20 +141,7 @@ func TestAddUser(t *testing.T) { assert.Equal(201, response.StatusCode, "Status Code is incorrect") } - fmt.Println("...................................TestAddUser(): Remove user") - // {{baseUrl}}/user?name=proident velit - // Investiga como se borra en el browser. - request, err = http.NewRequest( - "DELETE", "http://localhost:9090/api/v1/user?name=accessKey", nil) - if err != nil { - log.Println(err) - return - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - - fmt.Println("...............................TestAddUser(): Make the DELETE") - response, err = client.Do(request) + response, err = DeleteUser("accessKey") if err != nil { log.Println(err) return @@ -112,3 +157,84 @@ func TestAddUser(t *testing.T) { } } + +func TestListUsers(t *testing.T) { + /* + This test is intended to list users via API. + 1. First, it creates the users + 2. Then, it lists the users <------ 200 is expected when listing them. + 3. Finally, it deletes the users + */ + + assert := assert.New(t) + + // With no groups & no policies + var groups = []string{} + var policies = []string{} + + // 1. Create the users + numberOfUsers := 5 + for i := 1; i < numberOfUsers; i++ { + fmt.Println("............................TestListUsers(): Adding users") + fmt.Println(strconv.Itoa(i) + "accessKey" + strconv.Itoa(i)) + response, err := AddUser( + strconv.Itoa(i)+"accessKey"+strconv.Itoa(i), + "secretKey"+strconv.Itoa(i), groups, policies) + if err != nil { + log.Println(err) + return + } + fmt.Println("............................TestListUsers(): Verification") + fmt.Println("...........................TestListUsers(): POST response") + fmt.Println(response) + fmt.Println("..............................TestListUsers(): POST error") + fmt.Println(err) + if response != nil { + fmt.Println("POST StatusCode:", response.StatusCode) + assert.Equal(201, response.StatusCode, + "Status Code is incorrect on index: "+strconv.Itoa(i)) + } + + b, err := io.ReadAll(response.Body) + if err != nil { + log.Fatalln(err) + } + fmt.Println(string(b)) + } + + // 2. List the users + listResponse, listError := ListUsers("-5480083", "-5480083") + if listError != nil { + log.Fatalln(listError) + } + if listResponse != nil { + fmt.Println("POST StatusCode:", listResponse.StatusCode) + assert.Equal(200, listResponse.StatusCode, + "TestListUsers(): Status Code is incorrect when listing users") + } + b, err := io.ReadAll(listResponse.Body) + if err != nil { + log.Fatalln(err) + } + fmt.Println(string(b)) + + // 3. Delete the users + for i := 1; i < numberOfUsers; i++ { + response, err := DeleteUser( + strconv.Itoa(i) + "accessKey" + strconv.Itoa(i)) + if err != nil { + log.Println(err) + return + } + fmt.Println("............................TestListUsers(): Verification") + fmt.Println(".........................TestListUsers(): DELETE response") + fmt.Println(response) + fmt.Println("............................TestListUsers(): DELETE error") + fmt.Println(err) + if response != nil { + fmt.Println("DELETE StatusCode:", response.StatusCode) + assert.Equal(204, + response.StatusCode, "has to be 204 when delete user") + } + } +}