diff --git a/internal/cmd/network/update/update.go b/internal/cmd/network/update/update.go index eda3bb95d..7d08e7d4d 100644 --- a/internal/cmd/network/update/update.go +++ b/internal/cmd/network/update/update.go @@ -180,8 +180,10 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli var payloadIPv6 *iaas.UpdateNetworkIPv6Body if model.IPv6DnsNameServers != nil || model.NoIPv6Gateway || model.IPv6Gateway != nil { - payloadIPv6 = &iaas.UpdateNetworkIPv6Body{ - Nameservers: *model.IPv6DnsNameServers, + payloadIPv6 = &iaas.UpdateNetworkIPv6Body{} + + if model.IPv6DnsNameServers != nil { + payloadIPv6.Nameservers = *model.IPv6DnsNameServers } if model.NoIPv6Gateway { @@ -192,8 +194,10 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli } if model.IPv4DnsNameServers != nil || model.NoIPv4Gateway || model.IPv4Gateway != nil { - payloadIPv4 = &iaas.UpdateNetworkIPv4Body{ - Nameservers: *model.IPv4DnsNameServers, + payloadIPv4 = &iaas.UpdateNetworkIPv4Body{} + + if model.IPv4DnsNameServers != nil { + payloadIPv4.Nameservers = *model.IPv4DnsNameServers } if model.NoIPv4Gateway { diff --git a/internal/cmd/network/update/update_test.go b/internal/cmd/network/update/update_test.go index 44dad9933..8cd5182cc 100644 --- a/internal/cmd/network/update/update_test.go +++ b/internal/cmd/network/update/update_test.go @@ -80,12 +80,10 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { return model } -func fixtureRequest(mods ...func(request *iaas.ApiPartialUpdateNetworkRequest)) iaas.ApiPartialUpdateNetworkRequest { +func fixtureRequest(mods ...func(payload *iaas.PartialUpdateNetworkPayload)) iaas.ApiPartialUpdateNetworkRequest { request := testClient.DefaultAPI.PartialUpdateNetwork(testCtx, testProjectId, testRegion, testNetworkId) - request = request.PartialUpdateNetworkPayload(fixturePayload()) - for _, mod := range mods { - mod(&request) - } + payload := fixturePayload(mods...) + request = request.PartialUpdateNetworkPayload(payload) return request } @@ -319,6 +317,28 @@ func TestBuildRequest(t *testing.T) { model: fixtureInputModel(), expectedRequest: fixtureRequest(), }, + { + description: "not setting IPv4DnsNameServers does not result in nil pointer dereference", + model: fixtureInputModel(func(model *inputModel) { + model.IPv4DnsNameServers = nil + model.IPv4Gateway = new("1.1.1.1") + }), + expectedRequest: fixtureRequest(func(payload *iaas.PartialUpdateNetworkPayload) { + payload.Ipv4.Nameservers = nil + payload.Ipv4.Gateway = *iaas.NewNullableString(new("1.1.1.1")) + }), + }, + { + description: "not setting IPv6DnsNameServers does not result in nil pointer dereference", + model: fixtureInputModel(func(model *inputModel) { + model.IPv6DnsNameServers = nil + model.IPv6Gateway = new("1.1.1.1") + }), + expectedRequest: fixtureRequest(func(payload *iaas.PartialUpdateNetworkPayload) { + payload.Ipv6.Nameservers = nil + payload.Ipv6.Gateway = *iaas.NewNullableString(new("1.1.1.1")) + }), + }, } for _, tt := range tests {