diff --git a/services/redis/CHANGELOG.md b/services/redis/CHANGELOG.md index c1e78a485..f3e0297cd 100644 --- a/services/redis/CHANGELOG.md +++ b/services/redis/CHANGELOG.md @@ -1,6 +1,3 @@ -## v1.1.0 -- `v2api`: **Feature**: Added wait handlers - ## v1.0.0 - **Breaking Change:** The region is no longer specified within the client configuration. Instead, the region must be passed as a parameter to any region-specific request. - `v2api`: diff --git a/services/redis/VERSION b/services/redis/VERSION index 992977ad2..60453e690 100644 --- a/services/redis/VERSION +++ b/services/redis/VERSION @@ -1 +1 @@ -v1.1.0 \ No newline at end of file +v1.0.0 \ No newline at end of file diff --git a/services/redis/oas_commit b/services/redis/oas_commit index 78b94c5e2..5319daad3 100644 --- a/services/redis/oas_commit +++ b/services/redis/oas_commit @@ -1 +1 @@ -2f86390a8636a9c44010faf5e2f7f6321b17442f +3ce30e12ea17197c003ced5176b6084b8d09a69f diff --git a/services/redis/v1api/api_default.go b/services/redis/v1api/api_default.go index 8d7e731c8..fb6fee972 100644 --- a/services/redis/v1api/api_default.go +++ b/services/redis/v1api/api_default.go @@ -415,6 +415,28 @@ func (a *DefaultAPIService) CreateBackupExecute(r ApiCreateBackupRequest) ([]Cre ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -573,6 +595,17 @@ func (a *DefaultAPIService) CreateCredentialsExecute(r ApiCreateCredentialsReque } newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v } return localVarReturnValue, newErr } @@ -712,6 +745,17 @@ func (a *DefaultAPIService) CreateInstanceExecute(r ApiCreateInstanceRequest) (* newErr.Model = v return localVarReturnValue, newErr } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 409 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -842,6 +886,28 @@ func (a *DefaultAPIService) DeleteCredentialsExecute(r ApiDeleteCredentialsReque ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -969,6 +1035,17 @@ func (a *DefaultAPIService) DeleteInstanceExecute(r ApiDeleteInstanceRequest) er newErr.Model = v return newErr } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -1090,6 +1167,39 @@ func (a *DefaultAPIService) DownloadBackupExecute(r ApiDownloadBackupRequest) (* ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 404 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 500 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -1223,6 +1333,28 @@ func (a *DefaultAPIService) GetCredentialsExecute(r ApiGetCredentialsRequest) (* ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -1352,6 +1484,28 @@ func (a *DefaultAPIService) GetInstanceExecute(r ApiGetInstanceRequest) (*Instan ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -1490,6 +1644,28 @@ func (a *DefaultAPIService) GetMetricsExecute(r ApiGetMetricsRequest) (*GetMetri ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -1617,6 +1793,28 @@ func (a *DefaultAPIService) ListBackupsExecute(r ApiListBackupsRequest) (*ListBa ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -1746,6 +1944,28 @@ func (a *DefaultAPIService) ListCredentialsExecute(r ApiListCredentialsRequest) ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -1871,6 +2091,28 @@ func (a *DefaultAPIService) ListInstancesExecute(r ApiListInstancesRequest) (*Li ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -1996,6 +2238,38 @@ func (a *DefaultAPIService) ListOfferingsExecute(r ApiListOfferingsRequest) (*Li ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 404 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + } return localVarReturnValue, newErr } @@ -2113,6 +2387,28 @@ func (a *DefaultAPIService) ListRestoresExecute(r ApiListRestoresRequest) (*List ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -2262,6 +2558,17 @@ func (a *DefaultAPIService) PartialUpdateInstanceExecute(r ApiPartialUpdateInsta newErr.Model = v return newErr } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -2379,6 +2686,28 @@ func (a *DefaultAPIService) TriggerRecreateExecute(r ApiTriggerRecreateRequest) ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -2517,6 +2846,28 @@ func (a *DefaultAPIService) TriggerRestartExecute(r ApiTriggerRestartRequest) (* ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -2659,6 +3010,28 @@ func (a *DefaultAPIService) TriggerRestoreExecute(r ApiTriggerRestoreRequest) (* ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) @@ -2811,6 +3184,28 @@ func (a *DefaultAPIService) UpdateBackupsConfigExecute(r ApiUpdateBackupsConfigR ErrorMessage: localVarHTTPResponse.Status, StatusCode: localVarHTTPResponse.StatusCode, } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.ErrorMessage = err.Error() + return localVarReturnValue, newErr + } + newErr.ErrorMessage = oapierror.FormatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.Model = v + return localVarReturnValue, newErr + } if localVarHTTPResponse.StatusCode == 404 { var v Error err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) diff --git a/services/redis/v2api/wait/wait.go b/services/redis/v2api/wait/wait.go deleted file mode 100644 index 2991bbe00..000000000 --- a/services/redis/v2api/wait/wait.go +++ /dev/null @@ -1,121 +0,0 @@ -package wait - -import ( - "context" - "errors" - "fmt" - "net/http" - "strings" - "time" - - "github.com/stackitcloud/stackit-sdk-go/core/oapierror" - "github.com/stackitcloud/stackit-sdk-go/core/wait" - redis "github.com/stackitcloud/stackit-sdk-go/services/redis/v2api" -) - -func createOrUpdateInstanceWaitHandler(ctx context.Context, client redis.DefaultAPI, projectId, region, instanceId string) *wait.AsyncActionHandler[redis.Instance] { - waitConfig := wait.WaiterHelper[redis.Instance, redis.InstanceStatus]{ - FetchInstance: client.GetInstance(ctx, projectId, region, instanceId).Execute, - GetState: func(response *redis.Instance) (redis.InstanceStatus, error) { - if response == nil { - return "", errors.New("empty response") - } - if response.Status == nil { - return "", errors.New("status is missing in response") - } - return *response.Status, nil - }, - ActiveState: []redis.InstanceStatus{redis.INSTANCESTATUS_ACTIVE}, - ErrorState: []redis.InstanceStatus{redis.INSTANCESTATUS_FAILED}, - } - - handler := wait.New(waitConfig.Wait()) - handler.SetTimeout(45 * time.Minute) - return handler -} - -// CreateInstanceWaitHandler will wait for instance creation -func CreateInstanceWaitHandler(ctx context.Context, client redis.DefaultAPI, projectId, region, instanceId string) *wait.AsyncActionHandler[redis.Instance] { - return createOrUpdateInstanceWaitHandler(ctx, client, projectId, region, instanceId) -} - -// PartialUpdateInstanceWaitHandler will wait for instance update -func PartialUpdateInstanceWaitHandler(ctx context.Context, client redis.DefaultAPI, projectId, region, instanceId string) *wait.AsyncActionHandler[redis.Instance] { - return createOrUpdateInstanceWaitHandler(ctx, client, projectId, region, instanceId) -} - -// DeleteInstanceWaitHandler will wait for instance deletion -func DeleteInstanceWaitHandler(ctx context.Context, a redis.DefaultAPI, projectId, region, instanceId string) *wait.AsyncActionHandler[struct{}] { - handler := wait.New(func() (waitFinished bool, response *struct{}, err error) { - s, err := a.GetInstance(ctx, projectId, region, instanceId).Execute() - if err == nil { - if s.Status == nil { - return false, nil, fmt.Errorf("delete failed for instance with id %s. The response is not valid: The status is missing", instanceId) - } - if *s.Status != redis.INSTANCESTATUS_DELETING { - return false, nil, nil - } - if *s.Status == redis.INSTANCESTATUS_ACTIVE { - if strings.Contains(s.LastOperation.Description, "DeleteFailed") || strings.Contains(s.LastOperation.Description, "failed") { - return true, nil, fmt.Errorf("instance was deleted successfully but has errors: %s", s.LastOperation.Description) - } - return true, nil, nil - } - return false, nil, nil - } - oapiErr, ok := err.(*oapierror.GenericOpenAPIError) //nolint:errorlint //complaining that error.As should be used to catch wrapped errors, but this error should not be wrapped - if !ok { - return false, nil, fmt.Errorf("could not convert error to oapierror.GenericOpenAPIError") - } - if oapiErr.StatusCode != http.StatusGone { - return false, nil, err - } - return true, nil, nil - }) - handler.SetTimeout(15 * time.Minute) - return handler -} - -// CreateCredentialsWaitHandler will wait for credentials creation -func CreateCredentialsWaitHandler(ctx context.Context, a redis.DefaultAPI, projectId, region, instanceId, credentialsId string) *wait.AsyncActionHandler[redis.CredentialsResponse] { - handler := wait.New(func() (waitFinished bool, response *redis.CredentialsResponse, err error) { - s, err := a.GetCredentials(ctx, projectId, region, instanceId, credentialsId).Execute() - if err != nil { - oapiErr, ok := err.(*oapierror.GenericOpenAPIError) //nolint:errorlint //complaining that error.As should be used to catch wrapped errors, but this error should not be wrapped - if !ok { - return false, nil, fmt.Errorf("could not convert error to oapierror.GenericOpenAPIError") - } - // If the request returns 404, the credentials have not been created yet - if oapiErr.StatusCode == http.StatusNotFound { - return false, nil, nil - } - return false, nil, err - } - if s.Id == credentialsId { - return true, s, nil - } - return false, nil, nil - }) - handler.SetTimeout(1 * time.Minute) - return handler -} - -// DeleteCredentialsWaitHandler will wait for credentials deletion -func DeleteCredentialsWaitHandler(ctx context.Context, a redis.DefaultAPI, projectId, region, instanceId, credentialsId string) *wait.AsyncActionHandler[struct{}] { - handler := wait.New(func() (waitFinished bool, response *struct{}, err error) { - _, err = a.GetCredentials(ctx, projectId, region, instanceId, credentialsId).Execute() - if err == nil { - return false, nil, nil - } - oapiErr, ok := err.(*oapierror.GenericOpenAPIError) //nolint:errorlint //complaining that error.As should be used to catch wrapped errors, but this error should not be wrapped - if !ok { - return false, nil, fmt.Errorf("could not convert error to oapierror.GenericOpenAPIError") - } - if oapiErr.StatusCode != http.StatusNotFound && oapiErr.StatusCode != http.StatusGone { - return false, nil, err - } - return true, nil, nil - }) - handler.SetTimeout(1 * time.Minute) - return handler -} diff --git a/services/redis/v2api/wait/wait_test.go b/services/redis/v2api/wait/wait_test.go deleted file mode 100644 index d0a35c658..000000000 --- a/services/redis/v2api/wait/wait_test.go +++ /dev/null @@ -1,343 +0,0 @@ -package wait - -import ( - "context" - "fmt" - "testing" - "testing/synctest" - "time" - - "github.com/google/go-cmp/cmp" - - "github.com/stackitcloud/stackit-sdk-go/core/oapierror" - "github.com/stackitcloud/stackit-sdk-go/core/utils" - "github.com/stackitcloud/stackit-sdk-go/core/wait" - redis "github.com/stackitcloud/stackit-sdk-go/services/redis/v2api" -) - -type mockSettings struct { - instanceGetFails bool - instanceDeletionSucceedsWithErrors bool - instanceResourceId string - instanceResourceOperation redis.InstanceLastOperationType - instanceResourceState *redis.InstanceStatus - instanceResourceDescription string - - credentialGetFails bool - credentialResourceId string - credentialOperationSucceeds bool - credentialDeletionSucceeds bool -} - -const testRegion = "eu01" - -func newAPIMock(settings *mockSettings) redis.DefaultAPI { - return &redis.DefaultAPIServiceMock{ - GetInstanceExecuteMock: utils.Ptr(func(_ redis.ApiGetInstanceRequest) (*redis.Instance, error) { - if settings.instanceGetFails { - return nil, &oapierror.GenericOpenAPIError{ - StatusCode: 500, - } - } - if settings.instanceResourceOperation == redis.INSTANCELASTOPERATIONTYPE_DELETE && settings.instanceResourceState != nil && *settings.instanceResourceState == redis.INSTANCESTATUS_ACTIVE { - if settings.instanceDeletionSucceedsWithErrors { - return &redis.Instance{ - InstanceId: &settings.instanceResourceId, - Status: settings.instanceResourceState, - LastOperation: redis.InstanceLastOperation{ - Description: settings.instanceResourceDescription, - Type: settings.instanceResourceOperation, - }, - }, nil - } - return nil, &oapierror.GenericOpenAPIError{ - StatusCode: 410, - } - } - - return &redis.Instance{ - InstanceId: &settings.instanceResourceId, - Status: settings.instanceResourceState, - }, nil - }), - GetCredentialsExecuteMock: utils.Ptr(func(_ redis.ApiGetCredentialsRequest) (*redis.CredentialsResponse, error) { - if settings.credentialGetFails { - return nil, &oapierror.GenericOpenAPIError{ - StatusCode: 500, - } - } - - if !settings.credentialOperationSucceeds || settings.credentialDeletionSucceeds { - return nil, &oapierror.GenericOpenAPIError{ - StatusCode: 404, - } - } - - return &redis.CredentialsResponse{ - Id: settings.credentialResourceId, - }, nil - }), - } -} - -func TestCreateOrUpdateInstanceWaitHandler(t *testing.T) { - tests := []struct { - desc string - getFails bool - resourceState *redis.InstanceStatus - wantErr bool - wantResp bool - }{ - { - desc: "create_or_update_succeeded", - getFails: false, - resourceState: utils.Ptr(redis.INSTANCESTATUS_ACTIVE), - wantErr: false, - wantResp: true, - }, - { - desc: "create_or_update_failed", - getFails: false, - resourceState: utils.Ptr(redis.INSTANCESTATUS_FAILED), - wantErr: true, - wantResp: true, - }, - { - desc: "wrong state in response", - getFails: false, - resourceState: utils.Ptr(redis.InstanceStatus("ANOTHER STATE")), - wantErr: true, - wantResp: false, - }, - { - desc: "get_fails", - getFails: true, - wantErr: true, - wantResp: false, - }, - { - desc: "timeout", - getFails: false, - resourceState: utils.Ptr(redis.InstanceStatus("ANOTHER STATE")), - wantErr: true, - wantResp: false, - }, - } - - handlers := map[string]func(context.Context, redis.DefaultAPI, string, string, string) *wait.AsyncActionHandler[redis.Instance]{ - "common logic": createOrUpdateInstanceWaitHandler, - "create": CreateInstanceWaitHandler, - "update": PartialUpdateInstanceWaitHandler, - } - - for handlerDesc, handlerFn := range handlers { - for _, tt := range tests { - t.Run(fmt.Sprintf("%s - %s", handlerDesc, tt.desc), func(t *testing.T) { - synctest.Test(t, func(t *testing.T) { - instanceId := "foo-bar" - - apiClient := newAPIMock(&mockSettings{ - instanceGetFails: tt.getFails, - instanceResourceId: instanceId, - instanceResourceState: tt.resourceState, - }) - - var wantRes *redis.Instance - if tt.wantResp { - wantRes = &redis.Instance{ - InstanceId: &instanceId, - Status: tt.resourceState, - } - } - - handler := handlerFn(context.Background(), apiClient, "pid", testRegion, instanceId) - gotRes, err := handler.SetTimeout(10 * time.Millisecond).WaitWithContext(context.Background()) - - if (err != nil) != tt.wantErr { - t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr) - } - diff := cmp.Diff(gotRes, wantRes) - if diff != "" { - t.Fatalf("handler gotRes = %+v\n want %+v\n diff = %s", gotRes, wantRes, diff) - } - }) - }) - } - } -} - -func TestDeleteInstanceWaitHandler(t *testing.T) { - tests := []struct { - desc string - getFails bool - deleteSucceeedsWithErrors bool - resourceState *redis.InstanceStatus - resourceDescription string - wantErr bool - }{ - { - desc: "delete_succeeded", - getFails: false, - deleteSucceeedsWithErrors: false, - resourceState: utils.Ptr(redis.INSTANCESTATUS_ACTIVE), - wantErr: false, - }, - { - desc: "delete_failed", - getFails: false, - deleteSucceeedsWithErrors: false, - resourceState: utils.Ptr(redis.INSTANCESTATUS_FAILED), - wantErr: true, - }, - { - desc: "delete_succeeds_with_errors", - getFails: false, - resourceState: utils.Ptr(redis.INSTANCESTATUS_ACTIVE), - deleteSucceeedsWithErrors: true, - resourceDescription: "Deleting resource: cf failed with error: DeleteFailed", - wantErr: true, - }, - { - desc: "get_fails", - deleteSucceeedsWithErrors: false, - getFails: true, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.desc, func(t *testing.T) { - synctest.Test(t, func(t *testing.T) { - instanceId := "foo-bar" - - apiClient := newAPIMock(&mockSettings{ - instanceGetFails: tt.getFails, - instanceDeletionSucceedsWithErrors: tt.deleteSucceeedsWithErrors, - instanceResourceId: instanceId, - instanceResourceOperation: redis.INSTANCELASTOPERATIONTYPE_DELETE, - instanceResourceDescription: tt.resourceDescription, - instanceResourceState: tt.resourceState, - }) - - handler := DeleteInstanceWaitHandler(context.Background(), apiClient, "", testRegion, instanceId) - - _, err := handler.SetTimeout(10 * time.Millisecond).WaitWithContext(context.Background()) - - if (err != nil) != tt.wantErr { - t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr) - } - }) - }) - } -} - -func TestCreateCredentialsWaitHandler(t *testing.T) { - tests := []struct { - desc string - getFails bool - operationSucceeds bool - wantErr bool - wantResp bool - }{ - { - desc: "create_succeeded", - getFails: false, - operationSucceeds: true, - wantErr: false, - wantResp: true, - }, - { - desc: "create_failed", - getFails: false, - operationSucceeds: false, - wantErr: true, - wantResp: false, - }, - { - desc: "get_fails", - getFails: true, - wantErr: true, - wantResp: false, - }, - } - for _, tt := range tests { - t.Run(tt.desc, func(t *testing.T) { - synctest.Test(t, func(t *testing.T) { - credentialsId := "foo-bar" - - apiClient := newAPIMock(&mockSettings{ - credentialGetFails: tt.getFails, - credentialResourceId: credentialsId, - credentialOperationSucceeds: tt.operationSucceeds, - }) - - var wantRes *redis.CredentialsResponse - if tt.wantResp { - wantRes = &redis.CredentialsResponse{ - Id: credentialsId, - } - } - - handler := CreateCredentialsWaitHandler(context.Background(), apiClient, "", testRegion, "", credentialsId) - - gotRes, err := handler.SetTimeout(10 * time.Millisecond).WaitWithContext(context.Background()) - - if (err != nil) != tt.wantErr { - t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr) - } - if !cmp.Equal(gotRes, wantRes) { - t.Fatalf("handler gotRes = %v, want %v", gotRes, wantRes) - } - }) - }) - } -} - -func TestDeleteCredentialsWaitHandler(t *testing.T) { - tests := []struct { - desc string - getFails bool - deletionSucceeds bool - wantErr bool - }{ - { - desc: "delete_succeeded", - getFails: false, - deletionSucceeds: true, - wantErr: false, - }, - { - desc: "delete_failed", - getFails: false, - deletionSucceeds: false, - wantErr: true, - }, - { - desc: "get_fails", - getFails: true, - deletionSucceeds: false, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.desc, func(t *testing.T) { - synctest.Test(t, func(t *testing.T) { - credentialsId := "foo-bar" - - apiClient := newAPIMock(&mockSettings{ - credentialGetFails: tt.getFails, - credentialResourceId: credentialsId, - credentialOperationSucceeds: true, - credentialDeletionSucceeds: tt.deletionSucceeds, - }) - - handler := DeleteCredentialsWaitHandler(context.Background(), apiClient, "", testRegion, "", credentialsId) - - _, err := handler.SetTimeout(10 * time.Millisecond).WaitWithContext(context.Background()) - - if (err != nil) != tt.wantErr { - t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr) - } - }) - }) - } -}