Skip to content

Commit

Permalink
update volume group operations
Browse files Browse the repository at this point in the history
  • Loading branch information
Overglazed committed Sep 22, 2021
1 parent fbcb67f commit a3ba4bd
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 27 deletions.
2 changes: 2 additions & 0 deletions pkg/service/ecloud/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,8 @@ type ECloudService interface {
CreateVolumeGroup(req CreateVolumeGroupRequest) (TaskReference, error)
PatchVolumeGroup(groupID string, patch PatchVolumeGroupRequest) (TaskReference, error)
DeleteVolumeGroup(groupID string) (string, error)
GetVolumeGroupVolumes(groupID string, parameters connection.APIRequestParameters) ([]Volume, error)
GetVolumeGroupVolumesPaginated(groupID string, parameters connection.APIRequestParameters) (*PaginatedVolume, error)

// VPN Endpoint
GetVPNEndpoints(parameters connection.APIRequestParameters) ([]VPNEndpoint, error)
Expand Down
30 changes: 15 additions & 15 deletions pkg/service/ecloud/service_volumegroup.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,40 +145,40 @@ func (s *Service) deleteVolumeGroupResponseBody(volumeGroupID string) (*GetTaskR
})
}

// GetVolumeGroupTasks retrieves a list of VolumeGroup tasks
func (s *Service) GetVolumeGroupTasks(volumeGroupID string, parameters connection.APIRequestParameters) ([]Task, error) {
var tasks []Task
// GetVolumeGroupVolumes retrieves a list of VolumeGroup volumes
func (s *Service) GetVolumeGroupVolumes(volumeGroupID string, parameters connection.APIRequestParameters) ([]Volume, error) {
var volumes []Volume

getFunc := func(p connection.APIRequestParameters) (connection.Paginated, error) {
return s.GetVolumeGroupTasksPaginated(volumeGroupID, p)
return s.GetVolumeGroupVolumesPaginated(volumeGroupID, p)
}

responseFunc := func(response connection.Paginated) {
for _, task := range response.(*PaginatedTask).Items {
tasks = append(tasks, task)
for _, volume := range response.(*PaginatedVolume).Items {
volumes = append(volumes, volume)
}
}

return tasks, connection.InvokeRequestAll(getFunc, responseFunc, parameters)
return volumes, connection.InvokeRequestAll(getFunc, responseFunc, parameters)
}

// GetVolumeGroupTasksPaginated retrieves a paginated list of VolumeGroup tasks
func (s *Service) GetVolumeGroupTasksPaginated(volumeGroupID string, parameters connection.APIRequestParameters) (*PaginatedTask, error) {
body, err := s.getVolumeGroupTasksPaginatedResponseBody(volumeGroupID, parameters)
// GetVolumeGroupVolumesPaginated retrieves a paginated list of VolumeGroup volumes
func (s *Service) GetVolumeGroupVolumesPaginated(volumeGroupID string, parameters connection.APIRequestParameters) (*PaginatedVolume, error) {
body, err := s.getVolumeGroupVolumesPaginatedResponseBody(volumeGroupID, parameters)

return NewPaginatedTask(func(p connection.APIRequestParameters) (connection.Paginated, error) {
return s.GetVolumeGroupTasksPaginated(volumeGroupID, p)
return NewPaginatedVolume(func(p connection.APIRequestParameters) (connection.Paginated, error) {
return s.GetVolumeGroupVolumesPaginated(volumeGroupID, p)
}, parameters, body.Metadata.Pagination, body.Data), err
}

func (s *Service) getVolumeGroupTasksPaginatedResponseBody(volumeGroupID string, parameters connection.APIRequestParameters) (*GetTaskSliceResponseBody, error) {
body := &GetTaskSliceResponseBody{}
func (s *Service) getVolumeGroupVolumesPaginatedResponseBody(volumeGroupID string, parameters connection.APIRequestParameters) (*GetVolumeSliceResponseBody, error) {
body := &GetVolumeSliceResponseBody{}

if volumeGroupID == "" {
return body, fmt.Errorf("invalid volume group id")
}

response, err := s.connection.Get(fmt.Sprintf("/ecloud/v2/volume-groups/%s/tasks", volumeGroupID), parameters)
response, err := s.connection.Get(fmt.Sprintf("/ecloud/v2/volume-groups/%s/volumes", volumeGroupID), parameters)
if err != nil {
return body, err
}
Expand Down
24 changes: 12 additions & 12 deletions pkg/service/ecloud/service_volumegroup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ func TestDeleteVolumeGroup(t *testing.T) {
})
}

func TestGetVolumeGroupTasks(t *testing.T) {
func TestGetVolumeGroupVolumes(t *testing.T) {
t.Run("Single", func(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
Expand All @@ -366,18 +366,18 @@ func TestGetVolumeGroupTasks(t *testing.T) {
connection: c,
}

c.EXPECT().Get("/ecloud/v2/volume-groups/volgroup-abcdef12/tasks", gomock.Any()).Return(&connection.APIResponse{
c.EXPECT().Get("/ecloud/v2/volume-groups/volgroup-abcdef12/volumes", gomock.Any()).Return(&connection.APIResponse{
Response: &http.Response{
Body: ioutil.NopCloser(bytes.NewReader([]byte("{\"data\":[{\"id\":\"task-abcdef12\"}],\"meta\":{\"pagination\":{\"total_pages\":1}}}"))),
Body: ioutil.NopCloser(bytes.NewReader([]byte("{\"data\":[{\"id\":\"vol-abcdef12\"}],\"meta\":{\"pagination\":{\"total_pages\":1}}}"))),
StatusCode: 200,
},
}, nil).Times(1)

tasks, err := s.GetVolumeGroupTasks("volgroup-abcdef12", connection.APIRequestParameters{})
volumes, err := s.GetVolumeGroupVolumes("volgroup-abcdef12", connection.APIRequestParameters{})

assert.Nil(t, err)
assert.Len(t, tasks, 1)
assert.Equal(t, "task-abcdef12", tasks[0].ID)
assert.Len(t, volumes, 1)
assert.Equal(t, "vol-abcdef12", volumes[0].ID)
})

t.Run("ConnectionError_ReturnsError", func(t *testing.T) {
Expand All @@ -390,9 +390,9 @@ func TestGetVolumeGroupTasks(t *testing.T) {
connection: c,
}

c.EXPECT().Get("/ecloud/v2/volume-groups/volgroup-abcdef12/tasks", gomock.Any()).Return(&connection.APIResponse{}, errors.New("test error 1"))
c.EXPECT().Get("/ecloud/v2/volume-groups/volgroup-abcdef12/volumes", gomock.Any()).Return(&connection.APIResponse{}, errors.New("test error 1"))

_, err := s.GetVolumeGroupTasks("volgroup-abcdef12", connection.APIRequestParameters{})
_, err := s.GetVolumeGroupVolumes("volgroup-abcdef12", connection.APIRequestParameters{})

assert.NotNil(t, err)
assert.Equal(t, "test error 1", err.Error())
Expand All @@ -408,13 +408,13 @@ func TestGetVolumeGroupTasks(t *testing.T) {
connection: c,
}

_, err := s.GetVolumeGroupTasks("", connection.APIRequestParameters{})
_, err := s.GetVolumeGroupVolumes("", connection.APIRequestParameters{})

assert.NotNil(t, err)
assert.Equal(t, "invalid volume group id", err.Error())
})

t.Run("404_ReturnsRouterNotFoundError", func(t *testing.T) {
t.Run("404_ReturnsVolumeGroupNotFoundError", func(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

Expand All @@ -424,14 +424,14 @@ func TestGetVolumeGroupTasks(t *testing.T) {
connection: c,
}

c.EXPECT().Get("/ecloud/v2/volume-groups/volgroup-abcdef12/tasks", gomock.Any()).Return(&connection.APIResponse{
c.EXPECT().Get("/ecloud/v2/volume-groups/volgroup-abcdef12/volumes", gomock.Any()).Return(&connection.APIResponse{
Response: &http.Response{
Body: ioutil.NopCloser(bytes.NewReader([]byte(""))),
StatusCode: 404,
},
}, nil).Times(1)

_, err := s.GetVolumeGroupTasks("volgroup-abcdef12", connection.APIRequestParameters{})
_, err := s.GetVolumeGroupVolumes("volgroup-abcdef12", connection.APIRequestParameters{})

assert.NotNil(t, err)
assert.IsType(t, &VolumeGroupNotFoundError{}, err)
Expand Down

0 comments on commit a3ba4bd

Please sign in to comment.