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  }