public void testInsanity2() throws IOException {
    FieldCache cache = FieldCache.DEFAULT;
    cache.purgeAllCaches();

    String[] strings;
    byte[] bytes;

    strings = cache.getStrings(readerA, "theString");
    strings = cache.getStrings(readerB, "theString");
    strings = cache.getStrings(readerX, "theString");

    // this one is ok
    bytes = cache.getBytes(readerX, "theByte");

    // // //

    Insanity[] insanity = FieldCacheSanityChecker.checkSanity(cache.getCacheEntries());

    assertEquals("wrong number of cache errors", 1, insanity.length);
    assertEquals("wrong type of cache error", InsanityType.SUBREADER, insanity[0].getType());
    assertEquals("wrong number of entries in cache error", 3, insanity[0].getCacheEntries().length);

    // we expect bad things, don't let tearDown complain about them
    cache.purgeAllCaches();
  }
  public void testInsanity1() throws IOException {
    FieldCache cache = FieldCache.DEFAULT;
    cache.purgeAllCaches();

    int[] ints;
    String[] strings;
    byte[] bytes;

    ints = cache.getInts(readerX, "theInt", FieldCache.DEFAULT_INT_PARSER);
    strings = cache.getStrings(readerX, "theInt");

    // this one is ok
    bytes = cache.getBytes(readerX, "theByte");

    // // //

    Insanity[] insanity = FieldCacheSanityChecker.checkSanity(cache.getCacheEntries());

    assertEquals("wrong number of cache errors", 1, insanity.length);
    assertEquals("wrong type of cache error", InsanityType.VALUEMISMATCH, insanity[0].getType());
    assertEquals("wrong number of entries in cache error", 2, insanity[0].getCacheEntries().length);

    // we expect bad things, don't let tearDown complain about them
    cache.purgeAllCaches();
  }
Example #3
0
  /**
   * Asserts that FieldCacheSanityChecker does not detect any problems with FieldCache.DEFAULT.
   *
   * <p>If any problems are found, they are logged to System.err (allong with the msg) when the
   * Assertion is thrown.
   *
   * <p>This method is called by tearDown after every test method, however IndexReaders scoped
   * inside test methods may be garbage collected prior to this method being called, causing errors
   * to be overlooked. Tests are encouraged to keep their IndexReaders scoped at the class level, or
   * to explicitly call this method directly in the same scope as the IndexReader.
   *
   * @see FieldCacheSanityChecker
   */
  protected void assertSaneFieldCaches(final String msg) {
    final CacheEntry[] entries = FieldCache.DEFAULT.getCacheEntries();
    Insanity[] insanity = null;
    try {
      try {
        insanity = FieldCacheSanityChecker.checkSanity(entries);
      } catch (RuntimeException e) {
        dumpArray(msg + ": FieldCache", entries, System.err);
        throw e;
      }

      assertEquals(msg + ": Insane FieldCache usage(s) found", 0, insanity.length);
      insanity = null;
    } finally {

      // report this in the event of any exception/failure
      // if no failure, then insanity will be null anyway
      if (null != insanity) {
        dumpArray(msg + ": Insane FieldCache usage(s)", insanity, System.err);
      }
    }
  }
  public void testSanity() throws IOException {
    FieldCache cache = FieldCache.DEFAULT;
    cache.purgeAllCaches();

    cache.getDoubles(readerA, "theDouble", false);
    cache.getDoubles(readerA, "theDouble", FieldCache.DEFAULT_DOUBLE_PARSER, false);
    cache.getDoubles(readerAclone, "theDouble", FieldCache.DEFAULT_DOUBLE_PARSER, false);
    cache.getDoubles(readerB, "theDouble", FieldCache.DEFAULT_DOUBLE_PARSER, false);

    cache.getInts(readerX, "theInt", false);
    cache.getInts(readerX, "theInt", FieldCache.DEFAULT_INT_PARSER, false);

    // // //

    Insanity[] insanity = FieldCacheSanityChecker.checkSanity(cache.getCacheEntries());

    if (0 < insanity.length)
      dumpArray(getTestClass().getName() + "#" + getTestName() + " INSANITY", insanity, System.err);

    assertEquals("shouldn't be any cache insanity", 0, insanity.length);
    cache.purgeAllCaches();
  }