package main import ( "fmt" "net" "testing" "github.com/yudhasubki/netpool" ) func TestGenericConnection(t *testing.T) { listenConn := NewConnection("127.0.0.1:51337", nil) listener, err := listenConn.Listen() if err != nil { t.Errorf("Error listening: %v\n", err) } pool, err := netpool.New(func() (net.Conn, error) { return net.Dial("tcp", "127.0.0.1:51337") }, netpool.WithMaxPool(512), netpool.WithMinPool(5)) if err != nil { t.Errorf("Error creating pool: %v\n", err) } conn := NewConnection("127.0.0.1:51337", pool) datta := []byte("Hello, world!") listener.AddHandler(Ping, func(input *FrameWithPayload, resultChan chan<- FrameWithPayload) error { resultChan <- MakeFrameWithPayload(Pong, 200, nil) return nil }) listener.AddHandler(1, func(input *FrameWithPayload, resultChan chan<- FrameWithPayload) error { resultChan <- MakeFrameWithPayload(2, 200, datta) return nil }) listener.AddHandler(3, func(input *FrameWithPayload, resultChan chan<- FrameWithPayload) error { return fmt.Errorf("Error in custom handler") }) r, err := conn.Call(1, datta) if err != nil { t.Errorf("Error calling: %v\n", err) } if r.Type != 2 { t.Errorf("Expected type 2, got %d\n", r.Type) } res, err := conn.Call(3, datta) if err != nil { t.Errorf("Did not expect error, got %v\n", err) return } if res.StatusCode == 200 { t.Errorf("Expected error, got %v\n", res) } i := 100 results := make(chan FrameWithPayload, i) for i > 0 { go conn.CallAsync(1, datta, results) i-- } for i < 100 { r := <-results if r.Type != 2 { t.Errorf("Expected type 2, got %d\n", r.Type) } i++ } response, err := conn.Call(Ping, nil) if err != nil || response.StatusCode != 200 || response.Type != Pong { t.Errorf("Error connecting to remote %v, err: %v\n", response, err) } }