mirror of
http://github.com/valkey-io/valkey
synced 2024-11-22 18:54:58 +00:00
e2641e09cc
networking related stuff moved into networking.c moved more code more work on layout of source code SDS instantaneuos memory saving. By Pieter and Salvatore at VMware ;) cleanly compiling again after the first split, now splitting it in more C files moving more things around... work in progress split replication code splitting more Sets split Hash split replication split even more splitting more splitting minor change
83 lines
2.6 KiB
Tcl
83 lines
2.6 KiB
Tcl
set defaults { appendonly {yes} appendfilename {appendonly.aof} }
|
|
set server_path [tmpdir server.aof]
|
|
set aof_path "$server_path/appendonly.aof"
|
|
|
|
proc append_to_aof {str} {
|
|
upvar fp fp
|
|
puts -nonewline $fp $str
|
|
}
|
|
|
|
proc create_aof {code} {
|
|
upvar fp fp aof_path aof_path
|
|
set fp [open $aof_path w+]
|
|
uplevel 1 $code
|
|
close $fp
|
|
}
|
|
|
|
proc start_server_aof {overrides code} {
|
|
upvar defaults defaults srv srv server_path server_path
|
|
set config [concat $defaults $overrides]
|
|
set srv [start_server [list overrides $config]]
|
|
uplevel 1 $code
|
|
kill_server $srv
|
|
}
|
|
|
|
tags {"aof"} {
|
|
## Test the server doesn't start when the AOF contains an unfinished MULTI
|
|
create_aof {
|
|
append_to_aof [formatCommand set foo hello]
|
|
append_to_aof [formatCommand multi]
|
|
append_to_aof [formatCommand set bar world]
|
|
}
|
|
|
|
start_server_aof [list dir $server_path] {
|
|
test {Unfinished MULTI: Server should not have been started} {
|
|
is_alive $srv
|
|
} {0}
|
|
|
|
test {Unfinished MULTI: Server should have logged an error} {
|
|
exec cat [dict get $srv stdout] | tail -n1
|
|
} {*Unexpected end of file reading the append only file*}
|
|
}
|
|
|
|
## Test that the server exits when the AOF contains a short read
|
|
create_aof {
|
|
append_to_aof [formatCommand set foo hello]
|
|
append_to_aof [string range [formatCommand set bar world] 0 end-1]
|
|
}
|
|
|
|
start_server_aof [list dir $server_path] {
|
|
test {Short read: Server should not have been started} {
|
|
is_alive $srv
|
|
} {0}
|
|
|
|
test {Short read: Server should have logged an error} {
|
|
exec cat [dict get $srv stdout] | tail -n1
|
|
} {*Bad file format reading the append only file*}
|
|
}
|
|
|
|
## Test that redis-check-aof indeed sees this AOF is not valid
|
|
test {Short read: Utility should confirm the AOF is not valid} {
|
|
catch {
|
|
exec src/redis-check-aof $aof_path
|
|
} str
|
|
set _ $str
|
|
} {*not valid*}
|
|
|
|
test {Short read: Utility should be able to fix the AOF} {
|
|
exec echo y | src/redis-check-aof --fix $aof_path
|
|
} {*Successfully truncated AOF*}
|
|
|
|
## Test that the server can be started using the truncated AOF
|
|
start_server_aof [list dir $server_path] {
|
|
test {Fixed AOF: Server should have been started} {
|
|
is_alive $srv
|
|
} {1}
|
|
|
|
test {Fixed AOF: Keyspace should contain values that were parsable} {
|
|
set client [redis [dict get $srv host] [dict get $srv port]]
|
|
list [$client get foo] [$client get bar]
|
|
} {hello {}}
|
|
}
|
|
}
|