driftctl/pkg/middlewares/aws_instance_eip_test.go

129 lines
3.1 KiB
Go

package middlewares
import (
"reflect"
"testing"
awssdk "github.com/aws/aws-sdk-go/aws"
"github.com/cloudskiff/driftctl/pkg/resource"
"github.com/cloudskiff/driftctl/pkg/resource/aws"
)
func TestAwsInstanceEIP_Execute(t *testing.T) {
type args struct {
remoteResources *[]resource.Resource
resourcesFromState *[]resource.Resource
}
tests := []struct {
name string
args args
expected args
}{
{
name: "test that public ip and dns are nulled whith eip",
args: args{
remoteResources: &[]resource.Resource{
&aws.AwsInstance{
Id: "instance1",
PublicIp: awssdk.String("1.2.3.4"),
PublicDns: awssdk.String("dns-of-eip.com"),
},
&aws.AwsInstance{
Id: "instance2",
PublicIp: awssdk.String("1.2.3.4"),
PublicDns: awssdk.String("dns-of-eip.com"),
},
},
resourcesFromState: &[]resource.Resource{
&aws.AwsInstance{
Id: "instance1",
PublicIp: awssdk.String("5.6.7.8"),
PublicDns: awssdk.String("example.com"),
},
&aws.AwsEip{
Instance: awssdk.String("instance1"),
},
},
},
expected: args{
remoteResources: &[]resource.Resource{
&aws.AwsInstance{
Id: "instance1",
},
&aws.AwsInstance{
Id: "instance2",
PublicIp: awssdk.String("1.2.3.4"),
PublicDns: awssdk.String("dns-of-eip.com"),
},
},
resourcesFromState: &[]resource.Resource{
&aws.AwsInstance{
Id: "instance1",
},
&aws.AwsEip{
Instance: awssdk.String("instance1"),
},
},
},
},
{
name: "test that public ip and dns are nulled when eip association",
args: args{
remoteResources: &[]resource.Resource{
&aws.AwsInstance{
Id: "instance1",
PublicIp: awssdk.String("1.2.3.4"),
PublicDns: awssdk.String("dns-of-eip.com"),
},
&aws.AwsInstance{
Id: "instance2",
PublicIp: awssdk.String("1.2.3.4"),
PublicDns: awssdk.String("dns-of-eip.com"),
},
},
resourcesFromState: &[]resource.Resource{
&aws.AwsInstance{
Id: "instance1",
PublicIp: awssdk.String("5.6.7.8"),
PublicDns: awssdk.String("example.com"),
},
&aws.AwsEipAssociation{
InstanceId: awssdk.String("instance1"),
},
},
},
expected: args{
remoteResources: &[]resource.Resource{
&aws.AwsInstance{
Id: "instance1",
},
&aws.AwsInstance{
Id: "instance2",
PublicIp: awssdk.String("1.2.3.4"),
PublicDns: awssdk.String("dns-of-eip.com"),
},
},
resourcesFromState: &[]resource.Resource{
&aws.AwsInstance{
Id: "instance1",
},
&aws.AwsEipAssociation{
InstanceId: awssdk.String("instance1"),
},
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
a := AwsInstanceEIP{}
if err := a.Execute(tt.args.remoteResources, tt.args.resourcesFromState); err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(tt.args, tt.expected) {
t.Fatalf("Expected results mismatch")
}
})
}
}