Class MockDirectoryWrapper

  • All Implemented Interfaces:
    Closeable, AutoCloseable

    public class MockDirectoryWrapper
    extends BaseDirectoryWrapper
    This is a Directory Wrapper that adds methods intended to be used only by unit tests. It also adds a number of features useful for testing:
    • Instances created by LuceneTestCase.newDirectory() are tracked to ensure they are closed by the test.
    • When a MockDirectoryWrapper is closed, it will throw an exception if it has any open files against it (with a stacktrace indicating where they were opened from).
    • When a MockDirectoryWrapper is closed, it runs CheckIndex to test if the index was corrupted.
    • MockDirectoryWrapper simulates some "features" of Windows, such as refusing to write/delete to open files.
    • Constructor Detail

      • MockDirectoryWrapper

        public MockDirectoryWrapper​(Random random,
                                    Directory delegate)
    • Method Detail

      • getInputCloneCount

        public int getInputCloneCount()
      • setVerboseClone

        public void setVerboseClone​(boolean v)
        If set to true, we print a fake exception with filename and stacktrace on every indexinput clone()
      • setTrackDiskUsage

        public void setTrackDiskUsage​(boolean v)
      • setAllowRandomFileNotFoundException

        public void setAllowRandomFileNotFoundException​(boolean value)
        If set to true (the default), when we throw random IOException on openInput or createOutput, we may sometimes throw FileNotFoundException or NoSuchFileException.
      • setAllowReadingFilesStillOpenForWrite

        public void setAllowReadingFilesStillOpenForWrite​(boolean value)
        If set to true, you can open an inputstream on a file that is still open for writes.
      • setUseSlowOpenClosers

        public void setUseSlowOpenClosers​(boolean v)
        Add a rare small sleep to catch race conditions in open/close

        You can enable this if you need it.

      • crash

        public void crash()
                   throws IOException
        Simulates a crash of OS or machine by overwriting unsynced files.
        Throws:
        IOException
      • clearCrash

        public void clearCrash()
      • setMaxSizeInBytes

        public void setMaxSizeInBytes​(long maxSize)
      • getMaxSizeInBytes

        public long getMaxSizeInBytes()
      • getMaxUsedSizeInBytes

        public long getMaxUsedSizeInBytes()
        Returns the peek actual storage used (bytes) in this directory.
      • setAssertNoDeleteOpenFile

        public void setAssertNoDeleteOpenFile​(boolean value)
        Trip a test assert if there is an attempt to delete an open file.
      • getAssertNoDeleteOpenFile

        public boolean getAssertNoDeleteOpenFile()
      • setRandomIOExceptionRate

        public void setRandomIOExceptionRate​(double rate)
        If 0.0, no exceptions will be thrown. Else this should be a double 0.0 - 1.0. We will randomly throw an IOException on the first write to an OutputStream based on this probability.
      • getRandomIOExceptionRate

        public double getRandomIOExceptionRate()
      • setRandomIOExceptionRateOnOpen

        public void setRandomIOExceptionRateOnOpen​(double rate)
        If 0.0, no exceptions will be thrown during openInput and createOutput. Else this should be a double 0.0 - 1.0 and we will randomly throw an IOException in openInput and createOutput with this probability.
      • getRandomIOExceptionRateOnOpen

        public double getRandomIOExceptionRateOnOpen()
      • getFileHandleCount

        public long getFileHandleCount()
        returns current open file handle count
      • getOpenDeletedFiles

        public Set<String> getOpenDeletedFiles()
      • setFailOnCreateOutput

        public void setFailOnCreateOutput​(boolean v)
      • setFailOnOpenInput

        public void setFailOnOpenInput​(boolean v)
      • getRecomputedSizeInBytes

        public final long getRecomputedSizeInBytes()
                                            throws IOException
        Provided for testing purposes. Use sizeInBytes() instead.
        Throws:
        IOException
      • getRecomputedActualSizeInBytes

        public final long getRecomputedActualSizeInBytes()
                                                  throws IOException
        Like getRecomputedSizeInBytes(), but, uses actual file lengths rather than buffer allocations (which are quantized up to nearest RAMOutputStream.BUFFER_SIZE (now 1024) bytes.
        Throws:
        IOException
      • setAssertNoUnrefencedFilesOnClose

        public void setAssertNoUnrefencedFilesOnClose​(boolean v)
      • removeIndexOutput

        public void removeIndexOutput​(IndexOutput out,
                                      String name)
      • removeIndexInput

        public void removeIndexInput​(IndexInput in,
                                     String name)
      • failOn

        public void failOn​(MockDirectoryWrapper.Failure fail)
        add a Failure object to the list of objects to be evaluated at every potential failure point