#!/usr/bin/env python # # Tester for IOR # #/*****************************************************************************\ #* * #* Copyright (c) 2003, The Regents of the University of California * #* See the file COPYRIGHT for a complete copyright notice and license. * #* * #\*****************************************************************************/ import sys import os.path import string # definitions RETURN_TOTAL_TESTS = -1 TEST_SETTINGS = 0 TEST_SUBSET_SIZE = 5 # number of tests in each job submission IOR_SIZE_T = 8 KIBIBYTE = 1024 MEBIBYTE = KIBIBYTE * KIBIBYTE GIBIBYTE = KIBIBYTE * MEBIBYTE PASS = 1 FAIL = 0 TRUE = 1 FALSE = 0 scriptFileBase = './scriptFile' executable = '../src/C/IOR' #testDir = './tmp_test_dir' testDir = '/p/glocal1/loewe/tmp_test_dir' debug = FALSE # debug mode = {FALSE, TRUE} ################################################################################ # class for default test parameters # ################################################################################ class Test: ###################### # default parameters # ###################### def DefaultTest(self): return { # general 'debug': 'debug info', 'api': 'POSIX', 'testFile': testDir + '/testFile.1', 'hintsFileName': '', 'repetitions': 1, 'multiFile': 0, 'interTestDelay': 0, 'numTasks': 0, 'readFile': 1, 'writeFile': 1, 'filePerProc': 0, 'fsync': 0, 'checkWrite': 1, 'checkRead': 1, 'keepFile': 1, 'keepFileWithError': 1, 'segmentCount': 1, 'blockSize': MEBIBYTE, 'transferSize': (MEBIBYTE / 4), 'verbose': 0, 'showHelp': 0, 'reorderTasks': 1, # not default in code 'quitOnError': 0, 'useExistingTestFile': 0, 'deadlineForStonewalling': 0, 'maxTimeDuration': 0, 'setTimeStampSignature': 0, 'intraTestBarriers': 0, 'storeFileOffset': 0, 'randomOffset': 0, # POSIX 'singleXferAttempt': 0, 'useO_DIRECT': 0, # MPIIO 'useFileView': 0, 'preallocate': 0, 'useSharedFilePointer': 0, # not working yet 'useStridedDatatype': 0, # not working yet # non-POSIX 'showHints': 0, 'collective': 0, # HDF5 'setAlignment': 1, 'noFill': 0, # in hdf5-1.6 or later version 'individualDataSets': 0 # not working yet } ################### # tests to be run # ################### def Tests(self, expectation, testNumber): ################################################################################ ################################################################################ # # # S T A R T O F T E S T S # # # ################################################################################ ################################################################################ POSIX_TESTS = [ # # pattern independent tests # # POSIX, interTestDelay [{'debug': 'POSIX interTestDelay', 'interTestDelay': 0}], [{'debug': 'POSIX interTestDelay', 'interTestDelay': 1}], # POSIX, intraTestBarriers [{'debug': 'POSIX intraTestBarriers', 'intraTestBarriers': 1}], # POSIX, uniqueDir [{'debug': 'POSIX uniqueDir', 'filePerProc': 1, 'uniqueDir': 1}], # POSIX, uniqueDir random [{'debug': 'POSIX uniqueDir random', 'filePerProc': 1, 'randomOffset': 1, 'checkRead': 0, 'uniqueDir': 1}], # POSIX, fsync [{'debug': 'POSIX fsync', 'fsync': 1}], # POSIX, repetitions [{'debug': 'POSIX repetitions', 'repetitions': 1}], [{'debug': 'POSIX repetitions', 'repetitions': 3}], # POSIX, repetitions random [{'debug': 'POSIX repetitions random', 'randomOffset': 1, 'checkRead': 0, 'repetitions': 3}], # POSIX, multiFile [{'debug': 'POSIX multiFile', 'repetitions': 3, 'multiFile': 1}], # POSIX, multiFile random [{'debug': 'POSIX multiFile', 'repetitions': 3, 'randomOffset': 1, 'checkRead': 0, 'multiFile': 1}], # POSIX, writeFile-only [{'debug': 'POSIX writeFile-only', 'writeFile': 1, 'readFile': 0, 'checkRead': 0}], # POSIX, writeFile-only random [{'debug': 'POSIX writeFile-only random', 'writeFile': 1, 'randomOffset': 1, 'readFile': 0, 'checkRead': 0}], # POSIX, readFile-only [{'debug': 'POSIX readFile-only', 'writeFile': 0, 'checkWrite': 0, 'readFile': 1}], # POSIX, readFile-only [{'debug': 'POSIX readFile-only random', 'writeFile': 0, 'checkWrite': 0, 'randomOffset': 1, 'checkRead': 0, 'readFile': 1}], # POSIX, write/read check off [{'debug': 'POSIX write-read check off', 'checkWrite': 0, 'checkRead': 0}], # POSIX, write/read check off random [{'debug': 'POSIX write-read check off random', 'checkWrite': 0, 'randomOffset': 1, 'checkRead': 0}], # POSIX, store file offset [{'debug': 'POSIX store file offset', 'storeFileOffset':1}], # POSIX, remove file [{'debug': 'POSIX remove file', 'keepFile': 0}], # POSIX, remove file random [{'debug': 'POSIX remove file', 'randomOffset': 1, 'checkRead': 0, 'keepFile': 0}], # POSIX, remove file with error [{'debug': 'POSIX remove file with error', 'keepFileWithError': 0}], # POSIX, remove file with error random [{'debug': 'POSIX remove file with error random', 'randomOffset': 1, 'checkRead': 0, 'keepFileWithError': 0}], # POSIX, deadline for stonewalling [{'debug': 'POSIX deadlineForStonewalling', 'testFile': test.DefaultTest()['testFile'] + '.stonewall', 'blockSize': GIBIBYTE, 'readFile': 0, 'checkWrite': 0, 'checkRead': 0, 'deadlineForStonewalling':1}], # POSIX, deadline for stonewalling random [{'debug': 'POSIX deadlineForStonewalling random', 'testFile': test.DefaultTest()['testFile'] + '.stonewall', 'blockSize': GIBIBYTE, 'readFile': 0, 'checkWrite': 0, 'randomOffset': 1, 'checkRead': 0, 'deadlineForStonewalling':1}], # POSIX, max time duration [{'debug': 'POSIX maxTimeDuration', 'maxTimeDuration':1}], # POSIX, max time duration random [{'debug': 'POSIX maxTimeDuration random', 'randomOffset': 1, 'checkRead': 0, 'maxTimeDuration':1}], # POSIX, verbose [{'debug': 'POSIX verbose 0', 'verbose': 0}], [{'debug': 'POSIX verbose 1', 'verbose': 1}], [{'debug': 'POSIX verbose 2', 'verbose': 2}], [{'debug': 'POSIX verbose 3', 'verbose': 3}], [{'debug': 'POSIX verbose 4', 'verbose': 4, 'blockSize': KIBIBYTE, 'transferSize': (KIBIBYTE / 4)}], # POSIX, multiple file names, ssf [{'debug': 'POSIX multiple file names ssf', 'testFile': testDir + '/f1@' + testDir + '/f2'}], # POSIX, multiple file names, ssf random [{'debug': 'POSIX multiple file names ssf random', 'randomOffset': 1, 'checkRead': 0, 'testFile': testDir + '/f1@' + testDir + '/f2'}], # POSIX, multiple file names, fpp [{'debug': 'POSIX multiple file names fpp', 'filePerProc': 1, 'testFile': testDir + '/f1@' + testDir + '/f2'}], # POSIX, multiple file names, fpp random [{'debug': 'POSIX multiple file names fpp random', 'filePerProc': 1, 'randomOffset': 1, 'checkRead': 0, 'testFile': testDir + '/f1@' + testDir + '/f2'}], # POSIX, corruptFile [{'debug': 'POSIX corruptFile', 'testFile': test.DefaultTest()['testFile'], 'filePerProc': 0, 'corruptFile': 1}], # POSIX, corruptFile random [{'debug': 'POSIX corruptFile random', 'testFile': test.DefaultTest()['testFile'], 'filePerProc': 0, 'randomOffset': 1, 'checkRead': 0, 'corruptFile': 1}], # POSIX, corruptFile [{'debug': 'POSIX corruptFile filePerProc', 'filePerProc': 1, 'corruptFile': 1}], # POSIX, corruptFile random [{'debug': 'POSIX corruptFile filePerProc random', 'filePerProc': 1, 'randomOffset': 1, 'checkRead': 0, 'corruptFile': 1}], # POSIX, showHelp [{'debug': 'POSIX showHelp', 'showHelp': 1, 'filePerProc': 0, 'corruptFile': 0}], # POSIX, quitOnError [{'debug': 'POSIX quitOnError', 'quitOnError': 1}], # POSIX, quitOnError random [{'debug': 'POSIX quitOnError random', 'randomOffset': 1, 'checkRead': 0, 'quitOnError': 1}], # POSIX, singleXferAttempt [{'debug': 'POSIX singleXferAttempt', 'singleXferAttempt': 1}], # POSIX, singleXferAttempt random [{'debug': 'POSIX singleXferAttempt random', 'randomOffset': 1, 'checkRead': 0, 'singleXferAttempt': 1}], # POSIX, setTimeStampSignature [{'debug': 'POSIX setTimeStampSignature', 'setTimeStampSignature': 123}], # POSIX, setTimeStampSignature random [{'debug': 'POSIX setTimeStampSignature random', 'randomOffset': 1, 'checkRead': 0, 'setTimeStampSignature': 123}], # POSIX, useExistingTestFile [Note: don't follow HDF5 test] [{'debug': 'POSIX useExistingTestFile', 'useExistingTestFile': 1}], # POSIX, useExistingTestFile random [Note: don't follow HDF5 test] [{'debug': 'POSIX useExistingTestFile', 'randomOffset': 1, 'checkRead': 0, 'useExistingTestFile': 1}], # # pattern dependent tests # # POSIX, filePerProc [{'debug': 'POSIX filePerProc', 'filePerProc': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'POSIX filePerProc', 'filePerProc': 1, 'segmentCount': 1}], [{'debug': 'POSIX filePerProc', 'filePerProc': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'POSIX filePerProc', 'filePerProc': 1, 'segmentCount': 3}], # POSIX, sharedFile [{'debug': 'POSIX sharedFile', 'filePerProc': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'POSIX sharedFile', 'filePerProc': 0, 'segmentCount': 1}], [{'debug': 'POSIX sharedFile', 'filePerProc': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'POSIX sharedFile', 'filePerProc': 0, 'segmentCount': 3}], [{'debug': 'POSIX sharedFile numTasks', 'filePerProc': 0, 'numTasks': 2, 'segmentCount': 3}], # # pattern dependent tests, random # # POSIX, filePerProc random [{'debug': 'POSIX filePerProc random', 'filePerProc': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 1}], [{'debug': 'POSIX filePerProc random', 'filePerProc': 1, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 1}], [{'debug': 'POSIX filePerProc random', 'filePerProc': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 3}], [{'debug': 'POSIX filePerProc random', 'filePerProc': 1, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 3}], # POSIX, sharedFile random [{'debug': 'POSIX sharedFile random', 'filePerProc': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 1}], [{'debug': 'POSIX sharedFile random', 'filePerProc': 0, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 1}], [{'debug': 'POSIX sharedFile random', 'filePerProc': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 3}], [{'debug': 'POSIX sharedFile random', 'filePerProc': 0, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 3}], [{'debug': 'POSIX sharedFile numTasks random', 'filePerProc': 0, 'numTasks': 2, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 3}] ] MPIIO_TESTS = [ # # pattern independent tests # # MPIIO, repetitions [{'debug': 'MPIIO repetitions', 'api': 'MPIIO', 'repetitions': 1}], [{'debug': 'MPIIO repetitions', 'api': 'MPIIO', 'repetitions': 3}], [{'debug': 'MPIIO repetitions random', 'api': 'MPIIO', 'randomOffset': 1, 'checkRead': 0, 'repetitions': 3}], # MPIIO, multiFile [{'debug': 'MPIIO multiFile', 'api': 'MPIIO', 'repetitions': 3, 'multiFile': 1}], # MPIIO, multiFile random [{'debug': 'MPIIO multiFile random', 'api': 'MPIIO', 'repetitions': 3, 'randomOffset': 1, 'checkRead': 0, 'multiFile': 1}], # MPIIO, remove file [{'debug': 'MPIIO remove file', 'api': 'MPIIO', 'keepFile': 0}], # MPIIO, remove file random [{'debug': 'MPIIO remove file', 'api': 'MPIIO', 'randomOffset': 1, 'checkRead': 0, 'keepFile': 0}], # MPIIO, remove file with error [{'debug': 'MPIIO remove file with error', 'api': 'MPIIO', 'keepFileWithError': 0}], # MPIIO, remove file with error random [{'debug': 'MPIIO remove file with error random', 'api': 'MPIIO', 'randomOffset': 1, 'checkRead': 0, 'keepFileWithError': 0}], # MPIIO, deadline for stonewalling [{'debug': 'MPIIO deadlineForStonewalling', 'api': 'MPIIO', 'testFile': test.DefaultTest()['testFile'] + '.stonewall', 'blockSize': GIBIBYTE, 'readFile': 0, 'checkWrite': 0, 'checkRead': 0, 'deadlineForStonewalling':1}], # MPIIO, deadline for stonewalling random [{'debug': 'MPIIO deadlineForStonewalling random', 'api': 'MPIIO', 'testFile': test.DefaultTest()['testFile'] + '.stonewall', 'blockSize': GIBIBYTE, 'readFile': 0, 'checkWrite': 0, 'randomOffset': 1, 'checkRead': 0, 'deadlineForStonewalling':1}], # MPIIO, max time duration [{'debug': 'MPIIO maxTimeDuration', 'api': 'MPIIO', 'maxTimeDuration':1}], # MPIIO, max time duration random [{'debug': 'MPIIO maxTimeDuration random', 'api': 'MPIIO', 'randomOffset': 1, 'checkRead': 0, 'maxTimeDuration':1}], # MPIIO, quitOnError [{'debug': 'MPIIO quitOnError', 'api': 'MPIIO', 'quitOnError': 1}], # MPIIO, quitOnError random [{'debug': 'MPIIO quitOnError random', 'api': 'MPIIO', 'randomOffset': 1, 'checkRead': 0, 'quitOnError': 1}], # MPIIO, multiple file names, ssf [{'debug': 'MPIIO multiple file names ssf', 'api': 'MPIIO', 'testFile': testDir + '/f1@' + testDir + '/f2'}], # MPIIO, multiple file names, ssf random [{'debug': 'MPIIO multiple file names ssf random', 'api': 'MPIIO', 'randomOffset': 1, 'checkRead': 0, 'testFile': testDir + '/f1@' + testDir + '/f2'}], # MPIIO, multiple file names, fpp [{'debug': 'MPIIO multiple file names fpp', 'api': 'MPIIO', 'filePerProc': 1, 'testFile': testDir + '/f1@' + testDir + '/f2'}], # MPIIO, multiple file names, fpp random [{'debug': 'MPIIO multiple file names fpp random', 'api': 'MPIIO', 'filePerProc': 1, 'randomOffset': 1, 'checkRead': 0, 'testFile': testDir + '/f1@' + testDir + '/f2'}], # MPIIO, corruptFile [{'debug': 'MPIIO corruptFile', 'api': 'MPIIO', 'testFile': test.DefaultTest()['testFile'], 'filePerProc': 0, 'corruptFile': 1}], # MPIIO, corruptFile random [{'debug': 'MPIIO corruptFile random', 'api': 'MPIIO', 'testFile': test.DefaultTest()['testFile'], 'filePerProc': 0, 'randomOffset': 1, 'checkRead': 0, 'corruptFile': 1}], # MPIIO, corruptFile [{'debug': 'MPIIO corruptFile filePerProc', 'api': 'MPIIO', 'filePerProc': 1, 'corruptFile': 1}], # MPIIO, corruptFile random [{'debug': 'MPIIO corruptFile filePerProc random', 'api': 'MPIIO', 'filePerProc': 1, 'randomOffset': 1, 'checkRead': 0, 'corruptFile': 1}], # MPIIO, useExistingTestFile [{'debug': 'MPIIO useExistingTestFile', 'api': 'MPIIO', 'useExistingTestFile': 0, 'filePerProc': 0, 'corruptFile': 0}], # MPIIO, useExistingTestFile random [{'debug': 'MPIIO useExistingTestFile random', 'api': 'MPIIO', 'useExistingTestFile': 0, 'filePerProc': 0, 'randomOffset': 1, 'checkRead': 0, 'corruptFile': 0}], # MPIIO, preallocate [{'debug': 'MPIIO preallocate', 'api': 'MPIIO', 'preallocate': 1}], # MPIIO, showHints [{'debug': 'MPIIO showHints', 'api': 'MPIIO', 'showHints': 1}], # MPIIO, showHints w/hintsFileName [{'debug': 'MPIIO showHints w/hintsFileName', 'api': 'MPIIO', 'hintsFileName': '/g/g0/loewe/IOR/test/hintsFile', 'showHints': 1}], # MPIIO, setTimeStampSignature [{'debug': 'MPIIO setTimeStampSignature', 'api': 'MPIIO', 'setTimeStampSignature': 123}], # MPIIO, setTimeStampSignature random [{'debug': 'MPIIO setTimeStampSignature random', 'api': 'MPIIO', 'randomOffset': 1, 'checkRead': 0, 'setTimeStampSignature': 123}], # # pattern dependent tests # # MPIIO, independent [{'debug': 'MPIIO independent', 'api': 'MPIIO', 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'MPIIO independent', 'api': 'MPIIO', 'collective': 0, 'segmentCount': 1}], [{'debug': 'MPIIO independent', 'api': 'MPIIO', 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'MPIIO independent', 'api': 'MPIIO', 'collective': 0, 'segmentCount': 3}], [{'debug': 'MPIIO independent numTasks', 'api': 'MPIIO', 'numTasks': 2, 'collective': 0, 'segmentCount': 3}], # MPIIO, independent random [{'debug': 'MPIIO independent random', 'api': 'MPIIO', 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 1}], [{'debug': 'MPIIO independent random', 'api': 'MPIIO', 'collective': 0, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 1}], [{'debug': 'MPIIO independent random', 'api': 'MPIIO', 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 3}], [{'debug': 'MPIIO independent random', 'api': 'MPIIO', 'collective': 0, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 3}], [{'debug': 'MPIIO independent numTasks random', 'api': 'MPIIO', 'numTasks': 2, 'collective': 0, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 3}], # MPIIO, collective [{'debug': 'MPIIO collective', 'api': 'MPIIO', 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'MPIIO collective', 'api': 'MPIIO', 'collective': 1, 'segmentCount': 1}], [{'debug': 'MPIIO collective', 'api': 'MPIIO', 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'MPIIO collective', 'api': 'MPIIO', 'collective': 1, 'segmentCount': 3}], [{'debug': 'MPIIO collective numTasks', 'api': 'MPIIO', 'numTasks': 2, 'collective': 1, 'segmentCount': 3}], # MPIIO, independent, useFileView [{'debug': 'MPIIO independent useFileView', 'api': 'MPIIO', 'useFileView': 1, 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'MPIIO independent useFileView', 'api': 'MPIIO', 'useFileView': 1, 'collective': 0, 'segmentCount': 1}], [{'debug': 'MPIIO independent useFileView', 'api': 'MPIIO', 'useFileView': 1, 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'MPIIO independent useFileView', 'api': 'MPIIO', 'useFileView': 1, 'collective': 0, 'segmentCount': 3}], [{'debug': 'MPIIO independent useFileView numTasks', 'api': 'MPIIO', 'useFileView': 1, 'numTasks': 2, 'collective': 0, 'segmentCount': 3}], # MPIIO, collective, useFileView [{'debug': 'MPIIO collective useFileView', 'api': 'MPIIO', 'useFileView': 1, 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'MPIIO collective useFileView', 'api': 'MPIIO', 'useFileView': 1, 'collective': 1, 'segmentCount': 1}], [{'debug': 'MPIIO collective useFileView', 'api': 'MPIIO', 'useFileView': 1, 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'MPIIO collective useFileView', 'api': 'MPIIO', 'useFileView': 1, 'collective': 1, 'segmentCount': 3}], [{'debug': 'MPIIO collective useFileView numTasks', 'api': 'MPIIO', 'useFileView': 1, 'numTasks': 2, 'collective': 1, 'segmentCount': 3}], # MPIIO, independent, filePerProc [{'debug': 'MPIIO independent filePerProc', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'MPIIO independent filePerProc', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 0, 'segmentCount': 1}], [{'debug': 'MPIIO independent filePerProc', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'MPIIO independent filePerProc', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 0, 'segmentCount': 3}], [{'debug': 'MPIIO independent filePerProc numTasks', 'api': 'MPIIO', 'filePerProc': 1, 'numTasks': 2, 'collective': 0, 'segmentCount': 3}], # MPIIO, independent, filePerProc random [{'debug': 'MPIIO independent filePerProc random', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 1}], [{'debug': 'MPIIO independent filePerProc random', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 0, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 1}], [{'debug': 'MPIIO independent filePerProc random', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 3}], [{'debug': 'MPIIO independent filePerProc random', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 0, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 3}], [{'debug': 'MPIIO independent filePerProc numTasks random', 'api': 'MPIIO', 'filePerProc': 1, 'numTasks': 2, 'collective': 0, 'randomOffset': 1, 'checkRead': 0, 'segmentCount': 3}], # MPIIO, collective, filePerProc [{'debug': 'MPIIO collective filePerProc', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'MPIIO collective filePerProc', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 1, 'segmentCount': 1}], [{'debug': 'MPIIO collective filePerProc', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'MPIIO collective filePerProc', 'api': 'MPIIO', 'filePerProc': 1, 'collective': 1, 'segmentCount': 3}], [{'debug': 'MPIIO collective filePerProc numTasks', 'api': 'MPIIO', 'filePerProc': 1, 'numTasks': 2, 'collective': 1, 'segmentCount': 3}], # MPIIO, independent, filePerProc, useFileView [{'debug': 'MPIIO independent filePerProc useFileView', 'api': 'MPIIO', 'filePerProc': 1, 'useFileView': 1, 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'MPIIO independent filePerProc useFileView', 'api': 'MPIIO', 'filePerProc': 1, 'useFileView': 1, 'collective': 0, 'segmentCount': 1}], [{'debug': 'MPIIO independent filePerProc useFileView', 'api': 'MPIIO', 'filePerProc': 1, 'useFileView': 1, 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'MPIIO independent filePerProc useFileView', 'api': 'MPIIO', 'filePerProc': 1, 'useFileView': 1, 'collective': 0, 'segmentCount': 3}], [{'debug': 'MPIIO independent filePerProc useFileView numTasks', 'api': 'MPIIO', 'filePerProc': 1, 'numTasks': 2, 'useFileView': 1, 'collective': 0, 'segmentCount': 3}], # MPIIO, collective, filePerProc, useFileView [{'debug': 'MPIIO collective filePerProc useFileView', 'api': 'MPIIO', 'filePerProc': 1, 'useFileView': 1, 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'MPIIO collective filePerProc useFileView', 'api': 'MPIIO', 'filePerProc': 1, 'useFileView': 1, 'collective': 1, 'segmentCount': 1}], [{'debug': 'MPIIO collective filePerProc useFileView', 'api': 'MPIIO', 'filePerProc': 1, 'useFileView': 1, 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'MPIIO collective filePerProc useFileView', 'api': 'MPIIO', 'filePerProc': 1, 'useFileView': 1, 'collective': 1, 'segmentCount': 3}], [{'debug': 'MPIIO collective filePerProc useFileView numTasks', 'api': 'MPIIO', 'filePerProc': 1, 'numTasks': 2, 'useFileView': 1, 'collective': 1, 'segmentCount': 3}] ] HDF5_TESTS = [ # # pattern independent tests # # HDF5, repetitions [{'debug': 'HDF5 repetitions', 'api': 'HDF5', 'repetitions': 1}], [{'debug': 'HDF5 repetitions', 'api': 'HDF5', 'repetitions': 3}], # HDF5, multiFile [{'debug': 'HDF5 multiFile', 'api': 'HDF5', 'repetitions': 3, 'multiFile': 1}], # HDF5, useExistingTestFile [Note: this must follow HDF5 test] [{'debug': 'HDF5 useExistingTestFile', 'api': 'HDF5', 'useExistingTestFile': 1}], # HDF5, remove file [{'debug': 'HDF5 remove file', 'api': 'HDF5', 'keepFile': 0}], # HDF5, remove file with error [{'debug': 'HDF5 remove file with error', 'api': 'HDF5', 'keepFileWithError': 0}], # HDF5, deadline for stonewalling [{'debug': 'HDF5 deadlineForStonewalling', 'api': 'HDF5', 'testFile': test.DefaultTest()['testFile'] + '.stonewall', 'blockSize': GIBIBYTE/4, 'readFile': 0, 'checkWrite': 0, 'checkRead': 0, 'deadlineForStonewalling':1}], # HDF5, max time duration [{'debug': 'HDF5 maxTimeDuration', 'api': 'HDF5', 'maxTimeDuration':1}], # HDF5, quitOnError [{'debug': 'HDF5 quitOnError', 'api': 'HDF5', 'quitOnError': 1}], # HDF5, multiple file names, ssf [{'debug': 'HDF5 multiple file names ssf', 'api': 'HDF5', 'testFile': testDir + '/f1@' + testDir + '/f2'}], # HDF5, multiple file names, fpp [{'debug': 'HDF5 multiple file names fpp', 'api': 'HDF5', 'filePerProc': 1, 'testFile': testDir + '/f1@' + testDir + '/f2'}], # HDF5, corruptFile [{'debug': 'HDF5 corruptFile', 'api': 'HDF5', 'testFile': test.DefaultTest()['testFile'], 'filePerProc': 0, 'corruptFile': 1}], # HDF5, corruptFile [{'debug': 'HDF5 corruptFile filePerProc', 'api': 'HDF5', 'filePerProc': 1, 'corruptFile': 1}], # HDF5, setTimeStampSignature [{'debug': 'HDF5 setTimeStampSignature', 'api': 'HDF5', 'setTimeStampSignature': 123, 'filePerProc': 0, 'corruptFile': 0}], # HDF5, setAlignment [{'debug': 'HDF5 setAlignment', 'api': 'HDF5', 'setAlignment': '4m'}], # HDF5, showHints [{'debug': 'HDF5 showHints', 'api': 'HDF5', 'showHints': 0}], # WEL: omit this test until # showHints works # HDF5, showHints w/hintsFileName [{'debug': 'HDF5 showHints w/hintsFileName', 'api': 'HDF5', 'hintsFileName': '/g/g0/loewe/IOR/test/hintsFile', 'showHints': 0}], # WEL: omit this test until # showHints works # HDF5, noFill [{'debug': 'HDF5 noFill', 'api': 'HDF5', 'noFill': 0}], # WEL: omit this test until # noFill is standard # # pattern dependent tests # # HDF5, independent [{'debug': 'HDF5 independent', 'api': 'HDF5', 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'HDF5 independent', 'api': 'HDF5', 'collective': 0, 'segmentCount': 1}], [{'debug': 'HDF5 independent', 'api': 'HDF5', 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'HDF5 independent', 'api': 'HDF5', 'collective': 0, 'segmentCount': 3}], [{'debug': 'HDF5 independent numTasks', 'api': 'HDF5', 'numTasks': 2, 'collective': 0, 'segmentCount': 3}], # HDF5, collective [{'debug': 'HDF5 collective', 'api': 'HDF5', 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'HDF5 collective', 'api': 'HDF5', 'collective': 1, 'segmentCount': 1}], [{'debug': 'HDF5 collective', 'api': 'HDF5', 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'HDF5 collective', 'api': 'HDF5', 'collective': 1, 'segmentCount': 3}], [{'debug': 'HDF5 collective numTasks', 'api': 'HDF5', 'numTasks': 2, 'collective': 1, 'segmentCount': 3}] ] NCMPI_TESTS = [ # # pattern independent tests # # NCMPI, repetitions [{'debug': 'NCMPI repetitions', 'api': 'NCMPI', 'repetitions': 1}], [{'debug': 'NCMPI repetitions', 'api': 'NCMPI', 'repetitions': 3}], # NCMPI, multiFile [{'debug': 'NCMPI multiFile', 'api': 'NCMPI', 'repetitions': 3, 'multiFile': 1}], # NCMPI, deadline for stonewalling [{'debug': 'NCMPI deadlineForStonewalling', 'api': 'NCMPI', 'testFile': test.DefaultTest()['testFile'] + '.stonewall', 'blockSize': GIBIBYTE/4, 'readFile': 0, 'checkWrite': 0, 'checkRead': 0, 'deadlineForStonewalling':1}], # NCMPI, max time duration [{'debug': 'NCMPI maxTimeDuration', 'api': 'NCMPI', 'maxTimeDuration':1}], # NCMPI, remove file [{'debug': 'NCMPI remove file', 'api': 'NCMPI', 'keepFile': 0}], # NCMPI, remove file with error [{'debug': 'NCMPI remove file with error', 'api': 'NCMPI', 'keepFileWithError': 0}], # NCMPI, quitOnError [{'debug': 'NCMPI quitOnError', 'api': 'NCMPI', 'quitOnError': 1}], # NCMPI, multiple file names, ssf [{'debug': 'NCMPI multiple file names ssf', 'api': 'NCMPI', 'testFile': testDir + '/f1@' + testDir + '/f2'}], # NCMPI, corruptFile [{'debug': 'NCMPI corruptFile', 'api': 'NCMPI', 'testFile': test.DefaultTest()['testFile'], 'corruptFile': 1}], # NCMPI, setTimeStampSignature [{'debug': 'NCMPI setTimeStampSignature', 'api': 'NCMPI', 'setTimeStampSignature': 123, 'corruptFile': 0}], # NCMPI, useExistingTestFile [Note: this must follow NCMPI test] [{'debug': 'NCMPI useExistingTestFile', 'api': 'NCMPI', 'useExistingTestFile': 1}], # # pattern dependent tests # # NCMPI, independent [{'debug': 'NCMPI independent', 'api': 'NCMPI', 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'NCMPI independent', 'api': 'NCMPI', 'collective': 0, 'segmentCount': 1}], [{'debug': 'NCMPI independent', 'api': 'NCMPI', 'collective': 0, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'NCMPI independent', 'api': 'NCMPI', 'collective': 0, 'segmentCount': 3}], [{'debug': 'NCMPI independent numTasks', 'api': 'NCMPI', 'numTasks': 2, 'collective': 0, 'segmentCount': 3}], # NCMPI, collective [{'debug': 'NCMPI collective', 'api': 'NCMPI', 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 1}], [{'debug': 'NCMPI collective', 'api': 'NCMPI', 'collective': 1, 'segmentCount': 1}], [{'debug': 'NCMPI collective', 'api': 'NCMPI', 'collective': 1, 'blockSize': IOR_SIZE_T, 'transferSize': IOR_SIZE_T, 'segmentCount': 3}], [{'debug': 'NCMPI collective', 'api': 'NCMPI', 'collective': 1, 'segmentCount': 3}], [{'debug': 'NCMPI collective numTasks', 'api': 'NCMPI', 'numTasks': 2, 'collective': 1, 'segmentCount': 3}] ] PassTests = [] if OS == "AIX": PassTests = PassTests + POSIX_TESTS PassTests = PassTests + MPIIO_TESTS PassTests = PassTests + HDF5_TESTS PassTests = PassTests + NCMPI_TESTS elif OS == "Linux": PassTests = PassTests + POSIX_TESTS PassTests = PassTests + MPIIO_TESTS #PassTests = PassTests + HDF5_TESTS #PassTests = PassTests + NCMPI_TESTS else: PassTests = [ [{'debug': 'failure to determine OS'}] ] FailTests = [ [{'debug': 'no tests should fail'}] ] ################################################################################ ################################################################################ # # # E N D O F T E S T S # # # ################################################################################ ################################################################################ # WEL debugging: if 0 == 0: PassTests = [ [{'debug': 'debug test'}] ] if expectation == PASS: if testNumber == RETURN_TOTAL_TESTS: return len(PassTests) else: return PassTests[testNumber] else: # expectation == FAIL if testNumber == RETURN_TOTAL_TESTS: return len(FailTests) else: return FailTests[testNumber] ################### # run test script # ################### def RunScript(self, nodes, procs): if OS == "AIX": command = "poe " + executable + " -f " + scriptFile + \ " -nodes " + str(nodes) + " -procs " + str(procs) + \ " -rmpool systest -labelio no -retry wait" elif OS == "Linux": command = "srun -N " + str(procs) + " -n " + str(procs) + \ " -ppdebug " + executable + " -f " + scriptFile else: command = "unable to run " + executable + " -f " + scriptFile if debug == TRUE: Flush2File(command) else: childIn, childOut = os.popen4(command) childIn.close() while 1: line = childOut.readline() if line == '': break Flush2File(line[:-1]) childOut.close() return ########################## # create subsets of list # ########################## def ListSubsets(tests, size): listOfSubsets = [] start = end = 0 totalTestsSize = len(tests) for i in range(0, (totalTestsSize / size) + 1): if end >= totalTestsSize: break end = end + size listOfSubsets.append(tests[start:end]) start = end return listOfSubsets ################# # flush to file # ################# def Flush2File(string): resultsFile.write(string + '\n') resultsFile.flush() ################################## # replace blanks with underscore # ################################## def UnderScore(string): uString = string for i in range(0, len(uString)): if uString[i] == ' ': uString = uString[:i] + '_' + uString[i+1:] return(uString) ############################# # grep for keywords in file # ############################# def grepForKeywords(keywords, resultsFileName): # create pattern for grep pattern = "\"" for i in range(len(keywords)): pattern = pattern + keywords[i] if i < len(keywords)-1: pattern = pattern + '|' pattern = pattern + "\"" # grep for pattern in file resultsFileNameTmp = resultsFileName + ".tmp" cmd = "grep -i -E " + pattern + " " + resultsFileName \ + " >> " + resultsFileNameTmp + " 2>&1" os.system(cmd) cmd = "cat " + resultsFileNameTmp + " >> " + resultsFileName os.system(cmd) cmd = "rm -f " + resultsFileNameTmp os.system(cmd) ################################################################################ # main # ################################################################################ resultsFileName = "./test-results.txt-" + \ os.popen("date +%m.%d.%y").read()[:-1] resultsFile = open(resultsFileName, "w") OS = os.popen("uname -s").read()[:-1] test = Test() testNumber = 0 #environment variables nodes = 1 proccnt = [1, 3] Flush2File("TESTING IOR C CODE") # loop through different processors counts for proc in proccnt: # first run all expected-PASS test, then the FAILs for testType in (PASS, FAIL): # test type info if (testType == PASS): Flush2File("\n*** STARTING EXPECTED P A S S TESTS (PROC=" \ + str(proc) + ") ***") else: Flush2File("\n*** STARTING EXPECTED F A I L TESTS (PROC=" \ + str(proc) + ") ***") # loop through all tests for test type totalTests = range(test.Tests(testType, RETURN_TOTAL_TESTS)) firstTest = TRUE for testSubset in ListSubsets(totalTests, TEST_SUBSET_SIZE): for i in testSubset: if (firstTest == TRUE): Flush2File("\n\n*** Setting up tests ***") firstTest = FALSE if (i % 10 == 0 and i != 0): Flush2File("finished " + str(i) + " tests") sys.stdout.flush() # unless an expected fail test, only open a single script # create script file name if (testType == PASS): scriptFile = scriptFileBase + '.' + str(proc) + '.PASS' else: scriptFile = scriptFileBase + '.' + str(proc) + '.FAIL' scriptFile = scriptFile + '-TESTS_' + str(testSubset[0:1][0]) \ + '-' + str(testSubset[len(testSubset)-1:][0]) if ((i % TEST_SUBSET_SIZE == 0) or (testType == FAIL)): os.system("rm -f " + scriptFile) script = open(scriptFile, "a") script.write("IOR START" + "\n") # start with a default test, then modify testValues = test.DefaultTest() # loop through all changes to the default script for j in test.Tests(testType, i)[TEST_SETTINGS].keys(): testValues[j] = test.Tests(testType, i)[TEST_SETTINGS][j] testNumber = testNumber + 1 testValues['debug'] = UnderScore("Test No. " + \ str(testNumber) + ": " + \ testValues['debug']) # write test information to script file for entry in testValues.keys(): if (str(testValues[entry]) != ''): script.write("\t" + entry + "=" + str(testValues[entry]) + "\n") script.write("RUN" + "\n") # unless an expected fail test, only close a single script if ((i == testSubset[len(testSubset)-1:][0]) \ or (testType == FAIL)): # create tail, close file script.write("IOR STOP" + "\n") script.close() if (testType == FAIL): Flush2File("finished 1 test") else: Flush2File("finished %d test%s" % ((i + 1), "s"[i==1:])) firstTest = TRUE # display test info for failing test (note that the # test fails before a description is displayed) if testType == FAIL: Flush2File("\n\t================================\n\n") Flush2File("*** DEBUG MODE ***") Flush2File("*** " + str(testValues['debug']) + \ " ***") Flush2File("") # run os.system ("rm -rf " + testDir) os.system("mkdir " + testDir) test.RunScript(nodes, proc) os.system ("rm -rf " + testDir) if 0 == 0: os.system("rm -f " + scriptFile) # run scripts Flush2File("\nFINISHED TESTING IOR C CODE") Flush2File("\nRESULTS:") resultsFile.close() grepForKeywords(["warn", "fail", "error", "Test_No"], resultsFileName)