2005-02-16 13:04:52 +03:00
/*
Unix SMB / CIFS implementation .
WINS replication testing
2005-11-19 13:40:31 +03:00
Copyright ( C ) Andrew Tridgell 2005
Copyright ( C ) Stefan Metzmacher 2005
2005-02-16 13:04:52 +03:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2005-02-16 13:04:52 +03:00
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2005-02-16 13:04:52 +03:00
*/
# include "includes.h"
2005-09-09 20:00:02 +04:00
# include "libcli/wrepl/winsrepl.h"
2005-10-31 13:14:05 +03:00
# include "lib/events/events.h"
2005-10-23 18:18:03 +04:00
# include "lib/socket/socket.h"
2006-03-07 14:07:23 +03:00
# include "system/network.h"
2006-08-17 17:37:04 +04:00
# include "lib/socket/netif.h"
2006-03-16 03:23:11 +03:00
# include "librpc/gen_ndr/ndr_nbt.h"
2011-11-03 17:40:46 +04:00
# include "libcli/nbt/libnbt.h"
2006-03-25 19:01:28 +03:00
# include "torture/torture.h"
2006-10-16 17:06:41 +04:00
# include "torture/nbt/proto.h"
2007-09-08 16:42:09 +04:00
# include "param/param.h"
2005-02-16 13:04:52 +03:00
2006-10-16 17:06:41 +04:00
# define CHECK_STATUS(tctx, status, correct) \
torture_assert_ntstatus_equal ( tctx , status , correct , \
" Incorrect status " )
2005-02-16 13:04:52 +03:00
2006-10-16 17:06:41 +04:00
# define CHECK_VALUE(tctx, v, correct) \
torture_assert ( tctx , ( v ) = = ( correct ) , \
2006-10-21 10:13:50 +04:00
talloc_asprintf ( tctx , " Incorrect value %s=%d - should be %d \n " , \
2006-10-16 17:06:41 +04:00
# v, v, correct))
2005-02-16 13:04:52 +03:00
2006-10-16 17:06:41 +04:00
# define CHECK_VALUE_UINT64(tctx, v, correct) \
torture_assert ( tctx , ( v ) = = ( correct ) , \
2006-10-21 10:13:50 +04:00
talloc_asprintf ( tctx , " Incorrect value %s=%llu - should be %llu \n " , \
2006-10-16 17:06:41 +04:00
# v, (long long)v, (long long)correct))
2005-10-17 14:55:50 +04:00
2006-10-16 17:06:41 +04:00
# define CHECK_VALUE_STRING(tctx, v, correct) \
torture_assert_str_equal ( tctx , v , correct , " Invalid value " )
2005-10-17 14:55:50 +04:00
2005-10-13 22:24:30 +04:00
# define _NBT_NAME(n,t,s) {\
. name = n , \
. type = t , \
. scope = s \
}
2005-10-14 15:18:01 +04:00
static const char * wrepl_name_type_string ( enum wrepl_name_type type )
{
switch ( type ) {
case WREPL_TYPE_UNIQUE : return " UNIQUE " ;
case WREPL_TYPE_GROUP : return " GROUP " ;
case WREPL_TYPE_SGROUP : return " SGROUP " ;
case WREPL_TYPE_MHOMED : return " MHOMED " ;
}
return " UNKNOWN_TYPE " ;
}
static const char * wrepl_name_state_string ( enum wrepl_name_state state )
{
switch ( state ) {
case WREPL_STATE_ACTIVE : return " ACTIVE " ;
case WREPL_STATE_RELEASED : return " RELEASED " ;
case WREPL_STATE_TOMBSTONE : return " TOMBSTONE " ;
case WREPL_STATE_RESERVED : return " RESERVED " ;
}
return " UNKNOWN_STATE " ;
}
2005-09-12 14:06:22 +04:00
/*
test how assoc_ctx ' s are only usable on the connection
they are created on .
*/
2006-10-16 17:06:41 +04:00
static bool test_assoc_ctx1 ( struct torture_context * tctx )
2005-09-12 14:06:22 +04:00
{
2006-10-16 17:06:41 +04:00
bool ret = true ;
2010-03-05 17:22:10 +03:00
struct tevent_req * subreq ;
2005-09-12 14:06:22 +04:00
struct wrepl_socket * wrepl_socket1 ;
struct wrepl_associate associate1 ;
struct wrepl_socket * wrepl_socket2 ;
struct wrepl_associate associate2 ;
2005-12-13 00:31:42 +03:00
struct wrepl_packet packet ;
struct wrepl_send_ctrl ctrl ;
2005-10-06 18:38:07 +04:00
struct wrepl_packet * rep_packet ;
struct wrepl_associate_stop assoc_stop ;
2005-09-12 14:06:22 +04:00
NTSTATUS status ;
2006-10-16 17:06:41 +04:00
struct nbt_name name ;
const char * address ;
2010-03-05 17:22:10 +03:00
bool ok ;
2005-09-12 14:06:22 +04:00
2006-10-16 17:06:41 +04:00
if ( ! torture_nbt_get_name ( tctx , & name , & address ) )
return false ;
2018-05-04 23:18:16 +03:00
torture_comment ( tctx , " Test if assoc_ctx is only valid on the connection it was created on \n " ) ;
2005-09-12 14:06:22 +04:00
2010-05-09 19:20:01 +04:00
wrepl_socket1 = wrepl_socket_init ( tctx , tctx - > ev ) ;
wrepl_socket2 = wrepl_socket_init ( tctx , tctx - > ev ) ;
2005-10-06 18:38:07 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Setup 2 wrepl connections \n " ) ;
2008-12-18 01:12:10 +03:00
status = wrepl_connect ( wrepl_socket1 , wrepl_best_ip ( tctx - > lp_ctx , address ) , address ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-09-12 14:06:22 +04:00
2008-12-18 01:12:10 +03:00
status = wrepl_connect ( wrepl_socket2 , wrepl_best_ip ( tctx - > lp_ctx , address ) , address ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-09-12 14:06:22 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Send a start association request (conn1) \n " ) ;
2005-09-12 14:06:22 +04:00
status = wrepl_associate ( wrepl_socket1 , & associate1 ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-09-12 14:06:22 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " association context (conn1): 0x%x \n " , associate1 . out . assoc_ctx ) ;
2005-09-12 14:06:22 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Send a start association request (conn2) \n " ) ;
2005-09-12 14:06:22 +04:00
status = wrepl_associate ( wrepl_socket2 , & associate2 ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-09-12 14:06:22 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " association context (conn2): 0x%x \n " , associate2 . out . assoc_ctx ) ;
2005-09-12 14:06:22 +04:00
2018-05-04 23:13:58 +03:00
torture_comment ( tctx , " Send a replication table query, with assoc 1 (conn2), the answer should be on conn1 \n " ) ;
2005-12-13 00:31:42 +03:00
ZERO_STRUCT ( packet ) ;
packet . opcode = WREPL_OPCODE_BITS ;
packet . assoc_ctx = associate1 . out . assoc_ctx ;
packet . mess_type = WREPL_REPLICATION ;
packet . message . replication . command = WREPL_REPL_TABLE_QUERY ;
ZERO_STRUCT ( ctrl ) ;
2006-10-16 17:06:41 +04:00
ctrl . send_only = true ;
2010-03-05 17:22:10 +03:00
subreq = wrepl_request_send ( tctx , tctx - > ev , wrepl_socket2 , & packet , & ctrl ) ;
ok = tevent_req_poll ( subreq , tctx - > ev ) ;
if ( ! ok ) {
CHECK_STATUS ( tctx , NT_STATUS_INTERNAL_ERROR , NT_STATUS_OK ) ;
}
status = wrepl_request_recv ( subreq , tctx , & rep_packet ) ;
TALLOC_FREE ( subreq ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-09-12 14:06:22 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Send a association request (conn2), to make sure the last request was ignored \n " ) ;
2005-09-12 14:06:22 +04:00
status = wrepl_associate ( wrepl_socket2 , & associate2 ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-09-12 14:06:22 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Send a replication table query, with invalid assoc (conn1), receive answer from conn2 \n " ) ;
2010-03-03 13:31:03 +03:00
ZERO_STRUCT ( packet ) ;
packet . opcode = WREPL_OPCODE_BITS ;
packet . assoc_ctx = 0 ;
packet . mess_type = WREPL_REPLICATION ;
packet . message . replication . command = WREPL_REPL_TABLE_QUERY ;
2010-03-05 16:29:36 +03:00
status = wrepl_request ( wrepl_socket1 , tctx , & packet , & rep_packet ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-10-06 18:38:07 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Send a association request (conn1), to make sure the last request was handled correct \n " ) ;
2005-10-06 18:38:07 +04:00
status = wrepl_associate ( wrepl_socket1 , & associate2 ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-10-06 18:38:07 +04:00
assoc_stop . in . assoc_ctx = associate1 . out . assoc_ctx ;
assoc_stop . in . reason = 4 ;
2023-08-03 16:44:41 +03:00
torture_comment ( tctx , " Send a association stop request (conn1), reason: %u \n " , assoc_stop . in . reason ) ;
2005-10-06 18:38:07 +04:00
status = wrepl_associate_stop ( wrepl_socket1 , & assoc_stop ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_END_OF_FILE ) ;
2005-10-06 18:38:07 +04:00
assoc_stop . in . assoc_ctx = associate2 . out . assoc_ctx ;
assoc_stop . in . reason = 0 ;
2023-08-03 16:44:41 +03:00
torture_comment ( tctx , " Send a association stop request (conn2), reason: %u \n " , assoc_stop . in . reason ) ;
2005-10-06 18:38:07 +04:00
status = wrepl_associate_stop ( wrepl_socket2 , & assoc_stop ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-10-06 18:38:07 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Close 2 wrepl connections \n " ) ;
2005-09-12 14:06:22 +04:00
talloc_free ( wrepl_socket1 ) ;
talloc_free ( wrepl_socket2 ) ;
return ret ;
}
2005-09-12 15:42:48 +04:00
/*
test if we always get back the same assoc_ctx
*/
2006-10-16 17:06:41 +04:00
static bool test_assoc_ctx2 ( struct torture_context * tctx )
2005-09-12 15:42:48 +04:00
{
struct wrepl_socket * wrepl_socket ;
struct wrepl_associate associate ;
uint32_t assoc_ctx1 ;
2006-10-16 17:06:41 +04:00
struct nbt_name name ;
2005-09-12 15:42:48 +04:00
NTSTATUS status ;
2006-10-16 17:06:41 +04:00
const char * address ;
if ( ! torture_nbt_get_name ( tctx , & name , & address ) )
return false ;
2005-09-12 15:42:48 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Test if we always get back the same assoc_ctx \n " ) ;
2005-09-12 15:42:48 +04:00
2010-05-09 19:20:01 +04:00
wrepl_socket = wrepl_socket_init ( tctx , tctx - > ev ) ;
2005-09-12 15:42:48 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Setup wrepl connections \n " ) ;
2008-12-18 01:12:10 +03:00
status = wrepl_connect ( wrepl_socket , wrepl_best_ip ( tctx - > lp_ctx , address ) , address ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-09-12 15:42:48 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Send 1st start association request \n " ) ;
2005-09-12 15:42:48 +04:00
status = wrepl_associate ( wrepl_socket , & associate ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-09-12 15:42:48 +04:00
assoc_ctx1 = associate . out . assoc_ctx ;
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " 1st association context: 0x%x \n " , associate . out . assoc_ctx ) ;
2005-09-12 15:42:48 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Send 2nd start association request \n " ) ;
2005-09-12 15:42:48 +04:00
status = wrepl_associate ( wrepl_socket , & associate ) ;
2006-10-16 17:06:41 +04:00
torture_assert_ntstatus_ok ( tctx , status , " 2nd start association failed " ) ;
torture_assert ( tctx , associate . out . assoc_ctx = = assoc_ctx1 ,
" Different context returned " ) ;
torture_comment ( tctx , " 2nd association context: 0x%x \n " , associate . out . assoc_ctx ) ;
2005-09-12 15:42:48 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Send 3rd start association request \n " ) ;
2005-09-12 15:42:48 +04:00
status = wrepl_associate ( wrepl_socket , & associate ) ;
2006-10-16 17:06:41 +04:00
torture_assert ( tctx , associate . out . assoc_ctx = = assoc_ctx1 ,
" Different context returned " ) ;
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
torture_comment ( tctx , " 3rd association context: 0x%x \n " , associate . out . assoc_ctx ) ;
2005-09-12 15:42:48 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Close wrepl connections \n " ) ;
2005-09-12 15:42:48 +04:00
talloc_free ( wrepl_socket ) ;
2006-10-16 17:06:41 +04:00
return true ;
2005-09-12 15:42:48 +04:00
}
2005-10-13 20:38:52 +04:00
/*
display a replication entry
*/
2007-09-07 19:08:14 +04:00
static void display_entry ( struct torture_context * tctx , struct wrepl_name * name )
2005-10-13 20:38:52 +04:00
{
int i ;
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " %s \n " , nbt_name_string ( tctx , & name - > name ) ) ;
torture_comment ( tctx , " \t TYPE:%u STATE:%u NODE:%u STATIC:%u VERSION_ID: %llu \n " ,
2005-11-30 05:08:15 +03:00
name - > type , name - > state , name - > node , name - > is_static , ( long long ) name - > version_id ) ;
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " \t RAW_FLAGS: 0x%08X OWNER: %-15s \n " ,
2005-10-13 20:38:52 +04:00
name - > raw_flags , name - > owner ) ;
for ( i = 0 ; i < name - > num_addresses ; i + + ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " \t ADDR: %-15s OWNER: %-15s \n " ,
2005-10-13 20:38:52 +04:00
name - > addresses [ i ] . address , name - > addresses [ i ] . owner ) ;
}
}
/*
test a full replication dump from a WINS server
*/
2006-10-16 17:06:41 +04:00
static bool test_wins_replication ( struct torture_context * tctx )
2005-10-13 20:38:52 +04:00
{
struct wrepl_socket * wrepl_socket ;
NTSTATUS status ;
int i , j ;
struct wrepl_associate associate ;
struct wrepl_pull_table pull_table ;
struct wrepl_pull_names pull_names ;
2006-10-16 17:06:41 +04:00
struct nbt_name name ;
const char * address ;
2005-10-13 20:38:52 +04:00
2006-10-16 17:06:41 +04:00
if ( ! torture_nbt_get_name ( tctx , & name , & address ) )
return false ;
2005-10-13 20:38:52 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Test one pull replication cycle \n " ) ;
2010-05-09 19:20:01 +04:00
wrepl_socket = wrepl_socket_init ( tctx , tctx - > ev ) ;
2005-10-13 20:38:52 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Setup wrepl connections \n " ) ;
2008-12-18 01:12:10 +03:00
status = wrepl_connect ( wrepl_socket , wrepl_best_ip ( tctx - > lp_ctx , address ) , address ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-10-13 20:38:52 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Send a start association request \n " ) ;
2005-10-13 20:38:52 +04:00
status = wrepl_associate ( wrepl_socket , & associate ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-10-13 20:38:52 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " association context: 0x%x \n " , associate . out . assoc_ctx ) ;
2005-10-13 20:38:52 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Send a replication table query \n " ) ;
2005-10-13 20:38:52 +04:00
pull_table . in . assoc_ctx = associate . out . assoc_ctx ;
2006-10-16 17:06:41 +04:00
status = wrepl_pull_table ( wrepl_socket , tctx , & pull_table ) ;
2005-10-13 20:38:52 +04:00
if ( NT_STATUS_EQUAL ( NT_STATUS_NETWORK_ACCESS_DENIED , status ) ) {
2010-03-05 16:34:36 +03:00
struct wrepl_associate_stop assoc_stop ;
2005-10-13 20:38:52 +04:00
2010-03-05 16:34:36 +03:00
assoc_stop . in . assoc_ctx = associate . out . assoc_ctx ;
assoc_stop . in . reason = 0 ;
2005-10-13 20:38:52 +04:00
2010-03-05 16:34:36 +03:00
wrepl_associate_stop ( wrepl_socket , & assoc_stop ) ;
2005-10-13 20:38:52 +04:00
2006-10-16 17:06:41 +04:00
torture_fail ( tctx , " We are not a valid pull partner for the server " ) ;
2005-10-13 20:38:52 +04:00
}
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-10-13 20:38:52 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Found %d replication partners \n " , pull_table . out . num_partners ) ;
2005-10-13 20:38:52 +04:00
for ( i = 0 ; i < pull_table . out . num_partners ; i + + ) {
struct wrepl_wins_owner * partner = & pull_table . out . partners [ i ] ;
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " %s max_version=%6llu min_version=%6llu type=%d \n " ,
2005-10-13 20:38:52 +04:00
partner - > address ,
2005-11-30 05:08:15 +03:00
( long long ) partner - > max_version ,
( long long ) partner - > min_version ,
2005-10-13 20:38:52 +04:00
partner - > type ) ;
pull_names . in . assoc_ctx = associate . out . assoc_ctx ;
pull_names . in . partner = * partner ;
2006-10-16 17:06:41 +04:00
status = wrepl_pull_names ( wrepl_socket , tctx , & pull_names ) ;
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-10-13 20:38:52 +04:00
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Received %d names \n " , pull_names . out . num_names ) ;
2005-10-13 20:38:52 +04:00
for ( j = 0 ; j < pull_names . out . num_names ; j + + ) {
2006-10-16 17:06:41 +04:00
display_entry ( tctx , & pull_names . out . names [ j ] ) ;
2005-10-13 20:38:52 +04:00
}
}
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Close wrepl connections \n " ) ;
2005-10-13 20:38:52 +04:00
talloc_free ( wrepl_socket ) ;
2006-10-16 17:06:41 +04:00
return true ;
2005-10-13 20:38:52 +04:00
}
2005-10-13 20:27:05 +04:00
struct test_wrepl_conflict_conn {
const char * address ;
struct wrepl_socket * pull ;
uint32_t pull_assoc ;
# define TEST_OWNER_A_ADDRESS "127.65.65.1"
# define TEST_ADDRESS_A_PREFIX "127.0.65"
# define TEST_OWNER_B_ADDRESS "127.66.66.1"
# define TEST_ADDRESS_B_PREFIX "127.0.66"
2005-11-21 15:05:46 +03:00
# define TEST_OWNER_X_ADDRESS "127.88.88.1"
# define TEST_ADDRESS_X_PREFIX "127.0.88"
2005-10-13 20:27:05 +04:00
2005-11-21 15:05:46 +03:00
struct wrepl_wins_owner a , b , c , x ;
2005-10-23 18:18:03 +04:00
2006-01-10 01:12:53 +03:00
struct socket_address * myaddr ;
struct socket_address * myaddr2 ;
2005-10-23 18:18:03 +04:00
struct nbt_name_socket * nbtsock ;
2005-11-03 16:13:45 +03:00
struct nbt_name_socket * nbtsock2 ;
2005-10-31 13:14:05 +03:00
struct nbt_name_socket * nbtsock_srv ;
2005-11-03 16:13:45 +03:00
struct nbt_name_socket * nbtsock_srv2 ;
2005-10-23 18:18:03 +04:00
2005-11-02 18:56:24 +03:00
uint32_t addresses_best_num ;
struct wrepl_ip * addresses_best ;
2005-11-03 16:13:45 +03:00
uint32_t addresses_best2_num ;
struct wrepl_ip * addresses_best2 ;
2005-11-02 18:56:24 +03:00
uint32_t addresses_all_num ;
struct wrepl_ip * addresses_all ;
2005-11-03 16:13:45 +03:00
uint32_t addresses_mhomed_num ;
struct wrepl_ip * addresses_mhomed ;
2005-10-13 20:27:05 +04:00
} ;
static const struct wrepl_ip addresses_A_1 [ ] = {
{
. owner = TEST_OWNER_A_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .1 "
}
} ;
static const struct wrepl_ip addresses_A_2 [ ] = {
{
. owner = TEST_OWNER_A_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .2 "
}
} ;
2005-10-17 16:40:45 +04:00
static const struct wrepl_ip addresses_A_3_4 [ ] = {
{
. owner = TEST_OWNER_A_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_A_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .4 "
}
} ;
2005-11-21 15:05:46 +03:00
static const struct wrepl_ip addresses_A_3_4_X_3_4 [ ] = {
{
. owner = TEST_OWNER_A_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_A_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .4 "
} ,
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .4 "
}
} ;
2005-11-25 13:11:01 +03:00
static const struct wrepl_ip addresses_A_3_4_B_3_4 [ ] = {
{
. owner = TEST_OWNER_A_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_A_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .4 "
} ,
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_B_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_B_PREFIX " .4 "
}
} ;
2005-11-21 15:05:46 +03:00
static const struct wrepl_ip addresses_A_3_4_OWNER_B [ ] = {
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .4 "
}
} ;
static const struct wrepl_ip addresses_A_3_4_X_3_4_OWNER_B [ ] = {
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .4 "
} ,
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .4 "
}
} ;
2016-02-05 13:36:15 +03:00
/*
2005-11-21 15:05:46 +03:00
static const struct wrepl_ip addresses_A_3_4_X_1_2 [ ] = {
{
. owner = TEST_OWNER_A_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_A_ADDRESS ,
. ip = TEST_ADDRESS_A_PREFIX " .4 "
} ,
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .1 "
} ,
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .2 "
}
} ;
2016-02-05 13:36:15 +03:00
*/
2005-10-13 22:24:30 +04:00
static const struct wrepl_ip addresses_B_1 [ ] = {
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_B_PREFIX " .1 "
}
} ;
2016-02-05 13:36:15 +03:00
/*
2005-10-13 22:24:30 +04:00
static const struct wrepl_ip addresses_B_2 [ ] = {
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_B_PREFIX " .2 "
}
} ;
2016-02-05 13:36:15 +03:00
*/
2005-10-17 16:40:45 +04:00
static const struct wrepl_ip addresses_B_3_4 [ ] = {
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_B_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_B_PREFIX " .4 "
}
} ;
2005-11-21 15:05:46 +03:00
static const struct wrepl_ip addresses_B_3_4_X_3_4 [ ] = {
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_B_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_B_PREFIX " .4 "
} ,
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .4 "
}
} ;
static const struct wrepl_ip addresses_B_3_4_X_1_2 [ ] = {
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_B_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_B_ADDRESS ,
. ip = TEST_ADDRESS_B_PREFIX " .4 "
} ,
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .1 "
} ,
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .2 "
}
} ;
2005-10-13 22:24:30 +04:00
2016-02-05 13:36:15 +03:00
/*
2005-11-24 12:22:38 +03:00
static const struct wrepl_ip addresses_X_1_2 [ ] = {
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .1 "
} ,
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .2 "
}
} ;
2016-02-05 13:36:15 +03:00
*/
2005-11-24 12:22:38 +03:00
static const struct wrepl_ip addresses_X_3_4 [ ] = {
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .3 "
} ,
{
. owner = TEST_OWNER_X_ADDRESS ,
. ip = TEST_ADDRESS_X_PREFIX " .4 "
}
} ;
2007-09-07 19:08:14 +04:00
static struct test_wrepl_conflict_conn * test_create_conflict_ctx (
struct torture_context * tctx , const char * address )
2005-10-13 20:27:05 +04:00
{
struct test_wrepl_conflict_conn * ctx ;
struct wrepl_associate associate ;
struct wrepl_pull_table pull_table ;
2006-01-10 01:12:53 +03:00
struct socket_address * nbt_srv_addr ;
2005-10-13 20:27:05 +04:00
NTSTATUS status ;
uint32_t i ;
2019-03-26 08:06:16 +03:00
uint32_t num_ifaces ;
2007-12-12 00:23:14 +03:00
struct interface * ifaces ;
2005-10-13 20:27:05 +04:00
2006-10-16 17:06:41 +04:00
ctx = talloc_zero ( tctx , struct test_wrepl_conflict_conn ) ;
2005-10-13 20:27:05 +04:00
if ( ! ctx ) return NULL ;
ctx - > address = address ;
2010-05-09 19:20:01 +04:00
ctx - > pull = wrepl_socket_init ( ctx , tctx - > ev ) ;
2005-10-13 20:27:05 +04:00
if ( ! ctx - > pull ) return NULL ;
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Setup wrepl conflict pull connection \n " ) ;
2008-12-18 01:12:10 +03:00
status = wrepl_connect ( ctx - > pull , wrepl_best_ip ( tctx - > lp_ctx , ctx - > address ) , ctx - > address ) ;
2005-10-13 20:27:05 +04:00
if ( ! NT_STATUS_IS_OK ( status ) ) return NULL ;
status = wrepl_associate ( ctx - > pull , & associate ) ;
if ( ! NT_STATUS_IS_OK ( status ) ) return NULL ;
ctx - > pull_assoc = associate . out . assoc_ctx ;
ctx - > a . address = TEST_OWNER_A_ADDRESS ;
ctx - > a . max_version = 0 ;
ctx - > a . min_version = 0 ;
ctx - > a . type = 1 ;
ctx - > b . address = TEST_OWNER_B_ADDRESS ;
ctx - > b . max_version = 0 ;
ctx - > b . min_version = 0 ;
ctx - > b . type = 1 ;
2005-11-21 15:05:46 +03:00
ctx - > x . address = TEST_OWNER_X_ADDRESS ;
ctx - > x . max_version = 0 ;
ctx - > x . min_version = 0 ;
ctx - > x . type = 1 ;
2005-10-19 10:13:53 +04:00
ctx - > c . address = address ;
ctx - > c . max_version = 0 ;
ctx - > c . min_version = 0 ;
ctx - > c . type = 1 ;
2005-10-13 20:27:05 +04:00
pull_table . in . assoc_ctx = ctx - > pull_assoc ;
status = wrepl_pull_table ( ctx - > pull , ctx - > pull , & pull_table ) ;
if ( ! NT_STATUS_IS_OK ( status ) ) return NULL ;
for ( i = 0 ; i < pull_table . out . num_partners ; i + + ) {
if ( strcmp ( TEST_OWNER_A_ADDRESS , pull_table . out . partners [ i ] . address ) = = 0 ) {
ctx - > a . max_version = pull_table . out . partners [ i ] . max_version ;
ctx - > a . min_version = pull_table . out . partners [ i ] . min_version ;
}
if ( strcmp ( TEST_OWNER_B_ADDRESS , pull_table . out . partners [ i ] . address ) = = 0 ) {
ctx - > b . max_version = pull_table . out . partners [ i ] . max_version ;
2005-10-19 10:13:53 +04:00
ctx - > b . min_version = pull_table . out . partners [ i ] . min_version ;
}
2005-11-21 15:05:46 +03:00
if ( strcmp ( TEST_OWNER_X_ADDRESS , pull_table . out . partners [ i ] . address ) = = 0 ) {
ctx - > x . max_version = pull_table . out . partners [ i ] . max_version ;
ctx - > x . min_version = pull_table . out . partners [ i ] . min_version ;
}
2005-10-19 10:13:53 +04:00
if ( strcmp ( address , pull_table . out . partners [ i ] . address ) = = 0 ) {
ctx - > c . max_version = pull_table . out . partners [ i ] . max_version ;
ctx - > c . min_version = pull_table . out . partners [ i ] . min_version ;
2005-10-13 20:27:05 +04:00
}
}
talloc_free ( pull_table . out . partners ) ;
2010-05-09 19:20:01 +04:00
ctx - > nbtsock = nbt_name_socket_init ( ctx , tctx - > ev ) ;
2006-01-10 01:12:53 +03:00
if ( ! ctx - > nbtsock ) return NULL ;
2011-06-02 09:40:28 +04:00
load_interface_list ( tctx , tctx - > lp_ctx , & ifaces ) ;
2007-12-12 00:23:14 +03:00
2011-05-02 09:57:19 +04:00
ctx - > myaddr = socket_address_from_strings ( tctx , ctx - > nbtsock - > sock - > backend_name , iface_list_best_ip ( ifaces , address ) , 0 ) ;
2005-10-31 13:14:05 +03:00
if ( ! ctx - > myaddr ) return NULL ;
2011-05-02 09:57:19 +04:00
for ( i = 0 ; i < iface_list_count ( ifaces ) ; i + + ) {
2019-03-26 08:06:16 +03:00
if ( ! iface_list_n_is_v4 ( ifaces , i ) ) continue ;
2011-05-02 09:57:19 +04:00
if ( strcmp ( ctx - > myaddr - > addr , iface_list_n_ip ( ifaces , i ) ) = = 0 ) continue ;
ctx - > myaddr2 = socket_address_from_strings ( tctx , ctx - > nbtsock - > sock - > backend_name , iface_list_n_ip ( ifaces , i ) , 0 ) ;
2005-11-03 16:13:45 +03:00
if ( ! ctx - > myaddr2 ) return NULL ;
break ;
}
2006-01-10 01:12:53 +03:00
status = socket_listen ( ctx - > nbtsock - > sock , ctx - > myaddr , 0 , 0 ) ;
2005-10-31 13:14:05 +03:00
if ( ! NT_STATUS_IS_OK ( status ) ) return NULL ;
2005-10-23 18:18:03 +04:00
2010-05-09 19:20:01 +04:00
ctx - > nbtsock_srv = nbt_name_socket_init ( ctx , tctx - > ev ) ;
2005-10-31 13:14:05 +03:00
if ( ! ctx - > nbtsock_srv ) return NULL ;
2006-01-10 01:12:53 +03:00
/* Make a port 137 version of ctx->myaddr */
2010-07-16 08:32:42 +04:00
nbt_srv_addr = socket_address_from_strings ( tctx , ctx - > nbtsock_srv - > sock - > backend_name , ctx - > myaddr - > addr , lpcfg_nbt_port ( tctx - > lp_ctx ) ) ;
2006-01-10 01:12:53 +03:00
if ( ! nbt_srv_addr ) return NULL ;
2023-09-06 02:33:59 +03:00
/* And if possible, bind to it. This won't work unless we are root or in socketwrapper */
2006-01-10 01:12:53 +03:00
status = socket_listen ( ctx - > nbtsock_srv - > sock , nbt_srv_addr , 0 , 0 ) ;
talloc_free ( nbt_srv_addr ) ;
2005-10-23 18:18:03 +04:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2006-01-10 01:12:53 +03:00
/* this isn't fatal */
2005-10-31 13:14:05 +03:00
talloc_free ( ctx - > nbtsock_srv ) ;
ctx - > nbtsock_srv = NULL ;
2005-10-23 18:18:03 +04:00
}
2005-11-19 13:40:31 +03:00
if ( ctx - > myaddr2 & & ctx - > nbtsock_srv ) {
2010-05-09 19:20:01 +04:00
ctx - > nbtsock2 = nbt_name_socket_init ( ctx , tctx - > ev ) ;
2005-11-03 16:13:45 +03:00
if ( ! ctx - > nbtsock2 ) return NULL ;
2006-01-10 01:12:53 +03:00
status = socket_listen ( ctx - > nbtsock2 - > sock , ctx - > myaddr2 , 0 , 0 ) ;
2005-11-03 16:13:45 +03:00
if ( ! NT_STATUS_IS_OK ( status ) ) return NULL ;
2010-05-09 19:20:01 +04:00
ctx - > nbtsock_srv2 = nbt_name_socket_init ( ctx , ctx - > nbtsock_srv - > event_ctx ) ;
2005-11-03 16:13:45 +03:00
if ( ! ctx - > nbtsock_srv2 ) return NULL ;
2006-01-10 01:12:53 +03:00
/* Make a port 137 version of ctx->myaddr2 */
2006-10-16 17:06:41 +04:00
nbt_srv_addr = socket_address_from_strings ( tctx ,
2006-01-10 01:12:53 +03:00
ctx - > nbtsock_srv - > sock - > backend_name ,
2007-09-28 05:17:46 +04:00
ctx - > myaddr2 - > addr ,
2010-07-16 08:32:42 +04:00
lpcfg_nbt_port ( tctx - > lp_ctx ) ) ;
2006-01-10 01:12:53 +03:00
if ( ! nbt_srv_addr ) return NULL ;
2023-09-06 02:33:59 +03:00
/* And if possible, bind to it. This won't work unless we are root or in socketwrapper */
2006-01-10 01:12:53 +03:00
status = socket_listen ( ctx - > nbtsock_srv2 - > sock , ctx - > myaddr2 , 0 , 0 ) ;
talloc_free ( nbt_srv_addr ) ;
2005-11-03 16:13:45 +03:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2006-01-10 01:12:53 +03:00
/* this isn't fatal */
2005-11-03 16:13:45 +03:00
talloc_free ( ctx - > nbtsock_srv2 ) ;
ctx - > nbtsock_srv2 = NULL ;
}
}
2005-11-02 18:56:24 +03:00
ctx - > addresses_best_num = 1 ;
ctx - > addresses_best = talloc_array ( ctx , struct wrepl_ip , ctx - > addresses_best_num ) ;
if ( ! ctx - > addresses_best ) return NULL ;
2005-11-03 16:13:45 +03:00
ctx - > addresses_best [ 0 ] . owner = ctx - > b . address ;
2006-01-10 01:12:53 +03:00
ctx - > addresses_best [ 0 ] . ip = ctx - > myaddr - > addr ;
2005-11-02 18:56:24 +03:00
2019-03-26 08:06:16 +03:00
num_ifaces = iface_list_count ( ifaces ) ;
ctx - > addresses_all = talloc_array ( ctx , struct wrepl_ip , num_ifaces ) ;
ctx - > addresses_all_num = 0 ;
2005-11-02 18:56:24 +03:00
if ( ! ctx - > addresses_all ) return NULL ;
2019-03-26 08:06:16 +03:00
for ( i = 0 ; i < num_ifaces ; i + + ) {
if ( ! iface_list_n_is_v4 ( ifaces , i ) ) continue ;
2005-11-03 16:13:45 +03:00
ctx - > addresses_all [ i ] . owner = ctx - > b . address ;
2011-05-02 09:57:19 +04:00
ctx - > addresses_all [ i ] . ip = talloc_strdup ( ctx - > addresses_all , iface_list_n_ip ( ifaces , i ) ) ;
2019-03-26 08:06:16 +03:00
ctx - > addresses_all_num + + ;
2005-11-02 18:56:24 +03:00
if ( ! ctx - > addresses_all [ i ] . ip ) return NULL ;
}
2005-10-23 18:18:03 +04:00
2005-11-03 16:13:45 +03:00
if ( ctx - > nbtsock_srv2 ) {
ctx - > addresses_best2_num = 1 ;
ctx - > addresses_best2 = talloc_array ( ctx , struct wrepl_ip , ctx - > addresses_best2_num ) ;
if ( ! ctx - > addresses_best2 ) return NULL ;
ctx - > addresses_best2 [ 0 ] . owner = ctx - > b . address ;
2006-01-10 01:12:53 +03:00
ctx - > addresses_best2 [ 0 ] . ip = ctx - > myaddr2 - > addr ;
2005-11-03 16:13:45 +03:00
ctx - > addresses_mhomed_num = 2 ;
ctx - > addresses_mhomed = talloc_array ( ctx , struct wrepl_ip , ctx - > addresses_mhomed_num ) ;
if ( ! ctx - > addresses_mhomed ) return NULL ;
ctx - > addresses_mhomed [ 0 ] . owner = ctx - > b . address ;
2006-01-10 01:12:53 +03:00
ctx - > addresses_mhomed [ 0 ] . ip = ctx - > myaddr - > addr ;
2005-11-03 16:13:45 +03:00
ctx - > addresses_mhomed [ 1 ] . owner = ctx - > b . address ;
2006-01-10 01:12:53 +03:00
ctx - > addresses_mhomed [ 1 ] . ip = ctx - > myaddr2 - > addr ;
2005-11-03 16:13:45 +03:00
}
2005-10-13 20:27:05 +04:00
return ctx ;
}
2006-10-16 17:06:41 +04:00
static bool test_wrepl_update_one ( struct torture_context * tctx ,
struct test_wrepl_conflict_conn * ctx ,
2005-10-13 22:24:30 +04:00
const struct wrepl_wins_owner * owner ,
const struct wrepl_wins_name * name )
2005-10-13 20:27:05 +04:00
{
struct wrepl_socket * wrepl_socket ;
struct wrepl_associate associate ;
struct wrepl_packet update_packet , repl_send ;
struct wrepl_table * update ;
struct wrepl_wins_owner wrepl_wins_owners [ 1 ] ;
struct wrepl_packet * repl_recv ;
struct wrepl_send_reply * send_reply ;
struct wrepl_wins_name wrepl_wins_names [ 1 ] ;
uint32_t assoc_ctx ;
NTSTATUS status ;
2010-05-09 19:20:01 +04:00
wrepl_socket = wrepl_socket_init ( ctx , tctx - > ev ) ;
2005-10-13 20:27:05 +04:00
2008-12-18 01:12:10 +03:00
status = wrepl_connect ( wrepl_socket , wrepl_best_ip ( tctx - > lp_ctx , ctx - > address ) , ctx - > address ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-10-13 20:27:05 +04:00
status = wrepl_associate ( wrepl_socket , & associate ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-10-13 20:27:05 +04:00
assoc_ctx = associate . out . assoc_ctx ;
/* now send a WREPL_REPL_UPDATE message */
ZERO_STRUCT ( update_packet ) ;
update_packet . opcode = WREPL_OPCODE_BITS ;
update_packet . assoc_ctx = assoc_ctx ;
update_packet . mess_type = WREPL_REPLICATION ;
update_packet . message . replication . command = WREPL_REPL_UPDATE ;
update = & update_packet . message . replication . info . table ;
update - > partner_count = ARRAY_SIZE ( wrepl_wins_owners ) ;
update - > partners = wrepl_wins_owners ;
update - > initiator = " 0.0.0.0 " ;
2005-10-13 22:24:30 +04:00
wrepl_wins_owners [ 0 ] = * owner ;
2005-10-13 20:27:05 +04:00
status = wrepl_request ( wrepl_socket , wrepl_socket ,
& update_packet , & repl_recv ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
CHECK_VALUE ( tctx , repl_recv - > mess_type , WREPL_REPLICATION ) ;
CHECK_VALUE ( tctx , repl_recv - > message . replication . command , WREPL_REPL_SEND_REQUEST ) ;
2005-10-13 20:27:05 +04:00
ZERO_STRUCT ( repl_send ) ;
repl_send . opcode = WREPL_OPCODE_BITS ;
repl_send . assoc_ctx = assoc_ctx ;
repl_send . mess_type = WREPL_REPLICATION ;
repl_send . message . replication . command = WREPL_REPL_SEND_REPLY ;
send_reply = & repl_send . message . replication . info . reply ;
send_reply - > num_names = ARRAY_SIZE ( wrepl_wins_names ) ;
send_reply - > names = wrepl_wins_names ;
wrepl_wins_names [ 0 ] = * name ;
status = wrepl_request ( wrepl_socket , wrepl_socket ,
& repl_send , & repl_recv ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
CHECK_VALUE ( tctx , repl_recv - > mess_type , WREPL_STOP_ASSOCIATION ) ;
CHECK_VALUE ( tctx , repl_recv - > message . stop . reason , 0 ) ;
2005-10-13 20:27:05 +04:00
talloc_free ( wrepl_socket ) ;
2006-10-16 17:06:41 +04:00
return true ;
2005-10-13 20:27:05 +04:00
}
2006-10-16 17:06:41 +04:00
static bool test_wrepl_is_applied ( struct torture_context * tctx ,
struct test_wrepl_conflict_conn * ctx ,
2005-10-13 22:24:30 +04:00
const struct wrepl_wins_owner * owner ,
const struct wrepl_wins_name * name ,
2006-10-16 17:06:41 +04:00
bool expected )
2005-10-13 20:27:05 +04:00
{
NTSTATUS status ;
struct wrepl_pull_names pull_names ;
2005-10-17 14:55:50 +04:00
struct wrepl_name * names ;
2005-10-13 20:27:05 +04:00
pull_names . in . assoc_ctx = ctx - > pull_assoc ;
2005-10-13 22:24:30 +04:00
pull_names . in . partner = * owner ;
pull_names . in . partner . min_version = pull_names . in . partner . max_version ;
2005-10-13 20:27:05 +04:00
status = wrepl_pull_names ( ctx - > pull , ctx - > pull , & pull_names ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2006-10-21 13:38:16 +04:00
torture_assert ( tctx , pull_names . out . num_names = = ( expected ? 1 : 0 ) ,
2006-10-21 10:13:50 +04:00
talloc_asprintf ( tctx , " Invalid number of records returned - expected %d got %d " , expected , pull_names . out . num_names ) ) ;
2005-10-13 20:27:05 +04:00
2005-10-17 14:55:50 +04:00
names = pull_names . out . names ;
if ( expected ) {
uint32_t flags = WREPL_NAME_FLAGS ( names [ 0 ] . type ,
names [ 0 ] . state ,
names [ 0 ] . node ,
names [ 0 ] . is_static ) ;
2010-01-30 12:50:33 +03:00
char * expected_scope = NULL ;
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , names [ 0 ] . name . type , name - > name - > type ) ;
CHECK_VALUE_STRING ( tctx , names [ 0 ] . name . name , name - > name - > name ) ;
2010-01-30 12:50:33 +03:00
if ( names [ 0 ] . name . scope ) {
expected_scope = talloc_strndup ( tctx ,
name - > name - > scope ,
237 ) ;
}
CHECK_VALUE_STRING ( tctx , names [ 0 ] . name . scope , expected_scope ) ;
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , flags , name - > flags ) ;
CHECK_VALUE_UINT64 ( tctx , names [ 0 ] . version_id , name - > id ) ;
2005-10-18 18:58:51 +04:00
if ( flags & 2 ) {
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , names [ 0 ] . num_addresses ,
2005-10-18 18:58:51 +04:00
name - > addresses . addresses . num_ips ) ;
} else {
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , names [ 0 ] . num_addresses , 1 ) ;
CHECK_VALUE_STRING ( tctx , names [ 0 ] . addresses [ 0 ] . address ,
2005-10-18 18:58:51 +04:00
name - > addresses . ip ) ;
}
2005-10-17 14:55:50 +04:00
}
2005-10-13 20:27:05 +04:00
talloc_free ( pull_names . out . names ) ;
2006-10-16 17:06:41 +04:00
return true ;
2005-10-13 20:27:05 +04:00
}
2006-10-16 17:06:41 +04:00
static bool test_wrepl_mhomed_merged ( struct torture_context * tctx ,
struct test_wrepl_conflict_conn * ctx ,
2005-11-03 16:13:45 +03:00
const struct wrepl_wins_owner * owner1 ,
uint32_t num_ips1 , const struct wrepl_ip * ips1 ,
const struct wrepl_wins_owner * owner2 ,
uint32_t num_ips2 , const struct wrepl_ip * ips2 ,
const struct wrepl_wins_name * name2 )
{
NTSTATUS status ;
struct wrepl_pull_names pull_names ;
struct wrepl_name * names ;
uint32_t flags ;
uint32_t i , j ;
uint32_t num_ips = num_ips1 + num_ips2 ;
for ( i = 0 ; i < num_ips2 ; i + + ) {
for ( j = 0 ; j < num_ips1 ; j + + ) {
if ( strcmp ( ips2 [ i ] . ip , ips1 [ j ] . ip ) = = 0 ) {
num_ips - - ;
break ;
}
}
}
pull_names . in . assoc_ctx = ctx - > pull_assoc ;
pull_names . in . partner = * owner2 ;
pull_names . in . partner . min_version = pull_names . in . partner . max_version ;
status = wrepl_pull_names ( ctx - > pull , ctx - > pull , & pull_names ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
CHECK_VALUE ( tctx , pull_names . out . num_names , 1 ) ;
2005-11-03 16:13:45 +03:00
names = pull_names . out . names ;
flags = WREPL_NAME_FLAGS ( names [ 0 ] . type ,
names [ 0 ] . state ,
names [ 0 ] . node ,
names [ 0 ] . is_static ) ;
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , names [ 0 ] . name . type , name2 - > name - > type ) ;
CHECK_VALUE_STRING ( tctx , names [ 0 ] . name . name , name2 - > name - > name ) ;
CHECK_VALUE_STRING ( tctx , names [ 0 ] . name . scope , name2 - > name - > scope ) ;
CHECK_VALUE ( tctx , flags , name2 - > flags | WREPL_TYPE_MHOMED ) ;
CHECK_VALUE_UINT64 ( tctx , names [ 0 ] . version_id , name2 - > id ) ;
2005-11-03 16:13:45 +03:00
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , names [ 0 ] . num_addresses , num_ips ) ;
2005-11-03 16:13:45 +03:00
for ( i = 0 ; i < names [ 0 ] . num_addresses ; i + + ) {
const char * addr = names [ 0 ] . addresses [ i ] . address ;
const char * owner = names [ 0 ] . addresses [ i ] . owner ;
2006-10-16 17:06:41 +04:00
bool found = false ;
2005-11-03 16:13:45 +03:00
for ( j = 0 ; j < num_ips2 ; j + + ) {
if ( strcmp ( addr , ips2 [ j ] . ip ) = = 0 ) {
2006-10-16 17:06:41 +04:00
found = true ;
CHECK_VALUE_STRING ( tctx , owner , owner2 - > address ) ;
2005-11-03 16:13:45 +03:00
break ;
}
}
if ( found ) continue ;
for ( j = 0 ; j < num_ips1 ; j + + ) {
if ( strcmp ( addr , ips1 [ j ] . ip ) = = 0 ) {
2006-10-16 17:06:41 +04:00
found = true ;
CHECK_VALUE_STRING ( tctx , owner , owner1 - > address ) ;
2005-11-03 16:13:45 +03:00
break ;
}
}
if ( found ) continue ;
2006-10-16 17:06:41 +04:00
CHECK_VALUE_STRING ( tctx , addr , " not found in address list " ) ;
2005-11-03 16:13:45 +03:00
}
talloc_free ( pull_names . out . names ) ;
2006-10-16 17:06:41 +04:00
return true ;
2005-11-03 16:13:45 +03:00
}
2006-10-16 17:06:41 +04:00
static bool test_wrepl_sgroup_merged ( struct torture_context * tctx ,
struct test_wrepl_conflict_conn * ctx ,
2005-11-21 15:05:46 +03:00
struct wrepl_wins_owner * merge_owner ,
2005-11-11 11:56:38 +03:00
struct wrepl_wins_owner * owner1 ,
2005-11-11 11:02:50 +03:00
uint32_t num_ips1 , const struct wrepl_ip * ips1 ,
2005-11-11 11:56:38 +03:00
struct wrepl_wins_owner * owner2 ,
2005-11-11 11:02:50 +03:00
uint32_t num_ips2 , const struct wrepl_ip * ips2 ,
const struct wrepl_wins_name * name2 )
{
NTSTATUS status ;
struct wrepl_pull_names pull_names ;
struct wrepl_name * names ;
struct wrepl_name * name = NULL ;
uint32_t flags ;
uint32_t i , j ;
uint32_t num_ips = num_ips1 + num_ips2 ;
2005-11-21 15:05:46 +03:00
if ( ! merge_owner ) {
merge_owner = & ctx - > c ;
}
for ( i = 0 ; i < num_ips1 ; i + + ) {
if ( owner1 ! = & ctx - > c & & strcmp ( ips1 [ i ] . owner , owner2 - > address ) = = 0 ) {
num_ips - - ;
continue ;
}
for ( j = 0 ; j < num_ips2 ; j + + ) {
if ( strcmp ( ips1 [ i ] . ip , ips2 [ j ] . ip ) = = 0 ) {
2005-11-11 11:02:50 +03:00
num_ips - - ;
break ;
}
2005-11-21 15:05:46 +03:00
}
2005-11-11 11:02:50 +03:00
}
2005-11-21 15:05:46 +03:00
2005-11-11 11:02:50 +03:00
pull_names . in . assoc_ctx = ctx - > pull_assoc ;
2005-11-21 15:05:46 +03:00
pull_names . in . partner = * merge_owner ;
2005-11-11 11:02:50 +03:00
pull_names . in . partner . min_version = pull_names . in . partner . max_version ;
pull_names . in . partner . max_version = 0 ;
status = wrepl_pull_names ( ctx - > pull , ctx - > pull , & pull_names ) ;
2006-10-16 17:06:41 +04:00
CHECK_STATUS ( tctx , status , NT_STATUS_OK ) ;
2005-11-11 11:02:50 +03:00
names = pull_names . out . names ;
for ( i = 0 ; i < pull_names . out . num_names ; i + + ) {
if ( names [ i ] . name . type ! = name2 - > name - > type ) continue ;
if ( ! names [ i ] . name . name ) continue ;
if ( strcmp ( names [ i ] . name . name , name2 - > name - > name ) ! = 0 ) continue ;
if ( names [ i ] . name . scope ) continue ;
name = & names [ i ] ;
}
2005-11-11 14:44:17 +03:00
if ( pull_names . out . num_names > 0 ) {
2005-11-21 15:05:46 +03:00
merge_owner - > max_version = names [ pull_names . out . num_names - 1 ] . version_id ;
2005-11-11 11:56:38 +03:00
}
2005-11-11 11:02:50 +03:00
if ( ! name ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " %s: Name '%s' not found \n " , __location__ , nbt_name_string ( ctx , name2 - > name ) ) ;
return false ;
2005-11-11 11:02:50 +03:00
}
flags = WREPL_NAME_FLAGS ( name - > type ,
name - > state ,
name - > node ,
name - > is_static ) ;
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , name - > name . type , name2 - > name - > type ) ;
CHECK_VALUE_STRING ( tctx , name - > name . name , name2 - > name - > name ) ;
CHECK_VALUE_STRING ( tctx , name - > name . scope , name2 - > name - > scope ) ;
CHECK_VALUE ( tctx , flags , name2 - > flags ) ;
2005-11-11 11:02:50 +03:00
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , name - > num_addresses , num_ips ) ;
2005-11-11 11:02:50 +03:00
for ( i = 0 ; i < name - > num_addresses ; i + + ) {
const char * addr = name - > addresses [ i ] . address ;
const char * owner = name - > addresses [ i ] . owner ;
2006-10-16 17:06:41 +04:00
bool found = false ;
2005-11-11 11:02:50 +03:00
for ( j = 0 ; j < num_ips2 ; j + + ) {
if ( strcmp ( addr , ips2 [ j ] . ip ) = = 0 ) {
2006-10-16 17:06:41 +04:00
found = true ;
CHECK_VALUE_STRING ( tctx , owner , ips2 [ j ] . owner ) ;
2005-11-11 11:02:50 +03:00
break ;
}
}
if ( found ) continue ;
for ( j = 0 ; j < num_ips1 ; j + + ) {
if ( strcmp ( addr , ips1 [ j ] . ip ) = = 0 ) {
2006-10-16 17:06:41 +04:00
found = true ;
2005-11-21 15:05:46 +03:00
if ( owner1 = = & ctx - > c ) {
2006-10-16 17:06:41 +04:00
CHECK_VALUE_STRING ( tctx , owner , owner1 - > address ) ;
2005-11-21 15:05:46 +03:00
} else {
2006-10-16 17:06:41 +04:00
CHECK_VALUE_STRING ( tctx , owner , ips1 [ j ] . owner ) ;
2005-11-21 15:05:46 +03:00
}
2005-11-11 11:02:50 +03:00
break ;
}
}
if ( found ) continue ;
2006-10-16 17:06:41 +04:00
CHECK_VALUE_STRING ( tctx , addr , " not found in address list " ) ;
2005-11-11 11:02:50 +03:00
}
talloc_free ( pull_names . out . names ) ;
2006-10-16 17:06:41 +04:00
return true ;
2005-11-11 11:02:50 +03:00
}
2010-01-30 12:50:33 +03:00
static char * test_nbt_winsrepl_scope_string ( TALLOC_CTX * mem_ctx , uint8_t count )
{
char * res ;
uint8_t i ;
res = talloc_array ( mem_ctx , char , count + 1 ) ;
if ( res = = NULL ) {
return NULL ;
}
for ( i = 0 ; i < count ; i + + ) {
res [ i ] = ' 0 ' + ( i % 10 ) ;
}
res [ count ] = ' \0 ' ;
talloc_set_name_const ( res , res ) ;
return res ;
}
2006-10-16 17:06:41 +04:00
static bool test_conflict_same_owner ( struct torture_context * tctx ,
struct test_wrepl_conflict_conn * ctx )
2005-10-13 20:27:05 +04:00
{
2010-02-01 19:30:30 +03:00
bool ret = true ;
2005-10-13 20:27:05 +04:00
struct wrepl_wins_name wins_name1 ;
struct wrepl_wins_name wins_name2 ;
struct wrepl_wins_name * wins_name_tmp ;
struct wrepl_wins_name * wins_name_last ;
struct wrepl_wins_name * wins_name_cur ;
uint32_t i , j ;
2010-01-29 18:33:58 +03:00
struct nbt_name names [ ] = {
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 , NULL ) ,
2010-01-30 12:50:33 +03:00
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 ,
test_nbt_winsrepl_scope_string ( tctx , 1 ) ) ,
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 ,
test_nbt_winsrepl_scope_string ( tctx , 2 ) ) ,
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 ,
test_nbt_winsrepl_scope_string ( tctx , 3 ) ) ,
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 ,
test_nbt_winsrepl_scope_string ( tctx , 4 ) ) ,
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 ,
test_nbt_winsrepl_scope_string ( tctx , 5 ) ) ,
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 ,
test_nbt_winsrepl_scope_string ( tctx , 6 ) ) ,
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 ,
test_nbt_winsrepl_scope_string ( tctx , 7 ) ) ,
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 ,
test_nbt_winsrepl_scope_string ( tctx , 8 ) ) ,
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 ,
test_nbt_winsrepl_scope_string ( tctx , 9 ) ) ,
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 ,
test_nbt_winsrepl_scope_string ( tctx , 237 ) ) ,
_NBT_NAME ( " _SAME_OWNER_A " , 0x00 ,
test_nbt_winsrepl_scope_string ( tctx , 238 ) ) ,
2010-01-29 18:33:58 +03:00
_NBT_NAME ( " _SAME_OWNER_A " , 0x1C , NULL ) ,
} ;
2005-10-13 20:27:05 +04:00
struct {
enum wrepl_name_type type ;
enum wrepl_name_state state ;
enum wrepl_name_node node ;
2006-10-16 17:06:41 +04:00
bool is_static ;
2005-10-13 20:27:05 +04:00
uint32_t num_ips ;
const struct wrepl_ip * ips ;
} records [ ] = {
{
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 20:27:05 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
} , {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 20:27:05 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
} , {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 20:27:05 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_2 ) ,
. ips = addresses_A_2 ,
} , {
2005-10-13 22:24:30 +04:00
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = true ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
} , {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_2 ) ,
. ips = addresses_A_2 ,
} , {
2005-10-13 20:27:05 +04:00
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 20:27:05 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_2 ) ,
. ips = addresses_A_2 ,
} , {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 20:27:05 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
} , {
2005-10-14 15:18:01 +04:00
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-14 15:18:01 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_2 ) ,
. ips = addresses_A_2 ,
} , {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-14 15:18:01 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
} , {
2005-10-19 21:48:55 +04:00
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 21:48:55 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
} , {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 21:48:55 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
} , {
2023-09-06 02:33:59 +03:00
/* the last one should always be a unique,tombstone record! */
2005-10-13 20:27:05 +04:00
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 20:27:05 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
}
} ;
wins_name_tmp = NULL ;
wins_name_last = & wins_name2 ;
wins_name_cur = & wins_name1 ;
2010-01-29 18:33:58 +03:00
for ( j = 0 ; ret & & j < ARRAY_SIZE ( names ) ; j + + ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Test Replica Conflicts with same owner[%s] for %s \n " ,
2010-01-29 18:33:58 +03:00
nbt_name_string ( ctx , & names [ j ] ) , ctx - > a . address ) ;
2005-10-13 20:27:05 +04:00
for ( i = 0 ; ret & & i < ARRAY_SIZE ( records ) ; i + + ) {
wins_name_tmp = wins_name_last ;
wins_name_last = wins_name_cur ;
wins_name_cur = wins_name_tmp ;
2005-10-14 15:18:01 +04:00
if ( i > 0 ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " %s,%s%s vs. %s,%s%s with %s ip(s) => %s \n " ,
2005-10-14 15:18:01 +04:00
wrepl_name_type_string ( records [ i - 1 ] . type ) ,
wrepl_name_state_string ( records [ i - 1 ] . state ) ,
( records [ i - 1 ] . is_static ? " ,static " : " " ) ,
wrepl_name_type_string ( records [ i ] . type ) ,
wrepl_name_state_string ( records [ i ] . state ) ,
( records [ i ] . is_static ? " ,static " : " " ) ,
( records [ i - 1 ] . ips = = records [ i ] . ips ? " same " : " different " ) ,
" REPLACE " ) ;
}
2010-01-29 18:33:58 +03:00
wins_name_cur - > name = & names [ j ] ;
2005-10-13 20:27:05 +04:00
wins_name_cur - > flags = WREPL_NAME_FLAGS ( records [ i ] . type ,
records [ i ] . state ,
records [ i ] . node ,
records [ i ] . is_static ) ;
wins_name_cur - > id = + + ctx - > a . max_version ;
if ( wins_name_cur - > flags & 2 ) {
wins_name_cur - > addresses . addresses . num_ips = records [ i ] . num_ips ;
2010-01-29 18:42:24 +03:00
wins_name_cur - > addresses . addresses . ips = discard_const_p ( struct wrepl_ip ,
records [ i ] . ips ) ;
2005-10-13 20:27:05 +04:00
} else {
wins_name_cur - > addresses . ip = records [ i ] . ips [ 0 ] . ip ;
}
wins_name_cur - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , & ctx - > a , wins_name_cur ) ;
2005-10-14 15:18:01 +04:00
if ( records [ i ] . state = = WREPL_STATE_RELEASED ) {
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_is_applied ( tctx , ctx , & ctx - > a , wins_name_last , false ) ;
ret & = test_wrepl_is_applied ( tctx , ctx , & ctx - > a , wins_name_cur , false ) ;
2005-10-14 15:18:01 +04:00
} else {
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_is_applied ( tctx , ctx , & ctx - > a , wins_name_cur , true ) ;
2005-10-14 15:18:01 +04:00
}
/* the first one is a cleanup run */
2006-10-16 17:06:41 +04:00
if ( ! ret & & i = = 0 ) ret = true ;
2005-10-14 15:18:01 +04:00
if ( ! ret ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " conflict handled wrong or record[%u]: %s \n " , i , __location__ ) ;
2005-10-14 15:18:01 +04:00
return ret ;
}
2005-10-13 20:27:05 +04:00
}
}
return ret ;
}
2006-10-16 17:06:41 +04:00
static bool test_conflict_different_owner ( struct torture_context * tctx ,
struct test_wrepl_conflict_conn * ctx )
2005-10-13 22:24:30 +04:00
{
2006-10-16 17:06:41 +04:00
bool ret = true ;
2005-10-13 22:24:30 +04:00
struct wrepl_wins_name wins_name1 ;
struct wrepl_wins_name wins_name2 ;
struct wrepl_wins_name * wins_name_r1 ;
struct wrepl_wins_name * wins_name_r2 ;
uint32_t i ;
struct {
2005-10-13 22:58:30 +04:00
const char * line ; /* just better debugging */
2005-10-13 22:24:30 +04:00
struct nbt_name name ;
2005-11-19 13:40:31 +03:00
const char * comment ;
2006-10-16 17:06:41 +04:00
bool extra ; /* not the worst case, this is an extra test */
bool cleanup ;
2005-10-13 22:24:30 +04:00
struct {
struct wrepl_wins_owner * owner ;
enum wrepl_name_type type ;
enum wrepl_name_state state ;
enum wrepl_name_node node ;
2006-10-16 17:06:41 +04:00
bool is_static ;
2005-10-13 22:24:30 +04:00
uint32_t num_ips ;
const struct wrepl_ip * ips ;
2006-10-16 17:06:41 +04:00
bool apply_expected ;
bool sgroup_merge ;
2005-11-21 15:05:46 +03:00
struct wrepl_wins_owner * merge_owner ;
2006-10-16 17:06:41 +04:00
bool sgroup_cleanup ;
2005-12-13 20:39:24 +03:00
} r1 , r2 ;
2005-10-13 22:24:30 +04:00
} records [ ] = {
/*
* NOTE : the first record and the last applied one
* needs to be from the same owner ,
* to not conflict in the next smbtorture run ! ! !
*/
2005-10-13 22:58:30 +04:00
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2006-10-16 17:06:41 +04:00
. cleanup = true ,
2005-10-13 22:58:30 +04:00
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true /* ignored */
2005-10-13 22:58:30 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true /* ignored */
2005-10-13 22:58:30 +04:00
}
} ,
2005-10-13 22:24:30 +04:00
2005-10-13 22:58:30 +04:00
/*
* unique vs unique section
*/
2005-10-13 22:24:30 +04:00
/*
2005-10-19 11:47:29 +04:00
* unique , active vs . unique , active
2005-10-13 22:24:30 +04:00
* = > should be replaced
*/
{
2005-10-13 22:58:30 +04:00
. line = __location__ ,
2005-10-13 22:24:30 +04:00
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:24:30 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:47:29 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:24:30 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , active vs . unique , tombstone
2005-10-13 22:24:30 +04:00
* = > should NOT be replaced
*/
{
2005-10-13 22:58:30 +04:00
. line = __location__ ,
2005-10-13 22:24:30 +04:00
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:24:30 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-13 22:24:30 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , released vs . unique , active
* = > should be replaced
2005-10-13 22:24:30 +04:00
*/
{
2005-10-13 22:58:30 +04:00
. line = __location__ ,
2005-10-13 22:24:30 +04:00
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_RELEASED ,
2005-10-13 22:24:30 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-13 22:24:30 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:24:30 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , released vs . unique , tombstone
2005-10-13 22:24:30 +04:00
* = > should be replaced
*/
{
2005-10-13 22:58:30 +04:00
. line = __location__ ,
2005-10-13 22:24:30 +04:00
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_RELEASED ,
2005-10-13 22:24:30 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-13 22:24:30 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_TOMBSTONE ,
2005-10-13 22:24:30 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:24:30 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , tombstone vs . unique , active
2005-10-13 22:24:30 +04:00
* = > should be replaced
*/
{
2005-10-13 22:58:30 +04:00
. line = __location__ ,
2005-10-13 22:24:30 +04:00
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:24:30 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:24:30 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , tombstone vs . unique , tombstone
2005-10-13 22:24:30 +04:00
* = > should be replaced
*/
{
2005-10-13 22:58:30 +04:00
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
}
} ,
2005-10-19 11:47:29 +04:00
2005-10-13 22:58:30 +04:00
/*
* unique vs normal groups section ,
*/
/*
* unique , active vs . group , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , active vs . group , tombstone
2005-10-14 15:18:01 +04:00
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-14 15:18:01 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-14 15:18:01 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-14 15:18:01 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-14 15:18:01 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , released vs . group , active
* = > should be replaced
2005-10-13 22:58:30 +04:00
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_RELEASED ,
2005-10-13 22:58:30 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-13 22:58:30 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_ACTIVE ,
2005-10-13 22:58:30 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
}
} ,
2005-10-14 15:18:01 +04:00
/*
2005-10-19 11:47:29 +04:00
* unique , released vs . group , tombstone
* = > should be replaced
2005-10-14 15:18:01 +04:00
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
2005-10-19 11:47:29 +04:00
. owner = & ctx - > b ,
2005-10-14 15:18:01 +04:00
. type = WREPL_TYPE_UNIQUE ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_RELEASED ,
2005-10-14 15:18:01 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:47:29 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-14 15:18:01 +04:00
} ,
. r2 = {
2005-10-19 11:47:29 +04:00
. owner = & ctx - > a ,
2005-10-14 15:18:01 +04:00
. type = WREPL_TYPE_GROUP ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_TOMBSTONE ,
2005-10-14 15:18:01 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-14 15:18:01 +04:00
}
} ,
2005-10-13 22:58:30 +04:00
/*
* unique , tombstone vs . group , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
}
} ,
/*
* unique , tombstone vs . group , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
}
} ,
2005-10-19 11:47:29 +04:00
/*
* unique vs special groups section ,
*/
2005-10-14 15:18:01 +04:00
/*
2005-10-19 11:47:29 +04:00
* unique , active vs . sgroup , active
* = > should NOT be replaced
2005-10-14 15:18:01 +04:00
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_ACTIVE ,
2005-10-14 15:18:01 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-14 15:18:01 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-14 15:18:01 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
2005-10-19 11:47:29 +04:00
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
2005-10-14 15:18:01 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:47:29 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-14 15:18:01 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , active vs . sgroup , tombstone
* = > should NOT be replaced
2005-10-14 15:18:01 +04:00
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_ACTIVE ,
2005-10-14 15:18:01 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-14 15:18:01 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-14 15:18:01 +04:00
} ,
. r2 = {
2005-10-19 11:47:29 +04:00
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
2005-10-14 15:18:01 +04:00
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-14 16:01:22 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-14 15:18:01 +04:00
}
} ,
2005-10-17 16:40:45 +04:00
/*
2005-10-19 11:47:29 +04:00
* unique , released vs . sgroup , active
* = > should be replaced
2005-10-17 16:40:45 +04:00
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_RELEASED ,
2005-10-17 16:40:45 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 16:40:45 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 16:40:45 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:47:29 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 16:40:45 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , released vs . sgroup , tombstone
* = > should be replaced
2005-10-17 16:40:45 +04:00
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
2005-10-19 11:47:29 +04:00
. owner = & ctx - > b ,
2005-10-17 16:40:45 +04:00
. type = WREPL_TYPE_UNIQUE ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_RELEASED ,
2005-10-17 16:40:45 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:47:29 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 16:40:45 +04:00
} ,
. r2 = {
2005-10-19 11:47:29 +04:00
. owner = & ctx - > a ,
2005-10-17 16:40:45 +04:00
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:47:29 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 16:40:45 +04:00
}
} ,
/*
* unique , tombstone vs . sgroup , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 16:40:45 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 16:40:45 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 16:40:45 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 16:40:45 +04:00
}
} ,
/*
* unique , tombstone vs . sgroup , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 16:40:45 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 16:40:45 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 16:40:45 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 16:40:45 +04:00
}
} ,
2005-10-17 17:17:42 +04:00
/*
* unique vs multi homed section ,
*/
/*
2005-10-19 11:47:29 +04:00
* unique , active vs . mhomed , active
2005-10-17 17:17:42 +04:00
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 17:17:42 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 17:17:42 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 17:17:42 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 17:17:42 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , active vs . mhomed , tombstone
2005-10-17 17:17:42 +04:00
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:47:29 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 17:17:42 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:47:29 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 17:17:42 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , released vs . mhomed , active
* = > should be replaced
2005-10-17 17:17:42 +04:00
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
2005-10-19 11:47:29 +04:00
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:47:29 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:47:29 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
2005-10-17 17:17:42 +04:00
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:47:29 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:47:29 +04:00
}
} ,
/*
* unique , released vs . mhomed , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:47:29 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 17:17:42 +04:00
} ,
. r2 = {
2005-10-19 11:47:29 +04:00
. owner = & ctx - > b ,
2005-10-17 17:17:42 +04:00
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 17:17:42 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 17:17:42 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , tombstone vs . mhomed , active
2005-10-17 17:17:42 +04:00
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 17:17:42 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 17:17:42 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 17:17:42 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 17:17:42 +04:00
}
} ,
/*
2005-10-19 11:47:29 +04:00
* unique , tombstone vs . mhomed , tombstone
2005-10-17 17:17:42 +04:00
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 17:17:42 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 17:17:42 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 17:17:42 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 17:17:42 +04:00
}
} ,
2005-10-17 16:40:45 +04:00
/*
* normal groups vs unique section ,
*/
2005-10-13 22:58:30 +04:00
/*
* group , active vs . unique , active
* = > should NOT be replaced
*/
{
. line = __location__ ,
2005-10-13 22:24:30 +04:00
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
2005-10-13 22:58:30 +04:00
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
2005-10-13 22:24:30 +04:00
. type = WREPL_TYPE_UNIQUE ,
2005-10-17 16:40:45 +04:00
. state = WREPL_STATE_ACTIVE ,
2005-10-13 22:24:30 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-13 22:58:30 +04:00
}
} ,
/*
* group , active vs . unique , tombstone
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:24:30 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-13 22:58:30 +04:00
}
} ,
2005-10-14 15:18:01 +04:00
/*
* group , released vs . unique , active
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-14 15:18:01 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-14 15:18:01 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-14 15:18:01 +04:00
}
} ,
/*
* group , released vs . unique , tombstone
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-14 15:18:01 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-14 15:18:01 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-14 15:18:01 +04:00
}
} ,
2005-10-13 22:58:30 +04:00
/*
* group , tombstone vs . unique , active
* = > should NOT 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-13 22:58:30 +04:00
}
} ,
/*
* group , tombstone vs . unique , tombstone
* = > should NOT 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:58:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:58:30 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-13 22:24:30 +04:00
}
} ,
2005-10-17 18:12:54 +04:00
/*
* normal groups vs normal groups section ,
*/
/*
* group , active vs . group , active
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:12:54 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 18:12:54 +04:00
}
} ,
/*
* group , active vs . group , tombstone
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:12:54 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 18:12:54 +04:00
}
} ,
/*
* group , released vs . group , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 18:12:54 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:12:54 +04:00
}
} ,
/*
* group , released vs . group , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 18:12:54 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:12:54 +04:00
}
} ,
/*
* group , tombstone vs . group , 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:12:54 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:12:54 +04:00
}
} ,
/*
* group , tombstone vs . group , tombstone
2005-10-17 19:12:03 +04:00
* = > should be replaced
2005-10-17 18:12:54 +04:00
*/
{
. 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:12:54 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:12:54 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:12:54 +04:00
}
} ,
2005-10-17 18:32:16 +04:00
/*
* normal groups vs special groups section ,
*/
/*
* group , active vs . sgroup , 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:32:16 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:32:16 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:32:16 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 18:32:16 +04:00
}
} ,
/*
* group , active vs . sgroup , 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:32:16 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:32:16 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:32:16 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 18:32:16 +04:00
}
} ,
/*
* group , released vs . sgroup , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:32:16 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 18:32:16 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:32:16 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:32:16 +04:00
}
} ,
/*
* group , released vs . sgroup , 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:32:16 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 18:32:16 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 18:32:16 +04:00
}
} ,
/*
* group , tombstone vs . sgroup , 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:32:16 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:32:16 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:32:16 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:32:16 +04:00
}
} ,
/*
* group , tombstone vs . sgroup , tombstone
2005-10-17 19:12:03 +04:00
* = > should be replaced
2005-10-17 18:32:16 +04:00
*/
{
. 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:32:16 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:32:16 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 18:32:16 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 18:32:16 +04:00
}
} ,
2005-10-17 19:12:03 +04:00
/*
* 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 19:12:03 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 19:12:03 +04:00
}
} ,
/*
* 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 19:12:03 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 19:12:03 +04:00
}
} ,
/*
* 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 19:12:03 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 19:12:03 +04:00
}
} ,
/*
* 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 19:12:03 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-17 19:12:03 +04:00
}
} ,
/*
* 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 19:12:03 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 19:12:03 +04:00
}
} ,
/*
* 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 ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 19:12:03 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-17 19:12:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-17 19:12:03 +04:00
}
} ,
2005-10-18 18:18:58 +04:00
/*
* special groups vs unique section ,
*/
/*
* sgroup , active vs . unique , active
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:18:58 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-18 18:18:58 +04:00
}
} ,
/*
* sgroup , active vs . unique , tombstone
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:18:58 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-18 18:18:58 +04:00
}
} ,
/*
* sgroup , released vs . unique , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-18 18:18:58 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:18:58 +04:00
}
} ,
/*
* sgroup , released vs . unique , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-18 18:18:58 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:18:58 +04:00
}
} ,
/*
* sgroup , tombstone vs . unique , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:18:58 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:18:58 +04:00
}
} ,
/*
* sgroup , tombstone vs . unique , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:18:58 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:18:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:18:58 +04:00
}
} ,
2005-10-18 18:48:12 +04:00
/*
* special groups vs normal group section ,
*/
/*
* sgroup , active vs . group , active
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:48:12 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-18 18:48:12 +04:00
}
} ,
/*
* sgroup , active vs . group , tombstone
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:48:12 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-18 18:48:12 +04:00
}
} ,
/*
* sgroup , released vs . group , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-18 18:48:12 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:48:12 +04:00
}
} ,
/*
* sgroup , released vs . group , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-18 18:48:12 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:48:12 +04:00
}
} ,
/*
* sgroup , tombstone vs . group , active
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:48:12 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:48:12 +04:00
}
} ,
/*
* sgroup , tombstone vs . group , tombstone
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:48:12 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-18 18:48:12 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-18 18:48:12 +04:00
}
} ,
2005-11-21 17:14:58 +03:00
/*
* special groups ( not active ) vs special group section ,
*/
/*
* sgroup , released vs . sgroup , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 17:14:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-21 17:14:58 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 17:14:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-21 17:14:58 +03:00
}
} ,
/*
* sgroup , released vs . sgroup , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 17:14:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-21 17:14:58 +03:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 17:14:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-21 17:14:58 +03:00
}
} ,
/*
* sgroup , tombstone vs . sgroup , active
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 17:14:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-21 17:14:58 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 17:14:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-21 17:14:58 +03:00
}
} ,
/*
* sgroup , tombstone vs . sgroup , tombstone
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 17:14:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-21 17:14:58 +03:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 17:14:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-21 17:14:58 +03:00
}
} ,
2005-10-19 11:00:31 +04:00
/*
* special groups vs multi homed section ,
*/
/*
* sgroup , active vs . mhomed , active
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:00:31 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:00:31 +04:00
}
} ,
/*
* sgroup , active vs . mhomed , tombstone
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:00:31 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:00:31 +04:00
}
} ,
/*
* sgroup , released vs . mhomed , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:00:31 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:00:31 +04:00
}
} ,
/*
* sgroup , released vs . mhomed , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:00:31 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:00:31 +04:00
}
} ,
/*
* sgroup , tombstone vs . mhomed , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:00:31 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:00:31 +04:00
}
} ,
/*
* sgroup , tombstone vs . mhomed , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:00:31 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:00:31 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:00:31 +04:00
}
} ,
2005-10-19 20:25:58 +04:00
/*
* multi homed vs . unique section ,
*/
/*
* mhomed , active vs . unique , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:25:58 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:25:58 +04:00
}
} ,
/*
* mhomed , active vs . unique , tombstone
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:25:58 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 20:25:58 +04:00
}
} ,
/*
* mhomed , released vs . unique , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 20:25:58 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:25:58 +04:00
}
} ,
/*
* mhomed , released vs . uinique , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 20:25:58 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:25:58 +04:00
}
} ,
/*
* mhomed , tombstone vs . unique , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:25:58 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:25:58 +04:00
}
} ,
/*
* mhomed , tombstone vs . uinique , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:25:58 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:25:58 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:25:58 +04:00
}
} ,
2005-10-19 11:12:26 +04:00
/*
* multi homed vs . normal group section ,
*/
/*
* mhomed , active vs . group , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:12:26 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:12:26 +04:00
}
} ,
/*
* mhomed , active vs . group , tombstone
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:12:26 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:12:26 +04:00
}
} ,
/*
* mhomed , released vs . group , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:12:26 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:12:26 +04:00
}
} ,
/*
* mhomed , released vs . group , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:12:26 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:12:26 +04:00
}
} ,
/*
* mhomed , tombstone vs . group , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:12:26 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:12:26 +04:00
}
} ,
/*
* mhomed , tombstone vs . group , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:12:26 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:12:26 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:12:26 +04:00
}
} ,
2005-10-19 11:24:36 +04:00
/*
* multi homed vs . special group section ,
*/
/*
* mhomed , active vs . sgroup , active
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:24:36 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:24:36 +04:00
}
} ,
/*
2005-10-19 20:25:58 +04:00
* mhomed , active vs . sgroup , tombstone
2005-10-19 11:24:36 +04:00
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:24:36 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:24:36 +04:00
}
} ,
/*
* mhomed , released vs . sgroup , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:24:36 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:24:36 +04:00
}
} ,
/*
2005-10-19 20:25:58 +04:00
* mhomed , released vs . sgroup , tombstone
2005-10-19 11:24:36 +04:00
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 11:24:36 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:24:36 +04:00
}
} ,
/*
* mhomed , tombstone vs . sgroup , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:24:36 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:24:36 +04:00
}
} ,
/*
2005-10-19 20:25:58 +04:00
* mhomed , tombstone vs . sgroup , tombstone
2005-10-19 11:24:36 +04:00
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:24:36 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 11:24:36 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 11:24:36 +04:00
}
} ,
2005-10-19 20:52:50 +04:00
/*
* multi homed vs . mlti homed section ,
*/
/*
* mhomed , active vs . mhomed , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:52:50 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:52:50 +04:00
}
} ,
/*
* mhomed , active vs . mhomed , tombstone
* = > should NOT be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:52:50 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 20:52:50 +04:00
}
} ,
/*
* mhomed , released vs . mhomed , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 20:52:50 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:52:50 +04:00
}
} ,
/*
* mhomed , released vs . mhomed , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_RELEASED ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-19 20:52:50 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:52:50 +04:00
}
} ,
/*
* mhomed , tombstone vs . mhomed , active
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:52:50 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:52:50 +04:00
}
} ,
/*
* mhomed , tombstone vs . mhomed , tombstone
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:52:50 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-19 20:52:50 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-19 20:52:50 +04:00
}
} ,
2005-11-21 15:05:46 +03:00
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2006-10-16 17:06:41 +04:00
. cleanup = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-21 15:05:46 +03:00
}
} ,
2005-10-19 10:13:53 +04:00
/*
* special group vs special group section ,
*/
/*
2005-11-24 12:22:38 +03:00
* sgroup , active vs . sgroup , active same addresses
* = > should be NOT replaced
2005-10-19 10:13:53 +04:00
*/
{
. line = __location__ ,
2005-11-11 14:44:17 +03:00
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2005-11-24 12:22:38 +03:00
. comment = " A:A_3_4 vs. B:A_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-10-19 10:13:53 +04:00
. r1 = {
2005-11-21 15:05:46 +03:00
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
2005-11-11 14:44:17 +03:00
. owner = & ctx - > b ,
2005-10-19 10:13:53 +04:00
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-24 12:22:38 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
. sgroup_cleanup = true
2005-11-21 15:05:46 +03:00
}
} ,
2005-11-25 13:11:01 +03:00
/*
* sgroup , active vs . sgroup , active same addresses
* = > should be NOT replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. comment = " A:A_3_4 vs. B:NULL " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-11-25 13:11:01 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-25 13:11:01 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-25 13:11:01 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-25 13:11:01 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
. sgroup_cleanup = true
2005-11-25 13:11:01 +03:00
}
} ,
2005-11-21 15:05:46 +03:00
/*
2005-11-24 12:22:38 +03:00
* sgroup , active vs . sgroup , active subset addresses , special case . . .
* = > should NOT be replaced
2005-11-21 15:05:46 +03:00
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2005-11-24 12:22:38 +03:00
. comment = " A:A_3_4_X_3_4 vs. B:A_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-24 12:22:38 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4_X_3_4 ) ,
. ips = addresses_A_3_4_X_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-10-19 10:13:53 +04:00
} ,
. r2 = {
2005-11-21 15:05:46 +03:00
. owner = & ctx - > b ,
2005-10-19 10:13:53 +04:00
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-11 14:44:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-11-24 12:22:38 +03:00
}
} ,
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2006-10-16 17:06:41 +04:00
. cleanup = true ,
2005-11-24 12:22:38 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-24 12:22:38 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-11-24 12:22:38 +03:00
} ,
. r2 = {
. owner = & ctx - > x ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-24 12:22:38 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-10-19 10:13:53 +04:00
}
} ,
2005-11-11 14:44:17 +03:00
/*
* sgroup , active vs . sgroup , active different addresses , but owner changed
2005-11-21 15:05:46 +03:00
* = > should be replaced
2005-11-11 14:44:17 +03:00
*/
2005-10-19 10:13:53 +04:00
{
. line = __location__ ,
2005-11-11 14:44:17 +03:00
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2005-11-21 15:05:46 +03:00
. comment = " A:B_3_4 vs. B:A_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-10-19 10:13:53 +04:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-11 14:44:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-10-19 10:13:53 +04:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-11 14:44:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
. sgroup_cleanup = true
2005-10-19 10:13:53 +04:00
}
} ,
2005-11-11 14:44:17 +03:00
/*
2005-11-21 15:05:46 +03:00
* sgroup , active vs . sgroup , active different addresses , but owner changed
* = > should be replaced
2005-11-11 14:44:17 +03:00
*/
2005-10-19 10:13:53 +04:00
{
. line = __location__ ,
2005-11-11 14:44:17 +03:00
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2005-11-21 15:05:46 +03:00
. comment = " A:A_3_4 vs. B:A_3_4_OWNER_B " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-10-19 10:13:53 +04:00
. r1 = {
2005-11-21 15:05:46 +03:00
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
2005-11-11 14:44:17 +03:00
. owner = & ctx - > b ,
2005-10-19 10:13:53 +04:00
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4_OWNER_B ) ,
. ips = addresses_A_3_4_OWNER_B ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
. sgroup_cleanup = true
2005-11-21 15:05:46 +03:00
}
} ,
/*
* sgroup , active vs . sgroup , active different addresses , but owner changed
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. comment = " A:A_3_4_OWNER_B vs. B:A_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4_OWNER_B ) ,
. ips = addresses_A_3_4_OWNER_B ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-10-19 10:13:53 +04:00
} ,
. r2 = {
2005-11-21 15:05:46 +03:00
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
. sgroup_cleanup = true
2005-11-21 15:05:46 +03:00
}
} ,
2005-11-24 12:22:38 +03:00
/*
* sgroup , active vs . sgroup , active different addresses
* = > should be merged
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. comment = " A:A_3_4 vs. B:B_3_4 => C:A_3_4_B_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-11-24 12:22:38 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-24 12:22:38 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-24 12:22:38 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-24 12:22:38 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. sgroup_merge = true ,
. sgroup_cleanup = true ,
2005-11-24 12:22:38 +03:00
}
} ,
2005-11-21 15:05:46 +03:00
/*
* sgroup , active vs . sgroup , active different addresses , special case . . .
* = > should be merged
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2005-11-24 12:22:38 +03:00
. comment = " A:B_3_4_X_3_4 vs. B:A_3_4 => B:A_3_4_X_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
2005-10-19 10:13:53 +04:00
. owner = & ctx - > a ,
2005-11-11 14:44:17 +03:00
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
2005-10-19 10:13:53 +04:00
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4_X_3_4 ) ,
. ips = addresses_B_3_4_X_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. sgroup_merge = true ,
2005-11-21 15:05:46 +03:00
. merge_owner = & ctx - > b ,
2006-10-16 17:06:41 +04:00
. sgroup_cleanup = false
2005-11-21 15:05:46 +03:00
}
} ,
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2006-10-16 17:06:41 +04:00
. cleanup = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4_X_3_4_OWNER_B ) ,
. ips = addresses_A_3_4_X_3_4_OWNER_B ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-11-21 15:05:46 +03:00
}
} ,
/*
2005-11-24 12:22:38 +03:00
* sgroup , active vs . sgroup , active different addresses , special case . . .
* = > should be merged
2005-11-21 15:05:46 +03:00
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2005-11-24 12:22:38 +03:00
. comment = " A:X_3_4 vs. B:A_3_4 => C:A_3_4_X_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-24 12:22:38 +03:00
. num_ips = ARRAY_SIZE ( addresses_X_3_4 ) ,
. ips = addresses_X_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. sgroup_merge = true ,
. sgroup_cleanup = false
2005-11-21 15:05:46 +03:00
}
} ,
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2006-10-16 17:06:41 +04:00
. cleanup = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
. owner = & ctx - > x ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-11-21 15:05:46 +03:00
}
} ,
/*
* sgroup , active vs . sgroup , active different addresses , special case . . .
* = > should be merged
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. comment = " A:A_3_4_X_3_4 vs. B:A_3_4_OWNER_B => B:A_3_4_OWNER_B_X_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4_X_3_4 ) ,
. ips = addresses_A_3_4_X_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4_OWNER_B ) ,
. ips = addresses_A_3_4_OWNER_B ,
2006-10-16 17:06:41 +04:00
. sgroup_merge = true ,
2005-11-21 15:05:46 +03:00
. merge_owner = & ctx - > b ,
}
} ,
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2006-10-16 17:06:41 +04:00
. cleanup = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
. owner = & ctx - > x ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-11-21 15:05:46 +03:00
}
} ,
/*
* sgroup , active vs . sgroup , active partly different addresses , special case . . .
* = > should be merged
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. comment = " A:B_3_4_X_3_4 vs. B:B_3_4_X_1_2 => C:B_3_4_X_1_2_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4_X_3_4 ) ,
. ips = addresses_B_3_4_X_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4_X_1_2 ) ,
. ips = addresses_B_3_4_X_1_2 ,
2006-10-16 17:06:41 +04:00
. sgroup_merge = true ,
. sgroup_cleanup = false
2005-11-21 15:05:46 +03:00
}
} ,
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2006-10-16 17:06:41 +04:00
. cleanup = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
. owner = & ctx - > x ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-11-21 15:05:46 +03:00
}
} ,
2005-11-25 13:11:01 +03:00
/*
* sgroup , active vs . sgroup , active different addresses , special case . . .
* = > should be merged
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. comment = " A:A_3_4_B_3_4 vs. B:NULL => B:A_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-11-25 13:11:01 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-25 13:11:01 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4_B_3_4 ) ,
. ips = addresses_A_3_4_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-25 13:11:01 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-25 13:11:01 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. sgroup_merge = true ,
2005-11-25 13:11:01 +03:00
. merge_owner = & ctx - > b ,
2006-10-16 17:06:41 +04:00
. sgroup_cleanup = true
2005-11-25 13:11:01 +03:00
}
} ,
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2006-10-16 17:06:41 +04:00
. cleanup = true ,
2005-11-25 13:11:01 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-25 13:11:01 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-11-25 13:11:01 +03:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-25 13:11:01 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-25 13:11:01 +03:00
}
} ,
2005-11-21 15:05:46 +03:00
/*
* sgroup , active vs . sgroup , active different addresses , special case . . .
* = > should be merged
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. comment = " A:B_3_4_X_3_4 vs. B:NULL => B:X_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4_X_3_4 ) ,
. ips = addresses_B_3_4_X_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. sgroup_merge = true ,
2005-11-21 15:05:46 +03:00
. merge_owner = & ctx - > b ,
2006-10-16 17:06:41 +04:00
. sgroup_cleanup = true
2005-10-19 10:13:53 +04:00
}
} ,
2005-11-21 15:05:46 +03:00
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2006-10-16 17:06:41 +04:00
. cleanup = true ,
2005-11-21 15:05:46 +03:00
. r1 = {
. owner = & ctx - > x ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-11-21 15:05:46 +03:00
} ,
. r2 = {
. owner = & ctx - > x ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-21 15:05:46 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2005-11-21 15:05:46 +03:00
}
} ,
2006-01-19 16:01:12 +03:00
/*
* sgroup , active vs . sgroup , tombstone different no addresses , special
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. comment = " A:B_3_4_X_3_4 vs. B:NULL => B:NULL " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2006-01-19 16:01:12 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2006-01-19 16:01:12 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4_X_3_4 ) ,
. ips = addresses_B_3_4_X_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2006-01-19 16:01:12 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2006-01-19 16:01:12 +03:00
. num_ips = 0 ,
. ips = NULL ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2006-01-19 16:01:12 +03:00
}
} ,
/*
* sgroup , active vs . sgroup , tombstone different addresses
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. comment = " A:B_3_4_X_3_4 vs. B:A_3_4 => B:A_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2006-01-19 16:01:12 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2006-01-19 16:01:12 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4_X_3_4 ) ,
. ips = addresses_B_3_4_X_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2006-01-19 16:01:12 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2006-01-19 16:01:12 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2006-01-19 16:01:12 +03:00
}
} ,
/*
* sgroup , active vs . sgroup , tombstone subset addresses
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. comment = " A:B_3_4_X_3_4 vs. B:B_3_4 => B:B_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2006-01-19 16:01:12 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2006-01-19 16:01:12 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4_X_3_4 ) ,
. ips = addresses_B_3_4_X_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2006-01-19 16:01:12 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2006-01-19 16:01:12 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2006-01-19 16:01:12 +03:00
}
} ,
/*
* sgroup , active vs . sgroup , active same addresses
* = > should be replaced
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
. comment = " A:B_3_4_X_3_4 vs. B:B_3_4_X_3_4 => B:B_3_4_X_3_4 " ,
2006-10-16 17:06:41 +04:00
. extra = true ,
2006-01-19 16:01:12 +03:00
. r1 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2006-01-19 16:01:12 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4_X_3_4 ) ,
. ips = addresses_B_3_4_X_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2006-01-19 16:01:12 +03:00
} ,
. r2 = {
. owner = & ctx - > b ,
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2006-01-19 16:01:12 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4_X_3_4 ) ,
. ips = addresses_B_3_4_X_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true ,
2006-01-19 16:01:12 +03:00
}
} ,
2005-10-13 22:24:30 +04:00
/*
* This should be the last record in this array ,
* we need to make sure the we leave a tombstoned unique entry
* owned by OWNER_A
*/
{
2005-10-13 22:58:30 +04:00
. line = __location__ ,
2005-10-13 22:24:30 +04:00
. name = _NBT_NAME ( " _DIFF_OWNER " , 0x00 , NULL ) ,
2006-10-16 17:06:41 +04:00
. cleanup = true ,
2005-10-13 22:24:30 +04:00
. r1 = {
2005-11-11 14:44:17 +03:00
. owner = & ctx - > a ,
2005-10-13 22:24:30 +04:00
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:24:30 +04:00
} ,
. r2 = {
. owner = & ctx - > a ,
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-13 22:24:30 +04:00
. num_ips = ARRAY_SIZE ( addresses_A_1 ) ,
. ips = addresses_A_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-13 22:24:30 +04:00
}
} } ; /* do not add entries here, this should be the last record! */
wins_name_r1 = & wins_name1 ;
wins_name_r2 = & wins_name2 ;
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Test Replica Conflicts with different owners \n " ) ;
2005-10-14 15:18:01 +04:00
2005-10-13 22:24:30 +04:00
for ( i = 0 ; ret & & i < ARRAY_SIZE ( records ) ; i + + ) {
2005-11-25 13:11:01 +03:00
2005-10-17 19:12:03 +04:00
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 ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " (%s) Programmer error, invalid record[%u]: %s \n " ,
2005-10-17 19:12:03 +04:00
__location__ , i , records [ i ] . line ) ;
2006-10-16 17:06:41 +04:00
return false ;
2005-10-17 19:12:03 +04:00
} else if ( ! records [ i ] . r2 . apply_expected & & records [ i ] . r1 . ips ! = records [ i ] . r2 . ips ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " (%s) Programmer error, invalid record[%u]: %s \n " ,
2005-10-17 19:12:03 +04:00
__location__ , i , records [ i ] . line ) ;
2006-10-16 17:06:41 +04:00
return false ;
2005-10-17 19:12:03 +04:00
}
}
2005-10-13 22:24:30 +04:00
2005-10-17 17:17:42 +04:00
if ( ! records [ i ] . cleanup ) {
2005-10-19 10:30:05 +04:00
const char * expected ;
const char * ips ;
2005-11-11 14:44:17 +03:00
if ( records [ i ] . r2 . sgroup_merge ) {
expected = " SGROUP_MERGE " ;
2005-10-19 10:30:05 +04:00
} else if ( records [ i ] . r2 . apply_expected ) {
expected = " REPLACE " ;
} else {
expected = " NOT REPLACE " ;
}
if ( ! records [ i ] . r1 . ips & & ! records [ i ] . r2 . ips ) {
2005-11-21 15:05:46 +03:00
ips = " with no ip(s) " ;
2005-10-19 10:30:05 +04:00
} else if ( records [ i ] . r1 . ips = = records [ i ] . r2 . ips ) {
2005-11-21 15:05:46 +03:00
ips = " with same ip(s) " ;
2005-10-19 10:30:05 +04:00
} else {
2005-11-21 15:05:46 +03:00
ips = " with different ip(s) " ;
2005-10-19 10:30:05 +04:00
}
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " %s,%s%s vs. %s,%s%s %s => %s \n " ,
2005-10-14 15:18:01 +04:00
wrepl_name_type_string ( records [ i ] . r1 . type ) ,
wrepl_name_state_string ( records [ i ] . r1 . state ) ,
( records [ i ] . r1 . is_static ? " ,static " : " " ) ,
wrepl_name_type_string ( records [ i ] . r2 . type ) ,
wrepl_name_state_string ( records [ i ] . r2 . state ) ,
( records [ i ] . r2 . is_static ? " ,static " : " " ) ,
2005-11-21 15:05:46 +03:00
( records [ i ] . comment ? records [ i ] . comment : ips ) ,
2005-11-19 13:40:31 +03:00
expected ) ;
2005-10-14 15:18:01 +04:00
}
2005-10-13 22:24:30 +04:00
/*
* Setup R1
*/
wins_name_r1 - > name = & records [ i ] . name ;
wins_name_r1 - > flags = WREPL_NAME_FLAGS ( records [ i ] . r1 . type ,
records [ i ] . r1 . state ,
records [ i ] . r1 . node ,
records [ i ] . r1 . is_static ) ;
wins_name_r1 - > id = + + records [ i ] . r1 . owner - > max_version ;
if ( wins_name_r1 - > flags & 2 ) {
wins_name_r1 - > addresses . addresses . num_ips = records [ i ] . r1 . num_ips ;
2010-01-29 18:42:24 +03:00
wins_name_r1 - > addresses . addresses . ips = discard_const_p ( struct wrepl_ip ,
records [ i ] . r1 . ips ) ;
2005-10-13 22:24:30 +04:00
} else {
wins_name_r1 - > addresses . ip = records [ i ] . r1 . ips [ 0 ] . ip ;
}
wins_name_r1 - > unknown = " 255.255.255.255 " ;
/* now apply R1 */
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , records [ i ] . r1 . owner , wins_name_r1 ) ;
ret & = test_wrepl_is_applied ( tctx , ctx , records [ i ] . r1 . owner ,
2005-10-13 22:24:30 +04:00
wins_name_r1 , records [ i ] . r1 . apply_expected ) ;
/*
* Setup R2
*/
wins_name_r2 - > name = & records [ i ] . name ;
wins_name_r2 - > flags = WREPL_NAME_FLAGS ( records [ i ] . r2 . type ,
records [ i ] . r2 . state ,
records [ i ] . r2 . node ,
records [ i ] . r2 . is_static ) ;
wins_name_r2 - > id = + + records [ i ] . r2 . owner - > max_version ;
if ( wins_name_r2 - > flags & 2 ) {
wins_name_r2 - > addresses . addresses . num_ips = records [ i ] . r2 . num_ips ;
2010-01-29 18:42:24 +03:00
wins_name_r2 - > addresses . addresses . ips = discard_const_p ( struct wrepl_ip ,
records [ i ] . r2 . ips ) ;
2005-10-13 22:24:30 +04:00
} else {
wins_name_r2 - > addresses . ip = records [ i ] . r2 . ips [ 0 ] . ip ;
}
wins_name_r2 - > unknown = " 255.255.255.255 " ;
/* now apply R2 */
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , records [ i ] . r2 . owner , wins_name_r2 ) ;
2005-10-17 14:55:50 +04:00
if ( records [ i ] . r1 . state = = WREPL_STATE_RELEASED ) {
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_is_applied ( tctx , ctx , records [ i ] . r1 . owner ,
wins_name_r1 , false ) ;
2005-11-11 14:44:17 +03:00
} else if ( records [ i ] . r2 . sgroup_merge ) {
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_sgroup_merged ( tctx , ctx , records [ i ] . r2 . merge_owner ,
2005-11-11 14:44:17 +03:00
records [ i ] . r1 . owner ,
records [ i ] . r1 . num_ips , records [ i ] . r1 . ips ,
records [ i ] . r2 . owner ,
records [ i ] . r2 . num_ips , records [ i ] . r2 . ips ,
wins_name_r2 ) ;
2005-10-17 14:55:50 +04:00
} else if ( records [ i ] . r1 . owner ! = records [ i ] . r2 . owner ) {
2006-10-16 17:06:41 +04:00
bool _expected ;
2005-10-19 10:13:53 +04:00
_expected = ( records [ i ] . r1 . apply_expected & & ! records [ i ] . r2 . apply_expected ) ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_is_applied ( tctx , ctx , records [ i ] . r1 . owner ,
2005-10-19 10:13:53 +04:00
wins_name_r1 , _expected ) ;
2005-10-14 15:18:01 +04:00
}
if ( records [ i ] . r2 . state = = WREPL_STATE_RELEASED ) {
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_is_applied ( tctx , ctx , records [ i ] . r2 . owner ,
wins_name_r2 , false ) ;
2005-11-11 14:44:17 +03:00
} else if ( ! records [ i ] . r2 . sgroup_merge ) {
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_is_applied ( tctx , ctx , records [ i ] . r2 . owner ,
2005-10-14 15:18:01 +04:00
wins_name_r2 , records [ i ] . r2 . apply_expected ) ;
}
2005-10-13 22:24:30 +04:00
2005-11-21 15:05:46 +03:00
if ( records [ i ] . r2 . sgroup_cleanup ) {
2005-11-25 13:44:03 +03:00
if ( ! ret ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " failed before sgroup_cleanup record[%u]: %s \n " , i , records [ i ] . line ) ;
2005-11-25 13:44:03 +03:00
return ret ;
}
2005-11-11 14:44:17 +03:00
/* clean up the SGROUP record */
wins_name_r1 - > name = & records [ i ] . name ;
wins_name_r1 - > flags = WREPL_NAME_FLAGS ( WREPL_TYPE_SGROUP ,
WREPL_STATE_ACTIVE ,
2006-10-16 17:06:41 +04:00
WREPL_NODE_B , false ) ;
2005-11-11 14:44:17 +03:00
wins_name_r1 - > id = + + records [ i ] . r1 . owner - > max_version ;
wins_name_r1 - > addresses . addresses . num_ips = 0 ;
wins_name_r1 - > addresses . addresses . ips = NULL ;
wins_name_r1 - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , records [ i ] . r1 . owner , wins_name_r1 ) ;
2005-11-11 14:44:17 +03:00
/* here we test how names from an owner are deleted */
if ( records [ i ] . r2 . sgroup_merge & & records [ i ] . r2 . num_ips ) {
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_sgroup_merged ( tctx , ctx , NULL ,
2005-11-11 14:44:17 +03:00
records [ i ] . r2 . owner ,
records [ i ] . r2 . num_ips , records [ i ] . r2 . ips ,
records [ i ] . r1 . owner ,
0 , NULL ,
wins_name_r2 ) ;
}
/* clean up the SGROUP record */
wins_name_r2 - > name = & records [ i ] . name ;
wins_name_r2 - > flags = WREPL_NAME_FLAGS ( WREPL_TYPE_SGROUP ,
WREPL_STATE_ACTIVE ,
2006-10-16 17:06:41 +04:00
WREPL_NODE_B , false ) ;
2005-11-11 14:44:17 +03:00
wins_name_r2 - > id = + + records [ i ] . r2 . owner - > max_version ;
wins_name_r2 - > addresses . addresses . num_ips = 0 ;
wins_name_r2 - > addresses . addresses . ips = NULL ;
wins_name_r2 - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , records [ i ] . r2 . owner , wins_name_r2 ) ;
2005-11-11 14:44:17 +03:00
/* take ownership of the SGROUP record */
wins_name_r2 - > name = & records [ i ] . name ;
wins_name_r2 - > flags = WREPL_NAME_FLAGS ( WREPL_TYPE_SGROUP ,
WREPL_STATE_ACTIVE ,
2006-10-16 17:06:41 +04:00
WREPL_NODE_B , false ) ;
2005-11-11 14:44:17 +03:00
wins_name_r2 - > id = + + records [ i ] . r2 . owner - > max_version ;
wins_name_r2 - > addresses . addresses . num_ips = ARRAY_SIZE ( addresses_B_1 ) ;
2010-01-29 18:42:24 +03:00
wins_name_r2 - > addresses . addresses . ips = discard_const_p ( struct wrepl_ip ,
addresses_B_1 ) ;
2005-11-11 14:44:17 +03:00
wins_name_r2 - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , records [ i ] . r2 . owner , wins_name_r2 ) ;
ret & = test_wrepl_is_applied ( tctx , ctx , records [ i ] . r2 . owner , wins_name_r2 , true ) ;
2005-11-11 14:44:17 +03:00
/* overwrite the SGROUP record with unique,tombstone */
wins_name_r2 - > name = & records [ i ] . name ;
wins_name_r2 - > flags = WREPL_NAME_FLAGS ( WREPL_TYPE_SGROUP ,
WREPL_STATE_TOMBSTONE ,
2006-10-16 17:06:41 +04:00
WREPL_NODE_B , false ) ;
2005-11-11 14:44:17 +03:00
wins_name_r2 - > id = + + records [ i ] . r2 . owner - > max_version ;
wins_name_r2 - > addresses . addresses . num_ips = ARRAY_SIZE ( addresses_B_1 ) ;
2010-01-29 18:42:24 +03:00
wins_name_r2 - > addresses . addresses . ips = discard_const_p ( struct wrepl_ip ,
addresses_B_1 ) ;
2005-11-11 14:44:17 +03:00
wins_name_r2 - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , records [ i ] . r2 . owner , wins_name_r2 ) ;
ret & = test_wrepl_is_applied ( tctx , ctx , records [ i ] . r2 . owner , wins_name_r2 , true ) ;
2005-11-25 13:44:03 +03:00
if ( ! ret ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " failed in sgroup_cleanup record[%u]: %s \n " , i , records [ i ] . line ) ;
2005-11-25 13:44:03 +03:00
return ret ;
}
2005-11-11 14:44:17 +03:00
}
2005-10-13 22:58:30 +04:00
/* the first one is a cleanup run */
2006-10-16 17:06:41 +04:00
if ( ! ret & & i = = 0 ) ret = true ;
2005-10-13 22:58:30 +04:00
2005-10-13 22:24:30 +04:00
if ( ! ret ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " conflict handled wrong or record[%u]: %s \n " , i , records [ i ] . line ) ;
2005-10-13 22:24:30 +04:00
return ret ;
}
}
return ret ;
}
2006-10-16 17:06:41 +04:00
static bool test_conflict_owned_released_vs_replica ( struct torture_context * tctx ,
struct test_wrepl_conflict_conn * ctx )
2005-10-23 18:18:03 +04:00
{
2006-10-16 17:06:41 +04:00
bool ret = true ;
2005-10-23 18:18:03 +04:00
NTSTATUS status ;
struct wrepl_wins_name wins_name_ ;
struct wrepl_wins_name * wins_name = & wins_name_ ;
struct nbt_name_register name_register_ ;
struct nbt_name_register * name_register = & name_register_ ;
struct nbt_name_release release_ ;
struct nbt_name_release * release = & release_ ;
uint32_t i ;
struct {
const char * line ; /* just better debugging */
struct nbt_name name ;
struct {
uint32_t nb_flags ;
2006-10-16 17:06:41 +04:00
bool mhomed ;
2005-10-23 18:18:03 +04:00
uint32_t num_ips ;
const struct wrepl_ip * ips ;
2006-10-16 17:06:41 +04:00
bool apply_expected ;
2005-10-23 18:18:03 +04:00
} wins ;
struct {
enum wrepl_name_type type ;
enum wrepl_name_state state ;
enum wrepl_name_node node ;
2006-10-16 17:06:41 +04:00
bool is_static ;
2005-10-23 18:18:03 +04:00
uint32_t num_ips ;
const struct wrepl_ip * ips ;
2006-10-16 17:06:41 +04:00
bool apply_expected ;
2005-10-23 18:18:03 +04:00
} replica ;
} records [ ] = {
2005-10-31 14:05:48 +03:00
/*
* unique vs . unique section
*/
2005-10-23 18:18:03 +04:00
/*
* unique , released vs . unique , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_UA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . unique , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_UA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . unique , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_UT_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . unique , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_UT_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* unique vs . group section
*/
2005-10-23 18:18:03 +04:00
/*
* unique , released vs . group , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_GA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . group , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_GA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . group , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_GT_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . group , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_GT_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* unique vs . special group section
*/
2005-10-23 18:18:03 +04:00
/*
* unique , released vs . sgroup , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_SA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . sgroup , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_SA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . sgroup , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_ST_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . sgroup , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_ST_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* unique vs . multi homed section
*/
2005-10-23 18:18:03 +04:00
/*
* unique , released vs . mhomed , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_MA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . mhomed , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_MA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . mhomed , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_MT_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* unique , released vs . mhomed , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _UR_MT_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* group vs . unique section
*/
2005-10-23 18:18:03 +04:00
/*
* group , released vs . unique , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_UA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . unique , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_UA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . unique , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_UT_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . unique , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_UT_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* group vs . group section
*/
2005-10-23 18:18:03 +04:00
/*
* group , released vs . group , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_GA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . group , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_GA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . group , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_GT_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . group , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_GT_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* group vs . special group section
*/
2005-10-23 18:18:03 +04:00
/*
* group , released vs . sgroup , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_SA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . sgroup , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_SA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . sgroup , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_ST_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . sgroup , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_ST_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* group vs . multi homed section
*/
2005-10-23 18:18:03 +04:00
/*
* group , released vs . mhomed , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_MA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . mhomed , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_MA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . mhomed , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_MT_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* group , released vs . mhomed , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _GR_MT_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* special group vs . unique section
*/
2005-10-23 18:18:03 +04:00
/*
* sgroup , released vs . unique , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_UA_SI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . unique , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_UA_DI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . unique , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_UT_SI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . unique , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_UT_DI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* special group vs . group section
*/
2005-10-23 18:18:03 +04:00
/*
* sgroup , released vs . group , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_GA_SI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . group , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_GA_DI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . group , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_GT_SI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . group , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_GT_DI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* special group vs . special group section
*/
2005-10-23 18:18:03 +04:00
/*
* sgroup , released vs . sgroup , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_SA_SI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . sgroup , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_SA_DI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . sgroup , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_ST_SI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . sgroup , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_ST_DI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* special group vs . multi homed section
*/
2005-10-23 18:18:03 +04:00
/*
* sgroup , released vs . mhomed , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_MA_SI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . mhomed , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_MA_DI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . mhomed , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_MT_SI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
/*
* sgroup , released vs . mhomed , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _SR_MT_DI " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-23 18:18:03 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-23 18:18:03 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* multi homed vs . unique section
*/
2005-10-27 17:11:33 +04:00
/*
* mhomed , released vs . unique , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_UA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . unique , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_UA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-27 17:11:33 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . unique , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_UT_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . unique , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_UT_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-27 17:11:33 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* multi homed vs . group section
*/
2005-10-27 17:11:33 +04:00
/*
* mhomed , released vs . group , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_GA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . group , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_GA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-27 17:11:33 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . group , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_GT_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . group , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_GT_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-27 17:11:33 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* multi homed vs . special group section
*/
2005-10-27 17:11:33 +04:00
/*
* mhomed , released vs . sgroup , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_SA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . sgroup , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_SA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-27 17:11:33 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . sgroup , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_ST_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . sgroup , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_ST_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-27 17:11:33 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
2005-10-31 14:05:48 +03:00
/*
* multi homed vs . multi homed section
*/
2005-10-27 17:11:33 +04:00
/*
* mhomed , released vs . mhomed , active with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_MA_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . mhomed , active with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_MA_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-27 17:11:33 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . mhomed , tombstone with same ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_MT_SI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
* mhomed , released vs . mhomed , tombstone with different ip ( s )
*/
{
. line = __location__ ,
. name = _NBT_NAME ( " _MR_MT_DI " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-27 17:11:33 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
} ;
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Test Replica records vs. owned released records \n " ) ;
2005-10-27 17:11:33 +04:00
for ( i = 0 ; ret & & i < ARRAY_SIZE ( records ) ; i + + ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " %s => %s \n " , nbt_name_string ( ctx , & records [ i ] . name ) ,
2005-10-27 17:11:33 +04:00
( records [ i ] . replica . apply_expected ? " REPLACE " : " NOT REPLACE " ) ) ;
/*
* Setup Register
*/
name_register - > in . name = records [ i ] . name ;
name_register - > in . dest_addr = ctx - > address ;
2010-07-16 08:32:42 +04:00
name_register - > in . dest_port = lpcfg_nbt_port ( tctx - > lp_ctx ) ;
2005-10-27 17:11:33 +04:00
name_register - > in . address = records [ i ] . wins . ips [ 0 ] . ip ;
name_register - > in . nb_flags = records [ i ] . wins . nb_flags ;
2006-10-16 17:06:41 +04:00
name_register - > in . register_demand = false ;
name_register - > in . broadcast = false ;
2005-10-27 17:11:33 +04:00
name_register - > in . multi_homed = records [ i ] . wins . mhomed ;
name_register - > in . ttl = 300000 ;
name_register - > in . timeout = 70 ;
name_register - > in . retries = 0 ;
status = nbt_name_register ( ctx - > nbtsock , ctx , name_register ) ;
if ( NT_STATUS_EQUAL ( status , NT_STATUS_IO_TIMEOUT ) ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " No response from %s for name register \n " , ctx - > address ) ;
ret = false ;
2005-10-27 17:11:33 +04:00
}
if ( ! NT_STATUS_IS_OK ( status ) ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Bad response from %s for name register - %s \n " ,
2005-10-27 17:11:33 +04:00
ctx - > address , nt_errstr ( status ) ) ;
2006-10-16 17:06:41 +04:00
ret = false ;
2005-10-27 17:11:33 +04:00
}
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , name_register - > out . rcode , 0 ) ;
CHECK_VALUE_STRING ( tctx , name_register - > out . reply_from , ctx - > address ) ;
CHECK_VALUE ( tctx , name_register - > out . name . type , records [ i ] . name . type ) ;
CHECK_VALUE_STRING ( tctx , name_register - > out . name . name , records [ i ] . name . name ) ;
CHECK_VALUE_STRING ( tctx , name_register - > out . name . scope , records [ i ] . name . scope ) ;
CHECK_VALUE_STRING ( tctx , name_register - > out . reply_addr , records [ i ] . wins . ips [ 0 ] . ip ) ;
2005-10-27 17:11:33 +04:00
2005-10-31 13:14:05 +03:00
/* release the record */
release - > in . name = records [ i ] . name ;
2010-07-16 08:32:42 +04:00
release - > in . dest_port = lpcfg_nbt_port ( tctx - > lp_ctx ) ;
2005-10-31 13:14:05 +03:00
release - > in . dest_addr = ctx - > address ;
release - > in . address = records [ i ] . wins . ips [ 0 ] . ip ;
release - > in . nb_flags = records [ i ] . wins . nb_flags ;
2006-10-16 17:06:41 +04:00
release - > in . broadcast = false ;
2005-10-31 13:14:05 +03:00
release - > in . timeout = 30 ;
release - > in . retries = 0 ;
2005-10-27 17:11:33 +04:00
2005-10-31 13:14:05 +03:00
status = nbt_name_release ( ctx - > nbtsock , ctx , release ) ;
if ( NT_STATUS_EQUAL ( status , NT_STATUS_IO_TIMEOUT ) ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " No response from %s for name release \n " , ctx - > address ) ;
return false ;
2005-10-27 17:11:33 +04:00
}
2005-10-31 13:14:05 +03:00
if ( ! NT_STATUS_IS_OK ( status ) ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Bad response from %s for name query - %s \n " ,
2005-10-31 13:14:05 +03:00
ctx - > address , nt_errstr ( status ) ) ;
2006-10-16 17:06:41 +04:00
return false ;
2005-10-31 13:14:05 +03:00
}
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , release - > out . rcode , 0 ) ;
2005-10-27 17:11:33 +04:00
/*
* Setup Replica
*/
wins_name - > name = & records [ i ] . name ;
wins_name - > flags = WREPL_NAME_FLAGS ( records [ i ] . replica . type ,
records [ i ] . replica . state ,
records [ i ] . replica . node ,
records [ i ] . replica . is_static ) ;
wins_name - > id = + + ctx - > b . max_version ;
if ( wins_name - > flags & 2 ) {
wins_name - > addresses . addresses . num_ips = records [ i ] . replica . num_ips ;
2010-01-29 18:42:24 +03:00
wins_name - > addresses . addresses . ips = discard_const_p ( struct wrepl_ip ,
records [ i ] . replica . ips ) ;
2005-10-27 17:11:33 +04:00
} else {
wins_name - > addresses . ip = records [ i ] . replica . ips [ 0 ] . ip ;
}
wins_name - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , & ctx - > b , wins_name ) ;
ret & = test_wrepl_is_applied ( tctx , ctx , & ctx - > b , wins_name ,
2005-10-27 17:11:33 +04:00
records [ i ] . replica . apply_expected ) ;
if ( records [ i ] . replica . apply_expected ) {
wins_name - > name = & records [ i ] . name ;
wins_name - > flags = WREPL_NAME_FLAGS ( WREPL_TYPE_UNIQUE ,
WREPL_STATE_TOMBSTONE ,
2006-10-16 17:06:41 +04:00
WREPL_NODE_B , false ) ;
2005-10-27 17:11:33 +04:00
wins_name - > id = + + ctx - > b . max_version ;
wins_name - > addresses . ip = addresses_B_1 [ 0 ] . ip ;
wins_name - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , & ctx - > b , wins_name ) ;
ret & = test_wrepl_is_applied ( tctx , ctx , & ctx - > b , wins_name , true ) ;
2005-10-27 17:11:33 +04:00
} else {
release - > in . name = records [ i ] . name ;
release - > in . dest_addr = ctx - > address ;
2010-07-16 08:32:42 +04:00
release - > in . dest_port = lpcfg_nbt_port ( tctx - > lp_ctx ) ;
2005-10-27 17:11:33 +04:00
release - > in . address = records [ i ] . wins . ips [ 0 ] . ip ;
release - > in . nb_flags = records [ i ] . wins . nb_flags ;
2006-10-16 17:06:41 +04:00
release - > in . broadcast = false ;
2005-10-27 17:11:33 +04:00
release - > in . timeout = 30 ;
release - > in . retries = 0 ;
status = nbt_name_release ( ctx - > nbtsock , ctx , release ) ;
if ( NT_STATUS_EQUAL ( status , NT_STATUS_IO_TIMEOUT ) ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " No response from %s for name release \n " , ctx - > address ) ;
return false ;
2005-10-27 17:11:33 +04:00
}
if ( ! NT_STATUS_IS_OK ( status ) ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Bad response from %s for name query - %s \n " ,
2005-10-27 17:11:33 +04:00
ctx - > address , nt_errstr ( status ) ) ;
2006-10-16 17:06:41 +04:00
return false ;
2005-10-27 17:11:33 +04:00
}
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , release - > out . rcode , 0 ) ;
2005-10-27 17:11:33 +04:00
}
if ( ! ret ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " conflict handled wrong or record[%u]: %s \n " , i , records [ i ] . line ) ;
2005-10-27 17:11:33 +04:00
return ret ;
}
}
return ret ;
}
2005-10-31 13:14:05 +03:00
struct test_conflict_owned_active_vs_replica_struct {
2011-04-30 11:29:16 +04:00
struct torture_context * tctx ;
2005-10-31 13:14:05 +03:00
const char * line ; /* just better debugging */
2005-11-03 16:13:45 +03:00
const char * section ; /* just better debugging */
2005-10-31 13:14:05 +03:00
struct nbt_name name ;
2005-12-05 13:03:10 +03:00
const char * comment ;
2006-10-16 17:06:41 +04:00
bool skip ;
2005-10-31 13:14:05 +03:00
struct {
uint32_t nb_flags ;
2006-10-16 17:06:41 +04:00
bool mhomed ;
2005-10-31 13:14:05 +03:00
uint32_t num_ips ;
const struct wrepl_ip * ips ;
2006-10-16 17:06:41 +04:00
bool apply_expected ;
2005-10-31 13:14:05 +03:00
} wins ;
struct {
uint32_t timeout ;
2006-10-16 17:06:41 +04:00
bool positive ;
bool expect_release ;
bool late_release ;
bool ret ;
2005-11-02 20:15:17 +03:00
/* when num_ips == 0, then .wins.ips are used */
uint32_t num_ips ;
const struct wrepl_ip * ips ;
2005-10-31 13:14:05 +03:00
} defend ;
struct {
enum wrepl_name_type type ;
enum wrepl_name_state state ;
enum wrepl_name_node node ;
2006-10-16 17:06:41 +04:00
bool is_static ;
2005-10-31 13:14:05 +03:00
uint32_t num_ips ;
const struct wrepl_ip * ips ;
2006-10-16 17:06:41 +04:00
bool apply_expected ;
bool mhomed_merge ;
bool sgroup_merge ;
2005-10-31 13:14:05 +03:00
} replica ;
} ;
static void test_conflict_owned_active_vs_replica_handler ( struct nbt_name_socket * nbtsock ,
struct nbt_name_packet * req_packet ,
2006-01-10 01:12:53 +03:00
struct socket_address * src ) ;
2005-10-31 13:14:05 +03:00
2006-10-16 17:06:41 +04:00
static bool test_conflict_owned_active_vs_replica ( struct torture_context * tctx ,
struct test_wrepl_conflict_conn * ctx )
2005-10-27 17:11:33 +04:00
{
2006-10-16 17:06:41 +04:00
bool ret = true ;
2005-10-27 17:11:33 +04:00
NTSTATUS status ;
struct wrepl_wins_name wins_name_ ;
struct wrepl_wins_name * wins_name = & wins_name_ ;
struct nbt_name_register name_register_ ;
struct nbt_name_register * name_register = & name_register_ ;
struct nbt_name_release release_ ;
struct nbt_name_release * release = & release_ ;
uint32_t i ;
2005-10-31 13:14:05 +03:00
struct test_conflict_owned_active_vs_replica_struct records [ ] = {
2005-10-31 14:05:48 +03:00
/*
* unique vs . unique section
*/
2005-10-27 17:11:33 +04:00
/*
2005-10-31 13:14:05 +03:00
* unique , active vs . unique , active with same ip ( s ) , unchecked
2005-10-27 17:11:33 +04:00
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-27 17:11:33 +04:00
. line = __location__ ,
2005-10-31 13:14:05 +03:00
. name = _NBT_NAME ( " _UA_UA_SI_U " , 0x00 , NULL ) ,
2005-10-27 17:11:33 +04:00
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
2005-10-31 13:14:05 +03:00
. defend = {
. timeout = 0 ,
} ,
2005-10-27 17:11:33 +04:00
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
2005-10-31 13:14:05 +03:00
* unique , active vs . unique , active with different ip ( s ) , positive response
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-31 13:14:05 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_UA_DI_P " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 13:14:05 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-10-31 13:14:05 +03:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-31 13:14:05 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-31 13:14:05 +03:00
} ,
} ,
2005-11-02 20:15:17 +03:00
/*
* unique , active vs . unique , active with different ip ( s ) , positive response other ips
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 20:15:17 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_UA_DI_O " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 20:15:17 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 20:15:17 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-02 20:15:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 20:15:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 20:15:17 +03:00
} ,
} ,
2005-10-31 13:14:05 +03:00
/*
* unique , active vs . unique , active with different ip ( s ) , negative response
2005-10-27 17:11:33 +04:00
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-27 17:11:33 +04:00
. line = __location__ ,
2005-10-31 13:14:05 +03:00
. name = _NBT_NAME ( " _UA_UA_DI_N " , 0x00 , NULL ) ,
2005-10-27 17:11:33 +04:00
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
2005-10-31 13:14:05 +03:00
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = false ,
2005-10-31 13:14:05 +03:00
} ,
2005-10-27 17:11:33 +04:00
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-27 17:11:33 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
2005-10-31 13:14:05 +03:00
* unique , active vs . unique , tombstone with same ip ( s ) , unchecked
2005-10-27 17:11:33 +04:00
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-27 17:11:33 +04:00
. line = __location__ ,
2005-10-31 13:14:05 +03:00
. name = _NBT_NAME ( " _UA_UT_SI_U " , 0x00 , NULL ) ,
2005-10-27 17:11:33 +04:00
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
2005-10-31 13:14:05 +03:00
. defend = {
. timeout = 0 ,
} ,
2005-10-27 17:11:33 +04:00
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-27 17:11:33 +04:00
} ,
} ,
/*
2005-10-31 13:14:05 +03:00
* unique , active vs . unique , tombstone with different ip ( s ) , unchecked
2005-10-27 17:11:33 +04:00
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-27 17:11:33 +04:00
. line = __location__ ,
2005-10-31 13:14:05 +03:00
. name = _NBT_NAME ( " _UA_UT_DI_U " , 0x00 , NULL ) ,
2005-10-27 17:11:33 +04:00
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-27 17:11:33 +04:00
} ,
2005-10-31 13:14:05 +03:00
. defend = {
. timeout = 0 ,
} ,
2005-10-27 17:11:33 +04:00
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-27 17:11:33 +04:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-27 17:11:33 +04:00
} ,
} ,
2005-10-31 16:20:47 +03:00
/*
* unique vs . group section
*/
/*
* unique , active vs . group , active with same ip ( s ) , release expected
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-31 16:20:47 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_GA_SI_R " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 16:20:47 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. expect_release = true ,
2005-10-31 16:20:47 +03:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 16:20:47 +03:00
} ,
} ,
/*
* unique , active vs . group , active with different ip ( s ) , release expected
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-31 16:20:47 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_GA_DI_R " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 16:20:47 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. expect_release = true ,
2005-10-31 16:20:47 +03:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-31 16:20:47 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 16:20:47 +03:00
} ,
} ,
/*
* unique , active vs . group , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-31 16:20:47 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_GT_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 16:20:47 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-31 16:20:47 +03:00
} ,
} ,
/*
* unique , active vs . group , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-31 16:20:47 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_GT_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 16:20:47 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-31 16:20:47 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-31 16:20:47 +03:00
} ,
} ,
2005-10-31 21:19:43 +03:00
/*
* unique vs . special group section
*/
/*
* unique , active vs . sgroup , active with same ip ( s ) , release expected
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-31 21:19:43 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_SA_SI_R " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 21:19:43 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. expect_release = true ,
2005-10-31 21:19:43 +03:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 21:19:43 +03:00
} ,
} ,
/*
* unique , active vs . group , active with different ip ( s ) , release expected
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-31 21:19:43 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_SA_DI_R " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 21:19:43 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. expect_release = true ,
2005-10-31 21:19:43 +03:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-31 21:19:43 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 21:19:43 +03:00
} ,
} ,
/*
* unique , active vs . sgroup , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-31 21:19:43 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_ST_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 21:19:43 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-31 21:19:43 +03:00
} ,
} ,
/*
* unique , active vs . sgroup , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-10-31 21:19:43 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_ST_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-10-31 21:19:43 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-10-31 21:19:43 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-10-31 21:19:43 +03:00
} ,
} ,
2005-11-01 00:51:53 +03:00
/*
* unique vs . multi homed section
*/
/*
* unique , active vs . mhomed , active with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 00:51:53 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_MA_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 00:51:53 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* unique , active vs . mhomed , active with superset ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_MA_SP_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_all_num ,
. ips = ctx - > addresses_all ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 00:51:53 +03:00
} ,
} ,
/*
* unique , active vs . mhomed , active with different ip ( s ) , positive response
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 00:51:53 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_MA_DI_P " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 00:51:53 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-01 00:51:53 +03:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 00:51:53 +03:00
} ,
} ,
2005-11-02 20:15:17 +03:00
/*
* unique , active vs . mhomed , active with different ip ( s ) , positive response other ips
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 20:15:17 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_MA_DI_O " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 20:15:17 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 20:15:17 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-02 20:15:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 20:15:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 20:15:17 +03:00
} ,
} ,
2005-11-01 00:51:53 +03:00
/*
* unique , active vs . mhomed , active with different ip ( s ) , negative response
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 00:51:53 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_MA_DI_N " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 00:51:53 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = false ,
2005-11-01 00:51:53 +03:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 00:51:53 +03:00
} ,
} ,
/*
* unique , active vs . mhomed , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 00:51:53 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_MT_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 00:51:53 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 00:51:53 +03:00
} ,
} ,
/*
* unique , active vs . mhomed , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 00:51:53 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_MT_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 00:51:53 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 00:51:53 +03:00
} ,
} ,
2005-11-01 01:25:29 +03:00
/*
* normal group vs . unique section
*/
/*
* group , active vs . unique , active with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_UA_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . unique , active with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_UA_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:25:29 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . unique , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_UT_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . unique , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_UT_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:25:29 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* normal group vs . normal group section
*/
/*
* group , active vs . group , active with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_GA_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . group , active with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_GA_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:25:29 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . group , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_GT_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . group , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_GT_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:25:29 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* normal group vs . special group section
*/
/*
* group , active vs . sgroup , active with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_SA_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . sgroup , active with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_SA_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:25:29 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . sgroup , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_ST_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . sgroup , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_ST_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:25:29 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* normal group vs . multi homed section
*/
/*
* group , active vs . mhomed , active with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_MA_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . mhomed , active with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_MA_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:25:29 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . mhomed , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_MT_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
/*
* group , active vs . mhomed , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:25:29 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _GA_MT_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:25:29 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:25:29 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:25:29 +03:00
} ,
} ,
2005-11-01 01:48:58 +03:00
/*
* special group vs . unique section
*/
/*
* sgroup , active vs . unique , active with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_UA_SI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
/*
* sgroup , active vs . unique , active with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_UA_DI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:48:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
/*
* sgroup , active vs . unique , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_UT_SI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
/*
* sgroup , active vs . unique , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_UT_DI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:48:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
/*
* special group vs . normal group section
*/
/*
* sgroup , active vs . group , active with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_GA_SI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
/*
* sgroup , active vs . group , active with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_GA_DI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:48:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
/*
* sgroup , active vs . group , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_GT_SI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
/*
* sgroup , active vs . group , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_GT_DI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:48:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
/*
* special group vs . multi homed section
*/
/*
* sgroup , active vs . mhomed , active with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_MA_SI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
/*
* sgroup , active vs . mhomed , active with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_MA_DI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:48:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
/*
* sgroup , active vs . mhomed , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_MT_SI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
/*
* sgroup , active vs . mhomed , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-01 01:48:58 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_MT_DI_U " , 0x1C , NULL ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-01 01:48:58 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-01 01:48:58 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-01 01:48:58 +03:00
} ,
} ,
2005-11-02 18:56:24 +03:00
/*
* multi homed vs . unique section
*/
/*
* mhomed , active vs . unique , active with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_UA_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . unique , active with different ip ( s ) , positive response
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_UA_DI_P " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-02 18:56:24 +03:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 18:56:24 +03:00
} ,
} ,
2005-11-02 20:15:17 +03:00
/*
* mhomed , active vs . unique , active with different ip ( s ) , positive response other ips
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 20:15:17 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_UA_DI_O " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 20:15:17 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 20:15:17 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-02 20:15:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 20:15:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 20:15:17 +03:00
} ,
} ,
2005-11-02 18:56:24 +03:00
/*
* mhomed , active vs . unique , active with different ip ( s ) , negative response
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_UA_DI_N " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = false ,
2005-11-02 18:56:24 +03:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . unique , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_UT_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . unique , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_UT_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* multi homed vs . normal group section
*/
/*
* mhomed , active vs . group , active with same ip ( s ) , release expected
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_GA_SI_R " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. expect_release = true ,
2005-11-02 18:56:24 +03:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . group , active with different ip ( s ) , release expected
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_GA_DI_R " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. expect_release = true ,
2005-11-02 18:56:24 +03:00
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . group , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_GT_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . group , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_GT_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_GROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* multi homed vs . special group section
*/
/*
* mhomed , active vs . sgroup , active with same ip ( s ) , release expected
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_SA_SI_R " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. expect_release = true ,
2005-11-02 18:56:24 +03:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . group , active with different ip ( s ) , release expected
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_SA_DI_R " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. expect_release = true ,
2005-11-02 18:56:24 +03:00
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . sgroup , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_ST_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . sgroup , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_ST_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_1 ) ,
. ips = addresses_B_1 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* multi homed vs . multi homed section
*/
/*
* mhomed , active vs . mhomed , active with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MA_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , active with superset ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MA_SP_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_all_num ,
. ips = ctx - > addresses_all ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , active with different ip ( s ) , positive response
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MA_DI_P " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-02 18:56:24 +03:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 20:15:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 20:15:17 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , active with different ip ( s ) , positive response other ips
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 20:15:17 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MA_DI_O " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 20:15:17 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 20:15:17 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-02 20:15:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_A_3_4 ) ,
. ips = addresses_A_3_4 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 20:15:17 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , active with different ip ( s ) , negative response
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MA_DI_N " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = false ,
2005-11-02 18:56:24 +03:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , tombstone with same ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MT_SI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 18:56:24 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , tombstone with different ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-02 18:56:24 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MT_DI_U " , 0x00 , NULL ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-02 18:56:24 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-02 18:56:24 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-02 18:56:24 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-02 18:56:24 +03:00
} ,
} ,
2005-11-03 16:13:45 +03:00
/*
* some more multi homed test , including merging
*/
/*
* mhomed , active vs . mhomed , active with superset ip ( s ) , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-03 16:13:45 +03:00
. line = __location__ ,
. section = " Test Replica vs. owned active: some more MHOMED combinations " ,
. name = _NBT_NAME ( " _MA_MA_SP_U " , 0x00 , NULL ) ,
2005-12-05 13:03:10 +03:00
. comment = " C:MHOMED vs. B:ALL => B:ALL " ,
2005-11-03 16:13:45 +03:00
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_all_num ,
. ips = ctx - > addresses_all ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , active with same ips , unchecked
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-03 16:13:45 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MA_SM_U " , 0x00 , NULL ) ,
2005-12-05 13:03:10 +03:00
. comment = " C:MHOMED vs. B:MHOMED => B:MHOMED " ,
2005-12-05 10:56:22 +03:00
. skip = ( ctx - > addresses_mhomed_num < 2 ) ,
2005-11-03 16:13:45 +03:00
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , active with subset ip ( s ) , positive response
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-03 16:13:45 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MA_SB_P " , 0x00 , NULL ) ,
2005-12-05 13:03:10 +03:00
. comment = " C:MHOMED vs. B:BEST (C:MHOMED) => B:MHOMED " ,
2005-12-05 10:56:22 +03:00
. skip = ( ctx - > addresses_mhomed_num < 2 ) ,
2005-11-03 16:13:45 +03:00
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true
2005-11-03 16:13:45 +03:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. mhomed_merge = true
2005-11-03 16:13:45 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , active with subset ip ( s ) , positive response , with all addresses
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-03 16:13:45 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MA_SB_A " , 0x00 , NULL ) ,
2005-12-05 13:03:10 +03:00
. comment = " C:MHOMED vs. B:BEST (C:ALL) => B:MHOMED " ,
2005-11-03 16:13:45 +03:00
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_all_num ,
. ips = ctx - > addresses_all ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. mhomed_merge = true
2005-11-03 16:13:45 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , active with subset ip ( s ) , positive response , with replicas addresses
2005-11-03 22:12:36 +03:00
* TODO : check why the server sends a name release demand for one address ?
* the release demand has no effect to the database record . . .
2005-11-03 16:13:45 +03:00
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-03 16:13:45 +03:00
. line = __location__ ,
2005-11-23 15:30:57 +03:00
. name = _NBT_NAME ( " _MA_MA_SB_PRA " , 0x00 , NULL ) ,
2005-12-05 13:03:10 +03:00
. comment = " C:MHOMED vs. B:BEST (C:BEST) => C:MHOMED " ,
2005-12-05 10:56:22 +03:00
. skip = ( ctx - > addresses_all_num < 2 ) ,
2005-11-03 16:13:45 +03:00
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. late_release = true
2005-11-03 16:13:45 +03:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-03 16:13:45 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , active with subset ip ( s ) , positive response , with other addresses
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-03 16:13:45 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MA_SB_O " , 0x00 , NULL ) ,
2005-12-05 13:03:10 +03:00
. comment = " C:MHOMED vs. B:BEST (B:B_3_4) =>C:MHOMED " ,
2005-12-05 10:56:22 +03:00
. skip = ( ctx - > addresses_all_num < 2 ) ,
2005-11-03 16:13:45 +03:00
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-03 16:13:45 +03:00
} ,
} ,
/*
* mhomed , active vs . mhomed , active with subset ip ( s ) , negative response
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-03 16:13:45 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _MA_MA_SB_N " , 0x00 , NULL ) ,
2005-12-05 13:03:10 +03:00
. comment = " C:MHOMED vs. B:BEST (NEGATIVE) => B:BEST " ,
2005-12-05 10:56:22 +03:00
. skip = ( ctx - > addresses_mhomed_num < 2 ) ,
2005-11-03 16:13:45 +03:00
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = false
2005-11-03 16:13:45 +03:00
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
} ,
/*
* some more multi homed and unique test , including merging
*/
/*
* mhomed , active vs . unique , active with subset ip ( s ) , positive response
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-03 16:13:45 +03:00
. line = __location__ ,
. section = " Test Replica vs. owned active: some more UNIQUE,MHOMED combinations " ,
2005-11-23 15:30:57 +03:00
. name = _NBT_NAME ( " _MA_UA_SB_P " , 0x00 , NULL ) ,
2005-12-05 13:03:10 +03:00
. comment = " C:MHOMED vs. B:UNIQUE,BEST (C:MHOMED) => B:MHOMED " ,
2005-12-05 10:56:22 +03:00
. skip = ( ctx - > addresses_all_num < 2 ) ,
2005-11-03 16:13:45 +03:00
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-03 16:13:45 +03:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. mhomed_merge = true
2005-11-03 16:13:45 +03:00
} ,
} ,
2005-12-05 10:56:22 +03:00
/*
* unique , active vs . unique , active with different ip ( s ) , positive response , with replicas address
* TODO : check why the server sends a name release demand for one address ?
* the release demand has no effect to the database record . . .
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-12-05 10:56:22 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_UA_DI_PRA " , 0x00 , NULL ) ,
2005-12-05 13:03:10 +03:00
. comment = " C:BEST vs. B:BEST2 (C:BEST2,LR:BEST2) => C:BEST " ,
2005-12-05 10:56:22 +03:00
. skip = ( ctx - > addresses_all_num < 2 ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-12-05 10:56:22 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-12-05 10:56:22 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-12-05 10:56:22 +03:00
. num_ips = ctx - > addresses_best2_num ,
. ips = ctx - > addresses_best2 ,
2006-10-16 17:06:41 +04:00
. late_release = true
2005-12-05 10:56:22 +03:00
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-12-05 10:56:22 +03:00
. num_ips = ctx - > addresses_best2_num ,
. ips = ctx - > addresses_best2 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false ,
2005-12-05 10:56:22 +03:00
} ,
} ,
2005-11-03 16:13:45 +03:00
/*
* unique , active vs . unique , active with different ip ( s ) , positive response , with all addresses
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-03 16:13:45 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_UA_DI_A " , 0x00 , NULL ) ,
2005-12-05 13:03:10 +03:00
. comment = " C:BEST vs. B:BEST2 (C:ALL) => B:MHOMED " ,
2005-11-03 16:13:45 +03:00
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_all_num ,
. ips = ctx - > addresses_all ,
} ,
. replica = {
. type = WREPL_TYPE_UNIQUE ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_best2_num ,
. ips = ctx - > addresses_best2 ,
2006-10-16 17:06:41 +04:00
. mhomed_merge = true ,
2005-11-03 16:13:45 +03:00
} ,
} ,
/*
* unique , active vs . mhomed , active with different ip ( s ) , positive response , with all addresses
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-03 16:13:45 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _UA_MA_DI_A " , 0x00 , NULL ) ,
2005-12-05 13:24:07 +03:00
. comment = " C:BEST vs. B:BEST2 (C:ALL) => B:MHOMED " ,
2005-11-03 16:13:45 +03:00
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = 0 ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-03 16:13:45 +03:00
} ,
. defend = {
. timeout = 10 ,
2006-10-16 17:06:41 +04:00
. positive = true ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_all_num ,
. ips = ctx - > addresses_all ,
} ,
. replica = {
. type = WREPL_TYPE_MHOMED ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-03 16:13:45 +03:00
. num_ips = ctx - > addresses_best2_num ,
. ips = ctx - > addresses_best2 ,
2006-10-16 17:06:41 +04:00
. mhomed_merge = true ,
2005-11-03 16:13:45 +03:00
} ,
} ,
2005-11-11 11:02:50 +03:00
/*
* special group vs . special group merging section
*/
/*
2005-11-11 11:56:38 +03:00
* sgroup , active vs . sgroup , active with different ip ( s )
2005-11-11 11:02:50 +03:00
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-11 11:02:50 +03:00
. line = __location__ ,
. section = " Test Replica vs. owned active: SGROUP vs. SGROUP tests " ,
. name = _NBT_NAME ( " _SA_SA_DI_U " , 0x1C , NULL ) ,
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-11 11:02:50 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-11 11:02:50 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-11 11:02:50 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. sgroup_merge = true
2005-11-11 11:02:50 +03:00
} ,
} ,
2005-11-11 11:56:38 +03:00
/*
* sgroup , active vs . sgroup , active with same ip ( s )
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-11 11:56:38 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_SA_SI_U " , 0x1C , NULL ) ,
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-11 11:56:38 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. sgroup_merge = true
2005-11-11 11:56:38 +03:00
} ,
} ,
/*
* sgroup , active vs . sgroup , active with superset ip ( s )
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-11 11:56:38 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_SA_SP_U " , 0x1C , NULL ) ,
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-11 11:56:38 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_all_num ,
. ips = ctx - > addresses_all ,
2006-10-16 17:06:41 +04:00
. sgroup_merge = true
2005-11-11 11:56:38 +03:00
} ,
} ,
/*
* sgroup , active vs . sgroup , active with subset ip ( s )
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-11 11:56:38 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_SA_SB_U " , 0x1C , NULL ) ,
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-11 11:56:38 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_ACTIVE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. sgroup_merge = true
2005-11-11 11:56:38 +03:00
} ,
} ,
/*
* sgroup , active vs . sgroup , tombstone with different ip ( s )
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-11 11:56:38 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_ST_DI_U " , 0x1C , NULL ) ,
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-11 11:56:38 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ARRAY_SIZE ( addresses_B_3_4 ) ,
. ips = addresses_B_3_4 ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-11 11:56:38 +03:00
} ,
} ,
/*
* sgroup , active vs . sgroup , tombstone with same ip ( s )
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-11 11:56:38 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_ST_SI_U " , 0x1C , NULL ) ,
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-11 11:56:38 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-11 11:56:38 +03:00
} ,
} ,
/*
* sgroup , active vs . sgroup , tombstone with superset ip ( s )
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-11 11:56:38 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_ST_SP_U " , 0x1C , NULL ) ,
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-11 11:56:38 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_all_num ,
. ips = ctx - > addresses_all ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-11 11:56:38 +03:00
} ,
} ,
/*
* sgroup , active vs . sgroup , tombstone with subset ip ( s )
*/
{
2011-04-30 11:29:16 +04:00
. tctx = tctx ,
2005-11-11 11:56:38 +03:00
. line = __location__ ,
. name = _NBT_NAME ( " _SA_ST_SB_U " , 0x1C , NULL ) ,
. skip = ( ctx - > addresses_all_num < 3 ) ,
. wins = {
. nb_flags = NBT_NM_GROUP ,
2006-10-16 17:06:41 +04:00
. mhomed = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_mhomed_num ,
. ips = ctx - > addresses_mhomed ,
2006-10-16 17:06:41 +04:00
. apply_expected = true
2005-11-11 11:56:38 +03:00
} ,
. defend = {
. timeout = 0 ,
} ,
. replica = {
. type = WREPL_TYPE_SGROUP ,
. state = WREPL_STATE_TOMBSTONE ,
. node = WREPL_NODE_B ,
2006-10-16 17:06:41 +04:00
. is_static = false ,
2005-11-11 11:56:38 +03:00
. num_ips = ctx - > addresses_best_num ,
. ips = ctx - > addresses_best ,
2006-10-16 17:06:41 +04:00
. apply_expected = false
2005-11-11 11:56:38 +03:00
} ,
} ,
2005-10-27 17:11:33 +04:00
} ;
2005-10-31 13:14:05 +03:00
if ( ! ctx - > nbtsock_srv ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " SKIP: Test Replica records vs. owned active records: not bound to port[%d] \n " ,
2010-07-16 08:32:42 +04:00
lpcfg_nbt_port ( tctx - > lp_ctx ) ) ;
2006-10-16 17:06:41 +04:00
return true ;
2005-10-27 17:11:33 +04:00
}
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Test Replica records vs. owned active records \n " ) ;
2005-10-27 17:11:33 +04:00
for ( i = 0 ; ret & & i < ARRAY_SIZE ( records ) ; i + + ) {
2005-10-31 13:14:05 +03:00
struct timeval end ;
2005-11-03 16:13:45 +03:00
struct test_conflict_owned_active_vs_replica_struct record = records [ i ] ;
uint32_t j , count = 1 ;
const char * action ;
2005-10-31 13:14:05 +03:00
2005-11-11 11:02:50 +03:00
if ( records [ i ] . wins . mhomed | | records [ i ] . name . type = = 0x1C ) {
2005-11-03 16:13:45 +03:00
count = records [ i ] . wins . num_ips ;
}
2005-10-27 17:11:33 +04:00
2005-11-03 16:13:45 +03:00
if ( records [ i ] . section ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " %s \n " , records [ i ] . section ) ;
2005-11-03 16:13:45 +03:00
}
if ( records [ i ] . skip ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " %s => SKIPPED \n " , nbt_name_string ( ctx , & records [ i ] . name ) ) ;
2005-11-03 16:13:45 +03:00
continue ;
}
if ( records [ i ] . replica . mhomed_merge ) {
action = " MHOMED_MERGE " ;
2005-11-11 11:02:50 +03:00
} else if ( records [ i ] . replica . sgroup_merge ) {
action = " SGROUP_MERGE " ;
2005-11-03 16:13:45 +03:00
} else if ( records [ i ] . replica . apply_expected ) {
action = " REPLACE " ;
} else {
action = " NOT REPLACE " ;
}
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " %s%s%s => %s \n " ,
2005-12-05 13:03:10 +03:00
nbt_name_string ( ctx , & records [ i ] . name ) ,
( records [ i ] . comment ? " : " : " " ) ,
( records [ i ] . comment ? records [ i ] . comment : " " ) ,
action ) ;
2005-11-03 16:13:45 +03:00
/* Prepare for multi homed registration */
ZERO_STRUCT ( records [ i ] . defend ) ;
records [ i ] . defend . timeout = 10 ;
2006-10-16 17:06:41 +04:00
records [ i ] . defend . positive = true ;
2005-10-31 13:14:05 +03:00
nbt_set_incoming_handler ( ctx - > nbtsock_srv ,
test_conflict_owned_active_vs_replica_handler ,
& records [ i ] ) ;
2005-11-03 16:13:45 +03:00
if ( ctx - > nbtsock_srv2 ) {
nbt_set_incoming_handler ( ctx - > nbtsock_srv2 ,
test_conflict_owned_active_vs_replica_handler ,
& records [ i ] ) ;
}
2005-10-31 13:14:05 +03:00
2005-10-27 17:11:33 +04:00
/*
* Setup Register
*/
2005-11-03 16:13:45 +03:00
for ( j = 0 ; j < count ; j + + ) {
struct nbt_name_request * req ;
name_register - > in . name = records [ i ] . name ;
name_register - > in . dest_addr = ctx - > address ;
2010-07-16 08:32:42 +04:00
name_register - > in . dest_port = lpcfg_nbt_port ( tctx - > lp_ctx ) ;
2005-11-03 16:13:45 +03:00
name_register - > in . address = records [ i ] . wins . ips [ j ] . ip ;
name_register - > in . nb_flags = records [ i ] . wins . nb_flags ;
2006-10-16 17:06:41 +04:00
name_register - > in . register_demand = false ;
name_register - > in . broadcast = false ;
2005-11-03 16:13:45 +03:00
name_register - > in . multi_homed = records [ i ] . wins . mhomed ;
name_register - > in . ttl = 300000 ;
name_register - > in . timeout = 70 ;
name_register - > in . retries = 0 ;
req = nbt_name_register_send ( ctx - > nbtsock , name_register ) ;
/* push the request on the wire */
2010-05-25 23:23:55 +04:00
tevent_loop_once ( ctx - > nbtsock - > event_ctx ) ;
2005-11-03 16:13:45 +03:00
/*
* if we register multiple addresses ,
* the server will do name queries to see if the old addresses
* are still alive
*/
2005-11-11 11:02:50 +03:00
if ( records [ i ] . wins . mhomed & & j > 0 ) {
2005-11-03 16:13:45 +03:00
end = timeval_current_ofs ( records [ i ] . defend . timeout , 0 ) ;
2006-10-16 17:06:41 +04:00
records [ i ] . defend . ret = true ;
2005-11-03 16:13:45 +03:00
while ( records [ i ] . defend . timeout > 0 ) {
2010-05-25 23:23:55 +04:00
tevent_loop_once ( ctx - > nbtsock_srv - > event_ctx ) ;
2005-11-03 16:13:45 +03:00
if ( timeval_expired ( & end ) ) break ;
}
ret & = records [ i ] . defend . ret ;
}
2005-10-27 17:11:33 +04:00
2005-11-03 16:13:45 +03:00
status = nbt_name_register_recv ( req , ctx , name_register ) ;
if ( NT_STATUS_EQUAL ( status , NT_STATUS_IO_TIMEOUT ) ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " No response from %s for name register \n " , ctx - > address ) ;
ret = false ;
2005-11-03 16:13:45 +03:00
}
if ( ! NT_STATUS_IS_OK ( status ) ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Bad response from %s for name register - %s \n " ,
2005-11-03 16:13:45 +03:00
ctx - > address , nt_errstr ( status ) ) ;
2006-10-16 17:06:41 +04:00
ret = false ;
2005-11-03 16:13:45 +03:00
}
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , name_register - > out . rcode , 0 ) ;
CHECK_VALUE_STRING ( tctx , name_register - > out . reply_from , ctx - > address ) ;
CHECK_VALUE ( tctx , name_register - > out . name . type , records [ i ] . name . type ) ;
CHECK_VALUE_STRING ( tctx , name_register - > out . name . name , records [ i ] . name . name ) ;
CHECK_VALUE_STRING ( tctx , name_register - > out . name . scope , records [ i ] . name . scope ) ;
CHECK_VALUE_STRING ( tctx , name_register - > out . reply_addr , records [ i ] . wins . ips [ j ] . ip ) ;
2005-10-27 17:11:33 +04:00
}
2005-11-03 16:13:45 +03:00
/* Prepare for the current test */
records [ i ] . defend = record . defend ;
nbt_set_incoming_handler ( ctx - > nbtsock_srv ,
test_conflict_owned_active_vs_replica_handler ,
& records [ i ] ) ;
if ( ctx - > nbtsock_srv2 ) {
nbt_set_incoming_handler ( ctx - > nbtsock_srv2 ,
test_conflict_owned_active_vs_replica_handler ,
& records [ i ] ) ;
2005-10-27 17:11:33 +04:00
}
/*
* Setup Replica
*/
wins_name - > name = & records [ i ] . name ;
wins_name - > flags = WREPL_NAME_FLAGS ( records [ i ] . replica . type ,
records [ i ] . replica . state ,
records [ i ] . replica . node ,
records [ i ] . replica . is_static ) ;
wins_name - > id = + + ctx - > b . max_version ;
if ( wins_name - > flags & 2 ) {
wins_name - > addresses . addresses . num_ips = records [ i ] . replica . num_ips ;
2010-01-29 18:42:24 +03:00
wins_name - > addresses . addresses . ips = discard_const_p ( struct wrepl_ip ,
records [ i ] . replica . ips ) ;
2005-10-27 17:11:33 +04:00
} else {
wins_name - > addresses . ip = records [ i ] . replica . ips [ 0 ] . ip ;
}
wins_name - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , & ctx - > b , wins_name ) ;
2005-10-31 13:14:05 +03:00
/*
* wait for the name query , which is handled in
* test_conflict_owned_active_vs_replica_handler ( )
*/
end = timeval_current_ofs ( records [ i ] . defend . timeout , 0 ) ;
2006-10-16 17:06:41 +04:00
records [ i ] . defend . ret = true ;
2005-10-31 13:14:05 +03:00
while ( records [ i ] . defend . timeout > 0 ) {
2010-05-25 23:23:55 +04:00
tevent_loop_once ( ctx - > nbtsock_srv - > event_ctx ) ;
2005-10-31 13:14:05 +03:00
if ( timeval_expired ( & end ) ) break ;
}
2005-10-31 16:20:47 +03:00
ret & = records [ i ] . defend . ret ;
2005-10-31 13:14:05 +03:00
2005-11-03 22:12:36 +03:00
if ( records [ i ] . defend . late_release ) {
records [ i ] . defend = record . defend ;
2006-10-16 17:06:41 +04:00
records [ i ] . defend . expect_release = true ;
2005-11-03 22:12:36 +03:00
/*
* wait for the name release demand , which is handled in
* test_conflict_owned_active_vs_replica_handler ( )
*/
end = timeval_current_ofs ( records [ i ] . defend . timeout , 0 ) ;
2006-10-16 17:06:41 +04:00
records [ i ] . defend . ret = true ;
2005-11-03 22:12:36 +03:00
while ( records [ i ] . defend . timeout > 0 ) {
2010-05-25 23:23:55 +04:00
tevent_loop_once ( ctx - > nbtsock_srv - > event_ctx ) ;
2005-11-03 22:12:36 +03:00
if ( timeval_expired ( & end ) ) break ;
}
ret & = records [ i ] . defend . ret ;
}
2005-11-03 16:13:45 +03:00
if ( records [ i ] . replica . mhomed_merge ) {
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_mhomed_merged ( tctx , ctx , & ctx - > c ,
2005-11-03 16:13:45 +03:00
records [ i ] . wins . num_ips , records [ i ] . wins . ips ,
& ctx - > b ,
records [ i ] . replica . num_ips , records [ i ] . replica . ips ,
wins_name ) ;
2005-11-11 11:02:50 +03:00
} else if ( records [ i ] . replica . sgroup_merge ) {
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_sgroup_merged ( tctx , ctx , NULL ,
2005-11-11 14:44:17 +03:00
& ctx - > c ,
2005-11-11 11:02:50 +03:00
records [ i ] . wins . num_ips , records [ i ] . wins . ips ,
2005-11-11 14:44:17 +03:00
& ctx - > b ,
2005-11-11 11:02:50 +03:00
records [ i ] . replica . num_ips , records [ i ] . replica . ips ,
wins_name ) ;
2005-11-03 16:13:45 +03:00
} else {
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_is_applied ( tctx , ctx , & ctx - > b , wins_name ,
2005-11-03 16:13:45 +03:00
records [ i ] . replica . apply_expected ) ;
}
2005-10-27 17:11:33 +04:00
2005-11-03 16:13:45 +03:00
if ( records [ i ] . replica . apply_expected | |
records [ i ] . replica . mhomed_merge ) {
2005-10-27 17:11:33 +04:00
wins_name - > name = & records [ i ] . name ;
wins_name - > flags = WREPL_NAME_FLAGS ( WREPL_TYPE_UNIQUE ,
WREPL_STATE_TOMBSTONE ,
2006-10-16 17:06:41 +04:00
WREPL_NODE_B , false ) ;
2005-10-27 17:11:33 +04:00
wins_name - > id = + + ctx - > b . max_version ;
wins_name - > addresses . ip = addresses_B_1 [ 0 ] . ip ;
wins_name - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , & ctx - > b , wins_name ) ;
ret & = test_wrepl_is_applied ( tctx , ctx , & ctx - > b , wins_name , true ) ;
2005-10-27 17:11:33 +04:00
} else {
2005-11-03 16:13:45 +03:00
for ( j = 0 ; j < count ; j + + ) {
struct nbt_name_socket * nbtsock = ctx - > nbtsock ;
2006-01-10 01:12:53 +03:00
if ( ctx - > myaddr2 & & strcmp ( records [ i ] . wins . ips [ j ] . ip , ctx - > myaddr2 - > addr ) = = 0 ) {
2005-11-03 16:13:45 +03:00
nbtsock = ctx - > nbtsock2 ;
}
release - > in . name = records [ i ] . name ;
release - > in . dest_addr = ctx - > address ;
2010-07-16 08:32:42 +04:00
release - > in . dest_port = lpcfg_nbt_port ( tctx - > lp_ctx ) ;
2005-11-03 16:13:45 +03:00
release - > in . address = records [ i ] . wins . ips [ j ] . ip ;
release - > in . nb_flags = records [ i ] . wins . nb_flags ;
2006-10-16 17:06:41 +04:00
release - > in . broadcast = false ;
2005-11-03 16:13:45 +03:00
release - > in . timeout = 30 ;
release - > in . retries = 0 ;
status = nbt_name_release ( nbtsock , ctx , release ) ;
if ( NT_STATUS_EQUAL ( status , NT_STATUS_IO_TIMEOUT ) ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " No response from %s for name release \n " , ctx - > address ) ;
return false ;
2005-11-03 16:13:45 +03:00
}
if ( ! NT_STATUS_IS_OK ( status ) ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " Bad response from %s for name query - %s \n " ,
2005-11-03 16:13:45 +03:00
ctx - > address , nt_errstr ( status ) ) ;
2006-10-16 17:06:41 +04:00
return false ;
2005-11-03 16:13:45 +03:00
}
2006-10-16 17:06:41 +04:00
CHECK_VALUE ( tctx , release - > out . rcode , 0 ) ;
2005-10-27 17:11:33 +04:00
}
2005-11-11 11:02:50 +03:00
if ( records [ i ] . replica . sgroup_merge ) {
/* clean up the SGROUP record */
wins_name - > name = & records [ i ] . name ;
wins_name - > flags = WREPL_NAME_FLAGS ( WREPL_TYPE_SGROUP ,
WREPL_STATE_ACTIVE ,
2006-10-16 17:06:41 +04:00
WREPL_NODE_B , false ) ;
2005-11-11 11:02:50 +03:00
wins_name - > id = + + ctx - > b . max_version ;
wins_name - > addresses . addresses . num_ips = 0 ;
wins_name - > addresses . addresses . ips = NULL ;
wins_name - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , & ctx - > b , wins_name ) ;
2005-11-11 11:02:50 +03:00
/* take ownership of the SGROUP record */
wins_name - > name = & records [ i ] . name ;
wins_name - > flags = WREPL_NAME_FLAGS ( WREPL_TYPE_SGROUP ,
WREPL_STATE_ACTIVE ,
2006-10-16 17:06:41 +04:00
WREPL_NODE_B , false ) ;
2005-11-11 11:02:50 +03:00
wins_name - > id = + + ctx - > b . max_version ;
wins_name - > addresses . addresses . num_ips = ARRAY_SIZE ( addresses_B_1 ) ;
2010-01-29 18:42:24 +03:00
wins_name - > addresses . addresses . ips = discard_const_p ( struct wrepl_ip ,
addresses_B_1 ) ;
2005-11-11 11:02:50 +03:00
wins_name - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , & ctx - > b , wins_name ) ;
ret & = test_wrepl_is_applied ( tctx , ctx , & ctx - > b , wins_name , true ) ;
2005-11-11 11:02:50 +03:00
/* overwrite the SGROUP record with unique,tombstone */
wins_name - > name = & records [ i ] . name ;
wins_name - > flags = WREPL_NAME_FLAGS ( WREPL_TYPE_UNIQUE ,
WREPL_STATE_TOMBSTONE ,
2006-10-16 17:06:41 +04:00
WREPL_NODE_B , false ) ;
2005-11-11 11:02:50 +03:00
wins_name - > id = + + ctx - > b . max_version ;
wins_name - > addresses . ip = addresses_A_1 [ 0 ] . ip ;
wins_name - > unknown = " 255.255.255.255 " ;
2006-10-16 17:06:41 +04:00
ret & = test_wrepl_update_one ( tctx , ctx , & ctx - > b , wins_name ) ;
ret & = test_wrepl_is_applied ( tctx , ctx , & ctx - > b , wins_name , true ) ;
2005-11-11 11:02:50 +03:00
}
2005-10-27 17:11:33 +04:00
}
2005-10-31 16:20:47 +03:00
2005-10-27 17:11:33 +04:00
if ( ! ret ) {
2006-10-16 17:06:41 +04:00
torture_comment ( tctx , " conflict handled wrong or record[%u]: %s \n " , i , records [ i ] . line ) ;
2005-10-27 17:11:33 +04:00
return ret ;
}
}
return ret ;
}
2011-04-30 11:29:16 +04:00
# define __NBT_LABEL_CAT1__(a,b) a##b
# define __NBT_LABEL_CAT2__(a,b) __NBT_LABEL_CAT1__(a,b)
# define _NBT_LABEL __NBT_LABEL_CAT2__(_label_, __LINE__)
2005-10-31 13:14:05 +03:00
# define _NBT_ASSERT(v, correct) do { \
2011-04-30 11:29:16 +04:00
bool _ret = true ; \
torture_assert_int_equal_goto ( rec - > tctx , v , correct , \
_ret , _NBT_LABEL , " Invalid int value " ) ; \
_NBT_LABEL : \
if ( ! _ret ) { \
2005-10-31 13:14:05 +03:00
return ; \
} \
} while ( 0 )
# define _NBT_ASSERT_STRING(v, correct) do { \
2011-04-30 11:29:16 +04:00
bool _ret = true ; \
torture_assert_str_equal_goto ( rec - > tctx , v , correct , \
_ret , _NBT_LABEL , " Invalid string value " ) ; \
_NBT_LABEL : \
if ( ! _ret ) { \
2005-10-31 13:14:05 +03:00
return ; \
} \
} while ( 0 )
2005-10-31 16:20:47 +03:00
static void test_conflict_owned_active_vs_replica_handler_query ( struct nbt_name_socket * nbtsock ,
struct nbt_name_packet * req_packet ,
2006-01-10 01:12:53 +03:00
struct socket_address * src )
2005-10-31 16:20:47 +03:00
{
struct nbt_name * name ;
struct nbt_name_packet * rep_packet ;
2007-09-07 19:08:14 +04:00
struct test_conflict_owned_active_vs_replica_struct * rec =
2008-09-23 11:02:16 +04:00
( struct test_conflict_owned_active_vs_replica_struct * ) nbtsock - > incoming . private_data ;
2005-10-31 16:20:47 +03:00
_NBT_ASSERT ( req_packet - > qdcount , 1 ) ;
_NBT_ASSERT ( req_packet - > questions [ 0 ] . question_type , NBT_QTYPE_NETBIOS ) ;
_NBT_ASSERT ( req_packet - > questions [ 0 ] . question_class , NBT_QCLASS_IP ) ;
name = & req_packet - > questions [ 0 ] . name ;
2005-10-31 13:14:05 +03:00
_NBT_ASSERT_STRING ( name - > name , rec - > name . name ) ;
2011-04-30 11:40:11 +04:00
_NBT_ASSERT ( name - > type , rec - > name . type ) ;
2005-10-31 13:14:05 +03:00
_NBT_ASSERT_STRING ( name - > scope , rec - > name . scope ) ;
2006-10-16 17:06:41 +04:00
_NBT_ASSERT ( rec - > defend . expect_release , false ) ;
2005-10-31 16:20:47 +03:00
2005-10-31 13:14:05 +03:00
rep_packet = talloc_zero ( nbtsock , struct nbt_name_packet ) ;
if ( rep_packet = = NULL ) return ;
rep_packet - > name_trn_id = req_packet - > name_trn_id ;
rep_packet - > ancount = 1 ;
rep_packet - > answers = talloc_array ( rep_packet , struct nbt_res_rec , 1 ) ;
if ( rep_packet - > answers = = NULL ) return ;
rep_packet - > answers [ 0 ] . name = * name ;
rep_packet - > answers [ 0 ] . rr_class = NBT_QCLASS_IP ;
rep_packet - > answers [ 0 ] . ttl = 0 ;
if ( rec - > defend . positive ) {
2005-11-02 20:15:17 +03:00
uint32_t i , num_ips ;
const struct wrepl_ip * ips ;
if ( rec - > defend . num_ips > 0 ) {
num_ips = rec - > defend . num_ips ;
ips = rec - > defend . ips ;
} else {
num_ips = rec - > wins . num_ips ;
ips = rec - > wins . ips ;
}
2005-10-31 13:14:05 +03:00
/* send a positive reply */
2010-09-30 04:22:09 +04:00
rep_packet - > operation =
NBT_FLAG_REPLY |
NBT_OPCODE_QUERY |
NBT_FLAG_AUTHORITATIVE |
2005-10-31 13:14:05 +03:00
NBT_FLAG_RECURSION_DESIRED |
NBT_FLAG_RECURSION_AVAIL ;
2005-10-31 16:20:47 +03:00
rep_packet - > answers [ 0 ] . rr_type = NBT_QTYPE_NETBIOS ;
2005-11-02 20:15:17 +03:00
rep_packet - > answers [ 0 ] . rdata . netbios . length = num_ips * 6 ;
2005-10-31 13:14:05 +03:00
rep_packet - > answers [ 0 ] . rdata . netbios . addresses =
2005-11-02 20:15:17 +03:00
talloc_array ( rep_packet - > answers , struct nbt_rdata_address , num_ips ) ;
2005-10-31 13:14:05 +03:00
if ( rep_packet - > answers [ 0 ] . rdata . netbios . addresses = = NULL ) return ;
2005-11-02 20:15:17 +03:00
for ( i = 0 ; i < num_ips ; i + + ) {
2005-10-31 13:14:05 +03:00
struct nbt_rdata_address * addr =
& rep_packet - > answers [ 0 ] . rdata . netbios . addresses [ i ] ;
addr - > nb_flags = rec - > wins . nb_flags ;
2005-11-02 20:15:17 +03:00
addr - > ipaddr = ips [ i ] . ip ;
2005-10-31 13:14:05 +03:00
}
DEBUG ( 2 , ( " Sending positive name query reply for %s to %s:%d \n " ,
nbt_name_string ( rep_packet , name ) , src - > addr , src - > port ) ) ;
} else {
/* send a negative reply */
rep_packet - > operation =
2010-09-30 04:22:09 +04:00
NBT_FLAG_REPLY |
NBT_OPCODE_QUERY |
NBT_FLAG_AUTHORITATIVE |
2005-10-31 13:14:05 +03:00
NBT_RCODE_NAM ;
2005-10-31 16:20:47 +03:00
rep_packet - > answers [ 0 ] . rr_type = NBT_QTYPE_NULL ;
2005-10-31 13:14:05 +03:00
ZERO_STRUCT ( rep_packet - > answers [ 0 ] . rdata ) ;
DEBUG ( 2 , ( " Sending negative name query reply for %s to %s:%d \n " ,
nbt_name_string ( rep_packet , name ) , src - > addr , src - > port ) ) ;
}
nbt_name_reply_send ( nbtsock , src , rep_packet ) ;
talloc_free ( rep_packet ) ;
/* make sure we push the reply to the wire */
2008-08-13 18:53:13 +04:00
while ( nbtsock - > send_queue ) {
2010-05-25 23:23:55 +04:00
tevent_loop_once ( nbtsock - > event_ctx ) ;
2008-08-13 18:53:13 +04:00
}
2010-09-16 23:36:37 +04:00
smb_msleep ( 1000 ) ;
2005-10-31 13:14:05 +03:00
2005-10-31 16:20:47 +03:00
rec - > defend . timeout = 0 ;
2006-10-16 17:06:41 +04:00
rec - > defend . ret = true ;
2005-10-31 16:20:47 +03:00
}
2006-10-16 17:06:41 +04:00
static void test_conflict_owned_active_vs_replica_handler_release (
struct nbt_name_socket * nbtsock ,
2005-10-31 16:20:47 +03:00
struct nbt_name_packet * req_packet ,
2006-01-10 01:12:53 +03:00
struct socket_address * src )
2005-10-31 16:20:47 +03:00
{
struct nbt_name * name ;
struct nbt_name_packet * rep_packet ;
2007-09-07 19:08:14 +04:00
struct test_conflict_owned_active_vs_replica_struct * rec =
2008-09-23 11:02:16 +04:00
( struct test_conflict_owned_active_vs_replica_struct * ) nbtsock - > incoming . private_data ;
2005-10-31 16:20:47 +03:00
_NBT_ASSERT ( req_packet - > qdcount , 1 ) ;
_NBT_ASSERT ( req_packet - > questions [ 0 ] . question_type , NBT_QTYPE_NETBIOS ) ;
_NBT_ASSERT ( req_packet - > questions [ 0 ] . question_class , NBT_QCLASS_IP ) ;
name = & req_packet - > questions [ 0 ] . name ;
_NBT_ASSERT_STRING ( name - > name , rec - > name . name ) ;
2011-04-30 11:40:11 +04:00
_NBT_ASSERT ( name - > type , rec - > name . type ) ;
2005-10-31 16:20:47 +03:00
_NBT_ASSERT_STRING ( name - > scope , rec - > name . scope ) ;
2006-10-16 17:06:41 +04:00
_NBT_ASSERT ( rec - > defend . expect_release , true ) ;
2005-10-31 16:20:47 +03:00
rep_packet = talloc_zero ( nbtsock , struct nbt_name_packet ) ;
if ( rep_packet = = NULL ) return ;
rep_packet - > name_trn_id = req_packet - > name_trn_id ;
rep_packet - > ancount = 1 ;
2010-09-30 04:22:09 +04:00
rep_packet - > operation =
NBT_FLAG_REPLY |
2005-10-31 16:20:47 +03:00
NBT_OPCODE_RELEASE |
2010-09-30 04:22:09 +04:00
NBT_FLAG_AUTHORITATIVE ;
2005-10-31 16:20:47 +03:00
rep_packet - > answers = talloc_array ( rep_packet , struct nbt_res_rec , 1 ) ;
if ( rep_packet - > answers = = NULL ) return ;
rep_packet - > answers [ 0 ] . name = * name ;
rep_packet - > answers [ 0 ] . rr_type = NBT_QTYPE_NETBIOS ;
rep_packet - > answers [ 0 ] . rr_class = NBT_QCLASS_IP ;
rep_packet - > answers [ 0 ] . ttl = req_packet - > additional [ 0 ] . ttl ;
rep_packet - > answers [ 0 ] . rdata = req_packet - > additional [ 0 ] . rdata ;
DEBUG ( 2 , ( " Sending name release reply for %s to %s:%d \n " ,
nbt_name_string ( rep_packet , name ) , src - > addr , src - > port ) ) ;
nbt_name_reply_send ( nbtsock , src , rep_packet ) ;
talloc_free ( rep_packet ) ;
/* make sure we push the reply to the wire */
2008-08-13 18:53:13 +04:00
while ( nbtsock - > send_queue ) {
2010-05-25 23:23:55 +04:00
tevent_loop_once ( nbtsock - > event_ctx ) ;
2008-08-13 18:53:13 +04:00
}
2010-09-16 23:36:37 +04:00
smb_msleep ( 1000 ) ;
2005-10-31 16:20:47 +03:00
rec - > defend . timeout = 0 ;
2006-10-16 17:06:41 +04:00
rec - > defend . ret = true ;
2005-10-31 16:20:47 +03:00
}
static void test_conflict_owned_active_vs_replica_handler ( struct nbt_name_socket * nbtsock ,
struct nbt_name_packet * req_packet ,
2006-01-10 01:12:53 +03:00
struct socket_address * src )
2005-10-31 16:20:47 +03:00
{
2007-09-07 19:08:14 +04:00
struct test_conflict_owned_active_vs_replica_struct * rec =
2008-09-23 11:02:16 +04:00
( struct test_conflict_owned_active_vs_replica_struct * ) nbtsock - > incoming . private_data ;
2011-04-30 12:14:54 +04:00
struct nbt_name * name = & req_packet - > questions [ 0 ] . name ;
if ( req_packet - > operation & NBT_FLAG_BROADCAST ) {
torture_comment ( rec - > tctx ,
" %s: incoming packet name[%s] flags[0x%08X] from[%s] \n " ,
__location__ ,
nbt_name_string ( rec - > tctx , name ) ,
req_packet - > operation ,
src - > addr ) ;
return ;
}
2005-10-31 16:20:47 +03:00
2006-10-16 17:06:41 +04:00
rec - > defend . ret = false ;
2005-10-31 16:20:47 +03:00
switch ( req_packet - > operation & NBT_OPCODE ) {
case NBT_OPCODE_QUERY :
test_conflict_owned_active_vs_replica_handler_query ( nbtsock , req_packet , src ) ;
break ;
case NBT_OPCODE_RELEASE :
test_conflict_owned_active_vs_replica_handler_release ( nbtsock , req_packet , src ) ;
break ;
default :
2011-04-30 12:14:54 +04:00
torture_comment ( rec - > tctx ,
" %s: unexpected packet name[%s] flags[0x%08X] from[%s] \n " ,
__location__ ,
nbt_name_string ( rec - > tctx , name ) ,
req_packet - > operation ,
src - > addr ) ;
_NBT_ASSERT ( ( req_packet - > operation & NBT_OPCODE ) , NBT_OPCODE_QUERY ) ;
break ;
2005-10-31 16:20:47 +03:00
}
2005-10-31 13:14:05 +03:00
}
2005-10-15 16:30:08 +04:00
2005-02-16 13:04:52 +03:00
/*
2006-10-16 17:06:41 +04:00
test WINS replication replica conflicts operations
2005-02-16 13:04:52 +03:00
*/
2006-10-16 17:06:41 +04:00
static bool torture_nbt_winsreplication_replica ( struct torture_context * tctx )
2005-02-16 13:04:52 +03:00
{
2006-10-16 17:06:41 +04:00
bool ret = true ;
struct test_wrepl_conflict_conn * ctx ;
2005-02-16 13:04:52 +03:00
const char * address ;
struct nbt_name name ;
2005-10-13 20:27:05 +04:00
2006-10-16 17:06:41 +04:00
if ( ! torture_nbt_get_name ( tctx , & name , & address ) )
return false ;
2005-02-16 13:04:52 +03:00
2006-10-16 17:06:41 +04:00
ctx = test_create_conflict_ctx ( tctx , address ) ;
if ( ! ctx ) return false ;
2005-02-16 13:04:52 +03:00
2006-10-16 17:06:41 +04:00
ret & = test_conflict_same_owner ( tctx , ctx ) ;
ret & = test_conflict_different_owner ( tctx , ctx ) ;
2006-02-22 15:10:29 +03:00
return ret ;
}
/*
2006-10-16 17:06:41 +04:00
test WINS replication owned conflicts operations
2006-02-22 15:10:29 +03:00
*/
2006-10-16 17:06:41 +04:00
static bool torture_nbt_winsreplication_owned ( struct torture_context * tctx )
2006-02-22 15:10:29 +03:00
{
const char * address ;
struct nbt_name name ;
2006-10-16 17:06:41 +04:00
bool ret = true ;
2006-02-22 15:10:29 +03:00
struct test_wrepl_conflict_conn * ctx ;
2007-08-26 22:24:12 +04:00
if ( torture_setting_bool ( tctx , " quick " , false ) )
torture_skip ( tctx ,
" skip NBT-WINSREPLICATION-OWNED test in quick test mode \n " ) ;
2007-01-13 18:49:32 +03:00
2006-10-16 17:06:41 +04:00
if ( ! torture_nbt_get_name ( tctx , & name , & address ) )
return false ;
2005-10-13 20:27:05 +04:00
2006-10-16 17:06:41 +04:00
ctx = test_create_conflict_ctx ( tctx , address ) ;
torture_assert ( tctx , ctx ! = NULL , " Creating context failed " ) ;
2006-02-22 15:10:29 +03:00
2006-10-16 17:06:41 +04:00
ret & = test_conflict_owned_released_vs_replica ( tctx , ctx ) ;
ret & = test_conflict_owned_active_vs_replica ( tctx , ctx ) ;
2006-02-22 15:10:29 +03:00
return ret ;
}
/*
2006-10-16 17:06:41 +04:00
test simple WINS replication operations
2006-02-22 15:10:29 +03:00
*/
2007-09-07 20:27:57 +04:00
struct torture_suite * torture_nbt_winsreplication ( TALLOC_CTX * mem_ctx )
2006-02-22 15:10:29 +03:00
{
2006-10-16 17:06:41 +04:00
struct torture_suite * suite = torture_suite_create (
2010-12-11 05:26:31 +03:00
mem_ctx , " winsreplication " ) ;
2007-08-31 19:43:03 +04:00
struct torture_tcase * tcase ;
tcase = torture_suite_add_simple_test ( suite , " assoc_ctx1 " ,
test_assoc_ctx1 ) ;
tcase - > tests - > dangerous = true ;
2006-10-16 17:06:41 +04:00
2010-12-11 05:26:31 +03:00
torture_suite_add_simple_test ( suite , " assoc_ctx2 " , test_assoc_ctx2 ) ;
2006-10-16 17:06:41 +04:00
torture_suite_add_simple_test ( suite , " wins_replication " ,
2006-10-21 10:13:50 +04:00
test_wins_replication ) ;
2006-02-22 15:10:29 +03:00
2006-10-16 17:06:41 +04:00
torture_suite_add_simple_test ( suite , " replica " ,
2006-10-21 10:13:50 +04:00
torture_nbt_winsreplication_replica ) ;
2005-10-13 20:27:05 +04:00
2006-10-16 17:06:41 +04:00
torture_suite_add_simple_test ( suite , " owned " ,
2006-10-21 10:13:50 +04:00
torture_nbt_winsreplication_owned ) ;
2005-02-16 13:04:52 +03:00
2006-10-16 17:06:41 +04:00
return suite ;
2005-02-16 13:04:52 +03:00
}