def setUp(self): self.eventLevelSlidingWindowStrategy = IBMPaperStrategy('TestData', subWindowIntervalDelta=timedelta(hours=5)) self.eventLevelSlidingWindowStrategy6 = IBMPaperStrategy('TestData', numberOfSubWindows=6, subWindowIntervalDelta=timedelta(hours=1)) # Parsed training data for five sub-window example self.fiveSubWindowTrainingData = [ ( # Event level counts for sub-windows (2, 0, 1, 0), (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), # Total event level counts 3, 3, 2, 0, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (2, 0, 1, 0), (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0) ), # Event level count means (0.75, 0.75, 0.50, 0.00), # Event level count standard deviations (0.83, 1.30, 0.50, 0.00), # Number of intervals since last fatal event INT_MAX, True ), ( # Event level counts for sub-windows (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1), # Total event level counts 2, 3, 1, 1, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1) ), # Event level count means (0.50, 0.75, 0.25, 0.25), # Event level count standard deviations (0.50, 1.30, 0.43, 0.43), # Number of intervals since last fatal event 1, False ), ( # Event level counts for sub-windows (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1), (0, 0, 0, 0), # Total event level counts 1, 3, 0, 1, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1), (0, 0, 0, 0) ), # Event level count means (0.25, 0.75, 0.00, 0.25), # Event level count standard deviations (0.43, 1.30, 0.00, 0.43), # Number of intervals since last fatal event 2, False ) ] # Parsed training data for six sub-window example self.sixSubWindowTrainingData = [ ( # Event level counts for sub-windows (2, 0, 1, 0), (0, 0, 0, 0), (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), # Total event level counts 3, 3, 2, 0, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (1,0,0,0), (0,0,1,0), (1,0,0,0), (0,0,0,0), # Hours 1-4 (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 5-8 (0,0,0,0), (0,0,0,0), (0,0,1,0), (1,0,0,0), # Hours 9-12 (0,3,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 13-16 (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 17-20 ), # Event level count means (0.15, 0.15, 0.10, 0.00), # Event level count standard deviations (0.36, 0.65, 0.30, 0.00), # Number of intervals since last fatal event INT_MAX, True ), ( # Event level counts for sub-windows (0, 0, 0, 0), (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1), # Total event level counts 2, 3, 1, 1, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 5-8 (0,0,0,0), (0,0,0,0), (0,0,1,0), (1,0,0,0), # Hours 9-12 (0,3,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 13-16 (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 17-20 (0,0,0,0), (0,0,0,1), (0,0,0,0), (1,0,0,0), # Hours 21-0 (next day) ), # Event level count means (0.10, 0.15, 0.05, 0.05), # Event level count standard deviations (0.30, 0.65, 0.22, 0.22), # Number of intervals since last fatal event 1, False ), ( # Event level counts for sub-windows (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1), (0, 0, 0, 0), # Total event level counts 2, 3, 1, 1, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (0,0,0,0), (0,0,0,0), (0,0,1,0), (1,0,0,0), # Hours 9-12 (0,3,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 13-16 (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 17-20 (0,0,0,0), (0,0,0,1), (0,0,0,0), (1,0,0,0), # Hours 21-0 (next day) (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 1-4 (next day) ), # Event level count means (0.10, 0.15, 0.05, 0.05), # Event level count standard deviations (0.30, 0.65, 0.22, 0.22), # Number of intervals since last fatal event 2, False ) ] self.projectRoot = os.environ['PROJECT_ROOT']
class IBMPaperStrategyTest(unittest.TestCase): """ Unit tests for the SlidingWindow class """ def setUp(self): self.eventLevelSlidingWindowStrategy = IBMPaperStrategy('TestData', subWindowIntervalDelta=timedelta(hours=5)) self.eventLevelSlidingWindowStrategy6 = IBMPaperStrategy('TestData', numberOfSubWindows=6, subWindowIntervalDelta=timedelta(hours=1)) # Parsed training data for five sub-window example self.fiveSubWindowTrainingData = [ ( # Event level counts for sub-windows (2, 0, 1, 0), (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), # Total event level counts 3, 3, 2, 0, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (2, 0, 1, 0), (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0) ), # Event level count means (0.75, 0.75, 0.50, 0.00), # Event level count standard deviations (0.83, 1.30, 0.50, 0.00), # Number of intervals since last fatal event INT_MAX, True ), ( # Event level counts for sub-windows (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1), # Total event level counts 2, 3, 1, 1, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1) ), # Event level count means (0.50, 0.75, 0.25, 0.25), # Event level count standard deviations (0.50, 1.30, 0.43, 0.43), # Number of intervals since last fatal event 1, False ), ( # Event level counts for sub-windows (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1), (0, 0, 0, 0), # Total event level counts 1, 3, 0, 1, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1), (0, 0, 0, 0) ), # Event level count means (0.25, 0.75, 0.00, 0.25), # Event level count standard deviations (0.43, 1.30, 0.00, 0.43), # Number of intervals since last fatal event 2, False ) ] # Parsed training data for six sub-window example self.sixSubWindowTrainingData = [ ( # Event level counts for sub-windows (2, 0, 1, 0), (0, 0, 0, 0), (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), # Total event level counts 3, 3, 2, 0, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (1,0,0,0), (0,0,1,0), (1,0,0,0), (0,0,0,0), # Hours 1-4 (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 5-8 (0,0,0,0), (0,0,0,0), (0,0,1,0), (1,0,0,0), # Hours 9-12 (0,3,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 13-16 (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 17-20 ), # Event level count means (0.15, 0.15, 0.10, 0.00), # Event level count standard deviations (0.36, 0.65, 0.30, 0.00), # Number of intervals since last fatal event INT_MAX, True ), ( # Event level counts for sub-windows (0, 0, 0, 0), (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1), # Total event level counts 2, 3, 1, 1, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 5-8 (0,0,0,0), (0,0,0,0), (0,0,1,0), (1,0,0,0), # Hours 9-12 (0,3,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 13-16 (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 17-20 (0,0,0,0), (0,0,0,1), (0,0,0,0), (1,0,0,0), # Hours 21-0 (next day) ), # Event level count means (0.10, 0.15, 0.05, 0.05), # Event level count standard deviations (0.30, 0.65, 0.22, 0.22), # Number of intervals since last fatal event 1, False ), ( # Event level counts for sub-windows (1, 0, 1, 0), (0, 3, 0, 0), (0, 0, 0, 0), (1, 0, 0, 1), (0, 0, 0, 0), # Total event level counts 2, 3, 1, 1, # Event level counts for sub-window intervals (each sub-window is 1 hour interval ( (0,0,0,0), (0,0,0,0), (0,0,1,0), (1,0,0,0), # Hours 9-12 (0,3,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 13-16 (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 17-20 (0,0,0,0), (0,0,0,1), (0,0,0,0), (1,0,0,0), # Hours 21-0 (next day) (0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0), # Hours 1-4 (next day) ), # Event level count means (0.10, 0.15, 0.05, 0.05), # Event level count standard deviations (0.30, 0.65, 0.22, 0.22), # Number of intervals since last fatal event 2, False ) ] self.projectRoot = os.environ['PROJECT_ROOT'] def testParseTrainingDataEmpty(self): """ Tests that no training data is returned when passed an empty log """ actualTrainingData = self.eventLevelSlidingWindowStrategy.parseWindowedLogData([], []) self.assertEqual([], actualTrainingData) def testParseTrainingDataNone(self): """ Tests that no training data is returned when passed a null log """ actualTrainingData = self.eventLevelSlidingWindowStrategy.parseWindowedLogData(None, None) self.assertEqual([], actualTrainingData) def testParseTrainingDataUnevenSplit(self): """ Tests that the training data fails to parse if the sub-window intervals do not divide evenly into the sub-windows """ try: invalidStrategy = IBMPaperStrategy('TestData', subWindowIntervalDelta=timedelta(hours=4)) self.fail('Trying to construct an invalid strategy should have thrown an exception!') except StrategyError, error: self.assertEqual('Error parsing windowed log data, cannot divide sub-windows into smaller intervals evenly!', error.message)