func TestOfflineRouterLocal(t *testing.T) { ctx := context.Background() nds := ds.NewMapDatastore() privkey, _, _ := testutil.RandTestKeyPair(128) offline := NewOfflineRouter(nds, privkey) id, _ := testutil.RandPeerID() _, err := offline.FindPeer(ctx, id) if err != ErrOffline { t.Fatal("OfflineRouting should alert that its offline") } cid, _ := testutil.RandCidV0() pChan := offline.FindProvidersAsync(ctx, cid, 1) p, ok := <-pChan if ok { t.Fatalf("FindProvidersAsync did not return a closed channel. Instead we got %+v !", p) } cid, _ = testutil.RandCidV0() err = offline.Provide(ctx, cid) if err != ErrOffline { t.Fatal("OfflineRouting should alert that its offline") } err = offline.Bootstrap(ctx) if err != nil { t.Fatal("You shouldn't be able to bootstrap offline routing.") } }
func TestRoutingResolve(t *testing.T) { dstore := dssync.MutexWrap(ds.NewMapDatastore()) serv := mockrouting.NewServer() id := testutil.RandIdentityOrFatal(t) d := serv.ClientWithDatastore(context.Background(), id, dstore) resolver := NewRoutingResolver(d, 0) publisher := NewRoutingPublisher(d, dstore) privk, pubk, err := testutil.RandTestKeyPair(512) if err != nil { t.Fatal(err) } h := path.FromString("/ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN") err = publisher.Publish(context.Background(), privk, h) if err != nil { t.Fatal(err) } pubkb, err := pubk.Bytes() if err != nil { t.Fatal(err) } pkhash := u.Hash(pubkb) res, err := resolver.Resolve(context.Background(), key.Key(pkhash).B58String()) if err != nil { t.Fatal(err) } if res != h { t.Fatal("Got back incorrect value.") } }
func TestOfflineRouterStorage(t *testing.T) { ctx := context.Background() nds := ds.NewMapDatastore() privkey, _, _ := testutil.RandTestKeyPair(128) offline := NewOfflineRouter(nds, privkey) err := offline.PutValue(ctx, "key", []byte("testing 1 2 3")) if err != nil { t.Fatal(err) } val, err := offline.GetValue(ctx, "key") if !bytes.Equal([]byte("testing 1 2 3"), val) { t.Fatal("OfflineRouter does not properly store") } val, err = offline.GetValue(ctx, "notHere") if err == nil { t.Fatal("Router should throw errors for unfound records") } recVal, err := offline.GetValues(ctx, "key", 0) if err != nil { t.Fatal(err) } _, err = offline.GetValues(ctx, "notHere", 0) if err == nil { t.Fatal("Router should throw errors for unfound records") } local := recVal[0].Val if !bytes.Equal([]byte("testing 1 2 3"), local) { t.Fatal("OfflineRouter does not properly store") } }
func TestPrexistingRecord(t *testing.T) { dstore := dssync.MutexWrap(ds.NewMapDatastore()) d := mockrouting.NewServer().ClientWithDatastore(context.Background(), testutil.RandIdentityOrFatal(t), dstore) resolver := NewRoutingResolver(d, 0) publisher := NewRoutingPublisher(d, dstore) privk, pubk, err := testutil.RandTestKeyPair(512) if err != nil { t.Fatal(err) } id, err := peer.IDFromPublicKey(pubk) if err != nil { t.Fatal(err) } // Make a good record and put it in the datastore h := path.FromString("/ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN") eol := time.Now().Add(time.Hour) err = PutRecordToRouting(context.Background(), privk, h, 0, eol, d, id) if err != nil { t.Fatal(err) } // Now, with an old record in the system already, try and publish a new one err = publisher.Publish(context.Background(), privk, h) if err != nil { t.Fatal(err) } err = verifyCanResolve(resolver, id.Pretty(), h) if err != nil { t.Fatal(err) } }