1start_server {tags {"repl"}} { 2 start_server {} { 3 test {First server should have role slave after SLAVEOF} { 4 r -1 slaveof [srv 0 host] [srv 0 port] 5 after 1000 6 s -1 role 7 } {slave} 8 9 test {BRPOPLPUSH replication, when blocking against empty list} { 10 set rd [redis_deferring_client] 11 $rd brpoplpush a b 5 12 r lpush a foo 13 after 1000 14 assert_equal [r debug digest] [r -1 debug digest] 15 } 16 17 test {BRPOPLPUSH replication, list exists} { 18 set rd [redis_deferring_client] 19 r lpush c 1 20 r lpush c 2 21 r lpush c 3 22 $rd brpoplpush c d 5 23 after 1000 24 assert_equal [r debug digest] [r -1 debug digest] 25 } 26 27 test {MASTER and SLAVE dataset should be identical after complex ops} { 28 createComplexDataset r 10000 29 after 500 30 if {[r debug digest] ne [r -1 debug digest]} { 31 set csv1 [csvdump r] 32 set csv2 [csvdump {r -1}] 33 set fd [open /tmp/repldump1.txt w] 34 puts -nonewline $fd $csv1 35 close $fd 36 set fd [open /tmp/repldump2.txt w] 37 puts -nonewline $fd $csv2 38 close $fd 39 puts "Master - Slave inconsistency" 40 puts "Run diff -u against /tmp/repldump*.txt for more info" 41 } 42 assert_equal [r debug digest] [r -1 debug digest] 43 } 44 45 test {MASTER and SLAVE consistency with expire} { 46 createComplexDataset r 50000 useexpire 47 after 4000 ;# Make sure everything expired before taking the digest 48 r keys * ;# Force DEL syntesizing to slave 49 after 1000 ;# Wait another second. Now everything should be fine. 50 if {[r debug digest] ne [r -1 debug digest]} { 51 set csv1 [csvdump r] 52 set csv2 [csvdump {r -1}] 53 set fd [open /tmp/repldump1.txt w] 54 puts -nonewline $fd $csv1 55 close $fd 56 set fd [open /tmp/repldump2.txt w] 57 puts -nonewline $fd $csv2 58 close $fd 59 puts "Master - Slave inconsistency" 60 puts "Run diff -u against /tmp/repldump*.txt for more info" 61 } 62 assert_equal [r debug digest] [r -1 debug digest] 63 } 64 } 65} 66 67start_server {tags {"repl"}} { 68 r set mykey foo 69 70 start_server {} { 71 test {Second server should have role master at first} { 72 s role 73 } {master} 74 75 test {SLAVEOF should start with link status "down"} { 76 r slaveof [srv -1 host] [srv -1 port] 77 s master_link_status 78 } {down} 79 80 test {The role should immediately be changed to "slave"} { 81 s role 82 } {slave} 83 84 wait_for_sync r 85 test {Sync should have transferred keys from master} { 86 r get mykey 87 } {foo} 88 89 test {The link status should be up} { 90 s master_link_status 91 } {up} 92 93 test {SET on the master should immediately propagate} { 94 r -1 set mykey bar 95 r 0 get mykey 96 } {bar} 97 } 98} 99