github.com/jenkins-x/jx/v2@v2.1.155/pkg/cloud/amazon/ec2/ec2_test.go (about) 1 // +build unit 2 3 package ec2 4 5 import ( 6 "strings" 7 "testing" 8 9 "github.com/aws/aws-sdk-go/aws" 10 11 "github.com/jenkins-x/jx/v2/pkg/cluster" 12 13 "github.com/aws/aws-sdk-go/aws/session" 14 15 "github.com/aws/aws-sdk-go/service/ec2" 16 "github.com/aws/aws-sdk-go/service/ec2/ec2iface" 17 "github.com/stretchr/testify/assert" 18 ) 19 20 type mockedEC2 struct { 21 ec2iface.EC2API 22 DescribeVolumesVols []*ec2.Volume 23 DeleteVolumeValidation func([]*ec2.Volume, []*ec2.Volume) 24 } 25 26 func (m mockedEC2) DescribeVolumes(vi *ec2.DescribeVolumesInput) (*ec2.DescribeVolumesOutput, error) { 27 var volumes []*ec2.Volume 28 for _, v := range m.DescribeVolumesVols { 29 for _, t := range v.Tags { 30 if strings.Contains(*vi.Filters[0].Name, *t.Key) { 31 volumes = append(volumes, v) 32 } 33 } 34 } 35 return &ec2.DescribeVolumesOutput{ 36 Volumes: volumes, 37 }, nil 38 } 39 40 func (m mockedEC2) DeleteVolume(input *ec2.DeleteVolumeInput) (*ec2.DeleteVolumeOutput, error) { 41 if len(m.DescribeVolumesVols) > 0 { 42 for i, v := range m.DescribeVolumesVols { 43 if *v.VolumeId == *input.VolumeId { 44 deleted := append(m.DescribeVolumesVols[:i], m.DescribeVolumesVols[i+1:]...) 45 m.DeleteVolumeValidation(m.DescribeVolumesVols, deleted) 46 } 47 } 48 } 49 return &ec2.DeleteVolumeOutput{}, nil 50 } 51 52 func TestEC2Options_DeleteVolumesForCluster(t *testing.T) { 53 sess, err := session.NewSession() 54 assert.NoError(t, err) 55 ec2Options, err := NewEC2APIHandler(sess, mockedEC2{ 56 DescribeVolumesVols: []*ec2.Volume{ 57 { 58 State: aws.String(ec2.VolumeStateAvailable), 59 VolumeId: aws.String("vol1"), 60 Tags: []*ec2.Tag{ 61 { 62 Key: aws.String("kubernetes.io/cluster/cluster1"), 63 Value: aws.String("owner"), 64 }, 65 }, 66 }, 67 { 68 State: aws.String(ec2.VolumeStateAvailable), 69 VolumeId: aws.String("vol2"), 70 }, 71 }, 72 DeleteVolumeValidation: func(original []*ec2.Volume, deleted []*ec2.Volume) { 73 assert.True(t, len(original) == (len(deleted)+1), "the deleted volume slice should be one element smaller than the original") 74 }, 75 }) 76 assert.NoError(t, err) 77 err = ec2Options.DeleteVolumesForCluster(&cluster.Cluster{ 78 Name: "cluster1", 79 }) 80 assert.NoError(t, err) 81 }