def testGetPart_impossible(self): """Test an impossible partitioning""" ps = AlignedPartitionStrategy(4, 1000, 3000) self.assertEqual( (0, 1000), ps.getPart(0) ) self.assertEqual( (1000, 1000), ps.getPart(1) ) self.assertEqual( (2000, 1000), ps.getPart(2) ) self.assertEqual( (0, 0), ps.getPart(3) )
def testGetPart_impossible(self): """Test an impossible partitioning""" ps = AlignedPartitionStrategy(4, 1000, 3000) self.assertEqual((0, 1000), ps.getPart(0)) self.assertEqual((1000, 1000), ps.getPart(1)) self.assertEqual((2000, 1000), ps.getPart(2)) self.assertEqual((0, 0), ps.getPart(3))
def start(self, filename, flowSize, restartFlag=False, restartOffset=0): """Start an XDD process to perform work""" # Add the final options self.target = filename self.restart = restartFlag self.restartByte = restartOffset # If restarting multiple sources, rather than partitioning from the # beginning, partition from the restart point if self.restart and self.numFlows > 1: flowSize -= restartOffset # Use a partitioner to convert the flow size into the local flow params partitioner = AlignedPartitionStrategy(self.numFlows, self.reqSize, flowSize) (self.startOffset, self.dataSize) = partitioner.getPart(self.flowIdx) # Check preconditions if self.checkPreconditions(): # Use the file creator for size 0 flows, XDD for everything else if 0 == self.dataSize: isCreator = (0 == self.flowIdx) and self.isSink status = EmptyFileFlowStatus(isCreator, filename, restartFlag) else: args = self.createCommandArgs() try: self.process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) status = XDDFlowStatus(self.process, restartOffset) except OSError as e: self.reasons.append("OS Error executing: " + args[0]) status = FailedFlowStatus(self.reasons) except: s = "Unknown error: " + str(sys.exc_info()[0]) self.reasons.append(s) status = FailedFlowStatus(self.reasons) else: # Precondition failure status = FailedFlowStatus(self.reasons) return status
def testGetPart_perfect(self): """Test perfect partitioning""" ps = AlignedPartitionStrategy(8, 100, 800) self.assertEqual((0, 100), ps.getPart(0)) self.assertEqual((100, 100), ps.getPart(1)) self.assertEqual((200, 100), ps.getPart(2)) self.assertEqual((300, 100), ps.getPart(3)) self.assertEqual((400, 100), ps.getPart(4)) self.assertEqual((500, 100), ps.getPart(5)) self.assertEqual((600, 100), ps.getPart(6)) self.assertEqual((700, 100), ps.getPart(7))
def testGetPart_perfect(self): """Test perfect partitioning""" ps = AlignedPartitionStrategy(8, 100, 800) self.assertEqual( (0, 100), ps.getPart(0) ) self.assertEqual( (100, 100), ps.getPart(1) ) self.assertEqual( (200, 100), ps.getPart(2) ) self.assertEqual( (300, 100), ps.getPart(3) ) self.assertEqual( (400, 100), ps.getPart(4) ) self.assertEqual( (500, 100), ps.getPart(5) ) self.assertEqual( (600, 100), ps.getPart(6) ) self.assertEqual( (700, 100), ps.getPart(7) )
def testGetPart_mega(self): """Test megabyte partitioning""" ps = AlignedPartitionStrategy(1, 32768 * 1024, 1000000) self.assertEqual((0, 1000000), ps.getPart(0))
def testGetPart_empty(self): """Test empty partitioning""" ps = AlignedPartitionStrategy(1, 32768 * 1024, 0) self.assertEqual((0, 0), ps.getPart(0))
def testGetPart_uneven(self): """Test unevenly divided partitioning""" ps = AlignedPartitionStrategy(3, 1024, 7000) self.assertEqual((0, 2048), ps.getPart(0)) self.assertEqual((2048, 2048), ps.getPart(1)) self.assertEqual((4096, 2904), ps.getPart(2))
def testGetPart_mega(self): """Test megabyte partitioning""" ps = AlignedPartitionStrategy(1, 32768*1024, 1000000) self.assertEqual( (0, 1000000), ps.getPart(0) )
def testGetPart_empty(self): """Test empty partitioning""" ps = AlignedPartitionStrategy(1, 32768*1024, 0) self.assertEqual( (0, 0), ps.getPart(0) )
def testGetPart_uneven(self): """Test unevenly divided partitioning""" ps = AlignedPartitionStrategy(3, 1024, 7000) self.assertEqual( (0, 2048), ps.getPart(0) ) self.assertEqual( (2048, 2048), ps.getPart(1) ) self.assertEqual( (4096, 2904), ps.getPart(2) )