github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/p2p/dag_test.go (about) 1 package p2p 2 3 import ( 4 "testing" 5 6 "github.com/google/go-cmp/cmp" 7 "github.com/qri-io/dag" 8 p2ptest "github.com/qri-io/qri/p2p/test" 9 ) 10 11 func TestNewManifest(t *testing.T) { 12 tr, cleanup := newTestRunner(t) 13 defer cleanup() 14 15 node := tr.IPFSBackedQriNode(t, "dag_tests_peer") 16 ref := writeWorldBankPopulation(tr.Ctx, t, node.Repo) 17 18 mfst, err := node.NewManifest(tr.Ctx, ref.Path) 19 if err != nil { 20 t.Error(err) 21 } 22 23 expect := &dag.Manifest{ 24 Links: [][2]int{{0, 1}, {0, 2}, {0, 3}, {0, 4}, {0, 5}, {0, 6}, {0, 7}}, 25 Nodes: []string{ 26 "QmR2cvzUwuRu24nxEentiAsGvkqgbBdJcEa9ezFwF4DgDR", 27 "QmPtfTWctksdUXfXCmpQf7pF8z5xUNAYrurQxY5LRsKrX1", 28 "QmQYhY2RaVLn36MrjLQG9XJk6QQMHkSvvPUXZ9J9MDf6Ur", 29 "QmTgqZXtLnU2nRU4yMaQKBiMPesavuDVCfBWJgDvbQZ2xm", 30 "QmWVxUKnBmbiXai1Wgu6SuMzyZwYRqjt5TXL8xxghN5hWL", 31 "Qma3bmcJhAdKeEB9dKJBfChVb2LvcNfWvqnh7hqbJR7aLZ", 32 "QmaeD2dPHLJsM2pyTGMmbuSAj26rHK8DvoSuY3s2LFutFe", 33 "QmdzHjr5GdFGCvo9dCqdhUpqPxA6x5yz8G1cErb7q5MvTP", 34 }, 35 } 36 37 if diff := cmp.Diff(expect, mfst); diff != "" { 38 t.Errorf("result mismatch. (-want +got):\n%s", diff) 39 } 40 } 41 42 func TestMissingManifest(t *testing.T) { 43 // TODO (b5) - we're running into network fetching issues here, the generated 44 // ipfs node isn't currently creating a localNodeGetter, causing this test 45 // to hang forever trying to fetch on a one-node network 46 tr, cleanup := newTestRunner(t) 47 defer cleanup() 48 49 node := tr.IPFSBackedQriNode(t, "dag_tests_peer") 50 ref := writeWorldBankPopulation(tr.Ctx, t, node.Repo) 51 52 // Select some blocks from the saved dataset. Don't hardcode block ids, because if they 53 // ever change this test will hang. 54 capi, _ := node.IPFSCoreAPI() 55 blocks := p2ptest.GetSomeBlocks(capi, ref, 2) 56 in := &dag.Manifest{Nodes: blocks} 57 58 // TODO(dlong): This function seems to not work correctly. If any blocks are missing, it 59 // doesn't return them, instead it hangs forever. 60 61 // Get which blocks from the manifest are missing from available blocks. 62 mfst, err := node.MissingManifest(tr.Ctx, in) 63 if err != nil { 64 t.Error(err) 65 } 66 67 // None of those blocks in the manifest are missing. 68 expect := &dag.Manifest{} 69 if diff := cmp.Diff(expect, mfst); diff != "" { 70 t.Errorf("result mismatch. (-want +got):\n%s", diff) 71 } 72 } 73 74 func TestNewDAGInfo(t *testing.T) { 75 tr, cleanup := newTestRunner(t) 76 defer cleanup() 77 78 node := tr.IPFSBackedQriNode(t, "dag_tests_peer") 79 ref := writeWorldBankPopulation(tr.Ctx, t, node.Repo) 80 di, err := node.NewDAGInfo(tr.Ctx, ref.Path, "") 81 if err != nil { 82 t.Error(err) 83 } 84 85 expect := &dag.Info{ 86 Labels: map[string]int{ 87 "bd": 4, 88 "cm": 1, 89 "md": 5, 90 "st": 3, 91 "sa": 2, 92 }, 93 Sizes: []uint64{1642, 472, 157, 166, 13, 54, 428, 39}, 94 Manifest: &dag.Manifest{ 95 Links: [][2]int{{0, 1}, {0, 2}, {0, 3}, {0, 4}, {0, 5}, {0, 6}, {0, 7}}, 96 Nodes: []string{ 97 "QmR2cvzUwuRu24nxEentiAsGvkqgbBdJcEa9ezFwF4DgDR", 98 "QmPtfTWctksdUXfXCmpQf7pF8z5xUNAYrurQxY5LRsKrX1", 99 "QmQYhY2RaVLn36MrjLQG9XJk6QQMHkSvvPUXZ9J9MDf6Ur", 100 "QmTgqZXtLnU2nRU4yMaQKBiMPesavuDVCfBWJgDvbQZ2xm", 101 "QmWVxUKnBmbiXai1Wgu6SuMzyZwYRqjt5TXL8xxghN5hWL", 102 "Qma3bmcJhAdKeEB9dKJBfChVb2LvcNfWvqnh7hqbJR7aLZ", 103 "QmaeD2dPHLJsM2pyTGMmbuSAj26rHK8DvoSuY3s2LFutFe", 104 "QmdzHjr5GdFGCvo9dCqdhUpqPxA6x5yz8G1cErb7q5MvTP", 105 }, 106 }, 107 } 108 109 if diff := cmp.Diff(expect, di); diff != "" { 110 t.Errorf("result mismatch. (-want +got):\n%s", diff) 111 } 112 }