A framework for testing distributed systems