diff --git a/blockservice/test/mock.go b/blockservice/test/mock.go index c76c4d025..06d8e65ad 100644 --- a/blockservice/test/mock.go +++ b/blockservice/test/mock.go @@ -4,9 +4,9 @@ import ( . "github.com/ipfs/go-ipfs/blockservice" bitswap "github.com/ipfs/go-ipfs/exchange/bitswap" tn "github.com/ipfs/go-ipfs/exchange/bitswap/testnet" - mockrouting "github.com/ipfs/go-ipfs/routing/mock" delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay" + mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock" ) // Mocks returns |n| connected mock Blockservices diff --git a/core/commands/ipns.go b/core/commands/ipns.go index f84ffbfb6..82837e522 100644 --- a/core/commands/ipns.go +++ b/core/commands/ipns.go @@ -8,8 +8,8 @@ import ( cmds "github.com/ipfs/go-ipfs/commands" e "github.com/ipfs/go-ipfs/core/commands/e" namesys "github.com/ipfs/go-ipfs/namesys" - offline "github.com/ipfs/go-ipfs/routing/offline" + offline "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/offline" "gx/ipfs/QmceUdzxkimdYsgtX733uNgzf1DLHyBKN6ehGSp85ayppM/go-ipfs-cmdkit" ) diff --git a/core/core.go b/core/core.go index 5f240243b..cd3b7adee 100644 --- a/core/core.go +++ b/core/core.go @@ -38,8 +38,6 @@ import ( pin "github.com/ipfs/go-ipfs/pin" repo "github.com/ipfs/go-ipfs/repo" config "github.com/ipfs/go-ipfs/repo/config" - nilrouting "github.com/ipfs/go-ipfs/routing/none" - offroute "github.com/ipfs/go-ipfs/routing/offline" ft "github.com/ipfs/go-ipfs/unixfs" addrutil "gx/ipfs/QmNSWW3Sb4eju4o2djPQ1L1c2Zj9XN9sMYJL8r1cbxdc6b/go-addr-util" @@ -66,6 +64,8 @@ import ( smux "gx/ipfs/QmY9JXR3FupnYAYJWK9aMr9bCpqWKcToQ1tz8DVGTrHpHw/go-stream-muxer" connmgr "gx/ipfs/QmZ1R2LxRZTUaeuMFEtQigzHfFCv3hLYBi5316aZ7YUeyf/go-libp2p-connmgr" ipnet "gx/ipfs/QmZPrWxuM8GHr4cGKbyF5CCT11sFUP9hgqpeUHALvx2nUr/go-libp2p-interface-pnet" + nilrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/none" + offroute "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/offline" peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" ic "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto" ifconnmgr "gx/ipfs/Qmax8X1Kfahf5WfSB68EWDG3d3qyS3Sqs1v412fjPTfRwx/go-libp2p-interface-connmgr" @@ -947,21 +947,21 @@ func startListening(ctx context.Context, host p2phost.Host, cfg *config.Config) return nil } -func constructDHTRouting(ctx context.Context, host p2phost.Host, dstore repo.Datastore) (routing.IpfsRouting, error) { +func constructDHTRouting(ctx context.Context, host p2phost.Host, dstore ds.Batching) (routing.IpfsRouting, error) { dhtRouting := dht.NewDHT(ctx, host, dstore) dhtRouting.Validator[IpnsValidatorTag] = namesys.NewIpnsRecordValidator(host.Peerstore()) dhtRouting.Selector[IpnsValidatorTag] = namesys.IpnsSelectorFunc return dhtRouting, nil } -func constructClientDHTRouting(ctx context.Context, host p2phost.Host, dstore repo.Datastore) (routing.IpfsRouting, error) { +func constructClientDHTRouting(ctx context.Context, host p2phost.Host, dstore ds.Batching) (routing.IpfsRouting, error) { dhtRouting := dht.NewDHTClient(ctx, host, dstore) dhtRouting.Validator[IpnsValidatorTag] = namesys.NewIpnsRecordValidator(host.Peerstore()) dhtRouting.Selector[IpnsValidatorTag] = namesys.IpnsSelectorFunc return dhtRouting, nil } -type RoutingOption func(context.Context, p2phost.Host, repo.Datastore) (routing.IpfsRouting, error) +type RoutingOption func(context.Context, p2phost.Host, ds.Batching) (routing.IpfsRouting, error) type DiscoveryOption func(context.Context, p2phost.Host) (discovery.Service, error) diff --git a/core/coreapi/name.go b/core/coreapi/name.go index 8475d08fd..e99545acd 100644 --- a/core/coreapi/name.go +++ b/core/coreapi/name.go @@ -13,8 +13,8 @@ import ( keystore "github.com/ipfs/go-ipfs/keystore" namesys "github.com/ipfs/go-ipfs/namesys" ipath "github.com/ipfs/go-ipfs/path" - offline "github.com/ipfs/go-ipfs/routing/offline" + offline "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/offline" peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" crypto "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto" ) diff --git a/exchange/bitswap/bitswap_test.go b/exchange/bitswap/bitswap_test.go index 26fed27d1..854661670 100644 --- a/exchange/bitswap/bitswap_test.go +++ b/exchange/bitswap/bitswap_test.go @@ -12,12 +12,12 @@ import ( blocksutil "github.com/ipfs/go-ipfs/blocks/blocksutil" decision "github.com/ipfs/go-ipfs/exchange/bitswap/decision" tn "github.com/ipfs/go-ipfs/exchange/bitswap/testnet" - mockrouting "github.com/ipfs/go-ipfs/routing/mock" delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay" tu "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" travis "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil/ci/travis" p2ptestutil "gx/ipfs/QmYVR3C8DWPHdHxvLtNFYfjsXgaRAdh6hPMNH3KiwCgu4o/go-libp2p-netutil" + mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock" cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid" blocks "gx/ipfs/Qmej7nf81hi2x2tvjRBF3mcp74sQyuDH4VMYDGd1YtXjb2/go-block-format" detectrace "gx/ipfs/Qmf7HqcW7LtCi1W8y2bdx2eJpze74jkbKqpByxgXikdbLF/go-detect-race" diff --git a/exchange/bitswap/testnet/network_test.go b/exchange/bitswap/testnet/network_test.go index 4cb7551db..27f7edc69 100644 --- a/exchange/bitswap/testnet/network_test.go +++ b/exchange/bitswap/testnet/network_test.go @@ -7,10 +7,10 @@ import ( bsmsg "github.com/ipfs/go-ipfs/exchange/bitswap/message" bsnet "github.com/ipfs/go-ipfs/exchange/bitswap/network" - mockrouting "github.com/ipfs/go-ipfs/routing/mock" delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay" testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" + mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock" peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" blocks "gx/ipfs/Qmej7nf81hi2x2tvjRBF3mcp74sQyuDH4VMYDGd1YtXjb2/go-block-format" ) diff --git a/exchange/bitswap/testnet/peernet.go b/exchange/bitswap/testnet/peernet.go index effe1bfac..9997c4403 100644 --- a/exchange/bitswap/testnet/peernet.go +++ b/exchange/bitswap/testnet/peernet.go @@ -4,10 +4,11 @@ import ( "context" bsnet "github.com/ipfs/go-ipfs/exchange/bitswap/network" - mockrouting "github.com/ipfs/go-ipfs/routing/mock" + mockpeernet "gx/ipfs/QmNh1kGFFdsPu79KNSaL4NUKUPb4Eiz4KHdMtFY6664RDp/go-libp2p/p2p/net/mock" ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" + mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock" peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" ) diff --git a/exchange/bitswap/testnet/virtual.go b/exchange/bitswap/testnet/virtual.go index 7e7ee185c..b8237a1b6 100644 --- a/exchange/bitswap/testnet/virtual.go +++ b/exchange/bitswap/testnet/virtual.go @@ -8,12 +8,12 @@ import ( bsmsg "github.com/ipfs/go-ipfs/exchange/bitswap/message" bsnet "github.com/ipfs/go-ipfs/exchange/bitswap/network" - mockrouting "github.com/ipfs/go-ipfs/routing/mock" delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay" logging "gx/ipfs/QmRb5jh8z2E8hMGN2tkvs1yHynUanqnZ3UeKwgN1i9P1F8/go-log" routing "gx/ipfs/QmTiWLZ6Fo5j4KcTVutZJ5KWRRJrbxzmxA4td8NfEdrPh7/go-libp2p-routing" testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" + mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock" peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" ifconnmgr "gx/ipfs/Qmax8X1Kfahf5WfSB68EWDG3d3qyS3Sqs1v412fjPTfRwx/go-libp2p-interface-connmgr" cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid" diff --git a/exchange/reprovide/reprovide_test.go b/exchange/reprovide/reprovide_test.go index 06c5c12aa..8a9b0c886 100644 --- a/exchange/reprovide/reprovide_test.go +++ b/exchange/reprovide/reprovide_test.go @@ -5,11 +5,12 @@ import ( "testing" blockstore "github.com/ipfs/go-ipfs/blocks/blockstore" - mock "github.com/ipfs/go-ipfs/routing/mock" + ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync" testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore" + mock "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock" blocks "gx/ipfs/Qmej7nf81hi2x2tvjRBF3mcp74sQyuDH4VMYDGd1YtXjb2/go-block-format" . "github.com/ipfs/go-ipfs/exchange/reprovide" diff --git a/fuse/ipns/ipns_test.go b/fuse/ipns/ipns_test.go index f8faeb19e..ab1ba5aed 100644 --- a/fuse/ipns/ipns_test.go +++ b/fuse/ipns/ipns_test.go @@ -14,12 +14,12 @@ import ( core "github.com/ipfs/go-ipfs/core" namesys "github.com/ipfs/go-ipfs/namesys" - offroute "github.com/ipfs/go-ipfs/routing/offline" - ci "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil/ci" - racedet "gx/ipfs/Qmf7HqcW7LtCi1W8y2bdx2eJpze74jkbKqpByxgXikdbLF/go-detect-race" u "gx/ipfs/QmNiJuT8Ja3hMVpBHXv3Q6dwmperaQ6JjLtpMQgMCD7xvx/go-ipfs-util" + ci "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil/ci" + offroute "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/offline" fstest "gx/ipfs/QmaFNtBAXX4nVMQWbUqNysXyhevUj1k4B1y5uS45LC7Vw9/fuse/fs/fstestutil" + racedet "gx/ipfs/Qmf7HqcW7LtCi1W8y2bdx2eJpze74jkbKqpByxgXikdbLF/go-detect-race" ) func maybeSkipFuseTests(t *testing.T) { diff --git a/fuse/node/mount_test.go b/fuse/node/mount_test.go index 7efb7cdc5..15a7bccc6 100644 --- a/fuse/node/mount_test.go +++ b/fuse/node/mount_test.go @@ -15,8 +15,9 @@ import ( ipns "github.com/ipfs/go-ipfs/fuse/ipns" mount "github.com/ipfs/go-ipfs/fuse/mount" namesys "github.com/ipfs/go-ipfs/namesys" - offroute "github.com/ipfs/go-ipfs/routing/offline" + ci "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil/ci" + offroute "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/offline" ) func maybeSkipFuseTests(t *testing.T) { diff --git a/namesys/ipns_validate_test.go b/namesys/ipns_validate_test.go index 262b0711d..559a1b78a 100644 --- a/namesys/ipns_validate_test.go +++ b/namesys/ipns_validate_test.go @@ -7,7 +7,6 @@ import ( "time" path "github.com/ipfs/go-ipfs/path" - mockrouting "github.com/ipfs/go-ipfs/routing/mock" u "gx/ipfs/QmNiJuT8Ja3hMVpBHXv3Q6dwmperaQ6JjLtpMQgMCD7xvx/go-ipfs-util" ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" @@ -18,6 +17,7 @@ import ( testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore" proto "gx/ipfs/QmZ4Qi3GaRbjcx28Sme5eMH7RQjGkt8wHxt2a65oLaeFEV/gogo-protobuf/proto" + mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock" peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto" ) diff --git a/namesys/namesys_test.go b/namesys/namesys_test.go index 2cd91c79f..e4f7af196 100644 --- a/namesys/namesys_test.go +++ b/namesys/namesys_test.go @@ -7,11 +7,11 @@ import ( context "context" path "github.com/ipfs/go-ipfs/path" - offroute "github.com/ipfs/go-ipfs/routing/offline" "github.com/ipfs/go-ipfs/unixfs" ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync" + offroute "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/offline" ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto" ) diff --git a/namesys/publisher_test.go b/namesys/publisher_test.go index 7e28179bf..e7d2dd686 100644 --- a/namesys/publisher_test.go +++ b/namesys/publisher_test.go @@ -7,12 +7,12 @@ import ( "time" path "github.com/ipfs/go-ipfs/path" - mockrouting "github.com/ipfs/go-ipfs/routing/mock" ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync" testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" ma "gx/ipfs/QmWWQ2Txc2c6tqjsBpzg5Ar652cHPGNsQQp2SejkNmkUMb/go-multiaddr" + mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock" peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto" dshelp "gx/ipfs/QmdQTPWduSeyveSxeCAte33M592isSW5Z979g81aJphrgn/go-ipfs-ds-help" diff --git a/namesys/pubsub_test.go b/namesys/pubsub_test.go index b8e6dbec3..e2cf15b5d 100644 --- a/namesys/pubsub_test.go +++ b/namesys/pubsub_test.go @@ -7,7 +7,6 @@ import ( "time" path "github.com/ipfs/go-ipfs/path" - mockrouting "github.com/ipfs/go-ipfs/routing/mock" p2phost "gx/ipfs/QmNmJZL7FQySMtE2BQuLMuZg2EB2CLEunJJUSVSc9YnnbV/go-libp2p-host" ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" @@ -17,6 +16,7 @@ import ( testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore" netutil "gx/ipfs/QmYVR3C8DWPHdHxvLtNFYfjsXgaRAdh6hPMNH3KiwCgu4o/go-libp2p-netutil" + mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock" peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto" ) diff --git a/namesys/resolve_test.go b/namesys/resolve_test.go index 17dab14af..a55d5a4d4 100644 --- a/namesys/resolve_test.go +++ b/namesys/resolve_test.go @@ -7,11 +7,11 @@ import ( "time" path "github.com/ipfs/go-ipfs/path" - mockrouting "github.com/ipfs/go-ipfs/routing/mock" - testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync" + testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" + mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock" peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" ) diff --git a/package.json b/package.json index 1657fc738..34d75d959 100644 --- a/package.json +++ b/package.json @@ -551,6 +551,12 @@ "hash": "QmdQTPWduSeyveSxeCAte33M592isSW5Z979g81aJphrgn", "name": "go-ipfs-ds-help", "version": "0.0.1" + }, + { + "author": "hsanjuan", + "hash": "QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb", + "name": "go-ipfs-routing", + "version": "0.0.1" } ], "gxVersion": "0.10.0", diff --git a/routing/mock/centralized_client.go b/routing/mock/centralized_client.go deleted file mode 100644 index 985eb2814..000000000 --- a/routing/mock/centralized_client.go +++ /dev/null @@ -1,125 +0,0 @@ -package mockrouting - -import ( - "context" - "errors" - "time" - - u "gx/ipfs/QmNiJuT8Ja3hMVpBHXv3Q6dwmperaQ6JjLtpMQgMCD7xvx/go-ipfs-util" - ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" - logging "gx/ipfs/QmRb5jh8z2E8hMGN2tkvs1yHynUanqnZ3UeKwgN1i9P1F8/go-log" - routing "gx/ipfs/QmTiWLZ6Fo5j4KcTVutZJ5KWRRJrbxzmxA4td8NfEdrPh7/go-libp2p-routing" - dhtpb "gx/ipfs/QmUpttFinNDmNPgFwKN8sZK6BUtBmA68Y4KdSBDXa8t9sJ/go-libp2p-record/pb" - "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" - ma "gx/ipfs/QmWWQ2Txc2c6tqjsBpzg5Ar652cHPGNsQQp2SejkNmkUMb/go-multiaddr" - pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore" - proto "gx/ipfs/QmZ4Qi3GaRbjcx28Sme5eMH7RQjGkt8wHxt2a65oLaeFEV/gogo-protobuf/proto" - peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" - cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid" - dshelp "gx/ipfs/QmdQTPWduSeyveSxeCAte33M592isSW5Z979g81aJphrgn/go-ipfs-ds-help" -) - -var log = logging.Logger("mockrouter") - -type client struct { - datastore ds.Datastore - server server - peer testutil.Identity -} - -// FIXME(brian): is this method meant to simulate putting a value into the network? -func (c *client) PutValue(ctx context.Context, key string, val []byte) error { - log.Debugf("PutValue: %s", key) - rec := new(dhtpb.Record) - rec.Value = val - rec.Key = proto.String(string(key)) - rec.TimeReceived = proto.String(u.FormatRFC3339(time.Now())) - data, err := proto.Marshal(rec) - if err != nil { - return err - } - - return c.datastore.Put(dshelp.NewKeyFromBinary([]byte(key)), data) -} - -// FIXME(brian): is this method meant to simulate getting a value from the network? -func (c *client) GetValue(ctx context.Context, key string) ([]byte, error) { - log.Debugf("GetValue: %s", key) - v, err := c.datastore.Get(dshelp.NewKeyFromBinary([]byte(key))) - if err != nil { - return nil, err - } - - data, ok := v.([]byte) - if !ok { - return nil, errors.New("could not cast value from datastore") - } - - rec := new(dhtpb.Record) - err = proto.Unmarshal(data, rec) - if err != nil { - return nil, err - } - - return rec.GetValue(), nil -} - -func (c *client) GetValues(ctx context.Context, key string, count int) ([]routing.RecvdVal, error) { - log.Debugf("GetValues: %s", key) - data, err := c.GetValue(ctx, key) - if err != nil { - return nil, err - } - - return []routing.RecvdVal{{Val: data, From: c.peer.ID()}}, nil -} - -func (c *client) FindProviders(ctx context.Context, key *cid.Cid) ([]pstore.PeerInfo, error) { - return c.server.Providers(key), nil -} - -func (c *client) FindPeer(ctx context.Context, pid peer.ID) (pstore.PeerInfo, error) { - log.Debugf("FindPeer: %s", pid) - return pstore.PeerInfo{}, nil -} - -func (c *client) FindProvidersAsync(ctx context.Context, k *cid.Cid, max int) <-chan pstore.PeerInfo { - out := make(chan pstore.PeerInfo) - go func() { - defer close(out) - for i, p := range c.server.Providers(k) { - if max <= i { - return - } - select { - case out <- p: - case <-ctx.Done(): - return - } - } - }() - return out -} - -// Provide returns once the message is on the network. Value is not necessarily -// visible yet. -func (c *client) Provide(_ context.Context, key *cid.Cid, brd bool) error { - if !brd { - return nil - } - info := pstore.PeerInfo{ - ID: c.peer.ID(), - Addrs: []ma.Multiaddr{c.peer.Address()}, - } - return c.server.Announce(info, key) -} - -func (c *client) Ping(ctx context.Context, p peer.ID) (time.Duration, error) { - return 0, nil -} - -func (c *client) Bootstrap(context.Context) error { - return nil -} - -var _ routing.IpfsRouting = &client{} diff --git a/routing/mock/centralized_server.go b/routing/mock/centralized_server.go deleted file mode 100644 index b4263d1d2..000000000 --- a/routing/mock/centralized_server.go +++ /dev/null @@ -1,92 +0,0 @@ -package mockrouting - -import ( - "context" - "math/rand" - "sync" - "time" - - "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" - - ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" - dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync" - pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore" - peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" - cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid" -) - -// server is the mockrouting.Client's private interface to the routing server -type server interface { - Announce(pstore.PeerInfo, *cid.Cid) error - Providers(*cid.Cid) []pstore.PeerInfo - - Server -} - -// s is an implementation of the private server interface -type s struct { - delayConf DelayConfig - - lock sync.RWMutex - providers map[string]map[peer.ID]providerRecord -} - -type providerRecord struct { - Peer pstore.PeerInfo - Created time.Time -} - -func (rs *s) Announce(p pstore.PeerInfo, c *cid.Cid) error { - rs.lock.Lock() - defer rs.lock.Unlock() - - k := c.KeyString() - - _, ok := rs.providers[k] - if !ok { - rs.providers[k] = make(map[peer.ID]providerRecord) - } - rs.providers[k][p.ID] = providerRecord{ - Created: time.Now(), - Peer: p, - } - return nil -} - -func (rs *s) Providers(c *cid.Cid) []pstore.PeerInfo { - rs.delayConf.Query.Wait() // before locking - - rs.lock.RLock() - defer rs.lock.RUnlock() - k := c.KeyString() - - var ret []pstore.PeerInfo - records, ok := rs.providers[k] - if !ok { - return ret - } - for _, r := range records { - if time.Since(r.Created) > rs.delayConf.ValueVisibility.Get() { - ret = append(ret, r.Peer) - } - } - - for i := range ret { - j := rand.Intn(i + 1) - ret[i], ret[j] = ret[j], ret[i] - } - - return ret -} - -func (rs *s) Client(p testutil.Identity) Client { - return rs.ClientWithDatastore(context.Background(), p, dssync.MutexWrap(ds.NewMapDatastore())) -} - -func (rs *s) ClientWithDatastore(_ context.Context, p testutil.Identity, datastore ds.Datastore) Client { - return &client{ - peer: p, - datastore: datastore, - server: rs, - } -} diff --git a/routing/mock/centralized_test.go b/routing/mock/centralized_test.go deleted file mode 100644 index b3f6c2926..000000000 --- a/routing/mock/centralized_test.go +++ /dev/null @@ -1,176 +0,0 @@ -package mockrouting - -import ( - "context" - "testing" - "time" - - u "gx/ipfs/QmNiJuT8Ja3hMVpBHXv3Q6dwmperaQ6JjLtpMQgMCD7xvx/go-ipfs-util" - delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay" - testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" - pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore" - cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid" -) - -func TestKeyNotFound(t *testing.T) { - - var pi = testutil.RandIdentityOrFatal(t) - var key = cid.NewCidV0(u.Hash([]byte("mock key"))) - var ctx = context.Background() - - rs := NewServer() - providers := rs.Client(pi).FindProvidersAsync(ctx, key, 10) - _, ok := <-providers - if ok { - t.Fatal("should be closed") - } -} - -func TestClientFindProviders(t *testing.T) { - pi := testutil.RandIdentityOrFatal(t) - rs := NewServer() - client := rs.Client(pi) - - k := cid.NewCidV0(u.Hash([]byte("hello"))) - err := client.Provide(context.Background(), k, true) - if err != nil { - t.Fatal(err) - } - - // This is bad... but simulating networks is hard - time.Sleep(time.Millisecond * 300) - max := 100 - - providersFromClient := client.FindProvidersAsync(context.Background(), k, max) - isInClient := false - for pi := range providersFromClient { - if pi.ID == pi.ID { // <-- typo? - isInClient = true - } - } - if !isInClient { - t.Fatal("Despite client providing key, client didn't receive peer when finding providers") - } -} - -func TestClientOverMax(t *testing.T) { - rs := NewServer() - k := cid.NewCidV0(u.Hash([]byte("hello"))) - numProvidersForHelloKey := 100 - for i := 0; i < numProvidersForHelloKey; i++ { - pi := testutil.RandIdentityOrFatal(t) - err := rs.Client(pi).Provide(context.Background(), k, true) - if err != nil { - t.Fatal(err) - } - } - - max := 10 - pi := testutil.RandIdentityOrFatal(t) - client := rs.Client(pi) - - providersFromClient := client.FindProvidersAsync(context.Background(), k, max) - i := 0 - for range providersFromClient { - i++ - } - if i != max { - t.Fatal("Too many providers returned") - } -} - -// TODO does dht ensure won't receive self as a provider? probably not. -func TestCanceledContext(t *testing.T) { - rs := NewServer() - k := cid.NewCidV0(u.Hash([]byte("hello"))) - - // avoid leaking goroutine, without using the context to signal - // (we want the goroutine to keep trying to publish on a - // cancelled context until we've tested it doesnt do anything.) - done := make(chan struct{}) - defer func() { done <- struct{}{} }() - - t.Log("async'ly announce infinite stream of providers for key") - i := 0 - go func() { // infinite stream - for { - select { - case <-done: - t.Log("exiting async worker") - return - default: - } - - pi, err := testutil.RandIdentity() - if err != nil { - t.Error(err) - } - err = rs.Client(pi).Provide(context.Background(), k, true) - if err != nil { - t.Error(err) - } - i++ - } - }() - - local := testutil.RandIdentityOrFatal(t) - client := rs.Client(local) - - t.Log("warning: max is finite so this test is non-deterministic") - t.Log("context cancellation could simply take lower priority") - t.Log("and result in receiving the max number of results") - max := 1000 - - t.Log("cancel the context before consuming") - ctx, cancelFunc := context.WithCancel(context.Background()) - cancelFunc() - providers := client.FindProvidersAsync(ctx, k, max) - - numProvidersReturned := 0 - for range providers { - numProvidersReturned++ - } - t.Log(numProvidersReturned) - - if numProvidersReturned == max { - t.Fatal("Context cancel had no effect") - } -} - -func TestValidAfter(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - pi := testutil.RandIdentityOrFatal(t) - key := cid.NewCidV0(u.Hash([]byte("mock key"))) - conf := DelayConfig{ - ValueVisibility: delay.Fixed(1 * time.Hour), - Query: delay.Fixed(0), - } - - rs := NewServerWithDelay(conf) - - rs.Client(pi).Provide(ctx, key, true) - - var providers []pstore.PeerInfo - max := 100 - providersChan := rs.Client(pi).FindProvidersAsync(ctx, key, max) - for p := range providersChan { - providers = append(providers, p) - } - if len(providers) > 0 { - t.Fail() - } - - conf.ValueVisibility.Set(0) - time.Sleep(100 * time.Millisecond) - - providersChan = rs.Client(pi).FindProvidersAsync(ctx, key, max) - t.Log("providers", providers) - for p := range providersChan { - providers = append(providers, p) - } - if len(providers) != 1 { - t.Fail() - } -} diff --git a/routing/mock/interface.go b/routing/mock/interface.go deleted file mode 100644 index a4b198115..000000000 --- a/routing/mock/interface.go +++ /dev/null @@ -1,53 +0,0 @@ -// Package mockrouting provides a virtual routing server. To use it, -// create a virtual routing server and use the Client() method to get a -// routing client (IpfsRouting). The server quacks like a DHT but is -// really a local in-memory hash table. -package mockrouting - -import ( - "context" - - ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" - delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay" - routing "gx/ipfs/QmTiWLZ6Fo5j4KcTVutZJ5KWRRJrbxzmxA4td8NfEdrPh7/go-libp2p-routing" - "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" - peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" -) - -// Server provides mockrouting Clients -type Server interface { - Client(p testutil.Identity) Client - ClientWithDatastore(context.Context, testutil.Identity, ds.Datastore) Client -} - -// Client implements IpfsRouting -type Client interface { - routing.IpfsRouting -} - -// NewServer returns a mockrouting Server -func NewServer() Server { - return NewServerWithDelay(DelayConfig{ - ValueVisibility: delay.Fixed(0), - Query: delay.Fixed(0), - }) -} - -// NewServerWithDelay returns a mockrouting Server with a delay! -func NewServerWithDelay(conf DelayConfig) Server { - return &s{ - providers: make(map[string]map[peer.ID]providerRecord), - delayConf: conf, - } -} - -// DelayConfig can be used to configured the fake delays of a mock server. -// Use with NewServerWithDelay(). -type DelayConfig struct { - // ValueVisibility is the time it takes for a value to be visible in the network - // FIXME there _must_ be a better term for this - ValueVisibility delay.D - - // Query is the time it takes to receive a response from a routing query - Query delay.D -} diff --git a/routing/none/none_client.go b/routing/none/none_client.go deleted file mode 100644 index aee2b281b..000000000 --- a/routing/none/none_client.go +++ /dev/null @@ -1,56 +0,0 @@ -// Package nilrouting implements a routing client that does nothing. -package nilrouting - -import ( - "context" - "errors" - - repo "github.com/ipfs/go-ipfs/repo" - - p2phost "gx/ipfs/QmNmJZL7FQySMtE2BQuLMuZg2EB2CLEunJJUSVSc9YnnbV/go-libp2p-host" - routing "gx/ipfs/QmTiWLZ6Fo5j4KcTVutZJ5KWRRJrbxzmxA4td8NfEdrPh7/go-libp2p-routing" - pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore" - peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" - cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid" -) - -type nilclient struct { -} - -func (c *nilclient) PutValue(_ context.Context, _ string, _ []byte) error { - return nil -} - -func (c *nilclient) GetValue(_ context.Context, _ string) ([]byte, error) { - return nil, errors.New("tried GetValue from nil routing") -} - -func (c *nilclient) GetValues(_ context.Context, _ string, _ int) ([]routing.RecvdVal, error) { - return nil, errors.New("tried GetValues from nil routing") -} - -func (c *nilclient) FindPeer(_ context.Context, _ peer.ID) (pstore.PeerInfo, error) { - return pstore.PeerInfo{}, nil -} - -func (c *nilclient) FindProvidersAsync(_ context.Context, _ *cid.Cid, _ int) <-chan pstore.PeerInfo { - out := make(chan pstore.PeerInfo) - defer close(out) - return out -} - -func (c *nilclient) Provide(_ context.Context, _ *cid.Cid, _ bool) error { - return nil -} - -func (c *nilclient) Bootstrap(_ context.Context) error { - return nil -} - -// ConstructNilRouting creates an IpfsRouting client which does nothing. -func ConstructNilRouting(_ context.Context, _ p2phost.Host, _ repo.Datastore) (routing.IpfsRouting, error) { - return &nilclient{}, nil -} - -// ensure nilclient satisfies interface -var _ routing.IpfsRouting = &nilclient{} diff --git a/routing/offline/offline.go b/routing/offline/offline.go deleted file mode 100644 index cc525a06d..000000000 --- a/routing/offline/offline.go +++ /dev/null @@ -1,120 +0,0 @@ -// Package offline implements IpfsRouting with a client which -// is only able to perform offline operations. -package offline - -import ( - "context" - "errors" - "time" - - ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" - routing "gx/ipfs/QmTiWLZ6Fo5j4KcTVutZJ5KWRRJrbxzmxA4td8NfEdrPh7/go-libp2p-routing" - record "gx/ipfs/QmUpttFinNDmNPgFwKN8sZK6BUtBmA68Y4KdSBDXa8t9sJ/go-libp2p-record" - pb "gx/ipfs/QmUpttFinNDmNPgFwKN8sZK6BUtBmA68Y4KdSBDXa8t9sJ/go-libp2p-record/pb" - pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore" - proto "gx/ipfs/QmZ4Qi3GaRbjcx28Sme5eMH7RQjGkt8wHxt2a65oLaeFEV/gogo-protobuf/proto" - "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer" - ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto" - cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid" - dshelp "gx/ipfs/QmdQTPWduSeyveSxeCAte33M592isSW5Z979g81aJphrgn/go-ipfs-ds-help" -) - -// ErrOffline is returned when trying to perform operations that -// require connectivity. -var ErrOffline = errors.New("routing system in offline mode") - -// NewOfflineRouter returns an IpfsRouting implementation which only performs -// offline operations. It allows to Put and Get signed dht -// records to and from the local datastore. -func NewOfflineRouter(dstore ds.Datastore, privkey ci.PrivKey) routing.IpfsRouting { - return &offlineRouting{ - datastore: dstore, - sk: privkey, - } -} - -// offlineRouting implements the IpfsRouting interface, -// but only provides the capability to Put and Get signed dht -// records to and from the local datastore. -type offlineRouting struct { - datastore ds.Datastore - sk ci.PrivKey -} - -func (c *offlineRouting) PutValue(ctx context.Context, key string, val []byte) error { - rec, err := record.MakePutRecord(c.sk, key, val, false) - if err != nil { - return err - } - data, err := proto.Marshal(rec) - if err != nil { - return err - } - - return c.datastore.Put(dshelp.NewKeyFromBinary([]byte(key)), data) -} - -func (c *offlineRouting) GetValue(ctx context.Context, key string) ([]byte, error) { - v, err := c.datastore.Get(dshelp.NewKeyFromBinary([]byte(key))) - if err != nil { - return nil, err - } - - byt, ok := v.([]byte) - if !ok { - return nil, errors.New("value stored in datastore not []byte") - } - rec := new(pb.Record) - err = proto.Unmarshal(byt, rec) - if err != nil { - return nil, err - } - - return rec.GetValue(), nil -} - -func (c *offlineRouting) GetValues(ctx context.Context, key string, _ int) ([]routing.RecvdVal, error) { - v, err := c.datastore.Get(dshelp.NewKeyFromBinary([]byte(key))) - if err != nil { - return nil, err - } - - byt, ok := v.([]byte) - if !ok { - return nil, errors.New("value stored in datastore not []byte") - } - rec := new(pb.Record) - err = proto.Unmarshal(byt, rec) - if err != nil { - return nil, err - } - - return []routing.RecvdVal{ - {Val: rec.GetValue()}, - }, nil -} - -func (c *offlineRouting) FindPeer(ctx context.Context, pid peer.ID) (pstore.PeerInfo, error) { - return pstore.PeerInfo{}, ErrOffline -} - -func (c *offlineRouting) FindProvidersAsync(ctx context.Context, k *cid.Cid, max int) <-chan pstore.PeerInfo { - out := make(chan pstore.PeerInfo) - close(out) - return out -} - -func (c *offlineRouting) Provide(_ context.Context, k *cid.Cid, _ bool) error { - return ErrOffline -} - -func (c *offlineRouting) Ping(ctx context.Context, p peer.ID) (time.Duration, error) { - return 0, ErrOffline -} - -func (c *offlineRouting) Bootstrap(context.Context) error { - return nil -} - -// ensure offlineRouting matches the IpfsRouting interface -var _ routing.IpfsRouting = &offlineRouting{} diff --git a/routing/offline/offline_test.go b/routing/offline/offline_test.go deleted file mode 100644 index 66d851700..000000000 --- a/routing/offline/offline_test.go +++ /dev/null @@ -1,82 +0,0 @@ -package offline - -import ( - "bytes" - "context" - "testing" - - ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore" - "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil" -) - -func TestOfflineRouterStorage(t *testing.T) { - ctx := context.Background() - - nds := ds.NewMapDatastore() - privkey, _, _ := testutil.RandTestKeyPair(128) - offline := NewOfflineRouter(nds, privkey) - - if err := offline.PutValue(ctx, "key", []byte("testing 1 2 3")); err != nil { - t.Fatal(err) - } - - val, err := offline.GetValue(ctx, "key") - if err != nil { - t.Fatal(err) - } - if !bytes.Equal([]byte("testing 1 2 3"), val) { - t.Fatal("OfflineRouter does not properly store") - } - - _, 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 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, true) - 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.") - } -}