(t *testing.T)
| 71 | } |
| 72 | |
| 73 | func TestNAConn(t *testing.T) { |
| 74 | Convey("Test dial timeout", t, func(c C) { |
| 75 | // Register node with invalid IP address |
| 76 | resolver := &simpleResolver{} |
| 77 | nodeinfo := thisNode() |
| 78 | So(nodeinfo, ShouldNotBeNil) |
| 79 | resolver.registerNode(&proto.Node{ |
| 80 | Addr: "240.0.0.1:8080", |
| 81 | ID: nodeinfo.ID, |
| 82 | PublicKey: nodeinfo.PublicKey, |
| 83 | Nonce: nodeinfo.Nonce, |
| 84 | }) |
| 85 | // Register resolver |
| 86 | RegisterResolver(resolver) |
| 87 | // Test dial timeout |
| 88 | _, err := Dial(nodeinfo.ID) |
| 89 | nerr, ok := errors.Cause(err).(net.Error) |
| 90 | t.Logf("err: %v\n", err) |
| 91 | So(ok, ShouldBeTrue) |
| 92 | So(nerr.Timeout(), ShouldBeTrue) |
| 93 | }) |
| 94 | Convey("Test simple NAConn", t, func(c C) { |
| 95 | l, err := net.Listen("tcp", "localhost:0") |
| 96 | So(err, ShouldBeNil) |
| 97 | defer func() { _ = l.Close() }() |
| 98 | // Register node |
| 99 | resolver := &simpleResolver{} |
| 100 | nodeinfo := thisNode() |
| 101 | So(nodeinfo, ShouldNotBeNil) |
| 102 | resolver.registerNode(&proto.Node{ |
| 103 | Addr: l.Addr().String(), |
| 104 | ID: nodeinfo.ID, |
| 105 | PublicKey: nodeinfo.PublicKey, |
| 106 | Nonce: nodeinfo.Nonce, |
| 107 | }) |
| 108 | // Register resolver |
| 109 | RegisterResolver(resolver) |
| 110 | // Serve |
| 111 | rounds := 100 |
| 112 | message := [1024]byte{} |
| 113 | rand.Read(message[:]) |
| 114 | wg := &sync.WaitGroup{} |
| 115 | wg.Add(1) |
| 116 | go func(c C) { |
| 117 | defer wg.Done() |
| 118 | for i := 0; i < rounds; i++ { |
| 119 | conn, err := l.Accept() |
| 120 | c.So(err, ShouldBeNil) |
| 121 | wg.Add(1) |
| 122 | go func(c C, conn net.Conn) { |
| 123 | defer wg.Done() |
| 124 | naconn, err := Accept(conn) |
| 125 | c.So(err, ShouldBeNil) |
| 126 | defer func() { _ = naconn.Close() }() |
| 127 | t.Logf("accept conn %s <- %s", naconn.LocalAddr(), naconn.RemoteAddr()) |
| 128 | buffer, err := ioutil.ReadAll(naconn) |
| 129 | c.So(err, ShouldBeNil) |
| 130 | c.So(buffer, ShouldResemble, message[:]) |
nothing calls this directly
no test coverage detected