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 classMockDirectoryWrapper.FailureObjects that represent fail-able conditions.static classMockDirectoryWrapper.FakeIOExceptionUse this when throwing fakeIOException, e.g.static classMockDirectoryWrapper.ThrottlingEnum 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 voidclearCrash()voidclose()voidcopyFrom(Directory from, String src, String dest, IOContext context)voidcorruptFiles(Collection<String> files)voidcorruptUnknownFiles()voidcrash()Simulates a crash of OS or machine by overwriting unsynced files.IndexOutputcreateOutput(String name, IOContext context)IndexOutputcreateTempOutput(String prefix, String suffix, IOContext context)voiddeleteFile(String name)protected voidensureOpen()voidfailOn(MockDirectoryWrapper.Failure fail)add a Failure object to the list of objects to be evaluated at every potential failure pointlongfileLength(String name)booleangetAssertNoDeleteOpenFile()longgetFileHandleCount()returns current open file handle countintgetInputCloneCount()longgetMaxSizeInBytes()longgetMaxUsedSizeInBytes()Returns the peek actual storage used (bytes) in this directory.Set<String>getOpenDeletedFiles()doublegetRandomIOExceptionRate()doublegetRandomIOExceptionRateOnOpen()String[]listAll()LockobtainLock(String name)ChecksumIndexInputopenChecksumInput(String name, IOContext context)IndexInputopenInput(String name, IOContext context)voidremoveIndexInput(IndexInput in, String name)voidremoveIndexOutput(IndexOutput out, String name)voidrename(String source, String dest)voidresetMaxUsedSizeInBytes()voidsetAllowRandomFileNotFoundException(boolean value)If set to true (the default), when we throw random IOException on openInput or createOutput, we may sometimes throw FileNotFoundException or NoSuchFileException.voidsetAllowReadingFilesStillOpenForWrite(boolean value)If set to true, you can open an inputstream on a file that is still open for writes.voidsetAssertNoDeleteOpenFile(boolean value)Trip a test assert if there is an attempt to delete an open file.voidsetAssertNoUnrefencedFilesOnClose(boolean v)voidsetFailOnCreateOutput(boolean v)voidsetFailOnOpenInput(boolean v)voidsetMaxSizeInBytes(long maxSize)voidsetRandomIOExceptionRate(double rate)If 0.0, no exceptions will be thrown.voidsetRandomIOExceptionRateOnOpen(double rate)If 0.0, no exceptions will be thrown during openInput and createOutput.voidsetThrottling(MockDirectoryWrapper.Throttling throttling)voidsetTrackDiskUsage(boolean v)voidsetUseSlowOpenClosers(boolean v)Add a rare small sleep to catch race conditions in open/closevoidsetVerboseClone(boolean v)If set to true, we print a fake exception with filename and stacktrace on every indexinput clone()longsizeInBytes()voidsync(Collection<String> names)voidsyncMetaData()StringtoString()-
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:
syncin classFilterDirectory- Throws:
IOException
-
rename
public void rename(String source, String dest) throws IOException
- Overrides:
renamein classFilterDirectory- Throws:
IOException
-
syncMetaData
public void syncMetaData() throws IOException- Overrides:
syncMetaDatain 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 IOExceptionSimulates 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:
deleteFilein classFilterDirectory- Throws:
IOException
-
setFailOnCreateOutput
public void setFailOnCreateOutput(boolean v)
-
createOutput
public IndexOutput createOutput(String name, IOContext context) throws IOException
- Overrides:
createOutputin classFilterDirectory- Throws:
IOException
-
createTempOutput
public IndexOutput createTempOutput(String prefix, String suffix, IOContext context) throws IOException
- Overrides:
createTempOutputin classFilterDirectory- Throws:
IOException
-
setFailOnOpenInput
public void setFailOnOpenInput(boolean v)
-
openInput
public IndexInput openInput(String name, IOContext context) throws IOException
- Overrides:
openInputin classFilterDirectory- Throws:
IOException
-
setAssertNoUnrefencedFilesOnClose
public void setAssertNoUnrefencedFilesOnClose(boolean v)
-
close
public void close() throws IOException- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein 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:
listAllin classFilterDirectory- Throws:
IOException
-
fileLength
public long fileLength(String name) throws IOException
- Overrides:
fileLengthin classFilterDirectory- Throws:
IOException
-
obtainLock
public Lock obtainLock(String name) throws IOException
- Overrides:
obtainLockin classFilterDirectory- Throws:
IOException
-
toString
public String toString()
- Overrides:
toStringin classFilterDirectory
-
openChecksumInput
public final ChecksumIndexInput openChecksumInput(String name, IOContext context) throws IOException
- Overrides:
openChecksumInputin classDirectory- Throws:
IOException
-
copyFrom
public final void copyFrom(Directory from, String src, String dest, IOContext context) throws IOException
- Overrides:
copyFromin classDirectory- Throws:
IOException
-
ensureOpen
protected final void ensureOpen() throws AlreadyClosedException- Overrides:
ensureOpenin classFilterDirectory- Throws:
AlreadyClosedException
-
-