I think most of the additional complexity in StateTransferFunctionalTest stems from the fact that cluster formation was a lot less deterministic in 4.2/5.0. Many times, two separate clusters would form, and they would merge in a single cluster after a while. So the tests had to avoid checking the state transfer after a merge, or they would fail every other time.

With JGroups 3.2+ and with the TEST_PING protocol, it's impossible to get a MERGE event without using DISCARD, so those checks became obsolete.