Skip to content

Commit 25966d4

Browse files
authored
πŸ› fix serverless resource validate config panic (#234)
* πŸ› fix serverless resource validata config panic Signed-off-by: Salim Afiune Maya <afiune@mondoo.com> * πŸ”₯ actual fix Signed-off-by: Salim Afiune Maya <afiune@mondoo.com> * 🧹 cover all diagnostic errors Signed-off-by: Salim Afiune Maya <afiune@mondoo.com> * ⭐️ add a ConflictsWith validator Signed-off-by: Salim Afiune Maya <afiune@mondoo.com> --------- Signed-off-by: Salim Afiune Maya <afiune@mondoo.com>
1 parent b51aa68 commit 25966d4

5 files changed

Lines changed: 123 additions & 34 deletions

File tree

β€Žgo.modβ€Ž

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/hashicorp/terraform-plugin-testing v1.11.0
1515
github.com/stretchr/testify v1.10.0
1616
go.mondoo.com/cnquery/v11 v11.40.0
17-
go.mondoo.com/mondoo-go v0.0.0-20250307104419-3781f16e04aa
17+
go.mondoo.com/mondoo-go v0.0.0-20250402000401-0b72c50a2698
1818
gopkg.in/yaml.v2 v2.4.0
1919
)
2020

@@ -58,7 +58,7 @@ require (
5858
github.com/fatih/color v1.18.0 // indirect
5959
github.com/fsnotify/fsnotify v1.8.0 // indirect
6060
github.com/getsentry/sentry-go v0.31.1 // indirect
61-
github.com/go-jose/go-jose/v3 v3.0.3 // indirect
61+
github.com/go-jose/go-jose/v3 v3.0.4 // indirect
6262
github.com/go-logr/logr v1.4.2 // indirect
6363
github.com/go-logr/stdr v1.2.2 // indirect
6464
github.com/go-openapi/errors v0.20.2 // indirect
@@ -155,15 +155,15 @@ require (
155155
go.opentelemetry.io/otel/trace v1.34.0 // indirect
156156
go.uber.org/mock v0.5.0 // indirect
157157
go.uber.org/multierr v1.11.0 // indirect
158-
golang.org/x/crypto v0.32.0 // indirect
158+
golang.org/x/crypto v0.37.0 // indirect
159159
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c // indirect
160160
golang.org/x/mod v0.22.0 // indirect
161161
golang.org/x/net v0.34.0 // indirect
162-
golang.org/x/oauth2 v0.25.0 // indirect
163-
golang.org/x/sync v0.10.0 // indirect
164-
golang.org/x/sys v0.29.0 // indirect
165-
golang.org/x/term v0.28.0 // indirect
166-
golang.org/x/text v0.21.0 // indirect
162+
golang.org/x/oauth2 v0.29.0 // indirect
163+
golang.org/x/sync v0.13.0 // indirect
164+
golang.org/x/sys v0.32.0 // indirect
165+
golang.org/x/term v0.31.0 // indirect
166+
golang.org/x/text v0.24.0 // indirect
167167
golang.org/x/tools v0.29.0 // indirect
168168
google.golang.org/appengine v1.6.8 // indirect
169169
google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 // indirect

β€Žgo.sumβ€Ž

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,8 @@ github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UN
159159
github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
160160
github.com/go-git/go-git/v5 v5.13.2 h1:7O7xvsK7K+rZPKW6AQR1YyNhfywkv7B8/FsP3ki6Zv0=
161161
github.com/go-git/go-git/v5 v5.13.2/go.mod h1:hWdW5P4YZRjmpGHwRH2v3zkWcNl6HeXaXQEMGb3NJ9A=
162-
github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k=
163-
github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
162+
github.com/go-jose/go-jose/v3 v3.0.4 h1:Wp5HA7bLQcKnf6YYao/4kpRpVMp/yf6+pJKV8WFSaNY=
163+
github.com/go-jose/go-jose/v3 v3.0.4/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
164164
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
165165
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
166166
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
@@ -598,10 +598,8 @@ go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3
598598
go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY=
599599
go.mondoo.com/cnquery/v11 v11.40.0 h1:nqVVz2ECIChemM7rl0NwbyCtJSgct4zNRQnPRJjnh6E=
600600
go.mondoo.com/cnquery/v11 v11.40.0/go.mod h1:kSnnow+FANisAAubIWu3ZfdbZXgvnH0IfW6f6LR1ChI=
601-
go.mondoo.com/mondoo-go v0.0.0-20250129071639-c3de624e0c5a h1:DtwCDuKcXUVJZyKni8TlkxxlFdutPVK6JFCldIuq8cw=
602-
go.mondoo.com/mondoo-go v0.0.0-20250129071639-c3de624e0c5a/go.mod h1:0HMHhLaS0V1himFIJQxABmvqEAdWv1NUScXpSjrhxqo=
603-
go.mondoo.com/mondoo-go v0.0.0-20250307104419-3781f16e04aa h1:SycZqHRFW+M1sZMlLvgmoVep2Fa+9IBIcOwQKTKmLQE=
604-
go.mondoo.com/mondoo-go v0.0.0-20250307104419-3781f16e04aa/go.mod h1:0HMHhLaS0V1himFIJQxABmvqEAdWv1NUScXpSjrhxqo=
601+
go.mondoo.com/mondoo-go v0.0.0-20250402000401-0b72c50a2698 h1:+468mnveo9YNWaRHyfsUhI7bsEfFrLeD0Pdv0EDECLY=
602+
go.mondoo.com/mondoo-go v0.0.0-20250402000401-0b72c50a2698/go.mod h1:0HMHhLaS0V1himFIJQxABmvqEAdWv1NUScXpSjrhxqo=
605603
go.mondoo.com/ranger-rpc v0.6.5 h1:KKoeTGPonJI3T6lrT9oxdH9eNlZC6pdqYvsuWZWyB6w=
606604
go.mondoo.com/ranger-rpc v0.6.5/go.mod h1:kwPJSYj32vZJjWoQSKEao5YoUO/ZRcjVGxBOL4tApf0=
607605
go.mongodb.org/mongo-driver v1.10.0 h1:UtV6N5k14upNp4LTduX0QCufG124fSu25Wz9tu94GLg=
@@ -638,8 +636,8 @@ golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4
638636
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
639637
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
640638
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
641-
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
642-
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
639+
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
640+
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
643641
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
644642
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc=
645643
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
@@ -685,8 +683,8 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG
685683
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
686684
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
687685
golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE=
688-
golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
689-
golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
686+
golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
687+
golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
690688
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
691689
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
692690
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -698,8 +696,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
698696
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
699697
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
700698
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
701-
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
702-
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
699+
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
700+
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
703701
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
704702
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
705703
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -747,17 +745,17 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
747745
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
748746
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
749747
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
750-
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
751-
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
748+
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
749+
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
752750
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
753751
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
754752
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
755753
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
756754
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
757755
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
758756
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
759-
golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
760-
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
757+
golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
758+
golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
761759
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
762760
golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
763761
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
@@ -771,8 +769,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
771769
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
772770
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
773771
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
774-
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
775-
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
772+
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
773+
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
776774
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
777775
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
778776
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

β€Žinternal/provider/gql.goβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ func (c *ExtendedGqlClient) SetCustomPolicy(ctx context.Context, scopeMrn string
171171
}
172172

173173
setCustomPolicyInput := mondoov1.SetCustomPolicyInput{
174-
SpaceMrn: mondoov1.String(scopeMrn),
174+
SpaceMrn: mondoov1.NewStringPtr(mondoov1.String(scopeMrn)),
175175
Overwrite: overwrite,
176176
Dataurl: mondoov1.String(newDataUrl(policyBundleData)),
177177
}

β€Žinternal/provider/integration_aws_serverless_resource.goβ€Ž

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@ import (
55
"fmt"
66
"slices"
77

8+
"github.com/hashicorp/terraform-plugin-framework-validators/boolvalidator"
9+
"github.com/hashicorp/terraform-plugin-framework/diag"
10+
"github.com/hashicorp/terraform-plugin-framework/path"
811
"github.com/hashicorp/terraform-plugin-framework/resource"
912
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
1013
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
1114
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
15+
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
1216
"github.com/hashicorp/terraform-plugin-framework/types"
1317
"github.com/hashicorp/terraform-plugin-log/tflog"
1418
mondoov1 "go.mondoo.com/mondoo-go"
@@ -284,6 +288,9 @@ func (r *integrationAwsServerlessResource) Schema(ctx context.Context, req resou
284288
MarkdownDescription: "Use Mondoo VPC.",
285289
Optional: true,
286290
DeprecationMessage: "This field is deprecated and will be removed in the future.",
291+
Validators: []validator.Bool{
292+
boolvalidator.ConflictsWith(path.MatchRelative().AtParent().AtName("vpc_flavour")),
293+
},
287294
},
288295
"cidr_block": schema.StringAttribute{
289296
MarkdownDescription: "CIDR block for the Mondoo VPC.",
@@ -398,23 +405,31 @@ func (r integrationAwsServerlessResource) ValidateConfig(ctx context.Context, re
398405
return
399406
}
400407

408+
resp.Diagnostics.Append(validateIntegrationAwsServerlessResourceModel(&data)...)
409+
}
410+
411+
func validateIntegrationAwsServerlessResourceModel(data *integrationAwsServerlessResourceModel) (diagnostics diag.Diagnostics) {
412+
if data.ScanConfiguration.VpcConfiguration == nil {
413+
return
414+
}
415+
401416
// user has provided mondoo vpc only
402-
if mondooVpc := data.ScanConfiguration.VpcConfiguration != nil && data.ScanConfiguration.VpcConfiguration.UseMondooVPC.ValueBool(); mondooVpc {
417+
if mondooVpc := data.ScanConfiguration.VpcConfiguration.UseMondooVPC.ValueBool(); mondooVpc {
403418
if cidr := data.ScanConfiguration.VpcConfiguration.CIDR.ValueString(); cidr == "" {
404-
resp.Diagnostics.AddError(
419+
diagnostics.AddError(
405420
"MissingAttributeError",
406421
"Attribute cidr_block must not be empty when use_mondoo_vpc is set to true.",
407422
)
408423
}
409424
}
410425

411426
vpcFlavour := mondoov1.VPCFlavour(data.ScanConfiguration.VpcConfiguration.VPCFlavour.ValueString())
412-
allowedVpcFlavours := []mondoov1.VPCFlavour{
413-
mondoov1.VPCFlavourDefaultVpc, mondoov1.VPCFlavourMondooNatgw, mondoov1.VPCFlavourMondooIgw,
414-
}
415427
if vpcFlavour != "" {
428+
allowedVpcFlavours := []mondoov1.VPCFlavour{
429+
mondoov1.VPCFlavourDefaultVpc, mondoov1.VPCFlavourMondooNatgw, mondoov1.VPCFlavourMondooIgw,
430+
}
416431
if !slices.Contains(allowedVpcFlavours, vpcFlavour) {
417-
resp.Diagnostics.AddError(
432+
diagnostics.AddError(
418433
"InvalidAttributeValueError",
419434
fmt.Sprintf("Attribute vpc_flavour must be one of %v, received: '%s'", allowedVpcFlavours, vpcFlavour),
420435
)
@@ -423,12 +438,14 @@ func (r integrationAwsServerlessResource) ValidateConfig(ctx context.Context, re
423438
if cidr := data.ScanConfiguration.VpcConfiguration.CIDR.ValueString(); slices.Contains([]mondoov1.VPCFlavour{
424439
mondoov1.VPCFlavourMondooNatgw, mondoov1.VPCFlavourMondooIgw,
425440
}, vpcFlavour) && cidr == "" {
426-
resp.Diagnostics.AddError(
441+
diagnostics.AddError(
427442
"MissingAttributeError",
428443
"Attribute cidr_block must not be empty when Mondoo VPC is used.",
429444
)
430445
}
431446
}
447+
448+
return
432449
}
433450

434451
func (r *integrationAwsServerlessResource) Configure(ctx context.Context, req resource.ConfigureRequest, resp *resource.ConfigureResponse) {
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package provider
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-framework/types"
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestIntegrationAwsServerlessResourceValidateConfig_Empty(t *testing.T) {
11+
d := &integrationAwsServerlessResourceModel{}
12+
diagnostics := validateIntegrationAwsServerlessResourceModel(d)
13+
assert.False(t, diagnostics.HasError(), "expected no errors")
14+
}
15+
16+
func TestIntegrationAwsServerlessResourceValidateConfig_UseMondooVPC(t *testing.T) {
17+
d := &integrationAwsServerlessResourceModel{
18+
ScanConfiguration: ScanConfigurationInput{
19+
VpcConfiguration: &VPCConfigurationInput{
20+
UseMondooVPC: types.BoolValue(true),
21+
},
22+
},
23+
}
24+
25+
t.Run("missing CIDR", func(t *testing.T) {
26+
diagnostics := validateIntegrationAwsServerlessResourceModel(d)
27+
if assert.True(t, diagnostics.HasError(), "expected errors") {
28+
assert.Equal(t, "MissingAttributeError", diagnostics[0].Summary())
29+
}
30+
})
31+
32+
t.Run("with CIDR", func(t *testing.T) {
33+
d.ScanConfiguration.VpcConfiguration.CIDR = types.StringValue("10.0.0.0/24")
34+
diagnostics := validateIntegrationAwsServerlessResourceModel(d)
35+
assert.False(t, diagnostics.HasError(), "expected NO errors")
36+
})
37+
}
38+
39+
func TestIntegrationAwsServerlessResourceValidateConfig_VPCFlavour(t *testing.T) {
40+
d := &integrationAwsServerlessResourceModel{
41+
ScanConfiguration: ScanConfigurationInput{
42+
VpcConfiguration: &VPCConfigurationInput{
43+
VPCFlavour: types.StringValue("DEFAULT_VPC"),
44+
},
45+
},
46+
}
47+
48+
t.Run("default vpc flavour", func(t *testing.T) {
49+
diagnostics := validateIntegrationAwsServerlessResourceModel(d)
50+
assert.False(t, diagnostics.HasError(), "expected NO errors")
51+
})
52+
53+
t.Run("invalid vpc flavour", func(t *testing.T) {
54+
d.ScanConfiguration.VpcConfiguration.VPCFlavour = types.StringValue("foo")
55+
diagnostics := validateIntegrationAwsServerlessResourceModel(d)
56+
if assert.True(t, diagnostics.HasError(), "expected errors") {
57+
assert.Equal(t, "InvalidAttributeValueError", diagnostics[0].Summary())
58+
}
59+
})
60+
61+
t.Run("special vpc flavour that requires CIDR", func(t *testing.T) {
62+
d.ScanConfiguration.VpcConfiguration.VPCFlavour = types.StringValue("MONDOO_NATGW")
63+
diagnostics := validateIntegrationAwsServerlessResourceModel(d)
64+
if assert.True(t, diagnostics.HasError(), "expected errors") {
65+
assert.Equal(t, "MissingAttributeError", diagnostics[0].Summary())
66+
}
67+
68+
t.Run("with CIDR", func(t *testing.T) {
69+
d.ScanConfiguration.VpcConfiguration.CIDR = types.StringValue("10.0.0.0/24")
70+
diagnostics := validateIntegrationAwsServerlessResourceModel(d)
71+
assert.False(t, diagnostics.HasError(), "expected NO errors")
72+
})
73+
})
74+
}

0 commit comments

Comments
Β (0)