at master 199 lines 4.6 kB view raw
1import unittest 2 3from toolz import curried as tlz 4 5from . import test_helpers as th 6 7from .lib import ( 8 directed_graph, 9 igraph_to_reference_graph, 10 limit_layers, 11 pick_keys, 12 references_graph_to_igraph, 13 reference_graph_node_keys_to_keep 14) 15 16if __name__ == "__main__": 17 unittest.main() 18 19 20references_graph = [ 21 { 22 "closureSize": 3, 23 "narHash": "sha256:d", 24 "narSize": 0, 25 "path": "D", 26 "references": [ 27 "D" 28 ] 29 }, 30 { 31 "closureSize": 3, 32 "narHash": "sha256:b", 33 "narSize": 4, 34 "path": "B", 35 "references": [ 36 "B" 37 ] 38 }, 39 { 40 "closureSize": 3, 41 "narHash": "sha256:e", 42 "narSize": 5, 43 "path": "E", 44 "references": [ 45 "E" 46 ] 47 }, 48 { 49 "closureSize": 1, 50 "narHash": "sha256:a", 51 "narSize": 10, 52 "path": "A", 53 "references": [ 54 # most of the time references contain self path, but not always. 55 "C", 56 "B", 57 ] 58 }, 59 { 60 "closureSize": 5, 61 "narHash": "sha256:c", 62 "narSize": 6, 63 "path": "C", 64 "references": [ 65 "C", 66 "E", 67 "D" 68 ] 69 }, 70 { 71 "closureSize": 5, 72 "narHash": "sha256:f", 73 "narSize": 2, 74 "path": "F", 75 "references": [ 76 "F" 77 ] 78 } 79] 80 81 82class TestLib(unittest.TestCase, th.CustomAssertions): 83 84 def test_references_graph_to_igraph(self): 85 86 graph = references_graph_to_igraph(references_graph) 87 88 pick_preserved_keys = pick_keys(reference_graph_node_keys_to_keep) 89 90 self.assertGraphEqual( 91 graph, 92 directed_graph( 93 [ 94 ("A", "B"), 95 ("A", "C"), 96 ("C", "E"), 97 ("C", "D"), 98 ], 99 ["F"], 100 # Add "narSize" and "closureSize" attributes to each node. 101 map( 102 lambda node: (node["path"], pick_preserved_keys(node)), 103 references_graph 104 ) 105 ) 106 ) 107 108 def test_references_graph_to_igraph_one_node(self): 109 110 references_graph = [ 111 { 112 'closureSize': 168, 113 'narHash': 'sha256:0dl4', 114 'narSize': 168, 115 'path': 'A', 116 'references': [] 117 } 118 ] 119 120 graph = references_graph_to_igraph(references_graph) 121 122 pick_preserved_keys = pick_keys(reference_graph_node_keys_to_keep) 123 124 self.assertGraphEqual( 125 graph, 126 directed_graph( 127 [], 128 ["A"], 129 # Add "narSize" and "closureSize" attributes to each node. 130 map( 131 lambda node: (node["path"], pick_preserved_keys(node)), 132 references_graph 133 ) 134 ) 135 ) 136 137 def test_references_graph_to_igraph_zero_nodes(self): 138 139 references_graph = [] 140 141 graph = references_graph_to_igraph(references_graph) 142 143 self.assertGraphEqual( 144 graph, 145 directed_graph( 146 [], 147 [], 148 [] 149 ) 150 ) 151 152 def test_igraph_to_reference_graph(self): 153 154 graph = references_graph_to_igraph(references_graph) 155 156 nodes_by_path = { 157 node["path"]: node for node in references_graph 158 } 159 160 result = igraph_to_reference_graph(graph) 161 162 self.assertEqual( 163 len(result), 164 len(references_graph) 165 ) 166 167 pick_preserved_keys = pick_keys([ 168 "path", 169 *reference_graph_node_keys_to_keep 170 ]) 171 172 for node in result: 173 original_node = nodes_by_path[node["path"]] 174 175 self.assertDictEqual( 176 pick_preserved_keys(original_node), 177 pick_preserved_keys(node) 178 ) 179 180 revove_self_ref = tlz.remove(lambda a: a == node["path"]) 181 182 self.assertListEqual( 183 sorted(node["references"]), 184 sorted(revove_self_ref(original_node["references"])) 185 ) 186 187 def test_limit_layers_nothing_to_do(self): 188 graph = references_graph_to_igraph(references_graph) 189 190 layers = [graph] 191 result = limit_layers(1, layers) 192 result_list = list(result) 193 194 self.assertEqual( 195 len(result_list), 196 1 197 ) 198 199 self.assertGraphEqual(graph, result_list[0])