In TestGetGroups, the class-level setup method spins up, in a child thread, a resource manager that Yarn clients can talk to. But it checks whether the resource manager is fully started by doing resourcemanager.getServiceState() == STATE.STARTED. This is not reliable since resourcemanager.start() will first trigger service state change in RM, and then starts up all the services added to RM. We need to wait for RM to fully start before YARN clients can send requests. Otherwise, the tests can fail due to "connection refused" exception when the main thread sends out client requests to RM and if the RPC server has not fired up in the child thread.