def test_getinsert_last_two_part_not_exist_no_create(self): node1 = DirectoryNode("", None) node2 = DirectoryNode("part1", node1) node1.children["part1"] = node2 sub_node = node1.get_or_insert_node( "part1/part2/part3/", create=False) assert sub_node is None assert len(node2.children) == 0
def test_self_remove_if_possible(self): node1 = DirectoryNode("", None) node2 = DirectoryNode("path_part2", node1) node1.children[node2.path_part] = node2 node3 = DirectoryNode("path_part3", node2) node2.children[node3.path_part] = node3 node3.self_remove_if_possible() assert len(node1.children) == 0
def test_getinsert_long_path_and_last_leaf_not_exist_and_no_create(self): node1 = DirectoryNode("", None) node2 = DirectoryNode("part1", node1) node1.children["part1"] = node2 node3 = DirectoryNode("part2", node2) node2.children["part2"] = node3 sub_node = node1.get_or_insert_node( "part1/part2/part3/", create=False) assert sub_node is None assert "part3" not in node3.children
def test_getinsert_last_two_part_do_not_exist(self): node1 = DirectoryNode("", None) node2 = DirectoryNode("part1", node1) node1.children["part1"] = node2 sub_node = node1.get_or_insert_node("part1/part2/part3/") assert sub_node is not None assert isinstance(sub_node, FileNode) sub_node_parent = sub_node.parent assert sub_node_parent is not None assert sub_node_parent.parent is node2 assert "part2" in node2.children assert node2.children["part2"] is sub_node_parent
def test_getinsert_long_path_and_last_leaf_not_exist(self): node1 = DirectoryNode("", None) node2 = DirectoryNode("part1", node1) node1.children["part1"] = node2 node3 = DirectoryNode("part2", node2) node2.children["part2"] = node3 sub_node = node1.get_or_insert_node("part1/part2/part3/") assert sub_node is not None assert isinstance(sub_node, FileNode) assert sub_node.parent is node3 assert "part3" in node3.children assert node3.children["part3"] is sub_node
def test_traverse_only_directory_node(self): node1 = DirectoryNode("", None) node2 = node1.get_or_insert_node("part1/part2/part3") node5 = node1.get_or_insert_node("part1/part6/part7") node6 = node1.get_or_insert_node("part8/part9") node_list = list(node1.traverse_only_directory_node()) assert len(node_list) == 5 assert node1 in node_list assert node2.parent in node_list assert node2.parent.parent in node_list assert node5.parent in node_list assert node6.parent in node_list
def test_traverse_only_dir_tree(self): node1 = DirectoryNode("", None) node2 = node1.get_or_insert_node("part1/part2/part3") node5 = node1.get_or_insert_node("part1/part6/part7") node6 = node1.get_or_insert_node("part8/part9") node8 = node1.get_or_insert_node("part11", only_directory=True) def collect(node): return isinstance(node, DirectoryNode) node_list = list(node1.traverse(collect=collect)) assert len(node_list) == 6 assert node1 in node_list assert node2.parent in node_list assert node2.parent.parent in node_list assert node5.parent in node_list assert node6.parent in node_list assert node8 in node_list
def test_remove_waiting_node_waiting_on_itself(self): node = DirectoryNode("path_part", None) node.lock() node.add_waiting_node(node) assert node in node.waiting_nodes assert node is node.waiting_for_node node.remove_waiting_node() assert node not in node.waiting_nodes assert node.waiting_for_node is None
def test_remove_waiting_node_waiting_on_another_node(self): node1 = DirectoryNode("path_part1", None) node2 = DirectoryNode("path_part2", node1) node2.lock(node1) node2.add_waiting_node(node2) assert node2 in node1.waiting_nodes assert node1 is node2.waiting_for_node node2.remove_waiting_node() assert node2 not in node1.waiting_nodes assert node2.waiting_for_node is None
def test_unlock_locked_by_itself(self): node = DirectoryNode("path_part", "parent") child = FakeDirectoryNode() node.children["child"] = child node.lock() node.unlock() assert child.unlocker is node
def test_unlock_locked_by_another_node(self): node = DirectoryNode("path_part", "parent") child = FakeDirectoryNode() node.children["child"] = child node.lock("lock_owner") node.unlock() assert child.unlocker is None
def test_getinsert_long_path_and_exist(self): node1 = DirectoryNode("", None) node2 = DirectoryNode("part1", node1) node1.children["part1"] = node2 node3 = DirectoryNode("part2", node2) node2.children["part2"] = node3 node4 = DirectoryNode("part3", node3) node3.children["part3"] = node4 sub_node = node1.get_or_insert_node("part1/part2/part3/") assert sub_node is node4
def test_set_prior_waiting_on_itself(self): node = DirectoryNode("path_part", None) node.lock() node.waiting_nodes.append("another task") node.add_waiting_node(node) assert node in node.waiting_nodes assert node is node.waiting_nodes[1] assert node is node.waiting_for_node node.set_prior() assert node in node.waiting_nodes assert node is node.waiting_nodes[0] assert node is node.waiting_for_node
def test_set_prior_waiting_on_another_node(self): node1 = DirectoryNode("path_part1", None) node2 = DirectoryNode("path_part2", node1) node2.lock(node1) node1.waiting_nodes.append("another task") node2.add_waiting_node(node2) assert node2 in node1.waiting_nodes assert node2 is node1.waiting_nodes[1] assert node1 is node2.waiting_for_node node2.set_prior() assert node2 in node1.waiting_nodes assert node2 is node1.waiting_nodes[0] assert node1 is node2.waiting_for_node
def test_add_waiting_node_to_this_node_prior(self): node = DirectoryNode("path_part", None) node.lock() node2 = DirectoryNode("path_part2", node) node.add_waiting_node(node2) assert node2 in node.waiting_nodes node4 = DirectoryNode("path_part4", node) node.add_waiting_node(node4, prior_node=True) assert node4 in node.waiting_nodes assert node4 is node.waiting_nodes[0]
def test_add_waiting_node_to_this_node_not_prior(self): node = DirectoryNode("path_part", None) node.lock() node2 = DirectoryNode("path_part2", node) node.add_waiting_node(node2) assert node2 in node.waiting_nodes node3 = DirectoryNode("path_part3", node) node.add_waiting_node(node3, prior_node=False) assert node3 in node.waiting_nodes assert node3 is node.waiting_nodes[-1]
def test_add_waiting_node_to_another_node_prior(self): node = DirectoryNode("path_part", None) fake_node = FakeDirectoryNode() node.lock(fake_node) node2 = DirectoryNode("path_part2", node) node.add_waiting_node(node2) assert (node2, False,) in fake_node.waiting_nodes node3 = DirectoryNode("path_part3", node) node.add_waiting_node(node3, prior_node=True) assert (node3, True,) in fake_node.waiting_nodes assert (node3, True,) == fake_node.waiting_nodes[-1]
def test_traverse_only_file_node(self): node1 = DirectoryNode("", None) node2 = node1.get_or_insert_node("part1/part2/part3") node3 = node1.get_or_insert_node("part1/part2/part4") node4 = node1.get_or_insert_node("part1/part2/part5") node5 = node1.get_or_insert_node("part1/part6/part7") node6 = node1.get_or_insert_node("part8/part9") node7 = node1.get_or_insert_node("part10") node_list = list(node1.traverse_only_file_node()) assert len(node_list) == 6 for node in (node2, node3, node4, node5, node6, node7): assert node in node_list
def test_trigger_with_itself_waiting(self): node = DirectoryNode("path_part", "parent") node.waiting_nodes.append(node) fake_node = FakeNodeForAbstractTest() node.waiting_task = "task" node.waiting_for_node = self node.waiting_task_callback = fake_node.callback node.trigger_waiting_task() assert node.waiting_task_callback is None assert node.waiting_task is None assert node.waiting_for_node is None assert not fake_node.cancel assert fake_node.release_aquired_lock
def test_traverse_various_node_tree(self): node1 = DirectoryNode("", None) node2 = node1.get_or_insert_node("part1/part2/part3") node3 = node1.get_or_insert_node("part1/part2/part4") node4 = node1.get_or_insert_node("part1/part2/part5") node5 = node1.get_or_insert_node("part1/part6/part7") node6 = node1.get_or_insert_node("part8/part9") node7 = node1.get_or_insert_node("part10") def collect(node): return isinstance(node, FileNode) node_list = list(node1.traverse(collect=collect)) assert len(node_list) == 6 assert node2 in node_list assert node3 in node_list assert node4 in node_list assert node5 in node_list assert node6 in node_list assert node7 in node_list
def test_getinsert_single_path_and_exist(self): node = DirectoryNode("single", None) sub_node = node.get_or_insert_node("single") assert sub_node is not node assert "single" in node.children assert isinstance(node.children["single"], FileNode)
def test_getinsert_empty_path_and_exist(self): node = DirectoryNode("", None) assert node.get_or_insert_node("") is node
def test_increment_children_locked_count_with_unlocked_child(self): node = DirectoryNode("path_part", "parent") node.children["child"] = "child" assert node.has_children_unlocked() node.increment_children_locked_count() assert not node.has_children_unlocked()
def test_traverse_do_not_explore_self(self): node = DirectoryNode("", None) node_list = list(node.traverse(explore=lambda x: False)) assert len(node_list) == 0
def test_set_prior_no_waiting(self): node = DirectoryNode("path_part", None) node.set_prior()
def test_trigger_with_no_waiting_nodes(self): node = DirectoryNode("path_part", "parent") node.trigger_waiting_task()
def test_trigger_with_other_node_waiting(self): node = DirectoryNode("path_part", "parent") fake_node = FakeDirectoryNode() node.waiting_nodes.append(fake_node) node.trigger_waiting_nodes() assert fake_node.triggered
def test_getinsert_single_path_and_not_exist_and_only_directory(self): node = DirectoryNode("", None) sub_node = node.get_or_insert_node("single", only_directory=True) assert sub_node is not node assert "single" in node.children assert isinstance(node.children["single"], DirectoryNode)
def test_remove_waiting_node_no_waiting(self): node = DirectoryNode("path_part", None) node.remove_waiting_node()
def test_traverse_empty_tree(self): node = DirectoryNode("", None) node_list = list(node.traverse()) assert len(node_list) == 1 assert node in node_list