1# Check basic transactions on a replica. 2 3source "../tests/includes/init-tests.tcl" 4 5test "Create a primary with a replica" { 6 create_cluster 1 1 7} 8 9test "Cluster should start ok" { 10 assert_cluster_state ok 11} 12 13set primary [Rn 0] 14set replica [Rn 1] 15 16test "Can't read from replica without READONLY" { 17 $primary SET a 1 18 wait_for_ofs_sync $primary $replica 19 catch {$replica GET a} err 20 assert {[string range $err 0 4] eq {MOVED}} 21} 22 23test "Can read from replica after READONLY" { 24 $replica READONLY 25 assert {[$replica GET a] eq {1}} 26} 27 28test "Can perform HSET primary and HGET from replica" { 29 $primary HSET h a 1 30 $primary HSET h b 2 31 $primary HSET h c 3 32 wait_for_ofs_sync $primary $replica 33 assert {[$replica HGET h a] eq {1}} 34 assert {[$replica HGET h b] eq {2}} 35 assert {[$replica HGET h c] eq {3}} 36} 37 38test "Can MULTI-EXEC transaction of HGET operations from replica" { 39 $replica MULTI 40 assert {[$replica HGET h a] eq {QUEUED}} 41 assert {[$replica HGET h b] eq {QUEUED}} 42 assert {[$replica HGET h c] eq {QUEUED}} 43 assert {[$replica EXEC] eq {1 2 3}} 44} 45 46test "MULTI-EXEC with write operations is MOVED" { 47 $replica MULTI 48 catch {$replica HSET h b 4} err 49 assert {[string range $err 0 4] eq {MOVED}} 50 catch {$replica exec} err 51 assert {[string range $err 0 8] eq {EXECABORT}} 52} 53 54test "read-only blocking operations from replica" { 55 set rd [redis_deferring_client redis 1] 56 $rd readonly 57 $rd read 58 $rd XREAD BLOCK 0 STREAMS k 0 59 60 wait_for_condition 1000 50 { 61 [RI 1 blocked_clients] eq {1} 62 } else { 63 fail "client wasn't blocked" 64 } 65 66 $primary XADD k * foo bar 67 set res [$rd read] 68 set res [lindex [lindex [lindex [lindex $res 0] 1] 0] 1] 69 assert {$res eq {foo bar}} 70 $rd close 71} 72