示例#1
0
 def doWork(self):
     cfg = self.cfg
     from rmake import compat
     compat.checkRequiredVersions()
     nodeServer = workernode.rMakeWorkerNodeServer(cfg)
     nodeServer._installSignalHandlers()
     nodeServer.serve_forever()
示例#2
0
    def testStopCommand(self):
        from rmake.multinode import messages as mnmessages
        from rmake.multinode import workernode
        from rmake.worker import command
        pid = os.fork()
        if not pid:
            try:
                time.sleep(10000)
            finally:
                os._exit(0)
        targetId = 'oldCmdId'
        targetCommand = mock.MockObject(pid=pid, getCommandId=lambda: targetId,
                                        jobId=1)
        port = self.startMessageBus()
        nodeCfg = self.getNodeCfg(port)
        node = workernode.rMakeWorkerNodeServer(nodeCfg,
                                        messageBusInfo=('localhost', port))
        cmd = command.StopCommand(nodeCfg, 'cmdId', targetCommand, node._killPid)
        cmd.commandDied(0)
        assert(cmd.isErrored())
        assert(str(cmd.getFailureReason()) 
               == 'Failed while executing command cmdId: oldCmdId did not die!')

        cmd = command.StopCommand(nodeCfg, 'cmdId', targetCommand, 
                                  node._killPid)
        cmd._runCommand()
        cmd.commandDied(0)
        try:
            os.waitpid(pid, os.WNOHANG)
            assert 0, 'sould not have gotten error here!'
        except OSError:
            pass
        assert(not cmd.isErrored())
示例#3
0
文件: daemon.py 项目: pombreda/rmake
 def doWork(self):
     cfg = self.cfg
     from rmake import compat
     compat.checkRequiredVersions()
     nodeServer = workernode.rMakeWorkerNodeServer(cfg)
     nodeServer._installSignalHandlers()
     nodeServer.serve_forever()
示例#4
0
 def _setupMockNode(self):
     from rmake.messagebus import messages
     from rmake.multinode import messages as mnmessages
     from rmake.multinode import workernode
     # test how the node responds to various messages sent in from our
     # fake client.
     cfg = self.getNodeCfg()
     server = workernode.rMakeWorkerNodeServer(cfg,
                           messageBusInfo=('localhost', None))
     sessionClient = server.client.getBusClient().getSession()
     mock.mockMethod(sessionClient.poll)
     mock.mockMethod(sessionClient.connect)
     mock.mockMethod(sessionClient.disconnect)
     mock.mockMethod(sessionClient.messageProcessor.sendMessage)
     mock.mock(sessionClient, 'logger')
     sessionClient.handle_connect()
     self._check(sessionClient, messages.ConnectionRequest,
                        sessionClass='WORKER')
     m = messages.ConnectedResponse()
     m.set(sessionId='WORKER-foo')
     sessionClient.handle_message(m)
     self._check(sessionClient, mnmessages.RegisterNodeMessage,
                        nodeType='WORKER', destination='/register')
     self._check(sessionClient, messages.SubscribeRequest,
                 destination='/command?targetNode=WORKER-foo')
     server._serveLoopHook()
     self._check(sessionClient, mnmessages.NodeInfo,
                 destination='/nodestatus')
     return server, sessionClient
示例#5
0
    def testNodeServerSlowToConnect(self):
        from rmake.multinode import workernode
        from rmake.server import client
        fclient = mock.MockObject()
        self.mock(client, 'rMakeClient', fclient)
        mock.mock(time, 'sleep') #Otherwise we wait 5 seconds for no good reason
        cfg = self.getNodeCfg()
        msgBusInfo = mock.MockObject()
        # The first time through, raise RuntimeError, and on the subsequent
        # runs return None and a mock object sequentially
        fclient().getMessageBusInfo._mock.raiseErrorOnAccess(RuntimeError('connect to server error'))
        fclient().getMessageBusInfo._mock.setReturns([None, msgBusInfo])

        server = workernode.rMakeWorkerNodeServer(cfg)
        self.assertEquals(len(time.sleep._mock.calls), 2, 'sleep should have been called twice')
        self.assertEquals(len(fclient().getMessageBusInfo._mock.calls), 3)
示例#6
0
    def testStopCommand(self):
        from rmake.multinode import messages as mnmessages
        from rmake.multinode import workernode
        from rmake.worker import command
        pid = os.fork()
        if not pid:
            try:
                time.sleep(10000)
            finally:
                os._exit(0)
        targetId = 'oldCmdId'
        targetCommand = mock.MockObject(pid=pid,
                                        getCommandId=lambda: targetId,
                                        jobId=1)
        port = self.startMessageBus()
        nodeCfg = self.getNodeCfg(port)
        node = workernode.rMakeWorkerNodeServer(nodeCfg,
                                                messageBusInfo=('localhost',
                                                                port))
        cmd = command.StopCommand(nodeCfg, 'cmdId', targetCommand,
                                  node._killPid)
        cmd.commandDied(0)
        assert (cmd.isErrored())
        assert (str(cmd.getFailureReason()) ==
                'Failed while executing command cmdId: oldCmdId did not die!')

        cmd = command.StopCommand(nodeCfg, 'cmdId', targetCommand,
                                  node._killPid)
        cmd._runCommand()
        cmd.commandDied(0)
        try:
            os.waitpid(pid, os.WNOHANG)
            assert 0, 'sould not have gotten error here!'
        except OSError:
            pass
        assert (not cmd.isErrored())