Skip to content

Commit d3e17db

Browse files
author
Juan Jesús Padrón Hernández
committed
fix(sca): add missing update tests
1 parent cafa158 commit d3e17db

4 files changed

Lines changed: 463 additions & 28 deletions

File tree

‎internal/cmd/alpha/sca/application/create/create.go‎

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,9 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel,
273273
}
274274

275275
instances := flags.FlagWithDefaultToInt32Value(p, cmd, instancesFlag)
276+
if err := utils.ValidateInstances(instances, instancesFlag); err != nil {
277+
return nil, err
278+
}
276279
if instances < 0 || instances > 10 {
277280
return nil, &errors.FlagValidationError{
278281
Flag: instancesFlag,
@@ -281,38 +284,32 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel,
281284
}
282285

283286
minInstances := flags.FlagWithDefaultToInt32Value(p, cmd, minInstancesFlag)
284-
if minInstances < 0 || minInstances > 10 {
285-
return nil, &errors.FlagValidationError{
286-
Flag: minInstancesFlag,
287-
Details: "must be an integer between 0 and 10",
288-
}
287+
if err := utils.ValidateInstances(minInstances, minInstancesFlag); err != nil {
288+
return nil, err
289289
}
290290

291291
maxInstances := minInstances
292292
if i := flags.FlagToInt32Pointer(p, cmd, maxInstancesFlag); i != nil {
293293
maxInstances = *i
294294
}
295-
if maxInstances < minInstances || maxInstances > 10 {
295+
if err := utils.ValidateInstances(maxInstances, maxInstancesFlag); err != nil {
296+
return nil, err
297+
}
298+
if maxInstances < minInstances {
296299
return nil, &errors.FlagValidationError{
297300
Flag: minInstancesFlag,
298301
Details: fmt.Sprintf("must be an integer between minInstances (%d) and 10", minInstances),
299302
}
300303
}
301304

302305
extertalPort := flags.FlagWithDefaultToInt32Value(p, cmd, externalPortFlag)
303-
if extertalPort <= 1024 || extertalPort > 65535 {
304-
return nil, &errors.FlagValidationError{
305-
Flag: externalPortFlag,
306-
Details: "must be a valid non-privileged port (from 1025 to 65535)",
307-
}
306+
if err := utils.ValidatePort(extertalPort, externalPortFlag); err != nil {
307+
return nil, err
308308
}
309309

310310
cpu := flags.FlagWithDefaultToInt32Value(p, cmd, cpuFlag)
311-
if cpu <= 0 || cpu%1000 != 0 {
312-
return nil, &errors.FlagValidationError{
313-
Flag: cpuFlag,
314-
Details: "must be a valid value divisible by 1000",
315-
}
311+
if err := utils.ValidateCPU(cpu, cpuFlag); err != nil {
312+
return nil, err
316313
}
317314

318315
var envVars map[string]string

‎internal/cmd/alpha/sca/application/update/update.go‎

Lines changed: 72 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,14 @@ func NewCmd(params *types.CmdParams) *cobra.Command {
133133
return &errors.ProjectIdError{}
134134
}
135135

136+
current, err := apiClient.DefaultAPI.GetApplication(ctx, model.ProjectId, model.EnvironmentID, model.ApplicationID).Execute()
137+
if err != nil {
138+
params.Printer.Debug(print.ErrorLevel, "get current application: %v", err)
139+
return err
140+
}
141+
136142
// Call API
137-
req, err := buildRequest(ctx, model, apiClient)
143+
req, err := buildRequest(ctx, model, apiClient, current)
138144
if err != nil {
139145
return err
140146
}
@@ -238,12 +244,7 @@ func networkFromInput(model *inputModel) *sca.Network {
238244
return network
239245
}
240246

241-
func buildRequest(ctx context.Context, model *inputModel, apiClient *sca.APIClient) (*sca.ApiUpdateApplicationRequest, error) {
242-
current, err := apiClient.DefaultAPI.GetApplication(ctx, model.ProjectId, model.EnvironmentID, model.ApplicationID).Execute()
243-
if err != nil {
244-
return nil, fmt.Errorf("failed to get current application instance: %w", err)
245-
}
246-
247+
func buildRequest(ctx context.Context, model *inputModel, apiClient *sca.APIClient, current *sca.Application) (*sca.ApiUpdateApplicationRequest, error) {
247248
// scaling
248249
updatedScaling, err := buildScalingConfig(model, current)
249250
if err != nil {
@@ -263,6 +264,14 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *sca.APIClie
263264
}
264265

265266
func buildScalingConfig(model *inputModel, current *sca.Application) (*sca.Scaling, error) {
267+
if model.ScalingType == nil &&
268+
model.Instances == nil &&
269+
model.MinInstances == nil &&
270+
model.MaxInstances == nil &&
271+
model.RPS == nil &&
272+
model.Concurrency == nil {
273+
return nil, nil
274+
}
266275
// input's scaling type is different from current
267276
if model.ScalingType != nil && *model.ScalingType != scautils.HumanReadableScalingType(current.GetScaling().Type) {
268277
switch *model.ScalingType {
@@ -280,6 +289,21 @@ func buildScalingConfig(model *inputModel, current *sca.Application) (*sca.Scali
280289
},
281290
}, nil
282291
case scalingTypeAuto:
292+
if model.MinInstances == nil {
293+
return nil, &errors.FlagValidationError{
294+
Flag: instancesFlag,
295+
Details: "required flag if replacing scaling type to auto",
296+
}
297+
}
298+
if model.MaxInstances == nil {
299+
model.MaxInstances = model.MinInstances
300+
}
301+
if model.RPS == nil && model.Concurrency == nil {
302+
return nil, &errors.OneOfFlagsIsMissing{
303+
MissingFlags: []string{rpsFlag, concurrencyFlag},
304+
SetFlag: fmt.Sprintf("--%s=%s", scalingTypeFlag.Name(), scalingTypeAuto),
305+
}
306+
}
283307
autoScaling, err := buildAutoscalingConfig(model, nil)
284308
if err != nil {
285309
return nil, err
@@ -438,25 +462,61 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu
438462
envVars = *env
439463
}
440464

465+
instances := flags.FlagToInt32Pointer(p, cmd, instancesFlag)
466+
if instances != nil {
467+
if err := scautils.ValidateInstances(*instances, instancesFlag); err != nil {
468+
return nil, err
469+
}
470+
}
471+
472+
minInstances := flags.FlagToInt32Pointer(p, cmd, minInstancesFlag)
473+
if minInstances != nil {
474+
if err := scautils.ValidateInstances(*minInstances, minInstancesFlag); err != nil {
475+
return nil, err
476+
}
477+
}
478+
479+
maxInstances := flags.FlagToInt32Pointer(p, cmd, maxInstancesFlag)
480+
if maxInstances != nil {
481+
if err := scautils.ValidateInstances(*maxInstances, maxInstancesFlag); err != nil {
482+
return nil, err
483+
}
484+
}
485+
486+
extertalPort := flags.FlagToInt32Pointer(p, cmd, externalPortFlag)
487+
if extertalPort != nil {
488+
if err := scautils.ValidatePort(*extertalPort, externalPortFlag); err != nil {
489+
return nil, err
490+
}
491+
}
492+
493+
cpu := flags.FlagToInt32Pointer(p, cmd, cpuFlag)
494+
if cpu != nil {
495+
if err := scautils.ValidateCPU(*cpu, cpuFlag); err != nil {
496+
return nil, err
497+
}
498+
}
499+
441500
model := inputModel{
442501
GlobalFlagModel: globalFlags,
443502
EnvironmentID: environmentID,
444503
ApplicationID: applicationID,
445504
Stopped: flags.FlagToBoolPointer(p, cmd, stoppedFlag),
446505
Memory: flags.FlagToInt32Pointer(p, cmd, memoryFlag),
447-
CPU: flags.FlagToInt32Pointer(p, cmd, cpuFlag),
506+
CPU: cpu,
507+
Image: flags.FlagWithDefaultToStringValue(p, cmd, imageFlag),
448508
EnvironmentVariables: envVars,
449509
Commands: flags.FlagToStringSliceValue(p, cmd, commandsFlag),
450510
Args: flags.FlagToStringSliceValue(p, cmd, argsFlag),
451511
ScalingType: scalingTypeFlag.Ptr(),
452-
Instances: flags.FlagToInt32Pointer(p, cmd, instancesFlag),
453-
MinInstances: flags.FlagToInt32Pointer(p, cmd, minInstancesFlag),
454-
MaxInstances: flags.FlagToInt32Pointer(p, cmd, maxInstancesFlag),
512+
Instances: instances,
513+
MinInstances: minInstances,
514+
MaxInstances: maxInstances,
455515
ScaleToZero: flags.FlagToBoolPointer(p, cmd, scaleToZeroFlag),
456516
Concurrency: flags.FlagToInt32Pointer(p, cmd, concurrencyFlag),
457517
RPS: flags.FlagToInt32Pointer(p, cmd, rpsFlag),
458518
Public: flags.FlagToBoolPointer(p, cmd, publicFlag),
459-
ContainerExternalPort: flags.FlagToInt32Pointer(p, cmd, externalPortFlag),
519+
ContainerExternalPort: extertalPort,
460520
}
461521

462522
p.DebugInputModel(model)

0 commit comments

Comments
 (0)