mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-29 09:34:03 +08:00
Extract: routing package to github.com/ipfs/go-ipfs-routing
This extracts the routing package to its own repository (https://github.com/ipfs/go-ipfs-routing). History has been preserved. The new module has been gx'ed and published. Imports have been rewritten and re-ordered accordingly. An internal dependency to go-ipfs/repo has been removed by substituting it with the go-datastore.Batching interface. License: MIT Signed-off-by: Hector Sanjuan <hector@protocol.ai>
This commit is contained in:
@ -4,9 +4,9 @@ import (
|
|||||||
. "github.com/ipfs/go-ipfs/blockservice"
|
. "github.com/ipfs/go-ipfs/blockservice"
|
||||||
bitswap "github.com/ipfs/go-ipfs/exchange/bitswap"
|
bitswap "github.com/ipfs/go-ipfs/exchange/bitswap"
|
||||||
tn "github.com/ipfs/go-ipfs/exchange/bitswap/testnet"
|
tn "github.com/ipfs/go-ipfs/exchange/bitswap/testnet"
|
||||||
mockrouting "github.com/ipfs/go-ipfs/routing/mock"
|
|
||||||
|
|
||||||
delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay"
|
delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay"
|
||||||
|
mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Mocks returns |n| connected mock Blockservices
|
// Mocks returns |n| connected mock Blockservices
|
||||||
|
@ -8,8 +8,8 @@ import (
|
|||||||
cmds "github.com/ipfs/go-ipfs/commands"
|
cmds "github.com/ipfs/go-ipfs/commands"
|
||||||
e "github.com/ipfs/go-ipfs/core/commands/e"
|
e "github.com/ipfs/go-ipfs/core/commands/e"
|
||||||
namesys "github.com/ipfs/go-ipfs/namesys"
|
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"
|
"gx/ipfs/QmceUdzxkimdYsgtX733uNgzf1DLHyBKN6ehGSp85ayppM/go-ipfs-cmdkit"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
10
core/core.go
10
core/core.go
@ -38,8 +38,6 @@ import (
|
|||||||
pin "github.com/ipfs/go-ipfs/pin"
|
pin "github.com/ipfs/go-ipfs/pin"
|
||||||
repo "github.com/ipfs/go-ipfs/repo"
|
repo "github.com/ipfs/go-ipfs/repo"
|
||||||
config "github.com/ipfs/go-ipfs/repo/config"
|
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"
|
ft "github.com/ipfs/go-ipfs/unixfs"
|
||||||
|
|
||||||
addrutil "gx/ipfs/QmNSWW3Sb4eju4o2djPQ1L1c2Zj9XN9sMYJL8r1cbxdc6b/go-addr-util"
|
addrutil "gx/ipfs/QmNSWW3Sb4eju4o2djPQ1L1c2Zj9XN9sMYJL8r1cbxdc6b/go-addr-util"
|
||||||
@ -66,6 +64,8 @@ import (
|
|||||||
smux "gx/ipfs/QmY9JXR3FupnYAYJWK9aMr9bCpqWKcToQ1tz8DVGTrHpHw/go-stream-muxer"
|
smux "gx/ipfs/QmY9JXR3FupnYAYJWK9aMr9bCpqWKcToQ1tz8DVGTrHpHw/go-stream-muxer"
|
||||||
connmgr "gx/ipfs/QmZ1R2LxRZTUaeuMFEtQigzHfFCv3hLYBi5316aZ7YUeyf/go-libp2p-connmgr"
|
connmgr "gx/ipfs/QmZ1R2LxRZTUaeuMFEtQigzHfFCv3hLYBi5316aZ7YUeyf/go-libp2p-connmgr"
|
||||||
ipnet "gx/ipfs/QmZPrWxuM8GHr4cGKbyF5CCT11sFUP9hgqpeUHALvx2nUr/go-libp2p-interface-pnet"
|
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"
|
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
||||||
ic "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
ic "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
||||||
ifconnmgr "gx/ipfs/Qmax8X1Kfahf5WfSB68EWDG3d3qyS3Sqs1v412fjPTfRwx/go-libp2p-interface-connmgr"
|
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
|
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 := dht.NewDHT(ctx, host, dstore)
|
||||||
dhtRouting.Validator[IpnsValidatorTag] = namesys.NewIpnsRecordValidator(host.Peerstore())
|
dhtRouting.Validator[IpnsValidatorTag] = namesys.NewIpnsRecordValidator(host.Peerstore())
|
||||||
dhtRouting.Selector[IpnsValidatorTag] = namesys.IpnsSelectorFunc
|
dhtRouting.Selector[IpnsValidatorTag] = namesys.IpnsSelectorFunc
|
||||||
return dhtRouting, nil
|
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 := dht.NewDHTClient(ctx, host, dstore)
|
||||||
dhtRouting.Validator[IpnsValidatorTag] = namesys.NewIpnsRecordValidator(host.Peerstore())
|
dhtRouting.Validator[IpnsValidatorTag] = namesys.NewIpnsRecordValidator(host.Peerstore())
|
||||||
dhtRouting.Selector[IpnsValidatorTag] = namesys.IpnsSelectorFunc
|
dhtRouting.Selector[IpnsValidatorTag] = namesys.IpnsSelectorFunc
|
||||||
return dhtRouting, nil
|
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)
|
type DiscoveryOption func(context.Context, p2phost.Host) (discovery.Service, error)
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@ import (
|
|||||||
keystore "github.com/ipfs/go-ipfs/keystore"
|
keystore "github.com/ipfs/go-ipfs/keystore"
|
||||||
namesys "github.com/ipfs/go-ipfs/namesys"
|
namesys "github.com/ipfs/go-ipfs/namesys"
|
||||||
ipath "github.com/ipfs/go-ipfs/path"
|
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"
|
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
||||||
crypto "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
crypto "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
||||||
)
|
)
|
||||||
|
@ -12,12 +12,12 @@ import (
|
|||||||
blocksutil "github.com/ipfs/go-ipfs/blocks/blocksutil"
|
blocksutil "github.com/ipfs/go-ipfs/blocks/blocksutil"
|
||||||
decision "github.com/ipfs/go-ipfs/exchange/bitswap/decision"
|
decision "github.com/ipfs/go-ipfs/exchange/bitswap/decision"
|
||||||
tn "github.com/ipfs/go-ipfs/exchange/bitswap/testnet"
|
tn "github.com/ipfs/go-ipfs/exchange/bitswap/testnet"
|
||||||
mockrouting "github.com/ipfs/go-ipfs/routing/mock"
|
|
||||||
|
|
||||||
delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay"
|
delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay"
|
||||||
tu "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
tu "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
||||||
travis "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil/ci/travis"
|
travis "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil/ci/travis"
|
||||||
p2ptestutil "gx/ipfs/QmYVR3C8DWPHdHxvLtNFYfjsXgaRAdh6hPMNH3KiwCgu4o/go-libp2p-netutil"
|
p2ptestutil "gx/ipfs/QmYVR3C8DWPHdHxvLtNFYfjsXgaRAdh6hPMNH3KiwCgu4o/go-libp2p-netutil"
|
||||||
|
mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock"
|
||||||
cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid"
|
cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid"
|
||||||
blocks "gx/ipfs/Qmej7nf81hi2x2tvjRBF3mcp74sQyuDH4VMYDGd1YtXjb2/go-block-format"
|
blocks "gx/ipfs/Qmej7nf81hi2x2tvjRBF3mcp74sQyuDH4VMYDGd1YtXjb2/go-block-format"
|
||||||
detectrace "gx/ipfs/Qmf7HqcW7LtCi1W8y2bdx2eJpze74jkbKqpByxgXikdbLF/go-detect-race"
|
detectrace "gx/ipfs/Qmf7HqcW7LtCi1W8y2bdx2eJpze74jkbKqpByxgXikdbLF/go-detect-race"
|
||||||
|
@ -7,10 +7,10 @@ import (
|
|||||||
|
|
||||||
bsmsg "github.com/ipfs/go-ipfs/exchange/bitswap/message"
|
bsmsg "github.com/ipfs/go-ipfs/exchange/bitswap/message"
|
||||||
bsnet "github.com/ipfs/go-ipfs/exchange/bitswap/network"
|
bsnet "github.com/ipfs/go-ipfs/exchange/bitswap/network"
|
||||||
mockrouting "github.com/ipfs/go-ipfs/routing/mock"
|
|
||||||
|
|
||||||
delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay"
|
delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay"
|
||||||
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
||||||
|
mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock"
|
||||||
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
||||||
blocks "gx/ipfs/Qmej7nf81hi2x2tvjRBF3mcp74sQyuDH4VMYDGd1YtXjb2/go-block-format"
|
blocks "gx/ipfs/Qmej7nf81hi2x2tvjRBF3mcp74sQyuDH4VMYDGd1YtXjb2/go-block-format"
|
||||||
)
|
)
|
||||||
|
@ -4,10 +4,11 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
|
|
||||||
bsnet "github.com/ipfs/go-ipfs/exchange/bitswap/network"
|
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"
|
mockpeernet "gx/ipfs/QmNh1kGFFdsPu79KNSaL4NUKUPb4Eiz4KHdMtFY6664RDp/go-libp2p/p2p/net/mock"
|
||||||
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
||||||
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
||||||
|
mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock"
|
||||||
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -8,12 +8,12 @@ import (
|
|||||||
|
|
||||||
bsmsg "github.com/ipfs/go-ipfs/exchange/bitswap/message"
|
bsmsg "github.com/ipfs/go-ipfs/exchange/bitswap/message"
|
||||||
bsnet "github.com/ipfs/go-ipfs/exchange/bitswap/network"
|
bsnet "github.com/ipfs/go-ipfs/exchange/bitswap/network"
|
||||||
mockrouting "github.com/ipfs/go-ipfs/routing/mock"
|
|
||||||
|
|
||||||
delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay"
|
delay "gx/ipfs/QmRJVNatYJwTAHgdSM1Xef9QVQ1Ch3XHdmcrykjP5Y4soL/go-ipfs-delay"
|
||||||
logging "gx/ipfs/QmRb5jh8z2E8hMGN2tkvs1yHynUanqnZ3UeKwgN1i9P1F8/go-log"
|
logging "gx/ipfs/QmRb5jh8z2E8hMGN2tkvs1yHynUanqnZ3UeKwgN1i9P1F8/go-log"
|
||||||
routing "gx/ipfs/QmTiWLZ6Fo5j4KcTVutZJ5KWRRJrbxzmxA4td8NfEdrPh7/go-libp2p-routing"
|
routing "gx/ipfs/QmTiWLZ6Fo5j4KcTVutZJ5KWRRJrbxzmxA4td8NfEdrPh7/go-libp2p-routing"
|
||||||
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
||||||
|
mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock"
|
||||||
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
||||||
ifconnmgr "gx/ipfs/Qmax8X1Kfahf5WfSB68EWDG3d3qyS3Sqs1v412fjPTfRwx/go-libp2p-interface-connmgr"
|
ifconnmgr "gx/ipfs/Qmax8X1Kfahf5WfSB68EWDG3d3qyS3Sqs1v412fjPTfRwx/go-libp2p-interface-connmgr"
|
||||||
cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid"
|
cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid"
|
||||||
|
@ -5,11 +5,12 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
blockstore "github.com/ipfs/go-ipfs/blocks/blockstore"
|
blockstore "github.com/ipfs/go-ipfs/blocks/blockstore"
|
||||||
mock "github.com/ipfs/go-ipfs/routing/mock"
|
|
||||||
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
||||||
dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync"
|
dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync"
|
||||||
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
||||||
pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore"
|
pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore"
|
||||||
|
mock "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock"
|
||||||
blocks "gx/ipfs/Qmej7nf81hi2x2tvjRBF3mcp74sQyuDH4VMYDGd1YtXjb2/go-block-format"
|
blocks "gx/ipfs/Qmej7nf81hi2x2tvjRBF3mcp74sQyuDH4VMYDGd1YtXjb2/go-block-format"
|
||||||
|
|
||||||
. "github.com/ipfs/go-ipfs/exchange/reprovide"
|
. "github.com/ipfs/go-ipfs/exchange/reprovide"
|
||||||
|
@ -14,12 +14,12 @@ import (
|
|||||||
|
|
||||||
core "github.com/ipfs/go-ipfs/core"
|
core "github.com/ipfs/go-ipfs/core"
|
||||||
namesys "github.com/ipfs/go-ipfs/namesys"
|
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"
|
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"
|
fstest "gx/ipfs/QmaFNtBAXX4nVMQWbUqNysXyhevUj1k4B1y5uS45LC7Vw9/fuse/fs/fstestutil"
|
||||||
|
racedet "gx/ipfs/Qmf7HqcW7LtCi1W8y2bdx2eJpze74jkbKqpByxgXikdbLF/go-detect-race"
|
||||||
)
|
)
|
||||||
|
|
||||||
func maybeSkipFuseTests(t *testing.T) {
|
func maybeSkipFuseTests(t *testing.T) {
|
||||||
|
@ -15,8 +15,9 @@ import (
|
|||||||
ipns "github.com/ipfs/go-ipfs/fuse/ipns"
|
ipns "github.com/ipfs/go-ipfs/fuse/ipns"
|
||||||
mount "github.com/ipfs/go-ipfs/fuse/mount"
|
mount "github.com/ipfs/go-ipfs/fuse/mount"
|
||||||
namesys "github.com/ipfs/go-ipfs/namesys"
|
namesys "github.com/ipfs/go-ipfs/namesys"
|
||||||
offroute "github.com/ipfs/go-ipfs/routing/offline"
|
|
||||||
ci "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil/ci"
|
ci "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil/ci"
|
||||||
|
offroute "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/offline"
|
||||||
)
|
)
|
||||||
|
|
||||||
func maybeSkipFuseTests(t *testing.T) {
|
func maybeSkipFuseTests(t *testing.T) {
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
path "github.com/ipfs/go-ipfs/path"
|
path "github.com/ipfs/go-ipfs/path"
|
||||||
mockrouting "github.com/ipfs/go-ipfs/routing/mock"
|
|
||||||
|
|
||||||
u "gx/ipfs/QmNiJuT8Ja3hMVpBHXv3Q6dwmperaQ6JjLtpMQgMCD7xvx/go-ipfs-util"
|
u "gx/ipfs/QmNiJuT8Ja3hMVpBHXv3Q6dwmperaQ6JjLtpMQgMCD7xvx/go-ipfs-util"
|
||||||
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
||||||
@ -18,6 +17,7 @@ import (
|
|||||||
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
||||||
pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore"
|
pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore"
|
||||||
proto "gx/ipfs/QmZ4Qi3GaRbjcx28Sme5eMH7RQjGkt8wHxt2a65oLaeFEV/gogo-protobuf/proto"
|
proto "gx/ipfs/QmZ4Qi3GaRbjcx28Sme5eMH7RQjGkt8wHxt2a65oLaeFEV/gogo-protobuf/proto"
|
||||||
|
mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock"
|
||||||
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
||||||
ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
||||||
)
|
)
|
||||||
|
@ -7,11 +7,11 @@ import (
|
|||||||
context "context"
|
context "context"
|
||||||
|
|
||||||
path "github.com/ipfs/go-ipfs/path"
|
path "github.com/ipfs/go-ipfs/path"
|
||||||
offroute "github.com/ipfs/go-ipfs/routing/offline"
|
|
||||||
"github.com/ipfs/go-ipfs/unixfs"
|
"github.com/ipfs/go-ipfs/unixfs"
|
||||||
|
|
||||||
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
||||||
dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync"
|
dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync"
|
||||||
|
offroute "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/offline"
|
||||||
ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,12 +7,12 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
path "github.com/ipfs/go-ipfs/path"
|
path "github.com/ipfs/go-ipfs/path"
|
||||||
mockrouting "github.com/ipfs/go-ipfs/routing/mock"
|
|
||||||
|
|
||||||
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
||||||
dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync"
|
dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync"
|
||||||
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
||||||
ma "gx/ipfs/QmWWQ2Txc2c6tqjsBpzg5Ar652cHPGNsQQp2SejkNmkUMb/go-multiaddr"
|
ma "gx/ipfs/QmWWQ2Txc2c6tqjsBpzg5Ar652cHPGNsQQp2SejkNmkUMb/go-multiaddr"
|
||||||
|
mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock"
|
||||||
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
||||||
ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
||||||
dshelp "gx/ipfs/QmdQTPWduSeyveSxeCAte33M592isSW5Z979g81aJphrgn/go-ipfs-ds-help"
|
dshelp "gx/ipfs/QmdQTPWduSeyveSxeCAte33M592isSW5Z979g81aJphrgn/go-ipfs-ds-help"
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
path "github.com/ipfs/go-ipfs/path"
|
path "github.com/ipfs/go-ipfs/path"
|
||||||
mockrouting "github.com/ipfs/go-ipfs/routing/mock"
|
|
||||||
|
|
||||||
p2phost "gx/ipfs/QmNmJZL7FQySMtE2BQuLMuZg2EB2CLEunJJUSVSc9YnnbV/go-libp2p-host"
|
p2phost "gx/ipfs/QmNmJZL7FQySMtE2BQuLMuZg2EB2CLEunJJUSVSc9YnnbV/go-libp2p-host"
|
||||||
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
||||||
@ -17,6 +16,7 @@ import (
|
|||||||
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
||||||
pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore"
|
pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore"
|
||||||
netutil "gx/ipfs/QmYVR3C8DWPHdHxvLtNFYfjsXgaRAdh6hPMNH3KiwCgu4o/go-libp2p-netutil"
|
netutil "gx/ipfs/QmYVR3C8DWPHdHxvLtNFYfjsXgaRAdh6hPMNH3KiwCgu4o/go-libp2p-netutil"
|
||||||
|
mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock"
|
||||||
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
||||||
ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
||||||
)
|
)
|
||||||
|
@ -7,11 +7,11 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
path "github.com/ipfs/go-ipfs/path"
|
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"
|
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
||||||
dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync"
|
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"
|
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -551,6 +551,12 @@
|
|||||||
"hash": "QmdQTPWduSeyveSxeCAte33M592isSW5Z979g81aJphrgn",
|
"hash": "QmdQTPWduSeyveSxeCAte33M592isSW5Z979g81aJphrgn",
|
||||||
"name": "go-ipfs-ds-help",
|
"name": "go-ipfs-ds-help",
|
||||||
"version": "0.0.1"
|
"version": "0.0.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "hsanjuan",
|
||||||
|
"hash": "QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb",
|
||||||
|
"name": "go-ipfs-routing",
|
||||||
|
"version": "0.0.1"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"gxVersion": "0.10.0",
|
"gxVersion": "0.10.0",
|
||||||
|
@ -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{}
|
|
@ -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,
|
|
||||||
}
|
|
||||||
}
|
|
@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
@ -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{}
|
|
@ -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{}
|
|
@ -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.")
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user