def testCreateWatchdog(self):
        idList = []
        compNameDict = {}
        compIdDict = {}
        addrDict = {}
        portDict = {}
        dataDict = {}

        nextId = 1
        for comp in ('stringHub#0', 'stringHub#10', 'inIceTrigger#0',
                     'simpleTrigger#0', 'iceTopTrigger#0', 'amandaTrigger#0',
                     'globalTrigger#0', 'eventBuilder#0',
                     'secondaryBuilders#0'):
            pound = comp.find('#')
            compName = comp[:pound]
            compId = int(comp[pound + 1:])

            mbeans = self.__buildBeans(TestRunWatchdog.COMP_BEANS, comp)
            if compName == 'eventBuilder':
                self.__setStatic(mbeans, 'dispatch', 'backEnd',
                                 'NumEventsSent')

            client = MockRPCClient(mbeans)

            id = nextId
            nextId += 1

            idList.append(id)
            compNameDict[id] = compName
            compIdDict[id] = compId
            addrDict[id] = 'localhost'
            portDict[id] = 100 + id
            dataDict[id] = MockData(id, compName, compId, None, None, client)

        appender = MockAppender('log')

        wd = MockWatchdog(DAQLog(appender), 60.0, idList, compNameDict,
                          compIdDict, addrDict, portDict, dataDict)

        self.failIf(wd.inProgress(), 'Watchdog should not be in progress')
        self.failIf(wd.isDone(), 'Watchdog should not be done')
        self.failIf(wd.isHealthy(), 'Watchdog should not be healthy')
        self.failIf(wd.caughtError(), 'Watchdog should not have error')
        appender.checkStatus(10)

        self.__runThread(wd, appender)

        for id in dataDict:
            dataDict[id].updateMBeanData()

        appender.addExpectedRegexp(r'\*\* Run watchdog reports stagnant' +
                                   r' components:.*')

        self.__runThread(wd, appender)
    def testCreateWatchdogBadBean(self):
        id = 43
        name = 'eventBuilder'
        compId = 83

        comp = '%s#%d' % (name, compId)
        mbeans = self.__buildBeans({name: []}, comp)

        idList = [
            id,
        ]
        compNameDict = {id: name}
        compIdDict = {id: compId}
        addrDict = {id: 'xxx'}
        portDict = {id: 543}
        dataDict = {id: None}

        appender = MockAppender('log')
        appender.addExpectedRegexp(r"Couldn't create watcher for component" +
                                   r' #%d type %s#%d: .*' % (id, name, compId))

        wd = MockWatchdog(DAQLog(appender), None, idList, compNameDict,
                          compIdDict, addrDict, portDict, dataDict)