func loadBalanceFor(strategy string, b *testing.B) { pool := route.NewPool(2*time.Minute, "") total := 5 endpoints := make([]*route.Endpoint, 0) for i := 0; i < total; i++ { ip := fmt.Sprintf("10.0.1.%d", i) e := route.NewEndpoint("", ip, 60000, "", "", nil, -1, "", models.ModificationTag{}) endpoints = append(endpoints, e) pool.Put(e) } var lb route.EndpointIterator switch strategy { case "round-robin": lb = route.NewRoundRobin(pool, "") case "least-connection": lb = route.NewLeastConnection(pool, "") default: panic("invalid load balancing strategy") } for n := 0; n < b.N; n++ { loadBalance(lb) } }
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("LeastConnection", func() { var pool *route.Pool BeforeEach(func() { pool = route.NewPool(2*time.Minute, "") }) Describe("Next", func() { Context("when pool is empty", func() { It("does not select an endpoint", func() { iter := route.NewLeastConnection(pool, "") Expect(iter.Next()).To(BeNil()) }) }) Context("when pool has endpoints", func() { var ( endpoints []*route.Endpoint total int ) BeforeEach(func() { total = 5 endpoints = make([]*route.Endpoint, 0) for i := 0; i < total; i++ { ip := fmt.Sprintf("10.0.1.%d", i)