func TestBackendPoolShutdown(t *testing.T) { f := NewFakeBackendServices() fakeIGs := instances.NewFakeInstanceGroups(sets.NewString()) pool := newBackendPool(f, fakeIGs, false) namer := utils.Namer{} pool.Add(80) pool.Shutdown() if _, err := f.GetBackendService(namer.BeName(80)); err == nil { t.Fatalf("%v", err) } }
func TestBackendInstanceGroupClobbering(t *testing.T) { f := NewFakeBackendServices() fakeIGs := instances.NewFakeInstanceGroups(sets.NewString()) pool := newBackendPool(f, fakeIGs, false) namer := utils.Namer{} // This will add the instance group k8s-ig to the instance pool pool.Add(80) be, err := f.GetBackendService(namer.BeName(80)) if err != nil { t.Fatalf("%v", err) } // Simulate another controller updating the same backend service with // a different instance group newGroups := []*compute.Backend{ {Group: "k8s-ig-bar"}, {Group: "k8s-ig-foo"}, } be.Backends = append(be.Backends, newGroups...) if err := f.UpdateBackendService(be); err != nil { t.Fatalf("Failed to update backend service %v", be.Name) } // Make sure repeated adds don't clobber the inserted instance group pool.Add(80) be, err = f.GetBackendService(namer.BeName(80)) if err != nil { t.Fatalf("%v", err) } gotGroups := sets.NewString() for _, g := range be.Backends { gotGroups.Insert(g.Group) } // seed expectedGroups with the first group native to this controller expectedGroups := sets.NewString("k8s-ig") for _, newGroup := range newGroups { expectedGroups.Insert(newGroup.Group) } if !expectedGroups.Equal(gotGroups) { t.Fatalf("Expected %v Got %v", expectedGroups, gotGroups) } }
func TestBackendPoolAdd(t *testing.T) { f := NewFakeBackendServices() fakeIGs := instances.NewFakeInstanceGroups(sets.NewString()) pool := newBackendPool(f, fakeIGs, false) namer := utils.Namer{} // Add a backend for a port, then re-add the same port and // make sure it corrects a broken link from the backend to // the instance group. nodePort := int64(8080) pool.Add(nodePort) beName := namer.BeName(nodePort) // Check that the new backend has the right port be, err := f.GetBackendService(beName) if err != nil { t.Fatalf("Did not find expected backend %v", beName) } if be.Port != nodePort { t.Fatalf("Backend %v has wrong port %v, expected %v", be.Name, be.Port, nodePort) } // Check that the instance group has the new port var found bool for _, port := range fakeIGs.Ports { if port == nodePort { found = true } } if !found { t.Fatalf("Port %v not added to instance group", nodePort) } // Mess up the link between backend service and instance group. // This simulates a user doing foolish things through the UI. f.calls = []int{} be, err = f.GetBackendService(beName) be.Backends = []*compute.Backend{ {Group: "test edge hop"}, } f.UpdateBackendService(be) pool.Add(nodePort) for _, call := range f.calls { if call == utils.Create { t.Fatalf("Unexpected create for existing backend service") } } gotBackend, err := f.GetBackendService(beName) if err != nil { t.Fatalf("Failed to find a backend with name %v: %v", beName, err) } gotGroup, err := fakeIGs.GetInstanceGroup(namer.IGName(), defaultZone) if err != nil { t.Fatalf("Failed to find instance group %v", namer.IGName()) } backendLinks := sets.NewString() for _, be := range gotBackend.Backends { backendLinks.Insert(be.Group) } if !backendLinks.Has(gotGroup.SelfLink) { t.Fatalf( "Broken instance group link, got: %+v expected: %v", backendLinks.List(), gotGroup.SelfLink) } }