def test_get_node_visitor_break(self): """ parent child1 (with match id) child2 :return: """ matched_obj_id = "matched obj id" parent = TreeNode(obj_type=None, obj_id="fake id") child1 = TreeNode(obj_type=None, obj_id=matched_obj_id) child2 = TreeNode(obj_type=None, obj_id="fake id2") parent.add_child(child1) parent.add_child(child2) v = GetNodeVisitor(matched_obj_id) parent.accept(v) assert v.node == child1
def test_match_destination(self): """ The node it visits match the dest id :return: """ # # A relation from relation_source_id to relation_dest_id # relation_source_id = "source object id" relation_dest_id = "dest object id" node = TreeNode() # The node to visit matches the dest id node.id = relation_dest_id # This node is the root of the tree tree = MultiRootTree(node) # The dest node is in the objects list src_type = "file" src_name = "fake file name" src_node = { "id": relation_source_id, "type": src_type, "name": src_name } stix_objects = [] stix_objects.append(src_node) v = RelationVisitor(src_id=relation_source_id, des_id=relation_dest_id, stix_objects=stix_objects, multi_root_tree=tree, log=logging) ret = node.accept(v) # # A new tree node shall be inserted as the root # new_node = tree.roots[0] assert len(new_node.children) == 1 assert new_node.id == relation_source_id assert new_node.type == src_type assert new_node.name == src_name assert new_node.is_root assert not new_node.is_link # the dest node is the child assert new_node.children[0] == node # if we found, we shall stop assert not ret
def test_link_to_dest(self): # # A relation from relation_source_id to relation_dest_id # relation_source_id = "source object id" relation_dest_id = "dest object id" des_node = TreeNode() des_node.id = relation_dest_id src_node = TreeNode() src_node.id = relation_source_id # The tree has a parent node as the root and # and both source node and dest node are children of the parent node parent_node = TreeNode() tree = MultiRootTree(parent_node) parent_node.add_child(des_node) parent_node.add_child(src_node) v = RelationVisitor(src_id=relation_source_id, des_id=relation_dest_id, stix_objects=[], multi_root_tree=tree, log=logging) # # visit the des_node. Here both the src_node and the des_node # are already in the tree # ret = des_node.accept(v) # # A new link node will be added to the src node # assert len(src_node.children) == 1 new_node = src_node.children[0] # This new node is a copy of the des node assert new_node.id == relation_dest_id assert new_node.type == des_node.type assert new_node.name == des_node.name assert not new_node.is_root assert new_node.is_link # if we found, we shall stop assert not ret
def test_merge_source(self): """ The node it visits match the dest id :return: """ # # A relation from relation_source_id to relation_dest_id # relation_source_id = "source object id" relation_dest_id = "dest object id" source_node = TreeNode() source_node.id = relation_source_id des_node = TreeNode() des_node.id = relation_dest_id # This source node is the root of the tree tree = MultiRootTree(source_node) # The dest node is ANOTHER root of the tree tree.add_root(des_node) # a relation from the srouce node to the dest node v = RelationVisitor(src_id=relation_source_id, des_id=relation_dest_id, stix_objects=[], multi_root_tree=tree, log=logging) # visit the source node ret = source_node.accept(v) assert len(source_node.children) == 1 # dest node shall be moved as a child of source node assert source_node.children[0] == des_node # The tree should have only one root now assert len(tree.roots) == 1 # if we found, we shall stop assert not ret