From c30fd8fbb924fed5442db9c6a963bf0c9a3f7926 Mon Sep 17 00:00:00 2001 From: Marcel Jacek Date: Wed, 19 Feb 2025 17:16:12 +0100 Subject: [PATCH 1/3] - add nil pointer checks - add tests for the outputResult functions within the network-area commands --- .../cmd/beta/network-area/create/create.go | 12 +++++-- .../beta/network-area/create/create_test.go | 35 +++++++++++++++++++ .../cmd/beta/network-area/delete/delete.go | 3 ++ .../beta/network-area/describe/describe.go | 22 +++++++----- .../network-area/describe/describe_test.go | 35 +++++++++++++++++++ internal/cmd/beta/network-area/list/list.go | 3 ++ .../cmd/beta/network-area/list/list_test.go | 27 ++++++++++++++ .../network-range/create/create.go | 6 ++-- .../network-range/create/create_test.go | 28 +++++++++++++++ .../network-range/delete/delete.go | 6 ++++ .../network-range/describe/describe.go | 3 ++ .../network-range/describe/describe_test.go | 34 ++++++++++++++++++ .../network-area/network-range/list/list.go | 3 ++ .../network-range/list/list_test.go | 27 ++++++++++++++ .../beta/network-area/route/create/create.go | 9 +++-- .../network-area/route/create/create_test.go | 28 +++++++++++++++ .../beta/network-area/route/delete/delete.go | 3 ++ .../network-area/route/describe/describe.go | 4 +-- .../route/describe/describe_test.go | 27 ++++++++++++++ .../cmd/beta/network-area/route/list/list.go | 3 ++ .../beta/network-area/route/list/list_test.go | 27 ++++++++++++++ .../beta/network-area/route/update/update.go | 9 +++-- .../network-area/route/update/update_test.go | 28 +++++++++++++++ .../cmd/beta/network-area/update/update.go | 9 +++-- .../beta/network-area/update/update_test.go | 28 +++++++++++++++ 25 files changed, 394 insertions(+), 25 deletions(-) diff --git a/internal/cmd/beta/network-area/create/create.go b/internal/cmd/beta/network-area/create/create.go index 2df562c6d..ca94b2105 100644 --- a/internal/cmd/beta/network-area/create/create.go +++ b/internal/cmd/beta/network-area/create/create.go @@ -84,6 +84,9 @@ func NewCmd(p *print.Printer) *cobra.Command { p.Debug(print.ErrorLevel, "get organization name: %v", err) orgLabel = *model.OrganizationId } + if orgLabel == "" { + orgLabel = *model.OrganizationId + } } else { p.Debug(print.ErrorLevel, "configure resource manager client: %v", err) } @@ -103,7 +106,7 @@ func NewCmd(p *print.Printer) *cobra.Command { return fmt.Errorf("create network area: %w", err) } - return outputResult(p, model, orgLabel, resp) + return outputResult(p, model.OutputFormat, orgLabel, resp) }, } configureFlags(cmd) @@ -178,8 +181,11 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli return req.CreateNetworkAreaPayload(payload) } -func outputResult(p *print.Printer, model *inputModel, orgLabel string, networkArea *iaas.NetworkArea) error { - switch model.OutputFormat { +func outputResult(p *print.Printer, outputFormat, orgLabel string, networkArea *iaas.NetworkArea) error { + if networkArea == nil { + return fmt.Errorf("network area is nil") + } + switch outputFormat { case print.JSONOutputFormat: details, err := json.MarshalIndent(networkArea, "", " ") if err != nil { diff --git a/internal/cmd/beta/network-area/create/create_test.go b/internal/cmd/beta/network-area/create/create_test.go index 2912000db..b6a34625f 100644 --- a/internal/cmd/beta/network-area/create/create_test.go +++ b/internal/cmd/beta/network-area/create/create_test.go @@ -246,3 +246,38 @@ func TestBuildRequest(t *testing.T) { }) } } + +func Test_outputResult(t *testing.T) { + type args struct { + outputFormat string + orgLabel string + networkArea *iaas.NetworkArea + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: true, + }, + { + name: "set empty network area", + args: args{ + networkArea: &iaas.NetworkArea{}, + }, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.orgLabel, tt.args.networkArea); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/beta/network-area/delete/delete.go b/internal/cmd/beta/network-area/delete/delete.go index db4ddd117..0f97499cb 100644 --- a/internal/cmd/beta/network-area/delete/delete.go +++ b/internal/cmd/beta/network-area/delete/delete.go @@ -63,6 +63,9 @@ func NewCmd(p *print.Printer) *cobra.Command { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = model.AreaId } + if networkAreaLabel == "" { + networkAreaLabel = model.AreaId + } if !model.AssumeYes { prompt := fmt.Sprintf("Are you sure you want to delete network area %q?", networkAreaLabel) diff --git a/internal/cmd/beta/network-area/describe/describe.go b/internal/cmd/beta/network-area/describe/describe.go index 13d2707d4..51be436b9 100644 --- a/internal/cmd/beta/network-area/describe/describe.go +++ b/internal/cmd/beta/network-area/describe/describe.go @@ -127,6 +127,9 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli } func outputResult(p *print.Printer, outputFormat string, networkArea *iaas.NetworkArea, attachedProjects []string) error { + if networkArea == nil { + return fmt.Errorf("network area is nil") + } switch outputFormat { case print.JSONOutputFormat: details, err := json.MarshalIndent(networkArea, "", " ") @@ -146,16 +149,19 @@ func outputResult(p *print.Printer, outputFormat string, networkArea *iaas.Netwo return nil default: var routes []string - if networkArea.Ipv4.Routes != nil { - for _, route := range *networkArea.Ipv4.Routes { - routes = append(routes, fmt.Sprintf("next hop: %s\nprefix: %s", *route.Nexthop, *route.Prefix)) + var networkRanges []string + + if networkArea.Ipv4 != nil { + if networkArea.Ipv4.Routes != nil { + for _, route := range *networkArea.Ipv4.Routes { + routes = append(routes, fmt.Sprintf("next hop: %s\nprefix: %s", *route.Nexthop, *route.Prefix)) + } } - } - var networkRanges []string - if networkArea.Ipv4.NetworkRanges != nil { - for _, networkRange := range *networkArea.Ipv4.NetworkRanges { - networkRanges = append(networkRanges, *networkRange.Prefix) + if networkArea.Ipv4.NetworkRanges != nil { + for _, networkRange := range *networkArea.Ipv4.NetworkRanges { + networkRanges = append(networkRanges, *networkRange.Prefix) + } } } diff --git a/internal/cmd/beta/network-area/describe/describe_test.go b/internal/cmd/beta/network-area/describe/describe_test.go index 98975e10e..24c18cb06 100644 --- a/internal/cmd/beta/network-area/describe/describe_test.go +++ b/internal/cmd/beta/network-area/describe/describe_test.go @@ -227,3 +227,38 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + networkArea *iaas.NetworkArea + attachedProjects []string + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: true, + }, + { + name: "set networkArea", + args: args{ + networkArea: &iaas.NetworkArea{}, + }, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.networkArea, tt.args.attachedProjects); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/beta/network-area/list/list.go b/internal/cmd/beta/network-area/list/list.go index cb4916a79..3dba3d2ad 100644 --- a/internal/cmd/beta/network-area/list/list.go +++ b/internal/cmd/beta/network-area/list/list.go @@ -81,6 +81,9 @@ func NewCmd(p *print.Printer) *cobra.Command { p.Debug(print.ErrorLevel, "get organization name: %v", err) orgLabel = *model.OrganizationId } + if orgLabel == "" { + orgLabel = *model.OrganizationId + } } else { p.Debug(print.ErrorLevel, "configure resource manager client: %v", err) } diff --git a/internal/cmd/beta/network-area/list/list_test.go b/internal/cmd/beta/network-area/list/list_test.go index 46282da26..198281671 100644 --- a/internal/cmd/beta/network-area/list/list_test.go +++ b/internal/cmd/beta/network-area/list/list_test.go @@ -186,3 +186,30 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + networkAreas []iaas.NetworkArea + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.networkAreas); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/beta/network-area/network-range/create/create.go b/internal/cmd/beta/network-area/network-range/create/create.go index 812ea18a7..297ee0e7f 100644 --- a/internal/cmd/beta/network-area/network-range/create/create.go +++ b/internal/cmd/beta/network-area/network-range/create/create.go @@ -88,7 +88,7 @@ func NewCmd(p *print.Printer) *cobra.Command { return err } - return outputResult(p, model, networkAreaLabel, networkRange) + return outputResult(p, model.OutputFormat, networkAreaLabel, networkRange) }, } configureFlags(cmd) @@ -138,8 +138,8 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli return req.CreateNetworkAreaRangePayload(payload) } -func outputResult(p *print.Printer, model *inputModel, networkAreaLabel string, networkRange iaas.NetworkRange) error { - switch model.OutputFormat { +func outputResult(p *print.Printer, outputFormat, networkAreaLabel string, networkRange iaas.NetworkRange) error { + switch outputFormat { case print.JSONOutputFormat: details, err := json.MarshalIndent(networkRange, "", " ") if err != nil { diff --git a/internal/cmd/beta/network-area/network-range/create/create_test.go b/internal/cmd/beta/network-area/network-range/create/create_test.go index 028259648..9e69bb304 100644 --- a/internal/cmd/beta/network-area/network-range/create/create_test.go +++ b/internal/cmd/beta/network-area/network-range/create/create_test.go @@ -215,3 +215,31 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + networkAreaLabel string + networkRange iaas.NetworkRange + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.networkAreaLabel, tt.args.networkRange); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/beta/network-area/network-range/delete/delete.go b/internal/cmd/beta/network-area/network-range/delete/delete.go index 90fb8a486..30d48d2cc 100644 --- a/internal/cmd/beta/network-area/network-range/delete/delete.go +++ b/internal/cmd/beta/network-area/network-range/delete/delete.go @@ -61,11 +61,17 @@ func NewCmd(p *print.Printer) *cobra.Command { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = *model.NetworkAreaId } + if networkAreaLabel == "" { + networkAreaLabel = *model.NetworkAreaId + } networkRangeLabel, err := iaasUtils.GetNetworkRangePrefix(ctx, apiClient, *model.OrganizationId, *model.NetworkAreaId, model.NetworkRangeId) if err != nil { p.Debug(print.ErrorLevel, "get network range prefix: %v", err) networkRangeLabel = model.NetworkRangeId } + if networkRangeLabel == "" { + networkRangeLabel = model.NetworkRangeId + } if !model.AssumeYes { prompt := fmt.Sprintf("Are you sure you want to delete network range %q on STACKIT Network Area (SNA) %q?", networkRangeLabel, networkAreaLabel) diff --git a/internal/cmd/beta/network-area/network-range/describe/describe.go b/internal/cmd/beta/network-area/network-range/describe/describe.go index f97fc0b57..a4c57f7eb 100644 --- a/internal/cmd/beta/network-area/network-range/describe/describe.go +++ b/internal/cmd/beta/network-area/network-range/describe/describe.go @@ -109,6 +109,9 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli } func outputResult(p *print.Printer, outputFormat string, networkRange *iaas.NetworkRange) error { + if networkRange == nil { + return fmt.Errorf("network range is nil") + } switch outputFormat { case print.JSONOutputFormat: details, err := json.MarshalIndent(networkRange, "", " ") diff --git a/internal/cmd/beta/network-area/network-range/describe/describe_test.go b/internal/cmd/beta/network-area/network-range/describe/describe_test.go index bce857d1c..c03229238 100644 --- a/internal/cmd/beta/network-area/network-range/describe/describe_test.go +++ b/internal/cmd/beta/network-area/network-range/describe/describe_test.go @@ -234,3 +234,37 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + networkRange *iaas.NetworkRange + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: true, + }, + { + name: "set networkRange", + args: args{ + networkRange: &iaas.NetworkRange{}, + }, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.networkRange); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/beta/network-area/network-range/list/list.go b/internal/cmd/beta/network-area/network-range/list/list.go index e2115d9a7..c59abc83a 100644 --- a/internal/cmd/beta/network-area/network-range/list/list.go +++ b/internal/cmd/beta/network-area/network-range/list/list.go @@ -80,6 +80,9 @@ func NewCmd(p *print.Printer) *cobra.Command { p.Debug(print.ErrorLevel, "get organization name: %v", err) networkAreaLabel = *model.NetworkAreaId } + if networkAreaLabel == "" { + networkAreaLabel = *model.NetworkAreaId + } p.Info("No network ranges found for SNA %q\n", networkAreaLabel) return nil } diff --git a/internal/cmd/beta/network-area/network-range/list/list_test.go b/internal/cmd/beta/network-area/network-range/list/list_test.go index 07ca84414..b3c675b0a 100644 --- a/internal/cmd/beta/network-area/network-range/list/list_test.go +++ b/internal/cmd/beta/network-area/network-range/list/list_test.go @@ -210,3 +210,30 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + networkRanges []iaas.NetworkRange + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.networkRanges); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/beta/network-area/route/create/create.go b/internal/cmd/beta/network-area/route/create/create.go index e1b330329..88800cc0b 100644 --- a/internal/cmd/beta/network-area/route/create/create.go +++ b/internal/cmd/beta/network-area/route/create/create.go @@ -74,6 +74,9 @@ func NewCmd(p *print.Printer) *cobra.Command { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = *model.NetworkAreaId } + if networkAreaLabel == "" { + networkAreaLabel = *model.NetworkAreaId + } if !model.AssumeYes { prompt := fmt.Sprintf("Are you sure you want to create a static route for STACKIT Network Area (SNA) %q?", networkAreaLabel) @@ -99,7 +102,7 @@ func NewCmd(p *print.Printer) *cobra.Command { return err } - return outputResult(p, model, networkAreaLabel, route) + return outputResult(p, model.OutputFormat, networkAreaLabel, route) }, } configureFlags(cmd) @@ -165,8 +168,8 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli return req.CreateNetworkAreaRoutePayload(payload) } -func outputResult(p *print.Printer, model *inputModel, networkAreaLabel string, route iaas.Route) error { - switch model.OutputFormat { +func outputResult(p *print.Printer, outputFormat, networkAreaLabel string, route iaas.Route) error { + switch outputFormat { case print.JSONOutputFormat: details, err := json.MarshalIndent(route, "", " ") if err != nil { diff --git a/internal/cmd/beta/network-area/route/create/create_test.go b/internal/cmd/beta/network-area/route/create/create_test.go index b106a937b..819b9fa0b 100644 --- a/internal/cmd/beta/network-area/route/create/create_test.go +++ b/internal/cmd/beta/network-area/route/create/create_test.go @@ -261,3 +261,31 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + networkAreaLabel string + route iaas.Route + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.networkAreaLabel, tt.args.route); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/beta/network-area/route/delete/delete.go b/internal/cmd/beta/network-area/route/delete/delete.go index 48dad6918..a83c73056 100644 --- a/internal/cmd/beta/network-area/route/delete/delete.go +++ b/internal/cmd/beta/network-area/route/delete/delete.go @@ -61,6 +61,9 @@ func NewCmd(p *print.Printer) *cobra.Command { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = *model.NetworkAreaId } + if networkAreaLabel == "" { + networkAreaLabel = *model.NetworkAreaId + } if !model.AssumeYes { prompt := fmt.Sprintf("Are you sure you want to delete static route %q on STACKIT Network Area (SNA) %q?", model.RouteId, networkAreaLabel) diff --git a/internal/cmd/beta/network-area/route/describe/describe.go b/internal/cmd/beta/network-area/route/describe/describe.go index 2e99f8c67..fa03a07b2 100644 --- a/internal/cmd/beta/network-area/route/describe/describe.go +++ b/internal/cmd/beta/network-area/route/describe/describe.go @@ -70,7 +70,7 @@ func NewCmd(p *print.Printer) *cobra.Command { return fmt.Errorf("describe static route: %w", err) } - return outputResult(p, model.OutputFormat, resp) + return outputResult(p, model.OutputFormat, *resp) }, } configureFlags(cmd) @@ -113,7 +113,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli return req } -func outputResult(p *print.Printer, outputFormat string, route *iaas.Route) error { +func outputResult(p *print.Printer, outputFormat string, route iaas.Route) error { switch outputFormat { case print.JSONOutputFormat: details, err := json.MarshalIndent(route, "", " ") diff --git a/internal/cmd/beta/network-area/route/describe/describe_test.go b/internal/cmd/beta/network-area/route/describe/describe_test.go index 08fba5d5f..0668d5f75 100644 --- a/internal/cmd/beta/network-area/route/describe/describe_test.go +++ b/internal/cmd/beta/network-area/route/describe/describe_test.go @@ -234,3 +234,30 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + route iaas.Route + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.route); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/beta/network-area/route/list/list.go b/internal/cmd/beta/network-area/route/list/list.go index c948e271a..1584e7d07 100644 --- a/internal/cmd/beta/network-area/route/list/list.go +++ b/internal/cmd/beta/network-area/route/list/list.go @@ -80,6 +80,9 @@ func NewCmd(p *print.Printer) *cobra.Command { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = *model.NetworkAreaId } + if networkAreaLabel == "" { + networkAreaLabel = *model.NetworkAreaId + } p.Info("No static routes found for STACKIT Network Area %q\n", networkAreaLabel) return nil } diff --git a/internal/cmd/beta/network-area/route/list/list_test.go b/internal/cmd/beta/network-area/route/list/list_test.go index 929ed0543..a90d41620 100644 --- a/internal/cmd/beta/network-area/route/list/list_test.go +++ b/internal/cmd/beta/network-area/route/list/list_test.go @@ -210,3 +210,30 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + routes []iaas.Route + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.routes); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/beta/network-area/route/update/update.go b/internal/cmd/beta/network-area/route/update/update.go index 511f9ed4d..2316e8877 100644 --- a/internal/cmd/beta/network-area/route/update/update.go +++ b/internal/cmd/beta/network-area/route/update/update.go @@ -70,6 +70,9 @@ func NewCmd(p *print.Printer) *cobra.Command { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = *model.NetworkAreaId } + if networkAreaLabel == "" { + networkAreaLabel = *model.NetworkAreaId + } // Call API req := buildRequest(ctx, model, apiClient) @@ -78,7 +81,7 @@ func NewCmd(p *print.Printer) *cobra.Command { return fmt.Errorf("create static route: %w", err) } - return outputResult(p, model, networkAreaLabel, *resp) + return outputResult(p, model.OutputFormat, networkAreaLabel, *resp) }, } configureFlags(cmd) @@ -141,8 +144,8 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli return req } -func outputResult(p *print.Printer, model *inputModel, networkAreaLabel string, route iaas.Route) error { - switch model.OutputFormat { +func outputResult(p *print.Printer, outputFormat, networkAreaLabel string, route iaas.Route) error { + switch outputFormat { case print.JSONOutputFormat: details, err := json.MarshalIndent(route, "", " ") if err != nil { diff --git a/internal/cmd/beta/network-area/route/update/update_test.go b/internal/cmd/beta/network-area/route/update/update_test.go index f9b1ddd06..9eede4ae3 100644 --- a/internal/cmd/beta/network-area/route/update/update_test.go +++ b/internal/cmd/beta/network-area/route/update/update_test.go @@ -267,3 +267,31 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + networkAreaLabel string + route iaas.Route + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.networkAreaLabel, tt.args.route); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/internal/cmd/beta/network-area/update/update.go b/internal/cmd/beta/network-area/update/update.go index a7d7bb722..457523d19 100644 --- a/internal/cmd/beta/network-area/update/update.go +++ b/internal/cmd/beta/network-area/update/update.go @@ -76,6 +76,9 @@ func NewCmd(p *print.Printer) *cobra.Command { p.Debug(print.ErrorLevel, "get organization name: %v", err) orgLabel = *model.OrganizationId } + if orgLabel == "" { + orgLabel = *model.OrganizationId + } } else { p.Debug(print.ErrorLevel, "configure resource manager client: %v", err) } @@ -95,7 +98,7 @@ func NewCmd(p *print.Printer) *cobra.Command { return fmt.Errorf("update network area: %w", err) } - return outputResult(p, model, orgLabel, resp) + return outputResult(p, model.OutputFormat, orgLabel, *resp) }, } configureFlags(cmd) @@ -160,8 +163,8 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli return req.PartialUpdateNetworkAreaPayload(payload) } -func outputResult(p *print.Printer, model *inputModel, projectLabel string, networkArea *iaas.NetworkArea) error { - switch model.OutputFormat { +func outputResult(p *print.Printer, outputFormat, projectLabel string, networkArea iaas.NetworkArea) error { + switch outputFormat { case print.JSONOutputFormat: details, err := json.MarshalIndent(networkArea, "", " ") if err != nil { diff --git a/internal/cmd/beta/network-area/update/update_test.go b/internal/cmd/beta/network-area/update/update_test.go index f91e0b583..cb9e1e670 100644 --- a/internal/cmd/beta/network-area/update/update_test.go +++ b/internal/cmd/beta/network-area/update/update_test.go @@ -266,3 +266,31 @@ func TestBuildRequest(t *testing.T) { }) } } + +func TestOutputResult(t *testing.T) { + type args struct { + outputFormat string + projectLabel string + networkArea iaas.NetworkArea + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "empty", + args: args{}, + wantErr: false, + }, + } + p := print.NewPrinter() + p.Cmd = NewCmd(p) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := outputResult(p, tt.args.outputFormat, tt.args.projectLabel, tt.args.networkArea); (err != nil) != tt.wantErr { + t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} From f709f08079e23149717771f3d4f94406c97f6de4 Mon Sep 17 00:00:00 2001 From: Marcel Jacek Date: Thu, 20 Feb 2025 10:36:27 +0100 Subject: [PATCH 2/3] fix: consistent `else if`-clause for labels --- internal/cmd/beta/network-area/create/create.go | 3 +-- internal/cmd/beta/network-area/delete/delete.go | 3 +-- internal/cmd/beta/network-area/list/list.go | 3 +-- .../cmd/beta/network-area/network-range/delete/delete.go | 6 ++---- internal/cmd/beta/network-area/network-range/list/list.go | 3 +-- internal/cmd/beta/network-area/route/create/create.go | 3 +-- internal/cmd/beta/network-area/route/delete/delete.go | 3 +-- internal/cmd/beta/network-area/route/list/list.go | 3 +-- internal/cmd/beta/network-area/route/update/update.go | 3 +-- internal/cmd/beta/network-area/update/update.go | 3 +-- 10 files changed, 11 insertions(+), 22 deletions(-) diff --git a/internal/cmd/beta/network-area/create/create.go b/internal/cmd/beta/network-area/create/create.go index ca94b2105..0987e96c4 100644 --- a/internal/cmd/beta/network-area/create/create.go +++ b/internal/cmd/beta/network-area/create/create.go @@ -83,8 +83,7 @@ func NewCmd(p *print.Printer) *cobra.Command { if err != nil { p.Debug(print.ErrorLevel, "get organization name: %v", err) orgLabel = *model.OrganizationId - } - if orgLabel == "" { + } else if orgLabel == "" { orgLabel = *model.OrganizationId } } else { diff --git a/internal/cmd/beta/network-area/delete/delete.go b/internal/cmd/beta/network-area/delete/delete.go index 0f97499cb..3952efc42 100644 --- a/internal/cmd/beta/network-area/delete/delete.go +++ b/internal/cmd/beta/network-area/delete/delete.go @@ -62,8 +62,7 @@ func NewCmd(p *print.Printer) *cobra.Command { if err != nil { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = model.AreaId - } - if networkAreaLabel == "" { + } else if networkAreaLabel == "" { networkAreaLabel = model.AreaId } diff --git a/internal/cmd/beta/network-area/list/list.go b/internal/cmd/beta/network-area/list/list.go index 3dba3d2ad..2280da2ad 100644 --- a/internal/cmd/beta/network-area/list/list.go +++ b/internal/cmd/beta/network-area/list/list.go @@ -80,8 +80,7 @@ func NewCmd(p *print.Printer) *cobra.Command { if err != nil { p.Debug(print.ErrorLevel, "get organization name: %v", err) orgLabel = *model.OrganizationId - } - if orgLabel == "" { + } else if orgLabel == "" { orgLabel = *model.OrganizationId } } else { diff --git a/internal/cmd/beta/network-area/network-range/delete/delete.go b/internal/cmd/beta/network-area/network-range/delete/delete.go index 30d48d2cc..b7740dd9e 100644 --- a/internal/cmd/beta/network-area/network-range/delete/delete.go +++ b/internal/cmd/beta/network-area/network-range/delete/delete.go @@ -60,16 +60,14 @@ func NewCmd(p *print.Printer) *cobra.Command { if err != nil { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = *model.NetworkAreaId - } - if networkAreaLabel == "" { + } else if networkAreaLabel == "" { networkAreaLabel = *model.NetworkAreaId } networkRangeLabel, err := iaasUtils.GetNetworkRangePrefix(ctx, apiClient, *model.OrganizationId, *model.NetworkAreaId, model.NetworkRangeId) if err != nil { p.Debug(print.ErrorLevel, "get network range prefix: %v", err) networkRangeLabel = model.NetworkRangeId - } - if networkRangeLabel == "" { + } else if networkRangeLabel == "" { networkRangeLabel = model.NetworkRangeId } diff --git a/internal/cmd/beta/network-area/network-range/list/list.go b/internal/cmd/beta/network-area/network-range/list/list.go index c59abc83a..b484cea4e 100644 --- a/internal/cmd/beta/network-area/network-range/list/list.go +++ b/internal/cmd/beta/network-area/network-range/list/list.go @@ -79,8 +79,7 @@ func NewCmd(p *print.Printer) *cobra.Command { if err != nil { p.Debug(print.ErrorLevel, "get organization name: %v", err) networkAreaLabel = *model.NetworkAreaId - } - if networkAreaLabel == "" { + } else if networkAreaLabel == "" { networkAreaLabel = *model.NetworkAreaId } p.Info("No network ranges found for SNA %q\n", networkAreaLabel) diff --git a/internal/cmd/beta/network-area/route/create/create.go b/internal/cmd/beta/network-area/route/create/create.go index 88800cc0b..d73c337c3 100644 --- a/internal/cmd/beta/network-area/route/create/create.go +++ b/internal/cmd/beta/network-area/route/create/create.go @@ -73,8 +73,7 @@ func NewCmd(p *print.Printer) *cobra.Command { if err != nil { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = *model.NetworkAreaId - } - if networkAreaLabel == "" { + } else if networkAreaLabel == "" { networkAreaLabel = *model.NetworkAreaId } diff --git a/internal/cmd/beta/network-area/route/delete/delete.go b/internal/cmd/beta/network-area/route/delete/delete.go index a83c73056..0626c67a6 100644 --- a/internal/cmd/beta/network-area/route/delete/delete.go +++ b/internal/cmd/beta/network-area/route/delete/delete.go @@ -60,8 +60,7 @@ func NewCmd(p *print.Printer) *cobra.Command { if err != nil { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = *model.NetworkAreaId - } - if networkAreaLabel == "" { + } else if networkAreaLabel == "" { networkAreaLabel = *model.NetworkAreaId } diff --git a/internal/cmd/beta/network-area/route/list/list.go b/internal/cmd/beta/network-area/route/list/list.go index 1584e7d07..c7e4f46f0 100644 --- a/internal/cmd/beta/network-area/route/list/list.go +++ b/internal/cmd/beta/network-area/route/list/list.go @@ -79,8 +79,7 @@ func NewCmd(p *print.Printer) *cobra.Command { if err != nil { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = *model.NetworkAreaId - } - if networkAreaLabel == "" { + } else if networkAreaLabel == "" { networkAreaLabel = *model.NetworkAreaId } p.Info("No static routes found for STACKIT Network Area %q\n", networkAreaLabel) diff --git a/internal/cmd/beta/network-area/route/update/update.go b/internal/cmd/beta/network-area/route/update/update.go index 2316e8877..e378cdcf4 100644 --- a/internal/cmd/beta/network-area/route/update/update.go +++ b/internal/cmd/beta/network-area/route/update/update.go @@ -69,8 +69,7 @@ func NewCmd(p *print.Printer) *cobra.Command { if err != nil { p.Debug(print.ErrorLevel, "get network area name: %v", err) networkAreaLabel = *model.NetworkAreaId - } - if networkAreaLabel == "" { + } else if networkAreaLabel == "" { networkAreaLabel = *model.NetworkAreaId } diff --git a/internal/cmd/beta/network-area/update/update.go b/internal/cmd/beta/network-area/update/update.go index 457523d19..7fe9f4602 100644 --- a/internal/cmd/beta/network-area/update/update.go +++ b/internal/cmd/beta/network-area/update/update.go @@ -75,8 +75,7 @@ func NewCmd(p *print.Printer) *cobra.Command { if err != nil { p.Debug(print.ErrorLevel, "get organization name: %v", err) orgLabel = *model.OrganizationId - } - if orgLabel == "" { + } else if orgLabel == "" { orgLabel = *model.OrganizationId } } else { From 8fe07a332c5ba3c88c9782028aafb27c461a97a9 Mon Sep 17 00:00:00 2001 From: Marcel Jacek Date: Fri, 21 Feb 2025 08:50:22 +0100 Subject: [PATCH 3/3] implement review feedback --- internal/cmd/beta/network-area/list/list_test.go | 14 ++++++++++++++ .../network-range/create/create_test.go | 7 +++++++ .../beta/network-area/network-range/list/list.go | 3 ++- .../network-area/network-range/list/list_test.go | 14 ++++++++++++++ .../beta/network-area/route/create/create_test.go | 7 +++++++ .../network-area/route/describe/describe_test.go | 7 +++++++ .../cmd/beta/network-area/route/list/list_test.go | 14 ++++++++++++++ .../beta/network-area/route/update/update_test.go | 7 +++++++ .../cmd/beta/network-area/update/update_test.go | 7 +++++++ 9 files changed, 79 insertions(+), 1 deletion(-) diff --git a/internal/cmd/beta/network-area/list/list_test.go b/internal/cmd/beta/network-area/list/list_test.go index 198281671..01d94cb37 100644 --- a/internal/cmd/beta/network-area/list/list_test.go +++ b/internal/cmd/beta/network-area/list/list_test.go @@ -202,6 +202,20 @@ func TestOutputResult(t *testing.T) { args: args{}, wantErr: false, }, + { + name: "empty network areas slice", + args: args{ + networkAreas: []iaas.NetworkArea{}, + }, + wantErr: false, + }, + { + name: "empty network area in network areas slice", + args: args{ + networkAreas: []iaas.NetworkArea{{}}, + }, + wantErr: false, + }, } p := print.NewPrinter() p.Cmd = NewCmd(p) diff --git a/internal/cmd/beta/network-area/network-range/create/create_test.go b/internal/cmd/beta/network-area/network-range/create/create_test.go index 9e69bb304..f3eb51bf1 100644 --- a/internal/cmd/beta/network-area/network-range/create/create_test.go +++ b/internal/cmd/beta/network-area/network-range/create/create_test.go @@ -232,6 +232,13 @@ func TestOutputResult(t *testing.T) { args: args{}, wantErr: false, }, + { + name: "empty network range", + args: args{ + networkRange: iaas.NetworkRange{}, + }, + wantErr: false, + }, } p := print.NewPrinter() p.Cmd = NewCmd(p) diff --git a/internal/cmd/beta/network-area/network-range/list/list.go b/internal/cmd/beta/network-area/network-range/list/list.go index b484cea4e..faace6c9c 100644 --- a/internal/cmd/beta/network-area/network-range/list/list.go +++ b/internal/cmd/beta/network-area/network-range/list/list.go @@ -15,6 +15,7 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/client" iaasUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/utils" "github.com/stackitcloud/stackit-cli/internal/pkg/tables" + "github.com/stackitcloud/stackit-cli/internal/pkg/utils" "github.com/stackitcloud/stackit-sdk-go/services/iaas" "github.com/spf13/cobra" @@ -164,7 +165,7 @@ func outputResult(p *print.Printer, outputFormat string, networkRanges []iaas.Ne table.SetHeader("ID", "Network Range") for _, networkRange := range networkRanges { - table.AddRow(*networkRange.NetworkRangeId, *networkRange.Prefix) + table.AddRow(utils.PtrString(networkRange.NetworkRangeId), utils.PtrString(networkRange.Prefix)) } p.Outputln(table.Render()) diff --git a/internal/cmd/beta/network-area/network-range/list/list_test.go b/internal/cmd/beta/network-area/network-range/list/list_test.go index b3c675b0a..26efc608c 100644 --- a/internal/cmd/beta/network-area/network-range/list/list_test.go +++ b/internal/cmd/beta/network-area/network-range/list/list_test.go @@ -226,6 +226,20 @@ func TestOutputResult(t *testing.T) { args: args{}, wantErr: false, }, + { + name: "empty network ranges slice", + args: args{ + networkRanges: []iaas.NetworkRange{}, + }, + wantErr: false, + }, + { + name: "empty network range in network ranges slice", + args: args{ + networkRanges: []iaas.NetworkRange{{}}, + }, + wantErr: false, + }, } p := print.NewPrinter() p.Cmd = NewCmd(p) diff --git a/internal/cmd/beta/network-area/route/create/create_test.go b/internal/cmd/beta/network-area/route/create/create_test.go index 819b9fa0b..4ffca7666 100644 --- a/internal/cmd/beta/network-area/route/create/create_test.go +++ b/internal/cmd/beta/network-area/route/create/create_test.go @@ -278,6 +278,13 @@ func TestOutputResult(t *testing.T) { args: args{}, wantErr: false, }, + { + name: "empty route", + args: args{ + route: iaas.Route{}, + }, + wantErr: false, + }, } p := print.NewPrinter() p.Cmd = NewCmd(p) diff --git a/internal/cmd/beta/network-area/route/describe/describe_test.go b/internal/cmd/beta/network-area/route/describe/describe_test.go index 0668d5f75..d052d69f9 100644 --- a/internal/cmd/beta/network-area/route/describe/describe_test.go +++ b/internal/cmd/beta/network-area/route/describe/describe_test.go @@ -250,6 +250,13 @@ func TestOutputResult(t *testing.T) { args: args{}, wantErr: false, }, + { + name: "empty route", + args: args{ + route: iaas.Route{}, + }, + wantErr: false, + }, } p := print.NewPrinter() p.Cmd = NewCmd(p) diff --git a/internal/cmd/beta/network-area/route/list/list_test.go b/internal/cmd/beta/network-area/route/list/list_test.go index a90d41620..573b332a8 100644 --- a/internal/cmd/beta/network-area/route/list/list_test.go +++ b/internal/cmd/beta/network-area/route/list/list_test.go @@ -226,6 +226,20 @@ func TestOutputResult(t *testing.T) { args: args{}, wantErr: false, }, + { + name: "empty route slice", + args: args{ + routes: []iaas.Route{}, + }, + wantErr: false, + }, + { + name: "empty route in routes slice", + args: args{ + routes: []iaas.Route{{}}, + }, + wantErr: false, + }, } p := print.NewPrinter() p.Cmd = NewCmd(p) diff --git a/internal/cmd/beta/network-area/route/update/update_test.go b/internal/cmd/beta/network-area/route/update/update_test.go index 9eede4ae3..813deae4d 100644 --- a/internal/cmd/beta/network-area/route/update/update_test.go +++ b/internal/cmd/beta/network-area/route/update/update_test.go @@ -284,6 +284,13 @@ func TestOutputResult(t *testing.T) { args: args{}, wantErr: false, }, + { + name: "empty route", + args: args{ + route: iaas.Route{}, + }, + wantErr: false, + }, } p := print.NewPrinter() p.Cmd = NewCmd(p) diff --git a/internal/cmd/beta/network-area/update/update_test.go b/internal/cmd/beta/network-area/update/update_test.go index cb9e1e670..2d1581b12 100644 --- a/internal/cmd/beta/network-area/update/update_test.go +++ b/internal/cmd/beta/network-area/update/update_test.go @@ -283,6 +283,13 @@ func TestOutputResult(t *testing.T) { args: args{}, wantErr: false, }, + { + name: "empty network area", + args: args{ + networkArea: iaas.NetworkArea{}, + }, + wantErr: false, + }, } p := print.NewPrinter() p.Cmd = NewCmd(p)