open-nomad/helper/pool/pool_test.go

67 lines
1.3 KiB
Go

package pool
import (
"fmt"
"net"
"testing"
"time"
"github.com/hashicorp/consul/lib/freeport"
"github.com/hashicorp/nomad/helper/testlog"
"github.com/hashicorp/nomad/nomad/structs"
"github.com/hashicorp/yamux"
"github.com/stretchr/testify/require"
)
func newTestPool(t *testing.T) *ConnPool {
w := testlog.NewWriter(t)
p := NewPool(w, 1*time.Minute, 10, nil)
return p
}
func TestConnPool_ConnListener(t *testing.T) {
require := require.New(t)
ports := freeport.GetT(t, 1)
addrStr := fmt.Sprintf("127.0.0.1:%d", ports[0])
addr, err := net.ResolveTCPAddr("tcp", addrStr)
require.Nil(err)
exitCh := make(chan struct{})
defer close(exitCh)
go func() {
ln, err := net.Listen("tcp", addrStr)
require.Nil(err)
defer ln.Close()
conn, _ := ln.Accept()
defer conn.Close()
<-exitCh
}()
time.Sleep(100 * time.Millisecond)
// Create a test pool
pool := newTestPool(t)
// Setup a listener
c := make(chan *yamux.Session, 1)
pool.SetConnListener(c)
// Make an RPC
_, err = pool.acquire("test", addr, structs.ApiMajorVersion)
require.Nil(err)
// Assert we get a connection.
select {
case <-c:
case <-time.After(100 * time.Millisecond):
t.Fatalf("timeout")
}
// Test that the channel is closed when the pool shuts down.
require.Nil(pool.Shutdown())
_, ok := <-c
require.False(ok)
}