/**
   * @param bean Bean to check.
   * @param gridName Grid name to check for.
   */
  private void checkLifecycleBean(TestLifecycleBean bean, String gridName) {
    bean.checkErrors();

    List<LifecycleEventType> evts = bean.getLifecycleEvents();

    List<String> gridNames = bean.getGridNames();

    assert evts.get(0) == LifecycleEventType.BEFORE_NODE_START
        : "Invalid lifecycle event: " + evts.get(0);
    assert evts.get(1) == LifecycleEventType.AFTER_NODE_START
        : "Invalid lifecycle event: " + evts.get(1);
    assert evts.get(2) == LifecycleEventType.BEFORE_NODE_STOP
        : "Invalid lifecycle event: " + evts.get(2);
    assert evts.get(3) == LifecycleEventType.AFTER_NODE_STOP
        : "Invalid lifecycle event: " + evts.get(3);

    checkGridNameEquals(gridNames.get(0), gridName);
    checkGridNameEquals(gridNames.get(1), gridName);
    checkGridNameEquals(gridNames.get(2), gridName);
    checkGridNameEquals(gridNames.get(3), gridName);
  }
  /**
   * @param gridName Grid name.
   * @throws Exception If test failed.
   */
  private void checkLifecycleBeans(@Nullable String gridName) throws Exception {
    TestLifecycleBean bean1 = new TestLifecycleBean();
    TestLifecycleBean bean2 = new TestLifecycleBean();

    IgniteConfiguration cfg = new IgniteConfiguration();

    cfg.setLifecycleBeans(bean1, bean2);
    cfg.setGridName(gridName);

    cfg.setConnectorConfiguration(null);

    try (Ignite g = IgniteSpring.start(cfg, new GenericApplicationContext())) {
      bean1.checkState(gridName, true);
      bean2.checkState(gridName, true);
    }

    bean1.checkState(gridName, false);
    bean2.checkState(gridName, false);

    checkLifecycleBean(bean1, gridName);
    checkLifecycleBean(bean2, gridName);
  }