@Override
  protected void afterSitesCreated() {
    super.afterSitesCreated();

    ConfigurationBuilder builder = newConfiguration();
    builder.sites().addBackup().site(siteName(2)).strategy(BackupConfiguration.BackupStrategy.SYNC);
    defineInSite(site(0), CacheType.BACKUP_TO_SITE_2.name(), builder.build());
    defineInSite(site(2), CacheType.BACKUP_TO_SITE_2.name(), newConfiguration().build());

    builder = newConfiguration();
    builder.sites().addBackup().site(siteName(1)).strategy(BackupConfiguration.BackupStrategy.SYNC);
    builder.sites().addBackup().site(siteName(2)).strategy(BackupConfiguration.BackupStrategy.SYNC);
    defineInSite(site(0), CacheType.BACKUP_TO_SITE_1_AND_2.name(), builder.build());
    defineInSite(site(1), CacheType.BACKUP_TO_SITE_1_AND_2.name(), newConfiguration().build());
    defineInSite(site(2), CacheType.BACKUP_TO_SITE_1_AND_2.name(), newConfiguration().build());

    defineInSite(site(0), CacheType.NO_BACKUP.name(), newConfiguration().build());

    // wait for caches in primary cluster
    site(0).waitForClusterToForm(null);
    site(0).waitForClusterToForm(CacheType.BACKUP_TO_SITE_1_AND_2.name());
    site(0).waitForClusterToForm(CacheType.BACKUP_TO_SITE_1_AND_2.name());
    site(0).waitForClusterToForm(CacheType.BACKUP_TO_SITE_2.name());

    // wait for caches in backup site 1
    site(1).waitForClusterToForm(null);
    site(1).waitForClusterToForm(CacheType.BACKUP_TO_SITE_1_AND_2.name());

    // wait for caches in backup site 2
    site(2).waitForClusterToForm(CacheType.BACKUP_TO_SITE_1_AND_2.name());
    site(2).waitForClusterToForm(CacheType.BACKUP_TO_SITE_2.name());
  }
  @Override
  protected EmbeddedCacheManager createCacheManager() throws Exception {
    GlobalConfigurationBuilder lonGc = GlobalConfigurationBuilder.defaultClusteredBuilder();
    lonGc.site().localSite("LON");
    ConfigurationBuilder lon = getDefaultClusteredCacheConfig(CacheMode.LOCAL, false);
    lon.sites().addBackup().site("NYC").strategy(BackupConfiguration.BackupStrategy.SYNC);
    nycBackup = getDefaultClusteredCacheConfig(CacheMode.LOCAL, false);
    nycBackup.sites().backupFor().remoteSite("NYC").defaultRemoteCache();

    // Remember to not do nothing else other than
    // creating the cache manager in order to avoid leaks
    return TestCacheManagerFactory.createClusteredCacheManager(lonGc, lon);
  }
 public void testMultipleCachesWithNoCacheName() {
   ConfigurationBuilder cb = new ConfigurationBuilder();
   cb.sites()
       .addBackup()
       .site("LON")
       .strategy(BackupConfiguration.BackupStrategy.SYNC)
       .sites()
       .addBackup()
       .site("SFO")
       .sites()
       .addBackup()
       .site("NYC");
   cb.build();
 }
 @Override
 protected ConfigurationBuilder defaultConfigurationForSite(int siteIndex) {
   if (siteIndex == 0) {
     // default cache will backup to site_1
     ConfigurationBuilder builder = newConfiguration();
     builder
         .sites()
         .addBackup()
         .site(siteName(1))
         .strategy(BackupConfiguration.BackupStrategy.SYNC);
     return builder;
   } else {
     return newConfiguration();
   }
 }
 @Test(expectedExceptions = CacheConfigurationException.class)
 public void testSameBackupDefinedMultipleTimes() {
   ConfigurationBuilder cb = new ConfigurationBuilder();
   cb.sites()
       .addBackup()
       .site("LON")
       .strategy(BackupConfiguration.BackupStrategy.SYNC)
       .sites()
       .addBackup()
       .site("LON")
       .sites()
       .addBackup()
       .site("NYC");
   cb.build();
 }
  public void testApi() {
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.sites()
        .addBackup()
        .site("LON")
        .strategy(BackupConfiguration.BackupStrategy.SYNC)
        .sites()
        .addBackup()
        .site("SFO")
        .sites()
        .addBackup()
        .site("NYC");
    assertEquals(cb.sites().backups().size(), 3);
    BackupConfigurationBuilder backup0 = cb.sites().backups().get(0);
    assertEquals(backup0.site(), "LON");
    assertEquals(backup0.strategy(), BackupConfiguration.BackupStrategy.SYNC);

    BackupConfigurationBuilder backup1 = cb.sites().backups().get(1);
    assertEquals(backup1.site(), "SFO");
    assertEquals(backup1.strategy(), BackupConfiguration.BackupStrategy.ASYNC);

    BackupConfigurationBuilder backup2 = cb.sites().backups().get(2);
    assertEquals(backup2.site(), "NYC");
    assertEquals(backup2.strategy(), BackupConfiguration.BackupStrategy.ASYNC);

    Configuration b = cb.build();
    assertEquals(b.sites().allBackups().size(), 3);
    BackupConfiguration b0 = b.sites().allBackups().get(0);
    assertEquals(b0.site(), "LON");
    assertEquals(b0.strategy(), BackupConfiguration.BackupStrategy.SYNC);

    BackupConfiguration b1 = b.sites().allBackups().get(1);
    assertEquals(b1.site(), "SFO");
    assertEquals(b1.strategy(), BackupConfiguration.BackupStrategy.ASYNC);

    BackupConfigurationBuilder b2 = cb.sites().backups().get(2);
    assertEquals(b2.site(), "NYC");
    assertEquals(b2.strategy(), BackupConfiguration.BackupStrategy.ASYNC);
  }