@Private
  @VisibleForTesting
  ApplicationHistoryClientService getClientService() {
    return this.ahsClientService;
  }
@Test
  @Timeout(60000)
  void testStartStopServer() throws Exception {
    ApplicationHistoryServer historyServer = new ApplicationHistoryServer();
    Configuration config = new YarnConfiguration();
    config.setClass(YarnConfiguration.TIMELINE_SERVICE_STORE,
        MemoryTimelineStore.class, TimelineStore.class);
    config.setClass(YarnConfiguration.TIMELINE_SERVICE_STATE_STORE_CLASS,
        MemoryTimelineStateStore.class, TimelineStateStore.class);
    config.set(YarnConfiguration.TIMELINE_SERVICE_WEBAPP_ADDRESS, "localhost:0");
    try {
      try {
        historyServer.init(config);
        config.setInt(YarnConfiguration.TIMELINE_SERVICE_HANDLER_THREAD_COUNT,
            0);
        historyServer.start();
        fail();
      } catch (IllegalArgumentException e) {
        assertTrue(e.getMessage().contains(
            YarnConfiguration.TIMELINE_SERVICE_HANDLER_THREAD_COUNT));
      }
      config.setInt(YarnConfiguration.TIMELINE_SERVICE_HANDLER_THREAD_COUNT,
          YarnConfiguration.DEFAULT_TIMELINE_SERVICE_CLIENT_THREAD_COUNT);
      historyServer = new ApplicationHistoryServer();
      historyServer.init(config);
      assertEquals(STATE.INITED, historyServer.getServiceState());
      ApplicationHistoryClientService historyService =
          historyServer.getClientService();
      assertNotNull(historyServer.getClientService());
      assertEquals(STATE.INITED, historyService.getServiceState());

      historyServer.start();
      assertEquals(STATE.STARTED, historyServer.getServiceState());
      assertEquals(STATE.STARTED, historyService.getServiceState());
      historyServer.stop();
      assertEquals(STATE.STOPPED, historyServer.getServiceState());
    } finally {
      historyServer.stop();
    }
  }