r11121: - add normal groups vs. multihomed section
authorStefan Metzmacher <metze@samba.org>
Mon, 17 Oct 2005 15:12:03 +0000 (15:12 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:44:53 +0000 (13:44 -0500)
- make sure we test the worst case,
  so that we don't need to test everything...
  - same ip(s) => not replace
  - different ip(s) => replace

metze
(This used to be commit 4a22ce09b4cad7bb3d60e45f25fb19c36efb8dec)

source4/torture/nbt/winsreplication.c

index b454ece49395c05893be1f34493f19e4211169da..8b2885335ab98617512cadf90cd85b35a1e2b4b6 100644 (file)
@@ -705,6 +705,7 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
        struct {
                const char *line; /* just better debugging */
                struct nbt_name name;
+               BOOL extra; /* not the worst case, this is an extra test */
                BOOL cleanup;
                struct {
                        struct wrepl_wins_owner *owner;
@@ -758,6 +759,7 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
        {
                .line   = __location__,
                .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .extra  = True,
                .r1     = {
                        .owner          = &ctx->a,
                        .type           = WREPL_TYPE_UNIQUE,
@@ -787,6 +789,7 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
        {
                .line   = __location__,
                .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .extra  = True,
                .r1     = {
                        .owner          = &ctx->b,
                        .type           = WREPL_TYPE_UNIQUE,
@@ -816,6 +819,7 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
        {
                .line   = __location__,
                .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .extra  = True,
                .r1     = {
                        .owner          = &ctx->b,
                        .type           = WREPL_TYPE_UNIQUE,
@@ -845,6 +849,7 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
        {
                .line   = __location__,
                .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .extra  = True,
                .r1     = {
                        .owner          = &ctx->a,
                        .type           = WREPL_TYPE_UNIQUE,
@@ -903,6 +908,7 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
        {
                .line   = __location__,
                .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .extra  = True,
                .r1     = {
                        .owner          = &ctx->b,
                        .type           = WREPL_TYPE_UNIQUE,
@@ -1051,6 +1057,7 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
        {
                .line   = __location__,
                .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .extra  = True,
                .r1     = {
                        .owner          = &ctx->a,
                        .type           = WREPL_TYPE_UNIQUE,
@@ -1096,8 +1103,8 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                        .state          = WREPL_STATE_RELEASED,
                        .node           = WREPL_NODE_B,
                        .is_static      = False,
-                       .num_ips        = ARRAY_SIZE(addresses_B_1),
-                       .ips            = addresses_B_1,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
                        .apply_expected = False
                }
        },
@@ -1272,8 +1279,8 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                        .state          = WREPL_STATE_ACTIVE,
                        .node           = WREPL_NODE_B,
                        .is_static      = False,
-                       .num_ips        = ARRAY_SIZE(addresses_B_3_4),
-                       .ips            = addresses_B_3_4,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
                        .apply_expected = False
                }
        },
@@ -1301,8 +1308,8 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                        .state          = WREPL_STATE_TOMBSTONE,
                        .node           = WREPL_NODE_B,
                        .is_static      = False,
-                       .num_ips        = ARRAY_SIZE(addresses_B_3_4),
-                       .ips            = addresses_B_3_4,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
                        .apply_expected = False
                }
        },
@@ -1405,6 +1412,7 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
        {
                .line   = __location__,
                .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .extra  = True,
                .r1     = {
                        .owner          = &ctx->b,
                        .type           = WREPL_TYPE_UNIQUE,
@@ -1540,8 +1548,8 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                        .state          = WREPL_STATE_ACTIVE,
                        .node           = WREPL_NODE_B,
                        .is_static      = False,
-                       .num_ips        = ARRAY_SIZE(addresses_B_1),
-                       .ips            = addresses_B_1,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
                        .apply_expected = False
                }
        },
@@ -1569,8 +1577,8 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                        .state          = WREPL_STATE_TOMBSTONE,
                        .node           = WREPL_NODE_B,
                        .is_static      = False,
-                       .num_ips        = ARRAY_SIZE(addresses_B_1),
-                       .ips            = addresses_B_1,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
                        .apply_expected = False
                }
        },
@@ -1598,8 +1606,8 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                        .state          = WREPL_STATE_ACTIVE,
                        .node           = WREPL_NODE_B,
                        .is_static      = False,
-                       .num_ips        = ARRAY_SIZE(addresses_B_1),
-                       .ips            = addresses_B_1,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
                        .apply_expected = False
                }
        },
@@ -1627,8 +1635,8 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                        .state          = WREPL_STATE_TOMBSTONE,
                        .node           = WREPL_NODE_B,
                        .is_static      = False,
-                       .num_ips        = ARRAY_SIZE(addresses_B_1),
-                       .ips            = addresses_B_1,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
                        .apply_expected = False
                }
        },
@@ -1656,8 +1664,8 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                        .state          = WREPL_STATE_ACTIVE,
                        .node           = WREPL_NODE_B,
                        .is_static      = False,
-                       .num_ips        = ARRAY_SIZE(addresses_B_1),
-                       .ips            = addresses_B_1,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
                        .apply_expected = False
                }
        },
@@ -1685,8 +1693,8 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                        .state          = WREPL_STATE_TOMBSTONE,
                        .node           = WREPL_NODE_B,
                        .is_static      = False,
-                       .num_ips        = ARRAY_SIZE(addresses_B_1),
-                       .ips            = addresses_B_1,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
                        .apply_expected = False
                }
        },
@@ -1895,7 +1903,7 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
 
        /* 
         * group,tombstone vs. group,tombstone
-        * => should NOT be replaced
+        * => should be replaced
         */
        {
                .line   = __location__,
@@ -2035,8 +2043,8 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                        .state          = WREPL_STATE_RELEASED,
                        .node           = WREPL_NODE_B,
                        .is_static      = False,
-                       .num_ips        = ARRAY_SIZE(addresses_A_1),
-                       .ips            = addresses_A_1,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
                        .apply_expected = False
                }
        },
@@ -2089,8 +2097,8 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                        .state          = WREPL_STATE_TOMBSTONE,
                        .node           = WREPL_NODE_B,
                        .is_static      = False,
-                       .num_ips        = ARRAY_SIZE(addresses_A_1),
-                       .ips            = addresses_A_1,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
                        .apply_expected = False
                }
        },
@@ -2126,7 +2134,7 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
 
        /* 
         * group,tombstone vs. sgroup,tombstone
-        * => should NOT be replaced
+        * => should be replaced
         */
        {
                .line   = __location__,
@@ -2153,6 +2161,237 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
                }
        },
 
+/*
+ * normal groups vs multi homed section,
+ */
+       /* 
+        * group,active vs. mhomed,active
+        * => should NOT be replaced
+        */
+       {
+               .line   = __location__,
+               .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .r1     = {
+                       .owner          = &ctx->b,
+                       .type           = WREPL_TYPE_GROUP,
+                       .state          = WREPL_STATE_ACTIVE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = True
+               },
+               .r2     = {
+                       .owner          = &ctx->a,
+                       .type           = WREPL_TYPE_MHOMED,
+                       .state          = WREPL_STATE_ACTIVE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = False
+               }
+       },
+
+       /* 
+        * group,active vs. mhomed,tombstone
+        * => should NOT be replaced
+        */
+       {
+               .line   = __location__,
+               .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .r1     = {
+                       .owner          = &ctx->b,
+                       .type           = WREPL_TYPE_GROUP,
+                       .state          = WREPL_STATE_ACTIVE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = True
+               },
+               .r2     = {
+                       .owner          = &ctx->a,
+                       .type           = WREPL_TYPE_MHOMED,
+                       .state          = WREPL_STATE_TOMBSTONE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = False
+               }
+       },
+
+       /* 
+        * group,released vs. mhomed,active
+        * => should NOT be replaced
+        */
+       {
+               .line   = __location__,
+               .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .r1     = {
+                       .owner          = &ctx->b,
+                       .type           = WREPL_TYPE_GROUP,
+                       .state          = WREPL_STATE_RELEASED,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = False
+               },
+               .r2     = {
+                       .owner          = &ctx->a,
+                       .type           = WREPL_TYPE_MHOMED,
+                       .state          = WREPL_STATE_ACTIVE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = False
+               }
+       },
+
+       /* 
+        * group,released vs. mhomed,released
+        * => should NOT be replaced
+        */
+       {
+               .line   = __location__,
+               .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .r1     = {
+                       .owner          = &ctx->b,
+                       .type           = WREPL_TYPE_GROUP,
+                       .state          = WREPL_STATE_RELEASED,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = False
+               },
+               .r2     = {
+                       .owner          = &ctx->a,
+                       .type           = WREPL_TYPE_MHOMED,
+                       .state          = WREPL_STATE_RELEASED,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = False
+               }
+       },
+       {
+               .line   = __location__,
+               .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .cleanup= True,
+               .r1     = {
+                       .owner          = &ctx->a,
+                       .type           = WREPL_TYPE_UNIQUE,
+                       .state          = WREPL_STATE_TOMBSTONE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
+                       .apply_expected = False
+               },
+               .r2     = {
+                       .owner          = &ctx->b,
+                       .type           = WREPL_TYPE_UNIQUE,
+                       .state          = WREPL_STATE_TOMBSTONE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = True
+               }
+       },
+
+       /* 
+        * group,released vs. mhomed,tombstone
+        * => should NOT be replaced
+        */
+       {
+               .line   = __location__,
+               .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .r1     = {
+                       .owner          = &ctx->b,
+                       .type           = WREPL_TYPE_GROUP,
+                       .state          = WREPL_STATE_RELEASED,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = False
+               },
+               .r2     = {
+                       .owner          = &ctx->a,
+                       .type           = WREPL_TYPE_MHOMED,
+                       .state          = WREPL_STATE_TOMBSTONE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = False
+               }
+       },
+
+       /* 
+        * group,tombstone vs. mhomed,active
+        * => should be replaced
+        */
+       {
+               .line   = __location__,
+               .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .r1     = {
+                       .owner          = &ctx->b,
+                       .type           = WREPL_TYPE_GROUP,
+                       .state          = WREPL_STATE_TOMBSTONE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = True
+               },
+               .r2     = {
+                       .owner          = &ctx->a,
+                       .type           = WREPL_TYPE_MHOMED,
+                       .state          = WREPL_STATE_ACTIVE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
+                       .apply_expected = True
+               }
+       },
+
+       /* 
+        * group,tombstone vs. mhomed,tombstone
+        * => should be replaced
+        */
+       {
+               .line   = __location__,
+               .name   = _NBT_NAME("_DIFF_OWNER", 0x00, NULL),
+               .r1     = {
+                       .owner          = &ctx->a,
+                       .type           = WREPL_TYPE_GROUP,
+                       .state          = WREPL_STATE_TOMBSTONE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_A_1),
+                       .ips            = addresses_A_1,
+                       .apply_expected = True
+               },
+               .r2     = {
+                       .owner          = &ctx->b,
+                       .type           = WREPL_TYPE_MHOMED,
+                       .state          = WREPL_STATE_TOMBSTONE,
+                       .node           = WREPL_NODE_B,
+                       .is_static      = False,
+                       .num_ips        = ARRAY_SIZE(addresses_B_1),
+                       .ips            = addresses_B_1,
+                       .apply_expected = True
+               }
+       },
+
        /* 
         * This should be the last record in this array,
         * we need to make sure the we leave a tombstoned unique entry
@@ -2192,6 +2431,19 @@ static BOOL test_conflict_different_owner(struct test_wrepl_conflict_conn *ctx)
        printf("Test Replica Conflicts with different owners\n");
 
        for(i=0; ret && i < ARRAY_SIZE(records); i++) {
+       
+               if (!records[i].extra && !records[i].cleanup) {
+                       /* we should test the worst cases */
+                       if (records[i].r2.apply_expected && records[i].r1.ips==records[i].r2.ips) {
+                               printf("(%s) Programmer error, invalid record[%u]: %s\n",
+                                       __location__, i, records[i].line);
+                               return False;
+                       } else if (!records[i].r2.apply_expected && records[i].r1.ips!=records[i].r2.ips) {
+                               printf("(%s) Programmer error, invalid record[%u]: %s\n",
+                                       __location__, i, records[i].line);
+                               return False;
+                       }
+               }
 
                if (!records[i].cleanup) {
                        printf("%s,%s%s vs. %s,%s%s with %s ip(s) => %s\n",