func ipvsTests(ncc client.NCC) { // Manipulate the IPVS table. if err := ncc.IPVSFlush(); err != nil { log.Fatalf("Failed to flush the IPVS table: %v", err) } log.Printf("Adding IPVS service %v with %d destinations", testSvc, len(testSvc.Destinations)) if err := ncc.IPVSAddService(testSvc); err != nil { log.Fatalf("Failed to add IPVS service: %v", err) } svcs, err := ncc.IPVSGetServices() if err != nil { log.Fatalf("Failed to get IPVS services: %v", err) } for _, svc := range svcs { log.Printf("Got IPVS service %v with %d destinations", svc, len(svc.Destinations)) } if len(svcs) != 1 { log.Fatalf("IPVSGetServices returned %d services, expected 1", len(svcs)) } if len(svcs[0].Destinations) != len(testSvc.Destinations) { log.Fatalf("IPVSGetServices returned %d destinations, expected %d", len(svcs[0].Destinations), len(testSvc.Destinations)) } dst := testSvc.Destinations[0] if err := ncc.IPVSDeleteDestination(testSvc, dst); err != nil { log.Fatalf("Failed to delete destination: %v", err) } svc, err := ncc.IPVSGetService(testSvc) if err != nil { log.Fatalf("Failed to get IPVS service: %v", err) } if len(svc.Destinations) != len(testSvc.Destinations)-1 { log.Fatalf("IPVSGetService returned %d destinations, expected %d", len(svc.Destinations), len(testSvc.Destinations)-1) } ipvsGetLoadTest(4, 10*time.Second) if err := ncc.IPVSDeleteService(testSvc); err != nil { log.Fatalf("Failed to delete IPVS service: %v", err) } ipvsAddLoadTest(ncc, 20, 50) // Clean up after ourselves... if err := ncc.IPVSFlush(); err != nil { log.Fatalf("Failed to flush the IPVS table: %v", err) } }
func ipvsAddLoadTest(ncc client.NCC, services, dests int) { log.Printf("Starting IPVS add load test - %d services, each with %d destinations", services, dests) if err := ncc.IPVSFlush(); err != nil { log.Fatalf("Failed to flush the IPVS table: %v", err) } done := make(chan bool) for i := 0; i < services; i++ { go ipvsAddService(done, i, dests) } for i := 0; i < services; i++ { <-done } if err := ncc.IPVSFlush(); err != nil { log.Fatalf("Failed to flush the IPVS table: %v", err) } log.Printf("Completed IPVS add load test") }