Package org.apache.lucene.tests.store
Class MockDirectoryWrapper
- java.lang.Object
-
- org.apache.lucene.store.Directory
-
- org.apache.lucene.store.FilterDirectory
-
- org.apache.lucene.tests.store.BaseDirectoryWrapper
-
- org.apache.lucene.tests.store.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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
MockDirectoryWrapper.Failure
Objects that represent fail-able conditions.static class
MockDirectoryWrapper.FakeIOException
Use this when throwing fakeIOException
, e.g.static class
MockDirectoryWrapper.Throttling
Enum for controlling hard disk throttling.
-
Field Summary
-
Fields inherited from class org.apache.lucene.tests.store.BaseDirectoryWrapper
isOpen
-
Fields inherited from class org.apache.lucene.store.FilterDirectory
in
-
-
Constructor Summary
Constructors Constructor Description MockDirectoryWrapper(Random random, Directory delegate)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clearCrash()
void
close()
void
copyFrom(Directory from, String src, String dest, IOContext context)
void
corruptFiles(Collection<String> files)
void
corruptUnknownFiles()
void
crash()
Simulates a crash of OS or machine by overwriting unsynced files.IndexOutput
createOutput(String name, IOContext context)
IndexOutput
createTempOutput(String prefix, String suffix, IOContext context)
void
deleteFile(String name)
protected void
ensureOpen()
void
failOn(MockDirectoryWrapper.Failure fail)
add a Failure object to the list of objects to be evaluated at every potential failure pointlong
fileLength(String name)
boolean
getAssertNoDeleteOpenFile()
long
getFileHandleCount()
returns current open file handle countint
getInputCloneCount()
long
getMaxSizeInBytes()
long
getMaxUsedSizeInBytes()
Returns the peek actual storage used (bytes) in this directory.Set<String>
getOpenDeletedFiles()
double
getRandomIOExceptionRate()
double
getRandomIOExceptionRateOnOpen()
String[]
listAll()
Lock
obtainLock(String name)
ChecksumIndexInput
openChecksumInput(String name, IOContext context)
IndexInput
openInput(String name, IOContext context)
void
removeIndexInput(IndexInput in, String name)
void
removeIndexOutput(IndexOutput out, String name)
void
rename(String source, String dest)
void
resetMaxUsedSizeInBytes()
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.void
setAllowReadingFilesStillOpenForWrite(boolean value)
If set to true, you can open an inputstream on a file that is still open for writes.void
setAssertNoDeleteOpenFile(boolean value)
Trip a test assert if there is an attempt to delete an open file.void
setAssertNoUnrefencedFilesOnClose(boolean v)
void
setFailOnCreateOutput(boolean v)
void
setFailOnOpenInput(boolean v)
void
setMaxSizeInBytes(long maxSize)
void
setRandomIOExceptionRate(double rate)
If 0.0, no exceptions will be thrown.void
setRandomIOExceptionRateOnOpen(double rate)
If 0.0, no exceptions will be thrown during openInput and createOutput.void
setThrottling(MockDirectoryWrapper.Throttling throttling)
void
setTrackDiskUsage(boolean v)
void
setUseSlowOpenClosers(boolean v)
Add a rare small sleep to catch race conditions in open/closevoid
setVerboseClone(boolean v)
If set to true, we print a fake exception with filename and stacktrace on every indexinput clone()long
sizeInBytes()
void
sync(Collection<String> names)
void
syncMetaData()
String
toString()
-
Methods inherited from class org.apache.lucene.tests.store.BaseDirectoryWrapper
getCheckIndexOnClose, getCrossCheckTermVectorsOnClose, isOpen, setCheckIndexOnClose, setCrossCheckTermVectorsOnClose
-
Methods inherited from class org.apache.lucene.store.FilterDirectory
getDelegate, getPendingDeletions, unwrap
-
Methods inherited from class org.apache.lucene.store.Directory
getTempFileName
-
-
-
-
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.
-
setThrottling
public void setThrottling(MockDirectoryWrapper.Throttling throttling)
-
setUseSlowOpenClosers
public void setUseSlowOpenClosers(boolean v)
Add a rare small sleep to catch race conditions in open/closeYou can enable this if you need it.
-
sync
public void sync(Collection<String> names) throws IOException
- Overrides:
sync
in classFilterDirectory
- Throws:
IOException
-
rename
public void rename(String source, String dest) throws IOException
- Overrides:
rename
in classFilterDirectory
- Throws:
IOException
-
syncMetaData
public void syncMetaData() throws IOException
- Overrides:
syncMetaData
in classFilterDirectory
- Throws:
IOException
-
sizeInBytes
public final long sizeInBytes() throws IOException
- Throws:
IOException
-
corruptUnknownFiles
public void corruptUnknownFiles() throws IOException
- Throws:
IOException
-
corruptFiles
public void corruptFiles(Collection<String> files) throws IOException
- Throws:
IOException
-
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.
-
resetMaxUsedSizeInBytes
public void resetMaxUsedSizeInBytes() throws IOException
- Throws:
IOException
-
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
-
deleteFile
public void deleteFile(String name) throws IOException
- Overrides:
deleteFile
in classFilterDirectory
- Throws:
IOException
-
setFailOnCreateOutput
public void setFailOnCreateOutput(boolean v)
-
createOutput
public IndexOutput createOutput(String name, IOContext context) throws IOException
- Overrides:
createOutput
in classFilterDirectory
- Throws:
IOException
-
createTempOutput
public IndexOutput createTempOutput(String prefix, String suffix, IOContext context) throws IOException
- Overrides:
createTempOutput
in classFilterDirectory
- Throws:
IOException
-
setFailOnOpenInput
public void setFailOnOpenInput(boolean v)
-
openInput
public IndexInput openInput(String name, IOContext context) throws IOException
- Overrides:
openInput
in classFilterDirectory
- Throws:
IOException
-
setAssertNoUnrefencedFilesOnClose
public void setAssertNoUnrefencedFilesOnClose(boolean v)
-
close
public void close() throws IOException
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classBaseDirectoryWrapper
- Throws:
IOException
-
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
-
listAll
public String[] listAll() throws IOException
- Overrides:
listAll
in classFilterDirectory
- Throws:
IOException
-
fileLength
public long fileLength(String name) throws IOException
- Overrides:
fileLength
in classFilterDirectory
- Throws:
IOException
-
obtainLock
public Lock obtainLock(String name) throws IOException
- Overrides:
obtainLock
in classFilterDirectory
- Throws:
IOException
-
toString
public String toString()
- Overrides:
toString
in classFilterDirectory
-
openChecksumInput
public final ChecksumIndexInput openChecksumInput(String name, IOContext context) throws IOException
- Overrides:
openChecksumInput
in classDirectory
- Throws:
IOException
-
copyFrom
public final void copyFrom(Directory from, String src, String dest, IOContext context) throws IOException
- Overrides:
copyFrom
in classDirectory
- Throws:
IOException
-
ensureOpen
protected final void ensureOpen() throws AlreadyClosedException
- Overrides:
ensureOpen
in classFilterDirectory
- Throws:
AlreadyClosedException
-
-