1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-05-17 15:06:47 +08:00
Files
kubo/routing/delegated_test.go

227 lines
4.8 KiB
Go

package routing
import (
"crypto/rand"
"encoding/base64"
"testing"
"github.com/ipfs/kubo/config"
"github.com/libp2p/go-libp2p/core/crypto"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/stretchr/testify/require"
)
func TestParser(t *testing.T) {
require := require.New(t)
pid, sk, err := generatePeerID()
require.NoError(err)
router, err := Parse(config.Routers{
"r1": config.RouterParser{
Router: config.Router{
Type: config.RouterTypeHTTP,
Parameters: &config.HTTPRouterParams{
Endpoint: "testEndpoint",
},
},
},
"r2": config.RouterParser{
Router: config.Router{
Type: config.RouterTypeSequential,
Parameters: &config.ComposableRouterParams{
Routers: []config.ConfigRouter{
{
RouterName: "r1",
},
},
},
},
},
}, config.Methods{
config.MethodNameFindPeers: config.Method{
RouterName: "r1",
},
config.MethodNameFindProviders: config.Method{
RouterName: "r1",
},
config.MethodNameGetIPNS: config.Method{
RouterName: "r1",
},
config.MethodNamePutIPNS: config.Method{
RouterName: "r2",
},
config.MethodNameProvide: config.Method{
RouterName: "r2",
},
}, &ExtraDHTParams{}, &ExtraHTTPParams{
PeerID: string(pid),
PrivKeyB64: sk,
})
require.NoError(err)
comp, ok := router.(*Composer)
require.True(ok)
require.Equal(comp.FindPeersRouter, comp.FindProvidersRouter)
require.Equal(comp.ProvideRouter, comp.PutValueRouter)
}
func TestParserRecursive(t *testing.T) {
require := require.New(t)
pid, sk, err := generatePeerID()
require.NoError(err)
router, err := Parse(config.Routers{
"http1": config.RouterParser{
Router: config.Router{
Type: config.RouterTypeHTTP,
Parameters: &config.HTTPRouterParams{
Endpoint: "testEndpoint1",
},
},
},
"http2": config.RouterParser{
Router: config.Router{
Type: config.RouterTypeHTTP,
Parameters: &config.HTTPRouterParams{
Endpoint: "testEndpoint2",
},
},
},
"http3": config.RouterParser{
Router: config.Router{
Type: config.RouterTypeHTTP,
Parameters: &config.HTTPRouterParams{
Endpoint: "testEndpoint3",
},
},
},
"composable1": config.RouterParser{
Router: config.Router{
Type: config.RouterTypeSequential,
Parameters: &config.ComposableRouterParams{
Routers: []config.ConfigRouter{
{
RouterName: "http1",
},
{
RouterName: "http2",
},
},
},
},
},
"composable2": config.RouterParser{
Router: config.Router{
Type: config.RouterTypeParallel,
Parameters: &config.ComposableRouterParams{
Routers: []config.ConfigRouter{
{
RouterName: "composable1",
},
{
RouterName: "http3",
},
},
},
},
},
}, config.Methods{
config.MethodNameFindPeers: config.Method{
RouterName: "composable2",
},
config.MethodNameFindProviders: config.Method{
RouterName: "composable2",
},
config.MethodNameGetIPNS: config.Method{
RouterName: "composable2",
},
config.MethodNamePutIPNS: config.Method{
RouterName: "composable2",
},
config.MethodNameProvide: config.Method{
RouterName: "composable2",
},
}, &ExtraDHTParams{}, &ExtraHTTPParams{
PeerID: string(pid),
PrivKeyB64: sk,
})
require.NoError(err)
_, ok := router.(*Composer)
require.True(ok)
}
func TestParserRecursiveLoop(t *testing.T) {
require := require.New(t)
_, err := Parse(config.Routers{
"composable1": config.RouterParser{
Router: config.Router{
Type: config.RouterTypeSequential,
Parameters: &config.ComposableRouterParams{
Routers: []config.ConfigRouter{
{
RouterName: "composable2",
},
},
},
},
},
"composable2": config.RouterParser{
Router: config.Router{
Type: config.RouterTypeParallel,
Parameters: &config.ComposableRouterParams{
Routers: []config.ConfigRouter{
{
RouterName: "composable1",
},
},
},
},
},
}, config.Methods{
config.MethodNameFindPeers: config.Method{
RouterName: "composable2",
},
config.MethodNameFindProviders: config.Method{
RouterName: "composable2",
},
config.MethodNameGetIPNS: config.Method{
RouterName: "composable2",
},
config.MethodNamePutIPNS: config.Method{
RouterName: "composable2",
},
config.MethodNameProvide: config.Method{
RouterName: "composable2",
},
}, &ExtraDHTParams{}, nil)
require.ErrorContains(err, "dependency loop creating router with name \"composable2\"")
}
func generatePeerID() (string, string, error) {
sk, pk, err := crypto.GenerateEd25519Key(rand.Reader)
if err != nil {
return "", "", err
}
bytes, err := crypto.MarshalPrivateKey(sk)
if err != nil {
return "", "", err
}
enc := base64.StdEncoding.EncodeToString(bytes)
if err != nil {
return "", "", err
}
pid, err := peer.IDFromPublicKey(pk)
return pid.String(), enc, err
}