Thanks @rohitpaulk
Unfortunately im out of options so i ll just switch to another track, because locally all this works, and managed to connect 3 replicas and they all get propagated commands and have it ready for redis clients. For me this was an issue with the test, because I already pass the replica requirements, locally, all handshakes are smoothly done, with proper logging and attention. I wouldn’t be here if i hadn’t done that first, i assure you, since it wouldn’t be fair to complain in that case.
As for hte blocking part i meant the replicas blocking until they finish the handshake and start the replication loop, reusing the connection, as you said, exactly what i 've done as well. I hoped that if i delayed with some sleep on both master replica thinking it would no longer send multiple cmds in the same read buf, but ofc not the case since the test boots another master - got that bit now, thanks.
But the replica still has to block if it received a GET foo command while its doing the handshake. i tried handshake in a goroutine and also in a blocking way, the result is the same. The get commands are sent while the hanshake is in progress.
I managed to solve that and now i have to parse multiple commands from the same read operation in the replication loop. Every test run yields a difference there, so this is why i tried delaying stuff