fleet/server/mail/ses_test.go
Lucas Manuel Rodriguez 404f0d3ac0
Migrate from aws-sdk-go v1 to v2 (#30308)
#29482

[Migrate to the AWS SDK for Go
v2](https://docs.aws.amazon.com/sdk-for-go/v2/developer-guide/migrate-gosdk.html)
documents how to migrate codebases.

QA on features that use AWS SDK Go:
- Bootstrap package:
  - upload:  
  - download: 
  - cleanup: 
- Software (upload, download, installation, etc.) 
  - Cloudfront: Luckly, this feature was already using aws-sdk-go-v2.
- Carves 
- Logging:
	- Firehose 
	- Kinesis 
- Lambda  (tested result logs to a lambda function on our AWS Dogfood
account)
- Email:
	- Amazon SES TODO ⚠️ (this is what Dogfood uses and a few customers)
- We cannot easily test locally, we can use dogfood or load testing
(AWS) environments.

---

- [X] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.
- [ ] Manual QA for all new/changed functionality
2025-06-30 17:45:39 -03:00

150 lines
3.4 KiB
Go

package mail
import (
"context"
"errors"
"fmt"
"testing"
"github.com/aws/aws-sdk-go-v2/service/ses"
"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/stretchr/testify/assert"
)
func Test_getFromSES(t *testing.T) {
type args struct {
e fleet.Email
}
tests := []struct {
name string
args args
want string
wantErr assert.ErrorAssertionFunc
}{
{
name: "should return properly formatted SMTP from for use in SES",
args: args{e: fleet.Email{
ServerURL: "https://foobar.fleetdm.com",
}},
want: "From: do-not-reply@foobar.fleetdm.com\r\n",
wantErr: assert.NoError,
},
{
name: "should error when we fail to parse fleet server url",
args: args{e: fleet.Email{
ServerURL: "not-a-url",
}},
want: "",
wantErr: assert.Error,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := getFromSES(tt.args.e)
if !tt.wantErr(t, err, fmt.Sprintf("getFromSES(%v)", tt.args.e)) {
return
}
assert.Equalf(t, tt.want, got, "getFromSES(%v)", tt.args.e)
})
}
}
type mockSESSender struct {
shouldErr bool
}
func (m mockSESSender) SendRawEmail(ctx context.Context, input *ses.SendRawEmailInput, optFns ...func(*ses.Options)) (*ses.SendRawEmailOutput, error) {
if m.shouldErr {
return nil, errors.New("some error")
}
return nil, nil
}
func Test_sesSender_SendEmail(t *testing.T) {
type fields struct {
client fleetSESSender
sourceArn string
}
type args struct {
e fleet.Email
}
tests := []struct {
name string
fields fields
args args
wantErr assert.ErrorAssertionFunc
}{
{
name: "should send email",
fields: fields{
client: mockSESSender{shouldErr: false},
sourceArn: "foo",
},
args: args{e: fleet.Email{
Subject: "Hello from Fleet!",
To: []string{"foouser@fleetdm.com"},
ServerURL: "https://foobar.fleetdm.com",
Mailer: &SMTPTestMailer{
BaseURL: "https://localhost:8080",
},
}},
wantErr: assert.NoError,
},
{
name: "should error when email config is nil",
fields: fields{
client: mockSESSender{shouldErr: false},
sourceArn: "foo",
},
args: args{e: fleet.Email{
Subject: "Hello from Fleet!",
To: []string{"foouser@fleetdm.com"},
Mailer: &SMTPTestMailer{
BaseURL: "https://localhost:8080",
},
}},
wantErr: assert.Error,
},
{
name: "should error when ses client is nil",
fields: fields{
client: nil,
sourceArn: "foo",
},
args: args{e: fleet.Email{
Subject: "Hello from Fleet!",
To: []string{"foouser@fleetdm.com"},
ServerURL: "https://foobar.fleetdm.com",
Mailer: &SMTPTestMailer{
BaseURL: "https://localhost:8080",
},
}},
wantErr: assert.Error,
},
{
name: "should error when ses client returns an error",
fields: fields{
client: mockSESSender{shouldErr: true},
sourceArn: "foo",
},
args: args{e: fleet.Email{
Subject: "Hello from Fleet!",
To: []string{"foouser@fleetdm.com"},
ServerURL: "https://foobar.fleetdm.com",
Mailer: &SMTPTestMailer{
BaseURL: "https://localhost:8080",
},
}},
wantErr: assert.Error,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := &sesSender{
client: tt.fields.client,
sourceArn: tt.fields.sourceArn,
}
tt.wantErr(t, s.SendEmail(context.Background(), tt.args.e), fmt.Sprintf("SendEmail(%v)", tt.args.e))
})
}
}