From 79f3a177606740115560dabb4420c66880130172 Mon Sep 17 00:00:00 2001 From: Stefan Benz <46600784+stebenz@users.noreply.github.com> Date: Wed, 14 Aug 2024 14:10:14 +0200 Subject: [PATCH] fix: correct handling of smtp config --- acceptance/docker-compose.yaml | 2 +- zitadel/smtp_config/funcs.go | 16 +++--------- zitadel/smtp_config/resource_test.go | 37 +++++++++++----------------- 3 files changed, 19 insertions(+), 36 deletions(-) diff --git a/acceptance/docker-compose.yaml b/acceptance/docker-compose.yaml index 0112bd8b..390421f1 100644 --- a/acceptance/docker-compose.yaml +++ b/acceptance/docker-compose.yaml @@ -26,7 +26,7 @@ services: test: ['CMD', '/app/zitadel', 'ready', "--config", "/zitadel.yaml"] interval: '2s' timeout: '30s' - retries: 5 + retries: 60 depends_on: db: condition: 'service_healthy' diff --git a/zitadel/smtp_config/funcs.go b/zitadel/smtp_config/funcs.go index debc4fcd..369b91e5 100644 --- a/zitadel/smtp_config/funcs.go +++ b/zitadel/smtp_config/funcs.go @@ -84,7 +84,7 @@ func update(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Dia return diag.FromErr(err) } - if d.HasChanges(SenderAddressVar, SenderNameVar, tlsVar, hostVar, userVar, replyToAddressVar) { + if d.HasChanges(SenderAddressVar, SenderNameVar, tlsVar, hostVar, userVar, replyToAddressVar, PasswordVar) { _, err = client.UpdateSMTPConfig(ctx, &admin.UpdateSMTPConfigRequest{ Id: d.Id(), SenderAddress: d.Get(SenderAddressVar).(string), @@ -93,23 +93,14 @@ func update(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Dia Tls: d.Get(tlsVar).(bool), User: d.Get(userVar).(string), ReplyToAddress: d.Get(replyToAddressVar).(string), + Password: d.Get(PasswordVar).(string), }) if err != nil { return diag.Errorf("failed to update smtp config: %v", err) } } - if d.HasChange(PasswordVar) { - _, err = client.UpdateSMTPConfigPassword(ctx, &admin.UpdateSMTPConfigPasswordRequest{ - Id: d.Id(), - Password: d.Get(PasswordVar).(string), - }) - if err != nil { - return diag.Errorf("failed to update smtp config password: %v", err) - } - } - - if d.HasChange(PasswordVar) && d.Get(SetActiveVar).(bool) { + if d.HasChange(SetActiveVar) && d.Get(SetActiveVar).(bool) { if _, err := client.ActivateSMTPConfig(ctx, &admin.ActivateSMTPConfigRequest{Id: d.Id()}); err != nil { return diag.Errorf("failed to activate smtp config: %v", err) } @@ -150,6 +141,7 @@ func read(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagn userVar: resp.GetSmtpConfig().GetUser(), PasswordVar: d.Get(PasswordVar).(string), replyToAddressVar: resp.GetSmtpConfig().GetReplyToAddress(), + SetActiveVar: d.Get(SetActiveVar).(bool), } for k, v := range set { if err := d.Set(k, v); err != nil { diff --git a/zitadel/smtp_config/resource_test.go b/zitadel/smtp_config/resource_test.go index 97c4a198..49b7762b 100644 --- a/zitadel/smtp_config/resource_test.go +++ b/zitadel/smtp_config/resource_test.go @@ -8,8 +8,6 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/zitadel/zitadel-go/v3/pkg/client/zitadel/admin" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" "github.com/zitadel/terraform-provider-zitadel/zitadel/helper" "github.com/zitadel/terraform-provider-zitadel/zitadel/helper/test_utils" @@ -21,29 +19,32 @@ func TestAccSMTPConfig(t *testing.T) { resourceExample, exampleAttributes := test_utils.ReadExample(t, test_utils.Resources, frame.ResourceType) senderAddressProperty := test_utils.AttributeValue(t, smtp_config.SenderAddressVar, exampleAttributes).AsString() resourceExample = strings.Replace(resourceExample, senderAddressProperty, fmt.Sprintf("zitadel@%s", frame.InstanceDomain), 1) + exampleProperty := test_utils.AttributeValue(t, smtp_config.SenderNameVar, exampleAttributes).AsString() + updatedProperty := "updatedProperty" + exampleSecret := test_utils.AttributeValue(t, smtp_config.PasswordVar, exampleAttributes).AsString() - importParts := []resource.ImportStateIdFunc{ - test_utils.ImportResourceId(frame.BaseTestFrame), - test_utils.ImportStateAttribute(frame.BaseTestFrame, smtp_config.PasswordVar), - } + updatedSecret := "updatedSecret" test_utils.RunLifecyleTest( t, frame.BaseTestFrame, nil, test_utils.ReplaceAll(resourceExample, exampleProperty, exampleSecret), - exampleProperty, "updatedProperty", - smtp_config.PasswordVar, exampleSecret, "updatedSecret", - false, - checkRemoteProperty(*frame), + exampleProperty, updatedProperty, + smtp_config.PasswordVar, exampleSecret, updatedSecret, + true, + checkRemoteProperty(frame), helper.ZitadelGeneratedIdOnlyRegex, - CheckDestroy(*frame), - test_utils.ChainImportStateIdFuncs(importParts...), + test_utils.CheckIsNotFoundFromPropertyCheck(checkRemoteProperty(frame), ""), + test_utils.ChainImportStateIdFuncs( + test_utils.ImportResourceId(frame.BaseTestFrame), + test_utils.ImportStateAttribute(frame.BaseTestFrame, smtp_config.PasswordVar), + ), ) } -func checkRemoteProperty(frame test_utils.InstanceTestFrame) func(string) resource.TestCheckFunc { +func checkRemoteProperty(frame *test_utils.InstanceTestFrame) func(string) resource.TestCheckFunc { return func(expect string) resource.TestCheckFunc { return func(state *terraform.State) error { resp, err := frame.GetSMTPConfigById(frame, &admin.GetSMTPConfigByIdRequest{Id: frame.State(state).ID}) @@ -58,13 +59,3 @@ func checkRemoteProperty(frame test_utils.InstanceTestFrame) func(string) resour } } } - -func CheckDestroy(frame test_utils.InstanceTestFrame) resource.TestCheckFunc { - return func(state *terraform.State) error { - err := checkRemoteProperty(frame)("something")(state) - if status.Code(err) != codes.NotFound { - return fmt.Errorf("expected not found error but got: %w", err) - } - return nil - } -}