mirror of https://github.com/k3s-io/k3s
commit
fc36ae2759
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue