public override void WriteBytes(byte[] b, int offset, int len) { long freeSpace = dir.maxSize - dir.SizeInBytes(); long realUsage = 0; // If MockRAMDir crashed since we were opened, then // don't write anything: if (dir.crashed) { throw new System.IO.IOException("MockRAMDirectory was crashed; cannot write to " + name); } // Enforce disk full: if (dir.maxSize != 0 && freeSpace <= len) { // Compute the real disk free. This will greatly slow // down our test but makes it more accurate: realUsage = dir.GetRecomputedActualSizeInBytes(); freeSpace = dir.maxSize - realUsage; } if (dir.maxSize != 0 && freeSpace <= len) { if (freeSpace > 0 && freeSpace < len) { realUsage += freeSpace; base.WriteBytes(b, offset, (int)freeSpace); } if (realUsage > dir.maxUsedSize) { dir.maxUsedSize = realUsage; } throw new System.IO.IOException("fake disk full at " + dir.GetRecomputedActualSizeInBytes() + " bytes when writing " + name); } else { base.WriteBytes(b, offset, len); } dir.MaybeThrowDeterministicException(); if (first) { // Maybe throw random exception; only do this on first // write to a new file: first = false; dir.MaybeThrowIOException(); } }