func (r *RouteRegistry) LookupWithInstance(uri route.Uri, appId string, appIndex string) *route.Pool { uri = uri.RouteKey() p := r.Lookup(uri) var surgicalPool *route.Pool p.Each(func(e *route.Endpoint) { if (e.ApplicationId == appId) && (e.PrivateInstanceIndex == appIndex) { surgicalPool = route.NewPool(0, "") surgicalPool.Put(e) } }) return surgicalPool }
package route_test import ( "fmt" "time" "code.cloudfoundry.org/gorouter/route" "code.cloudfoundry.org/routing-api/models" . "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
package route_test import ( "time" "code.cloudfoundry.org/gorouter/route" "code.cloudfoundry.org/routing-api/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("RoundRobin", func() { var pool *route.Pool var modTag models.ModificationTag BeforeEach(func() { pool = route.NewPool(2*time.Minute, "") modTag = models.ModificationTag{} }) Describe("Next", func() { It("performs round-robin through the endpoints", func() { e1 := route.NewEndpoint("", "1.2.3.4", 5678, "", "", nil, -1, "", modTag) e2 := route.NewEndpoint("", "5.6.7.8", 1234, "", "", nil, -1, "", modTag) e3 := route.NewEndpoint("", "1.2.7.8", 1234, "", "", nil, -1, "", modTag) endpoints := []*route.Endpoint{e1, e2, e3} for _, e := range endpoints { pool.Put(e) }
package route_test import ( "fmt" "time" "code.cloudfoundry.org/gorouter/route" "code.cloudfoundry.org/routing-api/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Pool", func() { var pool *route.Pool var modTag models.ModificationTag BeforeEach(func() { pool = route.NewPool(2*time.Minute, "") modTag = models.ModificationTag{} }) Context("Put", func() { It("adds endpoints", func() { endpoint := &route.Endpoint{} b := pool.Put(endpoint) Expect(b).To(BeTrue()) }) It("handles duplicate endpoints", func() { endpoint := route.NewEndpoint("", "1.2.3.4", 5678, "", "", nil, 1, "", modTag)