func TestLatencyEWMAFun(t *testing.T) { t.Skip("run it for fun") m := peer.NewMetrics() id, err := testutil.RandPeerID() if err != nil { t.Fatal(err) } mu := 100.0 sig := 10.0 next := func() time.Duration { mu = (rand.NormFloat64() * sig) + mu return time.Duration(mu) } print := func() { fmt.Printf("%3.f %3.f --> %d\n", sig, mu, m.LatencyEWMA(id)) } for { select { case <-time.After(200 * time.Millisecond): m.RecordLatency(id, next()) print() } } }
func randPeer(t *testing.T) peer.ID { p, err := testutil.RandPeerID() if err != nil { t.Fatal(err) } return p }
func TestFilterAddrs(t *testing.T) { m := func(s string) ma.Multiaddr { maddr, err := ma.NewMultiaddr(s) if err != nil { t.Fatal(err) } return maddr } bad := []ma.Multiaddr{ m("/ip4/1.2.3.4/udp/1234"), // unreliable m("/ip4/1.2.3.4/udp/1234/sctp/1234"), // not in manet m("/ip4/1.2.3.4/udp/1234/utp"), // utp is broken m("/ip4/1.2.3.4/udp/1234/udt"), // udt is broken on arm m("/ip6/fe80::1/tcp/0"), // link local m("/ip6/fe80::100/tcp/1234"), // link local } good := []ma.Multiaddr{ m("/ip4/127.0.0.1/tcp/0"), m("/ip6/::1/tcp/0"), } goodAndBad := append(good, bad...) // test filters for _, a := range bad { if addrutil.AddrUsable(a, true) { t.Errorf("addr %s should be unusable", a) } } for _, a := range good { if !addrutil.AddrUsable(a, true) { t.Errorf("addr %s should be usable", a) } } subtestAddrsEqual(t, addrutil.FilterUsableAddrs(bad), []ma.Multiaddr{}) subtestAddrsEqual(t, addrutil.FilterUsableAddrs(good), good) subtestAddrsEqual(t, addrutil.FilterUsableAddrs(goodAndBad), good) // now test it with swarm id, err := testutil.RandPeerID() if err != nil { t.Fatal(err) } ps := peer.NewPeerstore() ctx := context.Background() if _, err := NewNetwork(ctx, bad, id, ps, metrics.NewBandwidthCounter()); err == nil { t.Fatal("should have failed to create swarm") } if _, err := NewNetwork(ctx, goodAndBad, id, ps, metrics.NewBandwidthCounter()); err != nil { t.Fatal("should have succeeded in creating swarm", err) } }