package org.infinispan.distribution.rehash;

import java.util.ArrayList;
import java.util.List;

import org.infinispan.Cache;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.test.TestingUtil;
import org.infinispan.test.fwk.TransportFlags;
import org.testng.annotations.Test;

@Test(groups = "functional", testName = "distribution.rehash.SingleJoinTest")
public class SingleJoinTest extends RehashTestBase {
   EmbeddedCacheManager joinerManager;
   Cache<Object, String> joiner;

   void performRehashEvent(boolean offline) {
      joinerManager = addClusterEnabledCacheManager(new TransportFlags().withFD(true));
      joinerManager.defineConfiguration(cacheName, configuration.build());
      joiner = joinerManager.getCache(cacheName);
   }

   void waitForRehashCompletion() {
      // need to block until this join has completed!
      List<Cache> allCaches = new ArrayList(caches);
      allCaches.add(joiner);
      TestingUtil.blockUntilViewsReceived(60000, allCaches);
      waitForClusterToForm(cacheName);

      cacheManagers.add(joinerManager);
      caches.add(joiner);
   }
}
