def testPartialHDMIStatsFiles(self): """Test deserialization when a subset of files are not present.""" stbservice.HDMI_DISPLAY_DEVICE_STATS_FILES = [ 'testdata/stbservice/hdmi_dispdev_status*.json', 'testdata/stbservice/nosuchfile*.json' ] stb = stbservice.STBService() self.assertEqual(stb.Components.HDMINumberOfEntries, 1) for v in stb.Components.HDMIList.values(): self.assertEqual(v.ResolutionMode, 'Auto') self.assertEqual(v.ResolutionValue, '640x480 @ 51Hz') self.assertEqual(v.DisplayDevice.Status, 'Present') self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_NegotiationCount4, 3) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_NegotiationCount24, 9) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_HDCPAuthFailureCnt, 5) self.assertEqual(v.DisplayDevice.Name, '') self.assertEqual(v.DisplayDevice.EEDID, '') self.assertEqual(len(v.DisplayDevice.SupportedResolutions), 0) self.assertEqual(v.DisplayDevice.PreferredResolution, '') self.assertEqual(v.DisplayDevice.VideoLatency, 0) self.assertEqual(v.DisplayDevice.AutoLipSyncSupport, False) self.assertEqual(v.DisplayDevice.HDMI3DPresent, False) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_VendorId, '') self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_ProductId, 0) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_MfgYear, 1990)
def testNonexistentHDMIStatsFile(self): """Test whether the absence of HDMI stats file is handled gracefully.""" stbservice.HDMI_STATS_FILE = self.STATS_FILES_NOEXST[0] stbservice.HDMI_DISPLAY_DEVICE_STATS_FILES = self.STATS_FILES_NOEXST stb = stbservice.STBService() self.assertEqual(stb.Components.HDMINumberOfEntries, 1) for v in stb.Components.HDMIList.values(): self.assertEqual(v.ResolutionMode, 'Auto') self.assertEqual(v.ResolutionValue, '') self.assertEqual(v.DisplayDevice.Status, 'None') self.assertEqual(v.DisplayDevice.Name, '') self.assertEqual(v.DisplayDevice.EEDID, '') self.assertEqual(len(v.DisplayDevice.SupportedResolutions), 0) self.assertEqual(v.DisplayDevice.PreferredResolution, '') self.assertEqual(v.DisplayDevice.VideoLatency, 0) self.assertEqual(v.DisplayDevice.AutoLipSyncSupport, False) self.assertEqual(v.DisplayDevice.HDMI3DPresent, False) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_NegotiationCount4, 0) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_NegotiationCount24, 0) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_VendorId, '') self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_ProductId, 0) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_MfgYear, 1990) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_LastUpdateTimestamp, '0001-01-01T00:00:00Z')
def testClientGroupsStable(self): stbservice.PROCNETIGMP = 'testdata/stbservice/igmp_stable1' stbservice.PROCNETIGMP6 = 'testdata/stbservice/igmp6_stable1' stb = stbservice.STBService() igmp = stb.Components.FrontEndList['1'].IP.IGMP self.assertEqual(len(igmp.ClientGroupList), 5) # instances are sorted when possible self.assertEqual(igmp.ClientGroupList[1].GroupAddress, '224.0.0.1') self.assertEqual(igmp.ClientGroupList[2].GroupAddress, '225.0.1.3') self.assertEqual(igmp.ClientGroupList[3].GroupAddress, '225.0.1.4') self.assertEqual(igmp.ClientGroupList[4].GroupAddress, '225.0.1.5') self.assertEqual(igmp.ClientGroupList[5].GroupAddress, '225.0.1.6') stbservice.PROCNETIGMP = 'testdata/stbservice/igmp_stable2' tr.session.cache.flush() self.assertEqual(len(igmp.ClientGroupList), 5) # instances retain stable numbering when possible self.assertEqual(igmp.ClientGroupList[1].GroupAddress, '224.0.0.1') self.assertEqual(igmp.ClientGroupList[2].GroupAddress, '225.0.1.3') self.assertEqual(igmp.ClientGroupList[3].GroupAddress, '225.0.1.4') self.assertEqual(igmp.ClientGroupList[4].GroupAddress, '225.0.1.7') self.assertEqual(igmp.ClientGroupList[5].GroupAddress, '225.0.1.6') stbservice.PROCNETIGMP = 'testdata/stbservice/igmp_stable3' tr.session.cache.flush() self.assertEqual(len(igmp.ClientGroupList), 6) # instances retain stable numbering when possible self.assertEqual(igmp.ClientGroupList[1].GroupAddress, '224.0.0.1') self.assertEqual(igmp.ClientGroupList[2].GroupAddress, '225.0.1.3') self.assertEqual(igmp.ClientGroupList[3].GroupAddress, '225.0.1.8') self.assertEqual(igmp.ClientGroupList[4].GroupAddress, '225.0.1.7') self.assertEqual(igmp.ClientGroupList[5].GroupAddress, '225.0.1.6') self.assertEqual(igmp.ClientGroupList[6].GroupAddress, '225.0.1.9')
def testStallAlarm(self): stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_small%d.json' ] ioloop = MockIoloop() stb = stbservice.STBService(ioloop=ioloop) self.assertEqual(stb.ServiceMonitoring.X_CATAWAMPUS_ORG_StallAlarmTime, '0001-01-01T00:00:00Z') stb.ServiceMonitoring.X_CATAWAMPUS_ORG_StallAlarmValue = 1 # small1 is not exceeding the AlarmValue self.assertEqual(stb.ServiceMonitoring.X_CATAWAMPUS_ORG_StallAlarmTime, '0001-01-01T00:00:00Z') stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_full%d.json' ] tr.session.cache.flush() self.assertEqual(stb.ServiceMonitoring.X_CATAWAMPUS_ORG_StallAlarmTime, '2013-01-11T10:00:00Z') self.assertTrue(ioloop.callback is not None) # Alarm should stay asserted even when stalltime drops below threshold. stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_small%d.json' ] tr.session.cache.flush() self.assertEqual(stb.ServiceMonitoring.X_CATAWAMPUS_ORG_StallAlarmTime, '2013-01-11T10:00:00Z') # Explicitly clear stb.ServiceMonitoring.X_CATAWAMPUS_ORG_StallAlarmTime = 0 self.assertEqual(stb.ServiceMonitoring.X_CATAWAMPUS_ORG_StallAlarmTime, '0001-01-01T00:00:00Z')
def testDejitteringStats(self): """Test whether Dejittering stats are deserialized.""" stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 9) ml = stb.ServiceMonitoring.MainStreamList self.assertEqual(ml[1].Total.DejitteringStats.EmptyBufferTime, 47) self.assertEqual(ml[2].Total.DejitteringStats.EmptyBufferTime, 41) self.assertEqual(ml[3].Total.DejitteringStats.EmptyBufferTime, 31) self.assertEqual(ml[4].Total.DejitteringStats.EmptyBufferTime, 23) self.assertEqual(ml[5].Total.DejitteringStats.EmptyBufferTime, 17) self.assertEqual(ml[6].Total.DejitteringStats.EmptyBufferTime, 11) self.assertEqual(ml[7].Total.DejitteringStats.EmptyBufferTime, 5) self.assertEqual(ml[8].Total.DejitteringStats.EmptyBufferTime, 1) self.assertEqual(ml[1].Total.DejitteringStats.Overruns, 8) self.assertEqual(ml[2].Total.DejitteringStats.Overruns, 7) self.assertEqual(ml[3].Total.DejitteringStats.Overruns, 6) self.assertEqual(ml[4].Total.DejitteringStats.Overruns, 5) self.assertEqual(ml[5].Total.DejitteringStats.Overruns, 4) self.assertEqual(ml[6].Total.DejitteringStats.Overruns, 3) self.assertEqual(ml[7].Total.DejitteringStats.Overruns, 2) self.assertEqual(ml[8].Total.DejitteringStats.Overruns, 1) self.assertEqual(ml[1].Total.DejitteringStats.Underruns, 11) self.assertEqual(ml[2].Total.DejitteringStats.Underruns, 12) self.assertEqual(ml[3].Total.DejitteringStats.Underruns, 13) self.assertEqual(ml[4].Total.DejitteringStats.Underruns, 14) self.assertEqual(ml[5].Total.DejitteringStats.Underruns, 15) self.assertEqual(ml[6].Total.DejitteringStats.Underruns, 16) self.assertEqual(ml[7].Total.DejitteringStats.Underruns, 17) self.assertEqual(ml[8].Total.DejitteringStats.Underruns, 18)
def testTCPStatsMultiple(self): """Test whether TCP stats are deserialized.""" stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 9) ml = stb.ServiceMonitoring.MainStreamList self.assertEqual(ml[1].Total.TCPStats.PacketsReceived, 8000) self.assertEqual(ml[1].Total.TCPStats.BytesReceived, 2048000) self.assertEqual(ml[1].Total.TCPStats.PacketsRetransmitted, 9) self.assertEqual(ml[2].Total.TCPStats.PacketsReceived, 7000) self.assertEqual(ml[2].Total.TCPStats.BytesReceived, 1792000) self.assertEqual(ml[2].Total.TCPStats.PacketsRetransmitted, 6) self.assertEqual(ml[3].Total.TCPStats.PacketsReceived, 6000) self.assertEqual(ml[3].Total.TCPStats.BytesReceived, 1536000) self.assertEqual(ml[3].Total.TCPStats.PacketsRetransmitted, 7) self.assertEqual(ml[4].Total.TCPStats.PacketsReceived, 5000) self.assertEqual(ml[4].Total.TCPStats.BytesReceived, 1280000) self.assertEqual(ml[4].Total.TCPStats.PacketsRetransmitted, 4) self.assertEqual(ml[5].Total.TCPStats.PacketsReceived, 4000) self.assertEqual(ml[5].Total.TCPStats.BytesReceived, 1024000) self.assertEqual(ml[5].Total.TCPStats.PacketsRetransmitted, 5) self.assertEqual(ml[6].Total.TCPStats.PacketsReceived, 3000) self.assertEqual(ml[6].Total.TCPStats.BytesReceived, 768000) self.assertEqual(ml[6].Total.TCPStats.PacketsRetransmitted, 2) self.assertEqual(ml[7].Total.TCPStats.PacketsReceived, 2000) self.assertEqual(ml[7].Total.TCPStats.BytesReceived, 512000) self.assertEqual(ml[7].Total.TCPStats.PacketsRetransmitted, 3) self.assertEqual(ml[8].Total.TCPStats.PacketsReceived, 1000) self.assertEqual(ml[8].Total.TCPStats.BytesReceived, 256000) self.assertEqual(ml[8].Total.TCPStats.PacketsRetransmitted, 1)
def testDynamicUpdate(self): """Test whether the object stays consistent when the file is updated.""" stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_small%d.json' ] stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 9) ml = stb.ServiceMonitoring.MainStreamList self.assertEqual(ml[1].Total.MPEG2TSStats.TSPacketsReceived, 400) self.assertEqual(ml[2].Total.MPEG2TSStats.TSPacketsReceived, 350) self.assertEqual(ml[3].Total.MPEG2TSStats.TSPacketsReceived, 300) self.assertEqual(ml[4].Total.MPEG2TSStats.TSPacketsReceived, 0) self.assertEqual(ml[5].Total.MPEG2TSStats.TSPacketsReceived, 0) self.assertEqual(ml[6].Total.MPEG2TSStats.TSPacketsReceived, 0) self.assertEqual(ml[7].Total.MPEG2TSStats.TSPacketsReceived, 0) self.assertEqual(ml[8].Total.MPEG2TSStats.TSPacketsReceived, 50) stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_full%d.json' ] tr.session.cache.flush() self.assertEqual(ml[1].Total.MPEG2TSStats.TSPacketsReceived, 800) self.assertEqual(ml[2].Total.MPEG2TSStats.TSPacketsReceived, 700) self.assertEqual(ml[3].Total.MPEG2TSStats.TSPacketsReceived, 600) self.assertEqual(ml[4].Total.MPEG2TSStats.TSPacketsReceived, 500) self.assertEqual(ml[5].Total.MPEG2TSStats.TSPacketsReceived, 400) self.assertEqual(ml[6].Total.MPEG2TSStats.TSPacketsReceived, 300) self.assertEqual(ml[7].Total.MPEG2TSStats.TSPacketsReceived, 200) self.assertEqual(ml[8].Total.MPEG2TSStats.TSPacketsReceived, 100)
def testInstancePersistance(self): """Test whether MainStream instance numbers are persistent.""" stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_strm1.json' ] stb = stbservice.STBService() m = stb.ServiceMonitoring self.assertEqual(m.MainStreamNumberOfEntries, 1) self.assertEqual(m.MainStreamList[1].X_GOOGLE_COM_StreamID, 1) stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_strm12.json' ] self.assertEqual(m.MainStreamNumberOfEntries, 2) self.assertEqual(m.MainStreamList[1].X_GOOGLE_COM_StreamID, 1) self.assertEqual(m.MainStreamList[2].X_GOOGLE_COM_StreamID, 2) stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_strm123.json' ] self.assertEqual(m.MainStreamNumberOfEntries, 3) self.assertEqual(m.MainStreamList[1].X_GOOGLE_COM_StreamID, 1) self.assertEqual(m.MainStreamList[2].X_GOOGLE_COM_StreamID, 2) self.assertEqual(m.MainStreamList[3].X_GOOGLE_COM_StreamID, 3) stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_strm2.json' ] self.assertEqual(m.MainStreamNumberOfEntries, 1) self.assertEqual(m.MainStreamList[2].X_GOOGLE_COM_StreamID, 2) stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_strm23.json' ] self.assertEqual(m.MainStreamNumberOfEntries, 2) self.assertEqual(m.MainStreamList[1].X_GOOGLE_COM_StreamID, 3) self.assertEqual(m.MainStreamList[2].X_GOOGLE_COM_StreamID, 2) stb.ValidateExports()
def __init__(self): tr181.Device_v2_2.Device.Services.__init__(self) self.Export(objects=['StorageServices']) self.StorageServices = dm.storage.StorageServiceLinux26() self._AddStorageDevices() self.Export(lists=['STBService']) self.Export(['STBServiceNumberOfEntries']) self.STBServiceList = {'1': stbservice.STBService()}
def testDecoderStats(self): """Test whether Decoder stats are deserialized.""" stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 9) ml = stb.ServiceMonitoring.MainStreamList for i in range(1, 7): stats = ml[i].Total.X_CATAWAMPUS_ORG_DecoderStats self.assertEqual(stats.VideoBytesDecoded, 13) self.assertEqual(stats.DecodeDrops, 7) self.assertEqual(stats.VideoDecodeErrors, 5) self.assertEqual(stats.DecodeOverflows, 6) self.assertEqual(stats.DecodedPictures, 4) self.assertEqual(stats.DisplayErrors, 9) self.assertEqual(stats.DisplayDrops, 10) self.assertEqual(stats.DisplayUnderflows, 11) self.assertEqual(stats.DisplayedPictures, 8) self.assertEqual(stats.ReceivedPictures, 3) self.assertEqual(stats.VideoWatchdogs, 12) self.assertEqual(stats.VideoPtsStcDifference, 14) self.assertEqual(stats.AudioDecodedFrames, 15) self.assertEqual(stats.AudioDecodeErrors, 16) self.assertEqual(stats.AudioDummyFrames, 17) self.assertEqual(stats.AudioFifoOverflows, 18) self.assertEqual(stats.AudioFifoUnderflows, 19) self.assertEqual(stats.AudioWatchdogs, 20) self.assertEqual(stats.AudioBytesDecoded, 21) self.assertEqual(stats.AudioPtsStcDifference, 22) self.assertEqual(stats.VideoFifoDepth, 30) self.assertEqual(stats.VideoDisplayQueueDepth, 31) self.assertEqual(stats.VideoCabacQueueDepth, 32) self.assertEqual(stats.VideoEnhancementFifoDepth, 33) self.assertEqual(stats.VideoPts, 34) self.assertEqual(stats.AudioFifoDepth, 35) self.assertEqual(stats.AudioQueuedFrames, 36) self.assertEqual(stats.AudioPts, 37) for i in range(7, 9): stats = ml[i].Total.X_CATAWAMPUS_ORG_DecoderStats self.assertEqual(stats.VideoBytesDecoded, 0) self.assertEqual(stats.DecodeDrops, 0) self.assertEqual(stats.VideoDecodeErrors, 0) self.assertEqual(stats.DecodeOverflows, 0) self.assertEqual(stats.DecodedPictures, 0) self.assertEqual(stats.DisplayErrors, 0) self.assertEqual(stats.DisplayDrops, 0) self.assertEqual(stats.DisplayUnderflows, 0) self.assertEqual(stats.DisplayedPictures, 0) self.assertEqual(stats.ReceivedPictures, 0) self.assertEqual(stats.VideoWatchdogs, 0) self.assertEqual(stats.VideoPtsStcDifference, 0) self.assertEqual(stats.AudioDecodedFrames, 0) self.assertEqual(stats.AudioDecodeErrors, 0) self.assertEqual(stats.AudioDummyFrames, 0) self.assertEqual(stats.AudioFifoOverflows, 0) self.assertEqual(stats.AudioFifoUnderflows, 0) self.assertEqual(stats.AudioWatchdogs, 0) self.assertEqual(stats.AudioBytesDecoded, 0) self.assertEqual(stats.AudioPtsStcDifference, 0)
def testIncorrectHDMIStatsFile(self): """Test deserialization when a subset of stats files are invalid.""" stbservice.HDMI_STATS_FILE = stbservice.PROCNETIGMP stb = stbservice.STBService() self.assertEqual(stb.Components.HDMINumberOfEntries, 1) for v in stb.Components.HDMIList.values(): self.assertEqual(v.ResolutionMode, 'Auto') self.assertEqual(v.ResolutionValue, '') self.assertEqual(v.DisplayDevice.Name, 'X213W')
def testEPGStatsAll(self): """Test whether EPG stats are deserialized properly.""" stb = stbservice.STBService() stb.X_CATAWAMPUS_ORG_ProgramMetadata.ValidateExports() epgStats = stb.X_CATAWAMPUS_ORG_ProgramMetadata.EPG self.assertEqual(epgStats.MulticastPackets, 1002) self.assertEqual(epgStats.EPGErrors, 2) self.assertEqual(epgStats.LastReceivedTime, '2012-07-25T01:50:37Z') self.assertEqual(epgStats.EPGExpireTime, '2012-07-30T01:50:37Z')
def testEPGStatsNoFile(self): """Test whether EPG stats are deserialized properly when not file backed.""" stbservice.EPG_STATS_FILES = self.STATS_FILES_NOEXST stb = stbservice.STBService() stb.X_CATAWAMPUS_ORG_ProgramMetadata.ValidateExports() epgStats = stb.X_CATAWAMPUS_ORG_ProgramMetadata.EPG self.assertEqual(epgStats.MulticastPackets, 0) self.assertEqual(epgStats.EPGErrors, 0) self.assertEqual(epgStats.LastReceivedTime, '0001-01-01T00:00:00Z') self.assertEqual(epgStats.EPGExpireTime, '0001-01-01T00:00:00Z')
def testEPGStatsIncorrectFileFormat(self): """Test whether EPG stats are handled properly for a bad file.""" stbservice.EPG_STATS_FILES = [stbservice.PROCNETIGMP] stb = stbservice.STBService() stb.X_CATAWAMPUS_ORG_ProgramMetadata.ValidateExports() epgStats = stb.X_CATAWAMPUS_ORG_ProgramMetadata.EPG self.assertEqual(epgStats.MulticastPackets, 0) self.assertEqual(epgStats.EPGErrors, 0) self.assertEqual(epgStats.LastReceivedTime, '0001-01-01T00:00:00Z') self.assertEqual(epgStats.EPGExpireTime, '0001-01-01T00:00:00Z')
def testClientGroups(self): stb = stbservice.STBService() igmp = stb.Components.FrontEndList['1'].IP.IGMP self.assertEqual(len(igmp.ClientGroupList), 12) expected = set([ '224.0.0.1', '225.0.1.3', '225.0.1.6', '225.0.1.10', '225.0.1.13', '225.0.1.18', '225.0.1.20', '225.0.1.153', '225.0.1.158', 'ff02::1', 'ff02::1:ff30:66af', 'ff02::1:ff30:64af' ]) actual = set() for i in range(1, 13): actual.add(igmp.ClientGroupList[i].GroupAddress) self.assertEqual(expected, actual)
def testNonexistentStatsFile(self): """Test whether the absence of stats file is handled gracefully.""" stbservice.CONT_MONITOR_FILES = self.STATS_FILES_NOEXST stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 9) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[1]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[2]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[3]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[4]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[5]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[6]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[7]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[8]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[256])
def testTSStats(self): """Test whether transport stream stats are deserialized.""" stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 8) expected_discont = set([10, 20, 30, 40, 50, 60, 70, 80]) expected_pkts = set([100, 200, 300, 400, 500, 600, 700, 800]) actual_discont = set() actual_pkts = set() #using iterators to read the stream data. This should reduce the file reads. for v in stb.ServiceMonitoring.MainStreamList.values(): tsstats = v.Total.MPEG2TSStats actual_discont.add(tsstats.PacketDiscontinuityCounter) actual_pkts.add(tsstats.TSPacketsReceived) self.assertEqual(expected_discont, actual_discont) self.assertEqual(expected_pkts, actual_pkts)
def testPartialUpdate(self): """Test whether a stats file with a subset of objects are deserialized.""" stbservice.CONT_MONITOR_FILES = self.CONT_MONITOR_FILES_P1 stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 8) # Dejittering stats not present in file. Check whether the object is init'ed expected_emptybuftime = set([0, 0, 0, 0, 0, 0, 0, 0]) expected_discont = set([10, 20, 30, 40, 50, 60, 70, 80]) actual_emptybuftime = set() actual_discont = set() for v in stb.ServiceMonitoring.MainStreamList.values(): actual_emptybuftime.add(v.Total.DejitteringStats.EmptyBufferTime) actual_discont.add(v.Total.MPEG2TSStats.PacketDiscontinuityCounter) self.assertEqual(expected_emptybuftime, actual_emptybuftime) self.assertEqual(expected_discont, actual_discont)
def testPartialUpdate(self): """Test whether a stats file with a subset of objects is deserialized.""" stbservice.CONT_MONITOR_FILES = ['testdata/stbservice/stats_p%d.json'] stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 9) ml = stb.ServiceMonitoring.MainStreamList self.assertEqual(ml[1].Total.MPEG2TSStats.TSPacketsReceived, 1) self.assertEqual(ml[1].Total.MPEG2TSStats.PacketDiscontinuityCounter, 2) self.assertEqual(ml[1].Total.TCPStats.PacketsReceived, 3) self.assertEqual(ml[1].Total.TCPStats.BytesReceived, 4) self.assertEqual(ml[1].Total.TCPStats.PacketsRetransmitted, 5) # Dejittering stats not present in file. Check whether the object is init'ed self.assertEqual(ml[1].Total.DejitteringStats.EmptyBufferTime, 0) self.assertEqual(ml[1].Total.DejitteringStats.Overruns, 0) self.assertEqual(ml[1].Total.DejitteringStats.Underruns, 0)
def testIncorrectStatsFileFormat(self): """Test whether a malformed stats file is handled gracefully.""" stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_notjson%d.json' ] stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 9) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[1]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[2]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[3]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[4]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[5]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[6]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[7]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[8]) self.checkMPEG2Zero(stb.ServiceMonitoring.MainStreamList[256])
def testDejitteringStats(self): """Test whether Dejittering stats are deserialized.""" stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 8) expected_emptybuftime = set([1, 5, 11, 17, 23, 31, 41, 47]) expected_overruns = set([1, 2, 3, 4, 5, 6, 7, 8]) expected_underruns = set([18, 17, 16, 15, 14, 13, 12, 11]) actual_emptybuftime = set() actual_underruns = set() actual_overruns = set() for v in stb.ServiceMonitoring.MainStreamList.values(): djstats = v.Total.DejitteringStats actual_emptybuftime.add(djstats.EmptyBufferTime) actual_overruns.add(djstats.Overruns) actual_underruns.add(djstats.Underruns) self.assertEqual(expected_emptybuftime, actual_emptybuftime) self.assertEqual(expected_underruns, actual_underruns) self.assertEqual(expected_overruns, actual_overruns)
def testStallAlarmReset(self): stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_full%d.json' ] ioloop = MockIoloop() stb = stbservice.STBService(ioloop=ioloop) stb.ServiceMonitoring.X_CATAWAMPUS_ORG_StallAlarmValue = 1 self.assertEqual(stb.ServiceMonitoring.X_CATAWAMPUS_ORG_StallAlarmTime, '2013-01-11T10:00:00Z') self.assertTrue(ioloop.callback is not None) # Stalltime drops back below threshold stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_small%d.json' ] tr.session.cache.flush() # Simulate timeout callback ioloop.callback() self.assertEqual(stb.ServiceMonitoring.X_CATAWAMPUS_ORG_StallAlarmTime, '0001-01-01T00:00:00Z')
def testHDMIStatsAll(self): """Test deserialization of all HDMI stats parameters.""" stb = stbservice.STBService() self.assertEqual(stb.Components.HDMINumberOfEntries, 1) for v in stb.Components.HDMIList.values(): self.assertEqual(v.ResolutionMode, 'Auto') self.assertEqual(v.ResolutionValue, '640x480 @ 51Hz') self.assertEqual(v.DisplayDevice.Status, 'Present') self.assertEqual(v.DisplayDevice.Name, 'X213W') self.assertEqual(v.DisplayDevice.EEDID, ('00ffffffffffff000472330088b4808' '008120103802f1e78eade95a3544c99' '260f5054bfef90a940714f814001019' '500950f9040010121399030621a2740' '68b03600da2811000019000000fd003' '84d1f5411000a202020202020000000' 'ff004c43473043303233343031300a0' '00000fc0058323133570a2020202020' '202000d9')) self.assertEqual(v.DisplayDevice.SupportedResolutions, ('640x480 @ 51Hz, ' '640x480 @ 52Hz, ' '640x480 @ 55Hz')) self.assertEqual(v.DisplayDevice.PreferredResolution, '640x480 @ 51Hz') self.assertEqual(v.DisplayDevice.VideoLatency, 0) self.assertEqual(v.DisplayDevice.AutoLipSyncSupport, False) self.assertEqual(v.DisplayDevice.HDMI3DPresent, False) self.assertEqual( v.DisplayDevice.X_GOOGLE_COM_EDIDExtensions, v.DisplayDevice.EEDID + ', ' + v.DisplayDevice.EEDID) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_NegotiationCount4, 3) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_NegotiationCount24, 9) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_HDCPAuthFailureCnt, 5) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_VendorId, 'ACR') self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_ProductId, 51) self.assertEqual(v.DisplayDevice.X_GOOGLE_COM_MfgYear, 2008)
def testTCPStats(self): """Test whether TCP stats are deserialized.""" stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 8) expected_pktsrcvd = set( [1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000]) expected_bytesrcvd = set([ 256000, 512000, 768000, 1024000, 1280000, 1536000, 1792000, 2048000 ]) expected_pktsretran = set([1, 3, 2, 5, 4, 7, 6, 9]) actual_pktsrcvd = set() actual_bytesrcvd = set() actual_pktsretran = set() for v in stb.ServiceMonitoring.MainStreamList.values(): tcpstats = v.Total.TCPStats actual_pktsrcvd.add(tcpstats.PacketsReceived) actual_bytesrcvd.add(tcpstats.BytesReceived) actual_pktsretran.add(tcpstats.PacketsRetransmitted) self.assertEqual(expected_pktsrcvd, actual_pktsrcvd) self.assertEqual(expected_bytesrcvd, actual_bytesrcvd) self.assertEqual(expected_pktsretran, actual_pktsretran)
def testTCPStatsAll(self): """Test whether all TCP stats are deserialized.""" stbservice.CONT_MONITOR_FILES = [ 'testdata/stbservice/stats_tcp%d.json' ] stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 9) tcp = stb.ServiceMonitoring.MainStreamList[1].Total.TCPStats self.assertEqual(tcp.BytesReceived, 1) self.assertEqual(tcp.X_CATAWAMPUS_ORG_BytesSent, 2) self.assertEqual(tcp.PacketsReceived, 3) self.assertEqual(tcp.X_CATAWAMPUS_ORG_Cwnd, 5) self.assertEqual(tcp.X_CATAWAMPUS_ORG_SlowStartThreshold, 6) self.assertEqual(tcp.X_CATAWAMPUS_ORG_Unacked, 7) self.assertEqual(tcp.X_CATAWAMPUS_ORG_Sacked, 8) self.assertEqual(tcp.X_CATAWAMPUS_ORG_Lost, 9) self.assertEqual(tcp.X_CATAWAMPUS_ORG_Rtt, 10) self.assertEqual(tcp.X_CATAWAMPUS_ORG_RttVariance, 11) self.assertEqual(tcp.X_CATAWAMPUS_ORG_ReceiveRTT, 12) self.assertEqual(tcp.X_CATAWAMPUS_ORG_ReceiveSpace, 13) self.assertEqual(tcp.X_CATAWAMPUS_ORG_RetransmitTimeout, 14) self.assertEqual(tcp.PacketsRetransmitted, 15)
def testDynamicUpdate(self): """Test whether the object stays consistent when the file is updated.""" savedfnames = stbservice.CONT_MONITOR_FILES stbservice.CONT_MONITOR_FILES = self.CONT_MONITOR_FILES_ALT stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 4) for stream in stb.ServiceMonitoring.MainStreamList.values(): if stream.X_GOOGLE_COM_StreamID == 3: self.assertEqual(stream.Total.MPEG2TSStats.TSPacketsReceived, 600) self.assertRaises(KeyError, lambda: stb.ServiceMonitoring.MainStreamList[6]) # Change the underlying json file; The new one has more entries stbservice.CONT_MONITOR_FILES = savedfnames self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 8) self.assertEqual(stream.Total.MPEG2TSStats.TSPacketsReceived, 600) for stream in stb.ServiceMonitoring.MainStreamList.values(): if stream.X_GOOGLE_COM_StreamID == 3: self.assertEqual(stream.Total.MPEG2TSStats.TSPacketsReceived, 600) if stream.X_GOOGLE_COM_StreamID == 6: self.assertEqual(stream.Total.MPEG2TSStats.TSPacketsReceived, 300)
def testIncorrectObjectListIndex(self): """Test whether incorrect indexing of the stream object is handled.""" stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 8) self.assertRaises(KeyError, lambda: stb.ServiceMonitoring.MainStreamList[9])
def testIncorrectStatsFileFormat(self): """Test whether a malformed stats file is handled gracefully.""" # stbservice.PROCNETIGMP is not a JSON file. stbservice.CONT_MONITOR_FILES = [stbservice.PROCNETIGMP] stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 0)
def testNonexistentStatsFile(self): """Test whether the absence of stats file is handled gracefully.""" stbservice.CONT_MONITOR_FILES = self.STATS_FILES_NOEXST stb = stbservice.STBService() self.assertEqual(stb.ServiceMonitoring.MainStreamNumberOfEntries, 0)
def testValidateExports(self): stb = stbservice.STBService() stb.ValidateExports()