344 lines
8.7 KiB
Go
344 lines
8.7 KiB
Go
package sqlserverflexbeta
|
|
|
|
import (
|
|
"context"
|
|
"reflect"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
|
|
"github.com/stackitcloud/stackit-sdk-go/core/utils"
|
|
|
|
sqlserverflex "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/pkg_gen/sqlserverflexbeta"
|
|
)
|
|
|
|
// Used for testing instance operations
|
|
type apiClientInstanceMocked struct {
|
|
instanceId string
|
|
instanceState string
|
|
instanceNetwork sqlserverflex.InstanceNetwork
|
|
instanceIsDeleted bool
|
|
instanceGetFails bool
|
|
}
|
|
|
|
type ListUsersRequestRequest struct{}
|
|
|
|
func (l ListUsersRequestRequest) Page(_ int64) sqlserverflex.ApiListUsersRequestRequest {
|
|
return l
|
|
}
|
|
|
|
func (l ListUsersRequestRequest) Size(_ int64) sqlserverflex.ApiListUsersRequestRequest {
|
|
return l
|
|
}
|
|
|
|
func (l ListUsersRequestRequest) Sort(_ sqlserverflex.UserSort) sqlserverflex.ApiListUsersRequestRequest {
|
|
return l
|
|
}
|
|
|
|
func (l ListUsersRequestRequest) Execute() (*sqlserverflex.ListUserResponse, error) {
|
|
// TODO implement me
|
|
panic("implement me")
|
|
}
|
|
|
|
func (a *apiClientInstanceMocked) ListUsersRequest(
|
|
_ context.Context,
|
|
_ string,
|
|
_ string,
|
|
_ string,
|
|
) sqlserverflex.ApiListUsersRequestRequest {
|
|
return ListUsersRequestRequest{}
|
|
}
|
|
|
|
func (a *apiClientInstanceMocked) ListRolesRequestExecute(
|
|
_ context.Context,
|
|
_ string,
|
|
_ string,
|
|
_ string,
|
|
) (*sqlserverflex.ListRolesResponse, error) {
|
|
return &sqlserverflex.ListRolesResponse{
|
|
Roles: &[]string{},
|
|
}, nil
|
|
}
|
|
|
|
func (a *apiClientInstanceMocked) ListUsersRequestExecute(
|
|
_ context.Context,
|
|
_ string,
|
|
_ string,
|
|
_ string,
|
|
) (*sqlserverflex.ListUserResponse, error) {
|
|
return &sqlserverflex.ListUserResponse{
|
|
Pagination: nil,
|
|
Users: nil,
|
|
}, nil
|
|
}
|
|
|
|
func (a *apiClientInstanceMocked) GetDatabaseRequestExecute(
|
|
_ context.Context,
|
|
_ string,
|
|
_ string,
|
|
_ string,
|
|
_ string,
|
|
) (*sqlserverflex.GetDatabaseResponse, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (a *apiClientInstanceMocked) GetUserRequestExecute(
|
|
_ context.Context,
|
|
_ string,
|
|
_ string,
|
|
_ string,
|
|
_ int64,
|
|
) (*sqlserverflex.GetUserResponse, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (a *apiClientInstanceMocked) GetInstanceRequestExecute(
|
|
_ context.Context,
|
|
_, _, _ string,
|
|
) (*sqlserverflex.GetInstanceResponse, error) {
|
|
if a.instanceGetFails {
|
|
return nil, &oapierror.GenericOpenAPIError{
|
|
StatusCode: 500,
|
|
}
|
|
}
|
|
|
|
if a.instanceIsDeleted {
|
|
return nil, &oapierror.GenericOpenAPIError{
|
|
StatusCode: 404,
|
|
}
|
|
}
|
|
|
|
return &sqlserverflex.GetInstanceResponse{
|
|
Id: &a.instanceId,
|
|
Status: sqlserverflex.GetInstanceResponseGetStatusAttributeType(&a.instanceState),
|
|
Network: &a.instanceNetwork,
|
|
}, nil
|
|
}
|
|
func TestCreateInstanceWaitHandler(t *testing.T) {
|
|
instanceId := utils.Ptr("foo")
|
|
tests := []struct {
|
|
desc string
|
|
instanceId string
|
|
instanceGetFails bool
|
|
instanceState string
|
|
instanceNetwork sqlserverflex.InstanceNetwork
|
|
usersGetErrorStatus int
|
|
wantErr bool
|
|
wantRes *sqlserverflex.GetInstanceResponse
|
|
}{
|
|
//{
|
|
// desc: "create_succeeded",
|
|
// instanceId: *instanceId,
|
|
// instanceGetFails: false,
|
|
// instanceState: *stateSuccess,
|
|
// instanceNetwork: sqlserverflex.InstanceNetwork{
|
|
// AccessScope: nil,
|
|
// Acl: nil,
|
|
// InstanceAddress: utils.Ptr("10.0.0.1"),
|
|
// RouterAddress: utils.Ptr("10.0.0.2"),
|
|
// },
|
|
// wantErr: false,
|
|
// wantRes: &sqlserverflex.GetInstanceResponse{
|
|
// BackupSchedule: nil,
|
|
// Edition: nil,
|
|
// Encryption: nil,
|
|
// FlavorId: nil,
|
|
// Id: instanceId,
|
|
// IsDeletable: nil,
|
|
// Name: nil,
|
|
// Network: &sqlserverflex.InstanceNetwork{
|
|
// AccessScope: nil,
|
|
// Acl: nil,
|
|
// InstanceAddress: utils.Ptr("10.0.0.1"),
|
|
// RouterAddress: utils.Ptr("10.0.0.2"),
|
|
// },
|
|
// Replicas: nil,
|
|
// RetentionDays: nil,
|
|
// Status: sqlserverflex.GetInstanceResponseGetStatusAttributeType(stateSuccess),
|
|
// Storage: nil,
|
|
// Version: nil,
|
|
// },
|
|
// },
|
|
{
|
|
desc: "create_failed",
|
|
instanceId: *instanceId,
|
|
instanceGetFails: false,
|
|
instanceState: InstanceStateFailed,
|
|
wantErr: true,
|
|
wantRes: nil,
|
|
},
|
|
{
|
|
desc: "create_failed_2",
|
|
instanceId: *instanceId,
|
|
instanceGetFails: false,
|
|
instanceState: InstanceStateEmpty,
|
|
wantErr: true,
|
|
wantRes: nil,
|
|
},
|
|
{
|
|
desc: "instance_get_fails",
|
|
instanceId: *instanceId,
|
|
instanceGetFails: true,
|
|
wantErr: true,
|
|
wantRes: nil,
|
|
},
|
|
{
|
|
desc: "timeout",
|
|
instanceId: *instanceId,
|
|
instanceGetFails: false,
|
|
instanceState: InstanceStateProcessing,
|
|
wantErr: true,
|
|
wantRes: nil,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(
|
|
tt.desc, func(t *testing.T) {
|
|
apiClient := &apiClientInstanceMocked{
|
|
instanceId: tt.instanceId,
|
|
instanceState: tt.instanceState,
|
|
instanceGetFails: tt.instanceGetFails,
|
|
}
|
|
|
|
handler := CreateInstanceWaitHandler(context.Background(), apiClient, "", tt.instanceId, "")
|
|
|
|
gotRes, err := handler.SetTimeout(10 * time.Millisecond).SetSleepBeforeWait(1 * time.Millisecond).WaitWithContext(context.Background())
|
|
if (err != nil) != tt.wantErr {
|
|
t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
|
|
if !reflect.DeepEqual(gotRes, tt.wantRes) {
|
|
t.Fatalf("handler gotRes = %v, want %v", gotRes, tt.wantRes)
|
|
}
|
|
},
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestUpdateInstanceWaitHandler(t *testing.T) {
|
|
t.Skip("skipping - needs refactoring")
|
|
tests := []struct {
|
|
desc string
|
|
instanceGetFails bool
|
|
instanceState string
|
|
wantErr bool
|
|
wantResp bool
|
|
}{
|
|
{
|
|
desc: "update_succeeded",
|
|
instanceGetFails: false,
|
|
instanceState: InstanceStateSuccess,
|
|
wantErr: false,
|
|
wantResp: true,
|
|
},
|
|
{
|
|
desc: "update_failed",
|
|
instanceGetFails: false,
|
|
instanceState: InstanceStateFailed,
|
|
wantErr: true,
|
|
wantResp: true,
|
|
},
|
|
{
|
|
desc: "update_failed_2",
|
|
instanceGetFails: false,
|
|
instanceState: InstanceStateEmpty,
|
|
wantErr: true,
|
|
wantResp: true,
|
|
},
|
|
{
|
|
desc: "get_fails",
|
|
instanceGetFails: true,
|
|
wantErr: true,
|
|
wantResp: false,
|
|
},
|
|
{
|
|
desc: "timeout",
|
|
instanceGetFails: false,
|
|
instanceState: InstanceStateProcessing,
|
|
wantErr: true,
|
|
wantResp: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(
|
|
tt.desc, func(t *testing.T) {
|
|
instanceId := "foo-bar"
|
|
|
|
apiClient := &apiClientInstanceMocked{
|
|
instanceId: instanceId,
|
|
instanceState: tt.instanceState,
|
|
instanceGetFails: tt.instanceGetFails,
|
|
}
|
|
|
|
var wantRes *sqlserverflex.GetInstanceResponse
|
|
if tt.wantResp {
|
|
wantRes = &sqlserverflex.GetInstanceResponse{
|
|
Id: &instanceId,
|
|
Status: sqlserverflex.GetInstanceResponseGetStatusAttributeType(utils.Ptr(tt.instanceState)),
|
|
}
|
|
}
|
|
|
|
handler := UpdateInstanceWaitHandler(context.Background(), apiClient, "", instanceId, "")
|
|
|
|
gotRes, err := handler.SetTimeout(10 * time.Millisecond).SetSleepBeforeWait(1 * 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 TestDeleteInstanceWaitHandler(t *testing.T) {
|
|
tests := []struct {
|
|
desc string
|
|
instanceGetFails bool
|
|
instanceState string
|
|
wantErr bool
|
|
}{
|
|
{
|
|
desc: "delete_succeeded",
|
|
instanceGetFails: false,
|
|
instanceState: InstanceStateSuccess,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
desc: "delete_failed",
|
|
instanceGetFails: false,
|
|
instanceState: InstanceStateFailed,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
desc: "get_fails",
|
|
instanceGetFails: true,
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(
|
|
tt.desc, func(t *testing.T) {
|
|
instanceId := "foo-bar"
|
|
|
|
apiClient := &apiClientInstanceMocked{
|
|
instanceGetFails: tt.instanceGetFails,
|
|
instanceIsDeleted: tt.instanceState == InstanceStateSuccess,
|
|
instanceId: instanceId,
|
|
instanceState: tt.instanceState,
|
|
}
|
|
|
|
handler := DeleteInstanceWaitHandler(context.Background(), apiClient, "", 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)
|
|
}
|
|
},
|
|
)
|
|
}
|
|
}
|