class SenderTestRunner(FeedsTestRunner):

    def __init__(self, sender):
        self._sender = sender
        self._messageSet = MessageSet(MESSAGE_SET_FILE, EXTRACT_MSG_RE)
        FeedsTestRunner.__init__(self)
        
    def __call__(self):
        t1Ms = time.time() * 1000 

        doTest = Test(1, "Send  message").wrap(self._doTest)
        doTest()

        if sleepTime > 0:
            # Adjust sleep time based on test time
            adjustedSleeptime = sleepTime - ((time.time() * 1000) - t1Ms)
            grinder.sleep(long(adjustedSleeptime))
        

    def _doTest(self):
        msg = self._messageSet.next()
        msgId = self._getMessageId(msg)
        msg = self._insertMessageId(msgId, msg)

        sentT = time.time() * 1000
        self._sender.send(msg + '\n')
        self._messageStore.set(msgId, sentT)

    def _insertMessageId(self, msgId, message):
        msgIdStr = "||MSG_ID=%s||" % msgId
        return re.sub(INSERT_ID_RE, msgIdStr, message)

    def _getMessageId(self, message):
        """Create a message ID based on the agent, process, thread and run
        number. This should be unique across multiple test clients."""
        msgIdInts = [ grinder.agentNumber, grinder.processNumber,
                 grinder.threadNumber, grinder.runNumber ]
        msgIdStrs = map(lambda item : str(item), msgIdInts)
        return ''.join(msgIdStrs)
 def __init__(self, sender):
     self._sender = sender
     self._messageSet = MessageSet(MESSAGE_SET_FILE, EXTRACT_MSG_RE)
     FeedsTestRunner.__init__(self)