Merge pull request #94 from lavalamp/change_port

Fix flaky test in proxier.
pull/6/head
brendandburns 2014-06-12 22:10:34 -07:00
commit fc36ae2759
2 changed files with 46 additions and 24 deletions

View File

@ -90,16 +90,33 @@ func (proxier Proxier) AcceptHandler(service string, listener net.Listener) {
// AddService starts listening for a new service on a given port.
func (proxier Proxier) AddService(service string, port int) error {
// Make sure we can start listening on the port before saying all's well.
ln, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
l, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
if err != nil {
return err
}
log.Printf("Listening for %s on %d", service, port)
// If that succeeds, start the accepting loop.
go proxier.AcceptHandler(service, ln)
proxier.addServiceCommon(service, l)
return nil
}
// addService starts listening for a new service, returning the port it's using.
// For testing on a system with unknown ports used.
func (proxier Proxier) addServiceOnUnusedPort(service string) (string, error) {
// Make sure we can start listening on the port before saying all's well.
l, err := net.Listen("tcp", ":")
if err != nil {
return "", err
}
proxier.addServiceCommon(service, l)
_, port, err := net.SplitHostPort(l.Addr().String())
return port, nil
}
func (proxier Proxier) addServiceCommon(service string, l net.Listener) {
log.Printf("Listening for %s on %s", service, l.Addr().String())
// If that succeeds, start the accepting loop.
go proxier.AcceptHandler(service, l)
}
func (proxier Proxier) OnUpdate(services []api.Service) {
log.Printf("Received update notice: %+v", services)
for _, service := range services {

View File

@ -25,37 +25,42 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
)
// a simple echoServer that only accept one connection
func echoServer(addr string) error {
// a simple echoServer that only accepts one connection. Returns port actually
// being listened on, or an error.
func echoServer(t *testing.T, addr string) (string, error) {
l, err := net.Listen("tcp", addr)
if err != nil {
return fmt.Errorf("failed to start echo service: %v", err)
return "", fmt.Errorf("failed to start echo service: %v", err)
}
defer l.Close()
conn, err := l.Accept()
if err != nil {
return fmt.Errorf("failed to accept new conn to echo service: %v", err)
}
io.Copy(conn, conn)
conn.Close()
return nil
go func() {
defer l.Close()
conn, err := l.Accept()
if err != nil {
t.Errorf("failed to accept new conn to echo service: %v", err)
}
io.Copy(conn, conn)
conn.Close()
}()
_, port, err := net.SplitHostPort(l.Addr().String())
return port, err
}
func TestProxy(t *testing.T) {
go func() {
if err := echoServer("127.0.0.1:2222"); err != nil {
t.Fatal(err)
}
}()
port, err := echoServer(t, "127.0.0.1:")
if err != nil {
t.Fatal(err)
}
lb := NewLoadBalancerRR()
lb.OnUpdate([]api.Endpoints{{"echo", []string{"127.0.0.1:2222"}}})
lb.OnUpdate([]api.Endpoints{{"echo", []string{net.JoinHostPort("127.0.0.1", port)}}})
p := NewProxier(lb)
if err := p.AddService("echo", 2223); err != nil {
t.Fatalf("error adding new service: %v", err)
proxyPort, err := p.addServiceOnUnusedPort("echo")
if err != nil {
t.Fatalf("error adding new service: %#v", err)
}
conn, err := net.Dial("tcp", "127.0.0.1:2223")
conn, err := net.Dial("tcp", net.JoinHostPort("127.0.0.1", proxyPort))
if err != nil {
t.Fatalf("error connecting to proxy: %v", err)
}