func NewMockDirectoryWrapper(random *rand.Rand, delegate store.Directory) *MockDirectoryWrapper { ans := &MockDirectoryWrapper{ noDeleteOpenFile: true, preventDoubleWrite: true, trackDiskUsage: false, wrapLockFactory: true, openFilesForWrite: make(map[string]bool), openLocks: make(map[string]bool), openLocksLock: &sync.Mutex{}, throttling: THROTTLING_SOMETIMES, inputCloneCount: 0, openFileHandles: make(map[io.Closer]error), failOnCreateOutput: true, failOnOpenInput: true, assertNoUnreferencedFilesOnClose: true, } ans.BaseDirectoryWrapperImpl = NewBaseDirectoryWrapper(delegate) ans.Locker = &sync.Mutex{} // must make a private random since our methods are called from different // methods; else test failures may not be reproducible from the original // seed ans.randomState = rand.New(rand.NewSource(random.Int63())) ans.throttledOutput = NewThrottledIndexOutput( MBitsToBytes(40+ans.randomState.Intn(10)), 5+ans.randomState.Int63n(5), nil) // force wrapping of LockFactory ans.myLockFactory = newMockLockFactoryWrapper(ans, delegate.LockFactory()) ans.init() return ans }