Skip to content

Commit a9904a0

Browse files
committed
[Cherry pick #972] Add error handling test for EnsureLoadBalancer function
1 parent 1684496 commit a9904a0

2 files changed

Lines changed: 43 additions & 4 deletions

File tree

providers/gce/gce_loadbalancer.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,17 +227,25 @@ func (g *Cloud) EnsureLoadBalancer(ctx context.Context, clusterName string, svc
227227
}
228228
if err != nil {
229229
klog.Errorf("Failed to EnsureLoadBalancer(%s, %s, %s, %s, %s), err: %v", clusterName, svc.Namespace, svc.Name, loadBalancerName, g.region, err)
230-
return syncResult.status, err
230+
return nil, err
231+
}
232+
233+
var status *v1.LoadBalancerStatus
234+
var annotations map[string]string
235+
236+
if syncResult != nil {
237+
status = syncResult.status
238+
annotations = syncResult.annotations
231239
}
232240

233241
if g.enableL4LBAnnotations {
234-
if err = g.updateL4ResourcesAnnotations(ctx, svc, syncResult.annotations); err != nil {
235-
return syncResult.status, fmt.Errorf("failed to set resource annotations, err: %w", err)
242+
if err = g.updateL4ResourcesAnnotations(ctx, svc, annotations); err != nil {
243+
return status, fmt.Errorf("failed to set resource annotations, err: %w", err)
236244
}
237245
}
238246

239247
klog.V(4).Infof("EnsureLoadBalancer(%s, %s, %s, %s, %s): done ensuring loadbalancer.", clusterName, svc.Namespace, svc.Name, loadBalancerName, g.region)
240-
return syncResult.status, err
248+
return status, err
241249
}
242250

243251
func (g *Cloud) updateL4ResourcesAnnotations(ctx context.Context, svc *v1.Service, newL4LBAnnotations map[string]string) error {

providers/gce/gce_loadbalancer_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,39 @@ import (
2929
v1 "k8s.io/api/core/v1"
3030
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3131
cloudprovider "k8s.io/cloud-provider"
32+
33+
"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
34+
"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
35+
"google.golang.org/api/compute/v1"
3236
)
3337

38+
func TestEnsureLoadBalancerError(t *testing.T) {
39+
t.Parallel()
40+
41+
vals := DefaultTestClusterValues()
42+
gce, err := fakeGCECloud(vals)
43+
require.NoError(t, err)
44+
45+
nodeNames := []string{"test-node-1"}
46+
nodes, err := createAndInsertNodes(gce, nodeNames, vals.ZoneName)
47+
require.NoError(t, err)
48+
49+
apiService := fakeLoadbalancerService(string(LBTypeInternal))
50+
apiService, err = gce.client.CoreV1().Services(apiService.Namespace).Create(context.TODO(), apiService, metav1.CreateOptions{})
51+
require.NoError(t, err)
52+
53+
// Inject error
54+
mockGCE := gce.c.(*cloud.MockGCE)
55+
mockGCE.MockInstanceGroups.GetHook = func(ctx context.Context, key *meta.Key, m *cloud.MockInstanceGroups, options ...cloud.Option) (bool, *compute.InstanceGroup, error) {
56+
return true, nil, fmt.Errorf("injected error")
57+
}
58+
59+
status, err := gce.EnsureLoadBalancer(context.Background(), vals.ClusterName, apiService, nodes)
60+
require.Error(t, err)
61+
assert.Nil(t, status)
62+
assert.Contains(t, err.Error(), "injected error")
63+
}
64+
3465
func TestGetLoadBalancer(t *testing.T) {
3566
t.Parallel()
3667

0 commit comments

Comments
 (0)