With useSynchronization = true (the default, before
ISPN-4166 is integrated), the SuspectException thrown by the listener is swallowed by the transaction manager and the client doesn't retry. The test doesn't pick that up because the exception is thrown after the entry was updated in the data container (a regular SuspectException would be thrown before).
I changed the configuration to useSynchronization = false, but it didn't work because the SuspectException is wrapped in a CacheListenerException, so the client throws an exception instead of retrying. I also changed the test to use an interceptor instead of a listener, but then I got a ClassCastException: