@@ -40,9 +40,10 @@ func TestReconcileEgressOnlyInternetGateways(t *testing.T) {
4040 defer mockCtrl .Finish ()
4141
4242 testCases := []struct {
43- name string
44- input * infrav1.NetworkSpec
45- expect func (m * mocks.MockEC2APIMockRecorder )
43+ name string
44+ input * infrav1.NetworkSpec
45+ expect func (m * mocks.MockEC2APIMockRecorder )
46+ wantErrContaining * string
4647 }{
4748 {
4849 name : "has eigw" ,
@@ -75,6 +76,44 @@ func TestReconcileEgressOnlyInternetGateways(t *testing.T) {
7576 Return (nil , nil )
7677 },
7778 },
79+ {
80+ name : "has more than 1 eigw, should return error" ,
81+ input : & infrav1.NetworkSpec {
82+ VPC : infrav1.VPCSpec {
83+ ID : "vpc-egress-only-gateways" ,
84+ IPv6 : & infrav1.IPv6 {},
85+ Tags : infrav1.Tags {
86+ infrav1 .ClusterTagKey ("test-cluster" ): "owned" ,
87+ },
88+ },
89+ },
90+ wantErrContaining : aws .String ("expected 1 egress only internet gateway in vpc \" vpc-egress-only-gateways\" , but found 2: [eigw-0 eigw-1]" ),
91+ expect : func (m * mocks.MockEC2APIMockRecorder ) {
92+ m .DescribeEgressOnlyInternetGateways (context .TODO (), gomock .AssignableToTypeOf (& ec2.DescribeEgressOnlyInternetGatewaysInput {})).
93+ Return (& ec2.DescribeEgressOnlyInternetGatewaysOutput {
94+ EgressOnlyInternetGateways : []types.EgressOnlyInternetGateway {
95+ {
96+ EgressOnlyInternetGatewayId : aws .String ("eigw-0" ),
97+ Attachments : []types.InternetGatewayAttachment {
98+ {
99+ State : types .AttachmentStatusAttached ,
100+ VpcId : aws .String ("vpc-egress-only-gateways" ),
101+ },
102+ },
103+ },
104+ {
105+ EgressOnlyInternetGatewayId : aws .String ("eigw-1" ),
106+ Attachments : []types.InternetGatewayAttachment {
107+ {
108+ State : types .AttachmentStatusAttached ,
109+ VpcId : aws .String ("vpc-egress-only-gateways" ),
110+ },
111+ },
112+ },
113+ },
114+ }, nil )
115+ },
116+ },
78117 {
79118 name : "no eigw attached, creates one" ,
80119 input : & infrav1.NetworkSpec {
@@ -122,10 +161,13 @@ func TestReconcileEgressOnlyInternetGateways(t *testing.T) {
122161
123162 for _ , tc := range testCases {
124163 t .Run (tc .name , func (t * testing.T ) {
164+ g := NewWithT (t )
125165 ec2Mock := mocks .NewMockEC2API (mockCtrl )
126166
127167 scheme := runtime .NewScheme ()
128- _ = infrav1 .AddToScheme (scheme )
168+ err := infrav1 .AddToScheme (scheme )
169+ g .Expect (err ).NotTo (HaveOccurred ())
170+
129171 client := fake .NewClientBuilder ().WithScheme (scheme ).Build ()
130172 scope , err := scope .NewClusterScope (scope.ClusterScopeParams {
131173 Client : client ,
@@ -139,18 +181,20 @@ func TestReconcileEgressOnlyInternetGateways(t *testing.T) {
139181 },
140182 },
141183 })
142- if err != nil {
143- t .Fatalf ("Failed to create test context: %v" , err )
144- }
184+ g .Expect (err ).NotTo (HaveOccurred ())
145185
146186 tc .expect (ec2Mock .EXPECT ())
147187
148188 s := NewService (scope )
149189 s .EC2Client = ec2Mock
150190
151- if err := s .reconcileEgressOnlyInternetGateways (); err != nil {
152- t .Fatalf ("got an unexpected error: %v" , err )
191+ err = s .reconcileEgressOnlyInternetGateways ()
192+ if tc .wantErrContaining != nil {
193+ g .Expect (err ).To (HaveOccurred ())
194+ g .Expect (err .Error ()).To (ContainSubstring (* tc .wantErrContaining ))
195+ return
153196 }
197+ g .Expect (err ).NotTo (HaveOccurred ())
154198 })
155199 }
156200}
@@ -199,8 +243,8 @@ func TestDeleteEgressOnlyInternetGateways(t *testing.T) {
199243 m .DescribeEgressOnlyInternetGateways (context .TODO (), gomock .Eq (& ec2.DescribeEgressOnlyInternetGatewaysInput {
200244 Filters : []types.Filter {
201245 {
202- Name : aws .String ("attachment.vpc-id " ),
203- Values : []string {"vpc-gateways" },
246+ Name : aws .String ("tag-key " ),
247+ Values : []string {infrav1 . ClusterTagKey ( "test-cluster" ) },
204248 },
205249 },
206250 })).Return (& ec2.DescribeEgressOnlyInternetGatewaysOutput {}, nil )
0 commit comments