test-dsync-mailbox-tree-sync.c revision 5a470af15391d6fc73bebb41512a671b3d847644
7cb128dc4cae2a03a742f63ba7afee23c78e3af0Phil Carmody/* Copyright (c) 2013-2015 Dovecot authors, see the included COPYING file */
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen#include "lib.h"
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen#include "sha1.h"
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen#include "str.h"
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen#include "mailbox-list-private.h"
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen#include "dsync-mailbox-tree-private.h"
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen#include "test-common.h"
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen#include <stdio.h>
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen#include <stdlib.h>
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen#define MAX_DEPTH 4
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
5a470af15391d6fc73bebb41512a671b3d847644Timo Sirainenchar mail_namespace_get_sep(struct mail_namespace *ns ATTR_UNUSED)
5a470af15391d6fc73bebb41512a671b3d847644Timo Sirainen{
5a470af15391d6fc73bebb41512a671b3d847644Timo Sirainen return '/';
5a470af15391d6fc73bebb41512a671b3d847644Timo Sirainen}
5a470af15391d6fc73bebb41512a671b3d847644Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenvoid mailbox_name_get_sha128(const char *name, guid_128_t guid_128_r)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen unsigned char sha[SHA1_RESULTLEN];
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen sha1_get_digest(name, strlen(name), sha);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen memcpy(guid_128_r, sha, I_MIN(GUID_128_SIZE, sizeof(sha)));
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic struct dsync_mailbox_node *
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainennode_create(struct dsync_mailbox_tree *tree, unsigned int counter,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen const char *name, unsigned int last_renamed_or_created)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_node *node;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node = dsync_mailbox_tree_get(tree, name);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen memcpy(node->mailbox_guid, &counter, sizeof(counter));
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->uid_validity = counter;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->existence = DSYNC_MAILBOX_NODE_EXISTS;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->last_renamed_or_created = last_renamed_or_created;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen return node;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic struct dsync_mailbox_node *
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenrandom_node_create(struct dsync_mailbox_tree *tree, unsigned int counter,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen const char *name)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen return node_create(tree, counter, name, rand() % 10);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void nodes_create(struct dsync_mailbox_tree *tree, unsigned int *counter,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen const char *const *names)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen for (; *names != NULL; names++) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen *counter += 1;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree, *counter, *names, 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void nodes_delete(struct dsync_mailbox_tree *tree, unsigned int *counter,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen const char *const *names)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_node *node;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen for (; *names != NULL; names++) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen *counter += 1;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node = node_create(tree, *counter, *names, 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->existence = DSYNC_MAILBOX_NODE_DELETED;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainencreate_random_nodes(struct dsync_mailbox_tree *tree, const char *parent_name,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen unsigned int depth, unsigned int *counter)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen unsigned int parent_len, i, nodes_count = 1 + rand() % 3;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen string_t *str;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen if (depth == MAX_DEPTH)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen return;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen str = t_str_new(32);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen if (*parent_name != '\0')
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen str_printfa(str, "%s/", parent_name);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen parent_len = str_len(str);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen for (i = 0; i < nodes_count; i++) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen *counter += 1;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen str_truncate(str, parent_len);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen str_printfa(str, "%u.%u", depth, i);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen random_node_create(tree, *counter, str_c(str));
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen create_random_nodes(tree, str_c(str), depth+1, counter);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic struct dsync_mailbox_tree *create_random_tree(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen unsigned int counter = 0;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen create_random_nodes(tree, "", 0, &counter);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen return tree;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_tree_nodes_fixup(struct dsync_mailbox_node **pos,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen unsigned int *newguid_counter)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_node *node;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen for (node = *pos; node != NULL; node = node->next) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen if (node->sync_delayed_guid_change) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen /* the real code will pick one of the GUIDs.
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen we don't really care which one gets picked, so we'll
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen just change them to the same new one */
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen memcpy(node->mailbox_guid, newguid_counter,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen sizeof(*newguid_counter));
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->uid_validity = *newguid_counter;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen *newguid_counter += 1;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen if (node->existence == DSYNC_MAILBOX_NODE_DELETED)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->existence = DSYNC_MAILBOX_NODE_NONEXISTENT;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_tree_nodes_fixup(&node->first_child, newguid_counter);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen if (node->existence != DSYNC_MAILBOX_NODE_EXISTS &&
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->first_child == NULL) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen /* nonexistent node, drop it */
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen *pos = node->next;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen } else {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen pos = &node->next;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_tree_fixup(struct dsync_mailbox_tree *tree)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen unsigned int newguid_counter = INT_MAX;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_tree_nodes_fixup(&tree->root.first_child, &newguid_counter);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void nodes_dump(const struct dsync_mailbox_node *node, unsigned int depth)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen unsigned int i;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen for (; node != NULL; node = node->next) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen for (i = 0; i < depth; i++) printf(" ");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen printf("%-*s guid:%.5s uidv:%u %d%d %ld\n", 40-depth, node->name,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen guid_128_to_string(node->mailbox_guid), node->uid_validity,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->existence, node->subscribed,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen (long)node->last_renamed_or_created);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen nodes_dump(node->first_child, depth+1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void trees_dump(struct dsync_mailbox_tree *tree1,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree2)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen printf("tree1:\n");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen nodes_dump(tree1->root.first_child, 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen printf("tree2:\n");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen nodes_dump(tree2->root.first_child, 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainenstatic void test_trees_nofree(struct dsync_mailbox_tree *tree1,
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen struct dsync_mailbox_tree **_tree2)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen struct dsync_mailbox_tree *tree2 = *_tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *orig_tree1, *orig_tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree_sync_ctx *ctx;
e3df4d9063a06e0cd228a1713677ec105b0a4aa2Timo Sirainen struct dsync_mailbox_node *dup_node1, *dup_node2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen const struct dsync_mailbox_tree_sync_change *change;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen orig_tree1 = dsync_mailbox_tree_dup(tree1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen orig_tree2 = dsync_mailbox_tree_dup(tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen /* test tree1 -> tree2 */
e3df4d9063a06e0cd228a1713677ec105b0a4aa2Timo Sirainen dsync_mailbox_tree_build_guid_hash(tree1, &dup_node1, &dup_node2);
e3df4d9063a06e0cd228a1713677ec105b0a4aa2Timo Sirainen dsync_mailbox_tree_build_guid_hash(tree2, &dup_node1, &dup_node2);
e83126866761632b437e532dfdc30be01d14039dTimo Sirainen ctx = dsync_mailbox_trees_sync_init(tree1, tree2,
be2bc5677a16a3547d5cbfd21c9deedc96a759adTimo Sirainen DSYNC_MAILBOX_TREES_SYNC_TYPE_TWOWAY, 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen while ((change = dsync_mailbox_trees_sync_next(ctx)) != NULL) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen dsync_mailbox_trees_sync_deinit(&ctx);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_tree_fixup(tree1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_tree_fixup(tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen if (!dsync_mailbox_trees_equal(tree1, tree2)) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_assert(FALSE);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen trees_dump(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen /* test tree2 -> tree1 */
e3df4d9063a06e0cd228a1713677ec105b0a4aa2Timo Sirainen dsync_mailbox_tree_build_guid_hash(orig_tree1, &dup_node1, &dup_node2);
e3df4d9063a06e0cd228a1713677ec105b0a4aa2Timo Sirainen dsync_mailbox_tree_build_guid_hash(orig_tree2, &dup_node1, &dup_node2);
e83126866761632b437e532dfdc30be01d14039dTimo Sirainen ctx = dsync_mailbox_trees_sync_init(orig_tree2, orig_tree1,
be2bc5677a16a3547d5cbfd21c9deedc96a759adTimo Sirainen DSYNC_MAILBOX_TREES_SYNC_TYPE_TWOWAY, 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen while ((change = dsync_mailbox_trees_sync_next(ctx)) != NULL) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen dsync_mailbox_trees_sync_deinit(&ctx);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_tree_fixup(orig_tree1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_tree_fixup(orig_tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen if (!dsync_mailbox_trees_equal(orig_tree1, orig_tree2)) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_assert(FALSE);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen trees_dump(orig_tree1, orig_tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen /* make sure both directions produced equal trees */
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen if (!dsync_mailbox_trees_equal(tree1, orig_tree1)) {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_assert(FALSE);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen trees_dump(tree1, orig_tree1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen }
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen dsync_mailbox_tree_deinit(_tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen dsync_mailbox_tree_deinit(&orig_tree1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen dsync_mailbox_tree_deinit(&orig_tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainenstatic void test_trees(struct dsync_mailbox_tree *tree1,
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen struct dsync_mailbox_tree *tree2)
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen{
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen test_trees_nofree(tree1, &tree2);
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen dsync_mailbox_tree_deinit(&tree1);
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen}
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_creates(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen static const char *common_nodes[] = { "foo", "foo/bar", NULL };
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen static const char *create1_nodes[] = { "bar", "foo/baz", NULL };
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen static const char *create2_nodes[] = { "foo/xyz", "foo/bar/3", NULL };
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen unsigned int counter = 0;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync creates");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen nodes_create(tree1, &counter, common_nodes);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_dup(tree1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen nodes_create(tree1, &counter, create1_nodes);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen nodes_create(tree2, &counter, create2_nodes);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_deletes(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen static const char *common_nodes[] = { "1", "2", "3", "2/s1", "2/s2", "x/y", NULL };
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen static const char *delete1_nodes[] = { "1", "2", NULL };
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen static const char *delete2_nodes[] = { "2/s1", "x/y", NULL };
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen unsigned int counter = 0;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync deletes");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen nodes_create(tree1, &counter, common_nodes);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_dup(tree1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen nodes_delete(tree1, &counter, delete1_nodes);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen nodes_delete(tree2, &counter, delete2_nodes);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames1(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen static const char *common_nodes[] = { "1", "2", "3", "2/s1", "2/s2", "x/y", "3/s3", NULL };
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_node *node;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen unsigned int counter = 0;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 1");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen nodes_create(tree1, &counter, common_nodes);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_dup(tree1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node = dsync_mailbox_tree_get(tree1, "1");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->name = "a";
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->last_renamed_or_created = 1000;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node = dsync_mailbox_tree_get(tree2, "2");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->name = "b";
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->last_renamed_or_created = 1000;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node = dsync_mailbox_tree_get(tree1, "3/s3");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->name = "z";
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node->last_renamed_or_created = 1000;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen dsync_mailbox_tree_node_detach(node);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen dsync_mailbox_tree_node_attach(node, &tree1->root);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames2(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 2");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "0/1", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "0/1/2", 3);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "0", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "0/1/2", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames3(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 3");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "0/2", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "0/3", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "0/4/5", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "1", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames4(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 4");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "0/b", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "c", 2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "0/a", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames5(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 5");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "b", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "c", 2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "0/a", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames6(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 6");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "0/1", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "0/2", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "0", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "0/3", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames7(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 7");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "0/2", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "1/2", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames8(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 8");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "0/1", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "0/2", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "0", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames9(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 9");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "0/1/2", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "0/3", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "0", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames10(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 10");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "0/1", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 3, "0/2/3", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "0", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames11(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 11");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "0/1", 2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 0, "0/1/2", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "0", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 0, "0/1/2", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames12(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 12");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "0/2", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "1", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 3, "1/4", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 4, "1/4/5", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "1", 2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "1/4", 3);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 3, "1/4/6", 4);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 4, "1/3", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames13(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 13");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 4, "0.0/1.0/2.1", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 5, "0.1", 2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 6, "0.1/1.0", 2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 7, "0.1/1.0/2.0", 8);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 5, "0.1/1.0", 5);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 6, "0.1/1.0/2.0", 8);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 7, "0.1/1.1", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames14(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 14");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "1", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "1/2", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 3, "1/2/4", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "1/2", 3);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "1/2/5", 4);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 3, "1/2/4", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames15(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 15");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "1", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "1", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames16(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 16");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "1/2", 4);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "1", 2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "2", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "1/2", 3);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 3, "1", 5);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames17(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 17");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "1", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "1/2", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "1", 2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames18(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 18");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "a", 5);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 4, "a/c", 2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 5, "b", 6);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "a", 7);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "b", 3);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 3, "b/c", 4);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 4, "d", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames19(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync renames 19");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 1, "0/2/1", 1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 2, "0/4", 3);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree1, 3, "0/2", 2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 1, "1", 0);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen node_create(tree2, 2, "1/3", 4);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainenstatic void test_dsync_mailbox_tree_sync_renames20(void)
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen{
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen test_begin("dsync mailbox tree sync renames 20");
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen tree1 = dsync_mailbox_tree_init('/', '_');
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen tree2 = dsync_mailbox_tree_init('/', '_');
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen node_create(tree1, 1, "1", 0);
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen node_create(tree1, 2, "0", 0);
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen node_create(tree1, 3, "0/2", 0);
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen /* rename 0 -> 1/0 */
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen node_create(tree2, 1, "1", 0);
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen node_create(tree2, 2, "1/0", 1);
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen node_create(tree2, 3, "1/0/2", 0);
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen test_trees_nofree(tree1, &tree2);
d229d26d263a57a77eec8fe7cba24fbfd9509966Timo Sirainen test_assert(tree1->root.first_child != NULL &&
d229d26d263a57a77eec8fe7cba24fbfd9509966Timo Sirainen tree1->root.first_child->next == NULL);
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen dsync_mailbox_tree_deinit(&tree1);
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen test_end();
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen}
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_dsync_mailbox_tree_sync_random(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree1, *tree2;
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_begin("dsync mailbox tree sync random");
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree1 = create_random_tree();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen tree2 = create_random_tree();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_trees(tree1, tree2);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_end();
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenint main(void)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen static void (*test_functions[])(void) = {
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_creates,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_deletes,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames1,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames2,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames3,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames4,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames5,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames6,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames7,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames8,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames9,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames10,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames11,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames12,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames13,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames14,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames15,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames16,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames17,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames18,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_renames19,
28542ffed61d0b860e0d1f9c837e0eb622df6b51Timo Sirainen test_dsync_mailbox_tree_sync_renames20,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_random,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen NULL
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen };
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen return test_run(test_functions);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}