@Test(timeout = 120000)
public void testRefreshQueuesWhenRMHA() throws Exception {

  conf.setBoolean(YarnConfiguration.AUTO_FAILOVER_ENABLED, false);
  conf.setBoolean(YarnConfiguration.RECOVERY_ENABLED, true);
  conf.setBoolean(FairSchedulerConfiguration.ALLOW_UNDECLARED_POOLS, false);
  conf.setBoolean(FairSchedulerConfiguration.USER_AS_DEFAULT_QUEUE, false);
  conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE);
  HAServiceProtocol.StateChangeRequestInfo requestInfo =
      new HAServiceProtocol.StateChangeRequestInfo(
          HAServiceProtocol.RequestSource.REQUEST_BY_USER);
  //ensure ALLOC_FILE contains an 'empty' config
  AllocationFileWriter.create().writeToFile(ALLOC_FILE);
  // 1. start a standby RM, file 'ALLOC_FILE' is empty, so there is no queues
  MockRM rm1 = new MockRM(conf, null);
  rm1.init(conf);
  rm1.start();
  rm1.getAdminService().transitionToStandby(requestInfo);
  // 2. add a new queue "test_queue"
  AllocationFileWriter.create()
      .addQueue(new AllocationFileQueue.Builder("test_queue")
          .maxRunningApps(3).build())
      .writeToFile(ALLOC_FILE);
  conf.set(YarnConfiguration.RM_STORE, MemoryRMStateStore.class.getName());
  // 3. start a active RM
  MockRM rm2 = new MockRM(conf);
  MemoryRMStateStore memStore = (MemoryRMStateStore) rm2.getRMStateStore();
  rm2.start();
  MockNM nm =
      new MockNM("127.0.0.1:1234", 15120, rm2.getResourceTrackerService());
  nm.registerNode();
  rm2.getAdminService().transitionToActive(requestInfo);
  // 4. submit a app to the new added queue "test_queue"
  MockRMAppSubmissionData data =
      MockRMAppSubmissionData.Builder.createWithMemory(200, rm2)
          .withAppName("test_app")
          .withUser("user")
          .withAcls(null)
          .withQueue("test_queue")
          .withUnmanagedAM(false)
          .build();
  RMApp app = MockRMAppSubmitter.submit(rm2, data);
  RMAppAttempt attempt0 = app.getCurrentAppAttempt();
  nm.nodeHeartbeat(true);
  MockAM am0 = rm2.sendAMLaunched(attempt0.getAppAttemptId());
  am0.registerAppAttempt();
  assertEquals("root.test_queue", app.getQueue());
  // 5. Transit rm1 to active, recover app
  ((RMContextImpl)rm1.getRMContext()).setStateStore(memStore);
  rm1.getAdminService().transitionToActive(requestInfo);
  rm1.drainEvents();
  assertEquals(1, rm1.getRMContext().getRMApps().size());
  RMApp recoveredApp =
      rm1.getRMContext().getRMApps().values().iterator().next();
  assertEquals("root.test_queue", recoveredApp.getQueue());
  rm1.stop();
  rm2.stop();
}