@Test
  public void defaultingOfIndexRefreshIntervalAndWatchIntervalWhenMalformed()
      throws RepositoryConfigurationException {
    Properties properties = new Properties();
    properties.setProperty("watched-repo.type", "watched");
    properties.setProperty("watched-repo.watchDirectory", "build/repository/watched");
    properties.setProperty("watched-repo.watchInterval", "alpha");
    properties.setProperty("remote-repo.type", "remote");
    properties.setProperty(
        "remote-repo.uri", "http://localhost:8080/org.eclipse.virgo.repository/foo");
    properties.setProperty("remote-repo.indexRefreshInterval", "bravo");
    properties.setProperty("chain", "watched-repo,remote-repo");

    OrderedPair<Map<String, RepositoryConfiguration>, List<String>> configurations =
        configurationReader.readConfiguration(properties);
    Map<String, RepositoryConfiguration> configurationMap = configurations.getFirst();
    List<String> chainList = configurations.getSecond();

    assertEquals(2, chainList.size());
    assertEquals(2, configurationMap.size());

    RepositoryConfiguration configuration = configurationMap.get(chainList.get(0));
    assertTrue(configuration instanceof WatchedStorageRepositoryConfiguration);
    assertEquals(5, ((WatchedStorageRepositoryConfiguration) configuration).getWatchInterval());

    configuration = configurationMap.get(chainList.get(1));
    assertTrue(configuration instanceof RemoteRepositoryConfiguration);
    assertEquals(30, ((RemoteRepositoryConfiguration) configuration).getIndexUpdateInterval());

    assertEquals(2, eventLogger.getLoggedEvents().size());
  }
  @Test
  public void variableExpansion() throws RepositoryConfigurationException, IOException {
    try {
      System.setProperty("org.eclipse.virgo.repository.internal.test.string", "a");
      System.setProperty("org.eclipse.virgo.repository.internal.test.int", "1");

      Properties properties = new Properties();

      properties.setProperty("bundles-ext.type", "external");
      properties.setProperty(
          "bundles-ext.searchPattern",
          "repository/${org.eclipse.virgo.repository.internal.test.string}/ext/*.jar");

      properties.setProperty("watched-repo.type", "watched");
      properties.setProperty(
          "watched-repo.watchDirectory",
          "build/repository/${org.eclipse.virgo.repository.internal.test.string}");
      properties.setProperty(
          "watched-repo.watchInterval", "${org.eclipse.virgo.repository.internal.test.int}");

      properties.setProperty("remote-repo.type", "remote");
      properties.setProperty(
          "remote-repo.uri",
          "http://localhost:${org.eclipse.virgo.repository.internal.test.int}/org.eclipse.virgo.repository/${org.eclipse.virgo.repository.internal.test.string}");
      properties.setProperty(
          "remote-repo.indexRefreshInterval", "${org.eclipse.virgo.repository.internal.test.int}");

      properties.setProperty("chain", "bundles-ext,watched-repo,remote-repo");

      OrderedPair<Map<String, RepositoryConfiguration>, List<String>> configurations =
          configurationReader.readConfiguration(properties);
      Map<String, RepositoryConfiguration> configurationMap = configurations.getFirst();
      List<String> chainList = configurations.getSecond();

      assertEquals(3, chainList.size());
      assertEquals(3, configurationMap.size());

      ExternalStorageRepositoryConfiguration externalConfiguration =
          (ExternalStorageRepositoryConfiguration) configurationMap.get(chainList.get(0));
      assertEquals(
          new File(".").getAbsolutePath()
              + File.separator
              + "repository"
              + File.separator
              + "a"
              + File.separator
              + "ext"
              + File.separatorChar
              + "*.jar",
          externalConfiguration.getSearchPattern());

      WatchedStorageRepositoryConfiguration watchedConfiguration =
          (WatchedStorageRepositoryConfiguration) configurationMap.get(chainList.get(1));
      assertEquals(
          new File("build/repository", "a").getCanonicalFile(),
          watchedConfiguration.getDirectoryToWatch().getCanonicalFile());
      assertEquals(1, watchedConfiguration.getWatchInterval());

      RemoteRepositoryConfiguration remoteConfiguration =
          (RemoteRepositoryConfiguration) configurationMap.get(chainList.get(2));
      assertEquals(1, remoteConfiguration.getIndexUpdateInterval());
      assertEquals(
          URI.create("http://localhost:1/org.eclipse.virgo.repository/a"),
          remoteConfiguration.getRepositoryUri());

      assertEquals(0, eventLogger.getLoggedEvents().size());
    } finally {
      System.clearProperty("org.eclipse.virgo.repository.internal.test.string");
      System.clearProperty("org.eclipse.virgo.repository.internal.test.int");
    }
  }