예제 #1
0
def runMachine(start):
    eventHub = core.EventHub()
    qeventHub = core.QueuedEventHub(eventHub)

    subsystems = core.SubsystemList()
    subsystems.append(qeventHub)
    machine = state.Machine(deps=subsystems)

    sequence = raw_input('Enter sequence: ')

    machine.start(start)
    assert machine.currentState() is not None, 'State machine not started'
    for x in sequence:
        eventType = globals()[x.upper()]
        qeventHub.publish(eventType, core.Event())
        qeventHub.publishEvents()

        assert machine.currentState(
        ) is not None, 'State machine ended prematurely'

    # State machine finished, send finish event
    qeventHub.publish(FINISH, core.Event())
    qeventHub.publishEvents()

    assert machine.currentState() is None, 'State machine has not ended'
    machine.stop()
예제 #2
0
 def testSubsystemPassing(self):
     eventHub = core.EventHub("EventHub")
     qeventHub = core.QueuedEventHub(eventHub, "QueuedEventHub")
     machine = state.Machine(deps = [eventHub, qeventHub])
     
     machine.start(Start)
     startState = machine.currentState()
     
     # Check for subsystems
     self.assertEquals(eventHub, startState.eventHub)
     self.assertEquals(qeventHub, startState.queuedEventHub)
예제 #3
0
파일: support.py 프로젝트: gsulliva/tortuga
    def setUp(self):
        # Create the event hub to collect all published events
        self.eventHub = core.EventHub()
        self.vehicle = MockVehicle(self.eventHub)
        self.controller = MockController(self.eventHub)

        # The QueuedEventHub lets us queue the events to be released when ready
        self.qeventHub = core.QueuedEventHub(self.eventHub)

        deps = [self.vehicle, self.controller, self.qeventHub, self.eventHub]
        self.motionManager = motion.basic.MotionManager({}, deps)

        # Replace Timer with out Mock Timer Class
        MockTimer.LOG = {}
        timer._origTimer = timer.Timer
        timer.Timer = MockTimer
예제 #4
0
    def setUp(self):
        # Need a QueuedEventHub
        self.eventHub = core.EventHub()
        self.qeventHub = core.QueuedEventHub(self.eventHub)

        cfg = {
            'Monitor': {
                'Systems': {
                    'Test': {
                        'eventType': 'ram.test.monitor.TestMonitor.TESTEVENT',
                        'property': 'number',
                        'name': 'testing123',
                        'warning': 5,
                        'critical': 10
                    }
                }
            }
        }
        self.monitor = monitor.Monitor(cfg=cfg.get('Monitor', {}),
                                       deps=[self.qeventHub])
예제 #5
0
    def setUp(self):
        self.vehicle = MockVehicle()

        cfg = {
            'name': 'TestController',
            'type': 'BWPDController',
            'angularPGain': 10,
            'angularDGain': 1,
            'desiredQuaternion': [0, 0, 0, 1]
        }
        cfg = core.ConfigNode.fromString(str(cfg))
        self.eventHub = core.EventHub()

        deps = core.SubsystemList()
        deps.append(self.eventHub)
        deps.append(self.vehicle)

        self.actualDepth = 0
        self.desiredDepth = 0
        self.controller = core.SubsystemMaker.newObject(cfg, deps)
        self.qeventHub = core.QueuedEventHub(self.eventHub)
예제 #6
0
파일: timer.py 프로젝트: stormageAC/tortuga
    def testQueuedEvents(self):
        self.event = None
        eventHub = core.EventHub()
        qeventHub = core.QueuedEventHub(eventHub)
        timerManager = timer.TimerManager(deps=[eventHub])

        # Subscribe event queue
        qeventHub.subscribeToType(TestTimer.TIMER_EVENT, self.handleTimer)

        # Create times
        newTimer = timerManager.newTimer(TestTimer.TIMER_EVENT, 0.25)

        # Start the timer and sleep to wait for it to complete, then check
        newTimer.start()
        time.sleep(0.1)
        self.assertEquals(0, self.sec)
        self.assertEquals(0.25 * 1e9, self.nsec)
        self.assertEquals(None, self.event)

        # Now release the events
        qeventHub.publishEvents()
        self.assertEquals(TestTimer.TIMER_EVENT, self.event.type)
예제 #7
0
    def setUp(self, extraDeps=None, cfg=None):
        # Handle case where the timer is still mocked for some reason, we make
        # sure to un mock it
        if AITestCase.__timerMocked:
            self.mockTimer()

        # Replace the Timer class with the Mock one
        self.mockTimer()

        if extraDeps is None:
            extraDeps = []

        if cfg is None:
            cfg = {}

        self.eventHub = core.EventHub()
        self.qeventHub = core.QueuedEventHub(self.eventHub)
        self.timerManager = timer.TimerManager(deps=[self.eventHub])
        self.estimator = MockEstimator(cfg=cfg.get('StateEstimator', {}))
        self.controller = MockController(eventHub=self.eventHub,
                                         estimator=self.estimator)
        self.vehicle = MockVehicle(cfg=cfg.get('Vehicle', {}))
        self.visionSystem = MockVisionSystem()

        aCfg = cfg.get('Ai', {})
        self.ai = AI(aCfg)

        deps = [
            self.controller, self.timerManager, self.eventHub, self.qeventHub,
            self.vehicle, self.visionSystem, self.ai, self.estimator
        ]

        mCfg = cfg.get('MotionManager', {})
        self.motionManager = motion.basic.MotionManager(mCfg, deps)
        deps.append(self.motionManager)

        deps.extend(extraDeps)
        sCfg = cfg.get('StateMachine', {})
        self.machine = state.Machine(cfg=sCfg, deps=deps)
예제 #8
0
 def testEventHub(self):
     eventHub = core.EventHub()
     qeventHub = core.QueuedEventHub(eventHub)
     mockEventSource = MockEventSource(eventHub)
     
     machine = state.Machine(deps = [eventHub, qeventHub])
     machine.start(Start)
     
     # Send an event, and make sure it does get through until the queue
     # releases it
     mockEventSource.sendEvent(MockEventSource.ANOTHER_EVT, value = 20)
     startState = machine.currentState()
     self.assertEquals(Start, type(startState))
     
     # Release events and make sure we have transition properly
     qeventHub.publishEvents()
     self.assertEquals(QueueTestState, type(machine.currentState()))
     self.assert_(startState.anotherEvtEvent)
     self.assertEquals(20, startState.anotherEvtEvent.value)
     
     # Fire off another event and make sure we haven't gone anywhere
     mockEventSource.sendEvent(MockEventSource.THING_UPDATED, value = 34)
     qeventHub.publishEvents()
     self.assertEquals(QueueTestState, type(machine.currentState()))
예제 #9
0
 def setUp(self):
     self.eventHub = core.EventHub()
     self.qeventHub = core.QueuedEventHub(self.eventHub)
     self.epub = core.EventPublisher()
예제 #10
0
def AnalyzeComputer(log_name, suppress, size, type_locs):
    data = [0] * 7
    type_index = type_locs

    def numToCpuType(num):
        return {
            0: 'User',
            1: 'Nice',
            2: 'Sys',
            3: 'Idle',
            4: 'IOWait',
            5: 'IRQ',
            6: 'SIRQ'
        }.get(num, 'Invalid')

    def _onUser(event):
        data[0] = event.number

    def _onNice(event):
        data[1] = event.number

    def _onSys(event):
        data[2] = event.number

    def _onIdle(event):
        data[3] = event.number

    def _onIowt(event):
        data[4] = event.number

    def _onIrq(event):
        data[5] = event.number

    def _onSirq(event):
        data[6] = event.number

    def rewrite():
        output = ''
        for l in type_index:
            output += numToCpuType(l) + ': %%%5.2f ' % data[l]
        print '\r', output,
        sys.stdout.flush()

    print 'PyTop, a CPU analysis program (Crtl+C to exit)'

    # Create subsystems
    eventHub = core.EventHub()
    qeventHub = core.QueuedEventHub(eventHub)

    cfg = {
        'CpuMonitor': {
            'type': 'CpuMonitor',
            'depends_on': '[ "QueuedEventHub" ]',
            'log_results': suppress,
            'bufferSize': size
        }
    }
    if log_name is not None:
        cfg['CpuMonitor']['log_name'] = log_name
    monitor = ram.monitor.CpuMonitor(cfg=cfg.get('CpuMonitor'),
                                     deps=[qeventHub])

    # Register events we are listening to
    connections = []
    eventTypes = [
        ram.monitor.CpuMonitor.USER_UPDATE, ram.monitor.CpuMonitor.NICE_UPDATE,
        ram.monitor.CpuMonitor.SYS_UPDATE, ram.monitor.CpuMonitor.IDLE_UPDATE,
        ram.monitor.CpuMonitor.IOWT_UPDATE, ram.monitor.CpuMonitor.IRQ_UPDATE,
        ram.monitor.CpuMonitor.SIRQ_UPDATE
    ]
    eventFuncs = [_onUser, _onNice, _onSys, _onIdle, _onIowt, _onIrq, _onSirq]

    for index in type_index:
        conn = qeventHub.subscribeToType(eventTypes[index], eventFuncs[index])
        connections.append(conn)

    start = time.time()
    while True:
        try:
            # Allow cpu time to pass
            time.sleep(1.0 / size)
            end = time.time()

            # Update monitor and publish the events
            monitor.update(end - start)
            qeventHub.publishEvents()
            rewrite()
            start = end
        except KeyboardInterrupt:
            break

    # Unbackground monitor and close connections
    monitor.unbackground()

    for conn in connections:
        conn.disconnect()