def executeTest(ramdiskdir): openFiles = Storage.OpenFiles(10) os.system('mount -t tmpfs -o size=1M tmpfs %s' % ramdiskdir) try: paths = [ os.path.join(ramdiskdir, 'test-%s' % ix) for ix in range(10) ] toWrite = [ chr((ix + c) % 255) for c in range(1024) for ix in range(32) ] * 32 for string in toWrite: path = random.choice(paths) openFiles.append(path, string) except OSError as e: self.assertEqual(e.errno, errno.ENOSPC) openFiles.shutdown() raise
def test_open_files_multithreaded(self): # test multiple threads in C++ to test OpenFiles for race conditions self.openFiles = Storage.OpenFiles(10) numThreads = 10 numValues = 20 valueSize = 128 iters = 20 base = tempfile.mkdtemp() numFilesPerThread = 100 numFiles = 1000 def genValues(num, size): return [ ''.join( chr(random.randint(ord('A'), ord('z'))) for y in range(size)) for x in range(num) ] files = [ os.path.join(base, 'test-path-%s' % ix) for ix in range(numFiles) ] def writer(files, strings, iters, ix): Storage.writeToOpenFiles(self.openFiles, files, strings, iters) threads = [ threading.Thread(target=writer, args=(random.sample(files, numFilesPerThread), genValues(numValues, valueSize), iters, ix)) for ix in range(numThreads) ] for t in threads: t.start() for t in threads: t.join() print len(os.listdir(base)) shutil.rmtree(base)
def test_open_files(self): fdsOpenBefore = len(getOwnOpenFds()) self.openFiles = Storage.OpenFiles(1) self.corrupted_readers( lambda path: OpenFilesWrapper(path, self.openFiles)) self.assertEqual(fdsOpenBefore + 1, len(getOwnOpenFds()))