func runParallelTests(t *testing.T, thrNumber int) { var ( ep libnetwork.Endpoint sb libnetwork.Sandbox err error ) t.Parallel() pTest := flag.Lookup("test.parallel") if pTest == nil { t.Skip("Skipped because test.parallel flag not set;") } numParallel, err := strconv.Atoi(pTest.Value.String()) if err != nil { t.Fatal(err) } if numParallel < numThreads { t.Skip("Skipped because t.parallel was less than ", numThreads) } runtime.LockOSThread() defer runtime.UnlockOSThread() if thrNumber == first { createGlobalInstance(t) } if thrNumber != first { select { case <-start: } thrdone := make(chan struct{}) done <- thrdone defer close(thrdone) if thrNumber == last { defer close(done) } err = netns.Set(testns) if err != nil { t.Fatal(err) } } defer netns.Set(origns) net1, err := controller.NetworkByName("testhost") if err != nil { t.Fatal(err) } if net1 == nil { t.Fatal("Could not find testhost") } net2, err := controller.NetworkByName("network2") if err != nil { t.Fatal(err) } if net2 == nil { t.Fatal("Could not find network2") } epName := fmt.Sprintf("pep%d", thrNumber) if thrNumber == first { ep, err = net1.EndpointByName(epName) } else { ep, err = net2.EndpointByName(epName) } if err != nil { t.Fatal(err) } if ep == nil { t.Fatal("Got nil ep with no error") } cid := fmt.Sprintf("%drace", thrNumber) controller.WalkSandboxes(libnetwork.SandboxContainerWalker(&sb, cid)) if sb == nil { t.Fatalf("Got nil sandbox for container: %s", cid) } for i := 0; i < iterCnt; i++ { parallelJoin(t, sb, ep, thrNumber) parallelLeave(t, sb, ep, thrNumber) } debugf("\n") err = ep.Delete() if err != nil { t.Fatal(err) } if thrNumber == first { for thrdone := range done { select { case <-thrdone: } } testns.Close() err = sb.Delete() if err != nil { t.Fatal(err) } ep.Delete() if err != nil { t.Fatal(err) } if err := net2.Delete(); err != nil { t.Fatal(err) } } }