diff --git a/.travis.yml b/.travis.yml index 6a94966085..cf9fec9168 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,3 +15,7 @@ install: true script: - make deps - go test ./p2p/... + +cache: + directories: + - $GOPATH/src/gx diff --git a/p2p/protocol/identify/id.go b/p2p/protocol/identify/id.go index 1f1e2c1326..a8fe4d4ccc 100644 --- a/p2p/protocol/identify/id.go +++ b/p2p/protocol/identify/id.go @@ -82,21 +82,21 @@ func (ids *IDService) IdentifyConn(c inet.Conn) { log.Event(context.TODO(), "IdentifyOpenFailed", c.RemotePeer()) c.Close() return - } else { - bwc := ids.Host.GetBandwidthReporter() - s = mstream.WrapStream(s, ID, bwc) - - // ok give the response to our handler. - if err := msmux.SelectProtoOrFail(ID, s); err != nil { - log.Debugf("error writing stream header for %s", ID) - log.Event(context.TODO(), "IdentifyOpenFailed", c.RemotePeer()) - s.Close() - return - } else { - ids.ResponseHandler(s) - } } + bwc := ids.Host.GetBandwidthReporter() + s = mstream.WrapStream(s, ID, bwc) + + // ok give the response to our handler. + if err := msmux.SelectProtoOrFail(ID, s); err != nil { + log.Debugf("error writing stream header for %s", ID) + log.Event(context.TODO(), "IdentifyOpenFailed", c.RemotePeer()) + s.Close() + return + } + + ids.ResponseHandler(s) + ids.currmu.Lock() ch, found := ids.currid[c] delete(ids.currid, c) @@ -190,6 +190,8 @@ func (ids *IDService) consumeMessage(mes *pb.Identify, c inet.Conn) { lmaddrs = append(lmaddrs, maddr) } + lmaddrs = append(lmaddrs, c.RemoteMultiaddr()) + // update our peerstore with the addresses. here, we SET the addresses, clearing old ones. // We are receiving from the peer itself. this is current address ground truth. ids.Host.Peerstore().SetAddrs(p, lmaddrs, peer.ConnectedAddrTTL) diff --git a/p2p/protocol/identify/id_test.go b/p2p/protocol/identify/id_test.go index 53a5729d53..6c1d1e1270 100644 --- a/p2p/protocol/identify/id_test.go +++ b/p2p/protocol/identify/id_test.go @@ -38,6 +38,7 @@ func subtestIDService(t *testing.T, postDialWait time.Duration) { // the IDService should be opened automatically, by the network. // what we should see now is that both peers know about each others listen addresses. + t.Log("test peer1 has peer2 addrs correctly") testKnowsAddrs(t, h1, h2p, h2.Peerstore().Addrs(h2p)) // has them testHasProtocolVersions(t, h1, h2p) @@ -49,8 +50,12 @@ func subtestIDService(t *testing.T, postDialWait time.Duration) { } <-h2.IDService().IdentifyWait(c[0]) + addrs := h1.Peerstore().Addrs(h1p) + addrs = append(addrs, c[0].RemoteMultiaddr()) + // and the protocol versions. - testKnowsAddrs(t, h2, h1p, h1.Peerstore().Addrs(h1p)) // has them + t.Log("test peer2 has peer1 addrs correctly") + testKnowsAddrs(t, h2, h1p, addrs) // has them testHasProtocolVersions(t, h2, h1p) } @@ -58,7 +63,9 @@ func testKnowsAddrs(t *testing.T, h host.Host, p peer.ID, expected []ma.Multiadd actual := h.Peerstore().Addrs(p) if len(actual) != len(expected) { - t.Error("dont have the same addresses") + t.Errorf("expected: %s", expected) + t.Errorf("actual: %s", actual) + t.Fatal("dont have the same addresses") } have := map[string]struct{}{}