1# See the file LICENSE for redistribution information. 2# 3# Copyright (c) 2007-2009 Oracle. All rights reserved. 4# 5# $Id$ 6# 7# TEST repmgr013 8# TEST Site list test. 9# TEST 10# TEST Configure a master and two clients where one client is a peer of 11# TEST the other and verify resulting site lists. 12# TEST 13# TEST Run for btree only because access method shouldn't matter. 14# TEST 15proc repmgr013 { method { niter 100 } { tnum "013" } args } { 16 17 source ./include.tcl 18 19 if { $is_freebsd_test == 1 } { 20 puts "Skipping replication manager test on FreeBSD platform." 21 return 22 } 23 24 if { $is_windows9x_test == 1 } { 25 puts "Skipping replication test on Win9x platform." 26 return 27 } 28 29 # Skip for all methods except btree. 30 if { $checking_valid_methods } { 31 return btree 32 } 33 if { [is_btree $method] == 0 } { 34 puts "Repmgr$tnum: skipping for non-btree method $method." 35 return 36 } 37 38 set args [convert_args $method $args] 39 40 puts "Repmgr$tnum ($method): repmgr site list test." 41 repmgr013_sub $method $niter $tnum $args 42} 43 44proc repmgr013_sub { method niter tnum largs } { 45 global testdir 46 global rep_verbose 47 global verbose_type 48 set nsites 3 49 50 set small_iter [expr $niter / 10] 51 52 set verbargs "" 53 if { $rep_verbose == 1 } { 54 set verbargs " -verbose {$verbose_type on} " 55 } 56 57 env_cleanup $testdir 58 set ports [available_ports $nsites] 59 60 set masterdir $testdir/MASTERDIR 61 set clientdir $testdir/CLIENTDIR 62 set clientdir2 $testdir/CLIENTDIR2 63 64 file mkdir $masterdir 65 file mkdir $clientdir 66 file mkdir $clientdir2 67 68 # Use different connection retry timeout values to handle any 69 # collisions from starting sites at the same time by retrying 70 # at different times. 71 72 puts "\tRepmgr$tnum.a: Start a master." 73 set ma_envcmd "berkdb_env_noerr -create $verbargs \ 74 -errpfx MASTER -home $masterdir -txn -rep -thread" 75 set masterenv [eval $ma_envcmd] 76 $masterenv repmgr -ack all -nsites $nsites \ 77 -timeout {conn_retry 20000000} \ 78 -local [list localhost [lindex $ports 0]] \ 79 -start master 80 81 puts "\tRepmgr$tnum.b: Start first client." 82 set cl_envcmd "berkdb_env_noerr -create $verbargs \ 83 -errpfx CLIENT -home $clientdir -txn -rep -thread" 84 set clientenv [eval $cl_envcmd] 85 $clientenv repmgr -ack all -nsites $nsites \ 86 -timeout {conn_retry 10000000} \ 87 -local [list localhost [lindex $ports 1]] \ 88 -remote [list localhost [lindex $ports 0]] \ 89 -remote [list localhost [lindex $ports 2]] \ 90 -start client 91 await_startup_done $clientenv 92 93 puts "\tRepmgr$tnum.c: Start second client as peer of first." 94 set cl2_envcmd "berkdb_env_noerr -create $verbargs \ 95 -errpfx CLIENT2 -home $clientdir2 -txn -rep -thread" 96 set clientenv2 [eval $cl2_envcmd] 97 $clientenv2 repmgr -ack all -nsites $nsites \ 98 -timeout {conn_retry 5000000} \ 99 -local [list localhost [lindex $ports 2]] \ 100 -remote [list localhost [lindex $ports 0]] \ 101 -remote [list localhost [lindex $ports 1] peer] \ 102 -start client 103 await_startup_done $clientenv2 104 105 puts "\tRepmgr$tnum.d: Get repmgr site lists and verify." 106 verify_sitelist [$masterenv repmgr_site_list] 107 verify_sitelist [$clientenv repmgr_site_list] 108 verify_sitelist [$clientenv2 repmgr_site_list] 109 110 error_check_good client2_close [$clientenv2 close] 0 111 error_check_good client_close [$clientenv close] 0 112 error_check_good masterenv_close [$masterenv close] 0 113} 114 115proc verify_sitelist { sitelist } { 116 # Make sure there are 2 other sites. 117 error_check_good lenchk [llength $sitelist] 2 118 119 # Make sure eid, port and status are integers, host is 120 # expected string value. 121 foreach tuple $sitelist { 122 error_check_good eidchk [string is integer -strict \ 123 [lindex $tuple 0]] 1 124 error_check_good hostchk [lindex $tuple 1] "localhost" 125 error_check_good eidchk [string is integer -strict \ 126 [lindex $tuple 2]] 1 127 error_check_bad statchk [lindex $tuple 3] unknown 128 } 129} 130