package test import ( "context" "encoding/base64" "fmt" "os" "path/filepath" "testing" "github.com/ipfs/go-ipfs/filestore" "gx/ipfs/QmWqb6eEpQ2qtu2jmcDWJXebP7YS14fwor8562g795ZxjH/interface-go-ipfs-core/tests" "github.com/ipfs/go-ipfs/core" "github.com/ipfs/go-ipfs/core/coreapi" mock "github.com/ipfs/go-ipfs/core/mock" "github.com/ipfs/go-ipfs/keystore" "github.com/ipfs/go-ipfs/repo" coreiface "gx/ipfs/QmWqb6eEpQ2qtu2jmcDWJXebP7YS14fwor8562g795ZxjH/interface-go-ipfs-core" ci "gx/ipfs/QmNiJiXwWE3kRhZrC5ej3kSjWHm337pYfhjLGSCDNKJP2s/go-libp2p-crypto" "gx/ipfs/QmPJxxDsX2UbchSHobbYuvz7qnyJTFKvaKMzE2rZWJ4x5B/go-libp2p-peer" pstore "gx/ipfs/QmQFFp4ntkd4C14sP3FaH9WJyBuetuGUVo6dShNHvnoEvC/go-libp2p-peerstore" "gx/ipfs/QmSgtf5vHyugoxcwMbyNy6bZ9qPDDTJSYEED2GkWjLwitZ/go-libp2p/p2p/net/mock" "gx/ipfs/QmTbcMKv6GU3fxhnNcbzYChdox9Fdd7VpucM3PQ7UWjX3D/go-ipfs-config" "gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore" syncds "gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore/sync" ) const testPeerID = "QmTFauExutTsy4XP6JbMFcw2Wa9645HJt2bTqL6qYDCKfe" type NodeProvider struct{} func (NodeProvider) MakeAPISwarm(ctx context.Context, fullIdentity bool, n int) ([]coreiface.CoreAPI, error) { mn := mocknet.New(ctx) nodes := make([]*core.IpfsNode, n) apis := make([]coreiface.CoreAPI, n) for i := 0; i < n; i++ { var ident config.Identity if fullIdentity { sk, pk, err := ci.GenerateKeyPair(ci.RSA, 512) if err != nil { return nil, err } id, err := peer.IDFromPublicKey(pk) if err != nil { return nil, err } kbytes, err := sk.Bytes() if err != nil { return nil, err } ident = config.Identity{ PeerID: id.Pretty(), PrivKey: base64.StdEncoding.EncodeToString(kbytes), } } else { ident = config.Identity{ PeerID: testPeerID, } } c := config.Config{} c.Addresses.Swarm = []string{fmt.Sprintf("/ip4/127.0.%d.1/tcp/4001", i)} c.Identity = ident c.Experimental.FilestoreEnabled = true ds := datastore.NewMapDatastore() r := &repo.Mock{ C: c, D: syncds.MutexWrap(ds), K: keystore.NewMemKeystore(), F: filestore.NewFileManager(ds, filepath.Dir(os.TempDir())), } node, err := core.NewNode(ctx, &core.BuildCfg{ Repo: r, Host: mock.MockHostOption(mn), Online: fullIdentity, ExtraOpts: map[string]bool{ "pubsub": true, }, }) if err != nil { return nil, err } nodes[i] = node apis[i], err = coreapi.NewCoreAPI(node) if err != nil { return nil, err } } err := mn.LinkAll() if err != nil { return nil, err } bsinf := core.BootstrapConfigWithPeers( []pstore.PeerInfo{ nodes[0].Peerstore.PeerInfo(nodes[0].Identity), }, ) for _, n := range nodes[1:] { if err := n.Bootstrap(bsinf); err != nil { return nil, err } } return apis, nil } func TestIface(t *testing.T) { tests.TestApi(&NodeProvider{})(t) }