@Test
public void testFilterFileSystem() throws Exception {

  int errors = 0;
  for (Method m : FileSystem.class.getDeclaredMethods()) {
    if (Modifier.isStatic(m.getModifiers()) ||
        Modifier.isPrivate(m.getModifiers()) ||
        Modifier.isFinal(m.getModifiers())) {
      continue;
    }
    try {
      MustNotImplement.class.getMethod(m.getName(), m.getParameterTypes());
      try {
        FilterFileSystem.class.getDeclaredMethod(m.getName(),
            m.getParameterTypes());
        LOG.error("FilterFileSystem MUST NOT implement " + m);
        errors++;
      } catch (NoSuchMethodException ex) {
        // Expected
      }
    } catch (NoSuchMethodException exc) {
      try{
        FilterFileSystem.class.getDeclaredMethod(m.getName(), m.getParameterTypes());
      } catch(NoSuchMethodException exc2){
        LOG.error("FilterFileSystem MUST implement " + m);
        errors++;
      }
    }
  }
  assertTrue((errors + " methods were not overridden correctly - see" +
      " log"), errors <= 0);
}