diff --git a/epictest/addcat_test.go b/epictest/addcat_test.go index 7c028135a..c9ccb931a 100644 --- a/epictest/addcat_test.go +++ b/epictest/addcat_test.go @@ -94,14 +94,16 @@ func DirectAddCat(data []byte, conf Config) error { Bandwidth: math.MaxInt32, }) - if len(mn.Peers()) < numPeers { + peers := mn.Peers() + if len(peers) < numPeers { return errors.New("test initialization error") } - adder, err := makeCore(ctx, MocknetTestRepo(mn.Peers()[0], mn.Net(mn.Peers()[0]), conf)) + + adder, err := makeCore(ctx, MocknetTestRepo(peers[0], mn.Net(peers[0]), conf)) if err != nil { return err } - catter, err := makeCore(ctx, MocknetTestRepo(mn.Peers()[1], mn.Net(mn.Peers()[1]), conf)) + catter, err := makeCore(ctx, MocknetTestRepo(peers[1], mn.Net(peers[1]), conf)) if err != nil { return err } diff --git a/epictest/core.go b/epictest/core.go index b7dac264a..bb2f00756 100644 --- a/epictest/core.go +++ b/epictest/core.go @@ -6,6 +6,7 @@ import ( context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" datastore "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore" sync "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore/sync" + blockstore "github.com/jbenet/go-ipfs/blocks/blockstore" blockservice "github.com/jbenet/go-ipfs/blockservice" exchange "github.com/jbenet/go-ipfs/exchange" @@ -22,8 +23,11 @@ import ( util "github.com/jbenet/go-ipfs/util" "github.com/jbenet/go-ipfs/util/datastore2" delay "github.com/jbenet/go-ipfs/util/delay" + eventlog "github.com/jbenet/go-ipfs/util/eventlog" ) +var log = eventlog.Logger("epictest") + // TODO merge with core.IpfsNode type core struct { repo Repo @@ -128,6 +132,8 @@ func MocknetTestRepo(p peer.ID, n net.Network, conf Config) RepoFactory { const alwaysSendToPeer = true dsDelay := delay.Fixed(conf.BlockstoreLatency) ds := sync.MutexWrap(datastore2.WithDelay(datastore.NewMapDatastore(), dsDelay)) + + log.Debugf("MocknetTestRepo: %s %s %s", p, n.LocalPeer(), n) dhtt := dht.NewDHT(ctx, p, n, ds) bsn := bsnet.NewFromIpfsNetwork(n, dhtt) bstore, err := blockstore.WriteCached(blockstore.NewBlockstore(ds), kWriteCacheElems) diff --git a/epictest/three_legged_cat_test.go b/epictest/three_legged_cat_test.go index 40de2cae7..d66578305 100644 --- a/epictest/three_legged_cat_test.go +++ b/epictest/three_legged_cat_test.go @@ -38,18 +38,19 @@ func RunThreeLeggedCat(data []byte, conf Config) error { Bandwidth: math.MaxInt32, }) - if len(mn.Peers()) < numPeers { + peers := mn.Peers() + if len(peers) < numPeers { return errors.New("test initialization error") } - adder, err := makeCore(ctx, MocknetTestRepo(mn.Peers()[0], mn.Net(mn.Peers()[0]), conf)) + adder, err := makeCore(ctx, MocknetTestRepo(peers[0], mn.Net(peers[0]), conf)) if err != nil { return err } - catter, err := makeCore(ctx, MocknetTestRepo(mn.Peers()[1], mn.Net(mn.Peers()[1]), conf)) + catter, err := makeCore(ctx, MocknetTestRepo(peers[1], mn.Net(peers[1]), conf)) if err != nil { return err } - bootstrap, err := makeCore(ctx, MocknetTestRepo(mn.Peers()[2], mn.Net(mn.Peers()[2]), conf)) + bootstrap, err := makeCore(ctx, MocknetTestRepo(peers[2], mn.Net(peers[2]), conf)) if err != nil { return err } diff --git a/net/mock/interface.go b/net/mock/interface.go index 5f40397d7..be6bd4bb2 100644 --- a/net/mock/interface.go +++ b/net/mock/interface.go @@ -26,7 +26,7 @@ type Mocknet interface { // ID is derived from PrivKey AddPeer(ic.PrivKey, ma.Multiaddr) (inet.Network, error) - // retrieve things + // retrieve things (with randomized iteration order) Peers() []peer.ID Net(peer.ID) inet.Network Nets() []inet.Network diff --git a/net/mux.go b/net/mux.go index b8cebd55a..9145369e9 100644 --- a/net/mux.go +++ b/net/mux.go @@ -1,7 +1,6 @@ package net import ( - "errors" "fmt" "io" "sync" @@ -66,17 +65,24 @@ func (m *Mux) ReadProtocolHeader(s io.Reader) (string, StreamHandler, error) { case !found && m.Default != nil: return name, m.Default, nil case !found && m.Default == nil: - return name, nil, errors.New("no handler with name: " + name) + return name, nil, fmt.Errorf("%s no handler with name: %s (%d)", m, name, len(name)) default: return name, h, nil } } +// String returns the muxer's printing representation +func (m *Mux) String() string { + m.RLock() + defer m.RUnlock() + return fmt.Sprintf("", m, len(m.Handlers)) +} + // SetHandler sets the protocol handler on the Network's Muxer. // This operation is threadsafe. func (m *Mux) SetHandler(p ProtocolID, h StreamHandler) { + log.Debugf("%s setting handler for protocol: %s (%d)", m, p, len(p)) m.Lock() - log.Debug("setting protocol ", p) m.Handlers[p] = h m.Unlock() }