@Test
public void testLRCPolicy() throws Exception {

  Random r = new Random();
  long seed = r.nextLong();
  r.setSeed(seed);
  System.out.println("seed: " + seed);
  fs.delete(p, true);
  conf.setInt(TTConfig.TT_INDEX_CACHE, 1);
  final int partsPerMap = 1000;
  final int bytesPerFile = partsPerMap * 24;
  IndexCache cache = new IndexCache(conf);
  // fill cache
  int totalsize = bytesPerFile;
  for (; totalsize < 1024 * 1024; totalsize += bytesPerFile) {
    Path f = new Path(p, Integer.toString(totalsize, 36));
    writeFile(fs, f, totalsize, partsPerMap);
    IndexRecord rec = cache.getIndexInformation(
      Integer.toString(totalsize, 36), r.nextInt(partsPerMap), f,
      UserGroupInformation.getCurrentUser().getShortUserName());
    checkRecord(rec, totalsize);
  }
  // delete files, ensure cache retains all elem
  for (FileStatus stat : fs.listStatus(p)) {
    fs.delete(stat.getPath(),true);
  }
  for (int i = bytesPerFile; i < 1024 * 1024; i += bytesPerFile) {
    Path f = new Path(p, Integer.toString(i, 36));
    IndexRecord rec = cache.getIndexInformation(Integer.toString(i, 36),
      r.nextInt(partsPerMap), f,
      UserGroupInformation.getCurrentUser().getShortUserName());
    checkRecord(rec, i);
  }
  // push oldest (bytesPerFile) out of cache
  Path f = new Path(p, Integer.toString(totalsize, 36));
  writeFile(fs, f, totalsize, partsPerMap);
  cache.getIndexInformation(Integer.toString(totalsize, 36),
      r.nextInt(partsPerMap), f,
      UserGroupInformation.getCurrentUser().getShortUserName());
  fs.delete(f, false);
  // oldest fails to read, or error
  boolean fnf = false;
  try {
    cache.getIndexInformation(Integer.toString(bytesPerFile, 36),
      r.nextInt(partsPerMap), new Path(p, Integer.toString(bytesPerFile)),
      UserGroupInformation.getCurrentUser().getShortUserName());
  } catch (IOException e) {
    if (e.getCause() == null ||
        !(e.getCause()  instanceof FileNotFoundException)) {
      throw e;
    }
    else {
      fnf = true;
    }
  }
  if (!fnf)
    fail("Failed to push out last entry");
  // should find all the other entries
  for (int i = bytesPerFile << 1; i < 1024 * 1024; i += bytesPerFile) {
    IndexRecord rec = cache.getIndexInformation(Integer.toString(i, 36),
        r.nextInt(partsPerMap), new Path(p, Integer.toString(i, 36)),
        UserGroupInformation.getCurrentUser().getShortUserName());
    checkRecord(rec, i);
  }
  IndexRecord rec = cache.getIndexInformation(Integer.toString(totalsize, 36),
    r.nextInt(partsPerMap), f,
    UserGroupInformation.getCurrentUser().getShortUserName());
  checkRecord(rec, totalsize);
}