def doWork(self): cfg = self.cfg from rmake import compat compat.checkRequiredVersions() nodeServer = workernode.rMakeWorkerNodeServer(cfg) nodeServer._installSignalHandlers() nodeServer.serve_forever()
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())
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
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)
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())