test-dsync-mailbox-tree-sync.c revision e3df4d9063a06e0cd228a1713677ec105b0a4aa2
5a580c3a38ced62d4bcc95b8ac7c4f2935b5d294Timo Sirainen/* Copyright (c) 2013 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
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
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainenstatic void test_trees(struct dsync_mailbox_tree *tree1,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen struct dsync_mailbox_tree *tree2)
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen{
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,
e83126866761632b437e532dfdc30be01d14039dTimo Sirainen DSYNC_MAILBOX_TREES_SYNC_TYPE_TWOWAY);
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,
e83126866761632b437e532dfdc30be01d14039dTimo Sirainen DSYNC_MAILBOX_TREES_SYNC_TYPE_TWOWAY);
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
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen dsync_mailbox_tree_deinit(&tree1);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo 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
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
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,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen test_dsync_mailbox_tree_sync_random,
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen NULL
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen };
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen return test_run(test_functions);
39ee82dad4d4fa61e3ed074d191afc6a9b82e249Timo Sirainen}