- package privval
-
- import (
- "net"
- "testing"
- "time"
-
- "github.com/tendermint/tendermint/crypto/ed25519"
- )
-
- //-------------------------------------------
- // helper funcs
-
- func newPrivKey() ed25519.PrivKeyEd25519 {
- return ed25519.GenPrivKey()
- }
-
- //-------------------------------------------
- // tests
-
- func TestTCPListenerAcceptDeadline(t *testing.T) {
- ln, err := net.Listen("tcp", "127.0.0.1:0")
- if err != nil {
- t.Fatal(err)
- }
-
- tcpLn := NewTCPListener(ln, newPrivKey())
- TCPListenerAcceptDeadline(time.Millisecond)(tcpLn)
- TCPListenerConnDeadline(time.Second)(tcpLn)
-
- _, err = tcpLn.Accept()
- opErr, ok := err.(*net.OpError)
- if !ok {
- t.Fatalf("have %v, want *net.OpError", err)
- }
-
- if have, want := opErr.Op, "accept"; have != want {
- t.Errorf("have %v, want %v", have, want)
- }
- }
-
- func TestTCPListenerConnDeadline(t *testing.T) {
- ln, err := net.Listen("tcp", "127.0.0.1:0")
- if err != nil {
- t.Fatal(err)
- }
-
- tcpLn := NewTCPListener(ln, newPrivKey())
- TCPListenerAcceptDeadline(time.Second)(tcpLn)
- TCPListenerConnDeadline(time.Millisecond)(tcpLn)
-
- readyc := make(chan struct{})
- donec := make(chan struct{})
- go func(ln net.Listener) {
- defer close(donec)
-
- c, err := ln.Accept()
- if err != nil {
- t.Fatal(err)
- }
- <-readyc
-
- time.Sleep(2 * time.Millisecond)
-
- msg := make([]byte, 200)
- _, err = c.Read(msg)
- opErr, ok := err.(*net.OpError)
- if !ok {
- t.Fatalf("have %v, want *net.OpError", err)
- }
-
- if have, want := opErr.Op, "read"; have != want {
- t.Errorf("have %v, want %v", have, want)
- }
- }(tcpLn)
-
- dialer := DialTCPFn(ln.Addr().String(), testConnDeadline, newPrivKey())
- _, err = dialer()
- if err != nil {
- t.Fatal(err)
- }
- close(readyc)
- <-donec
- }
|