func runMasterServiceTest(client *client.Client) { time.Sleep(12 * time.Second) svcList, err := client.Services(api.NamespaceDefault).List(labels.Everything()) if err != nil { glog.Fatalf("unexpected error listing services: %v", err) } var foundRW bool found := util.StringSet{} for i := range svcList.Items { found.Insert(svcList.Items[i].Name) if svcList.Items[i].Name == "qingyuan" { foundRW = true } } if foundRW { ep, err := client.Endpoints(api.NamespaceDefault).Get("qingyuan") if err != nil { glog.Fatalf("unexpected error listing endpoints for qingyuan service: %v", err) } if countEndpoints(ep) == 0 { glog.Fatalf("no endpoints for qingyuan service: %v", ep) } } else { glog.Errorf("no RW service found: %v", found) glog.Fatal("QingYuan service test failed") } glog.Infof("Master service test passed.") }
func endpointsSet(c *client.Client, serviceNamespace, serviceID string, endpointCount int) wait.ConditionFunc { return func() (bool, error) { endpoints, err := c.Endpoints(serviceNamespace).Get(serviceID) if err != nil { glog.Infof("Error getting endpoints: %v", err) return false, nil } count := 0 for _, ss := range endpoints.Subsets { for _, addr := range ss.Addresses { for _, port := range ss.Ports { count++ glog.Infof("%s/%s endpoint: %s:%d %#v", serviceNamespace, serviceID, addr.IP, port.Port, addr.TargetRef) } } } return count == endpointCount, nil } }
func validateEndpointsOrFail(c *client.Client, ns, serviceName string, expectedEndpoints map[string][]int) { By(fmt.Sprintf("Validating endpoints %v with on service %s/%s", expectedEndpoints, ns, serviceName)) for { endpoints, err := c.Endpoints(ns).Get(serviceName) if err == nil { By(fmt.Sprintf("Found endpoints %v", endpoints)) portsByIp := getPortsByIp(endpoints.Subsets) By(fmt.Sprintf("Found ports by ip %v", portsByIp)) if len(portsByIp) == len(expectedEndpoints) { expectedPortsByIp := translatePodNameToIpOrFail(c, ns, expectedEndpoints) validatePortsOrFail(portsByIp, expectedPortsByIp) break } else { By(fmt.Sprintf("Unexpected number of endpoints: found %v, expected %v (ignoring for 1 second)", portsByIp, expectedEndpoints)) } } else { By(fmt.Sprintf("Failed to get endpoints: %v (ignoring for 1 second)", err)) } time.Sleep(time.Second) } By(fmt.Sprintf("successfully validated endpoints %v with on service %s/%s", expectedEndpoints, ns, serviceName)) }
{ IP: serverIP, }, }, Ports: []api.EndpointPort{ { Name: "gluster", Port: 24007, Protocol: api.ProtocolTCP, }, }, }, }, } endClient := c.Endpoints(config.namespace) defer func() { if clean { endClient.Delete(config.prefix + "-server") } }() if _, err := endClient.Create(&endpoints); err != nil { Failf("Failed to create endpoints for Gluster server: %v", err) } volume := api.VolumeSource{ Glusterfs: &api.GlusterfsVolumeSource{ EndpointsName: config.prefix + "-server", // 'test_vol' comes from contrib/for-tests/volumes-tester/gluster/run_gluster.sh