def setUp(self):
     
     self._log = logging.getLogger( "TestTelnet" )
     self._log.debug("\n\nsetUp")
     self.telnetServer = TestTCPServer(58450) # we set up a tcp server to use as a telnet server
     self.telnetServer.start()
     self.telnetServer.ready.wait()
     self.telnetWrapper = TelnetWrapper("127.0.0.1",58450,'\n')
class TestTelnet(unittest.TestCase):
    
    def setUp(self):
        
        self._log = logging.getLogger( "TestTelnet" )
        self._log.debug("\n\nsetUp")
        self.telnetServer = TestTCPServer(58450) # we set up a tcp server to use as a telnet server
        self.telnetServer.start()
        self.telnetServer.ready.wait()
        self.telnetWrapper = TelnetWrapper("127.0.0.1",58450,'\n')
 
    def makelargestring(self,char):
        self.bigstring = ''
        for i in range(1,20000):
            self.bigstring +=  char   
        return self.bigstring
            
    def tearDown(self):
        self._log.debug( "\n\ntearDown" )
        self.telnetWrapper.close()
        self.telnetServer.stop()  
           
    def testWrite(self):
        #write our test string using the wrapper
        self.telnetWrapper.write(testConfigstring)
        #give the server time to recieve it then check if its buffer matches test string
        time.sleep(1)
        assert self.telnetServer.data == testConfigstring
   
    def testRead(self):
        # tell server to send out our test string
        self.telnetServer.send(testConfigstring)
        # give the server time to send it
        time.sleep(1)
        #check our wrapper to see if we have it
        self.textbuffer = self.telnetWrapper.read()
        assert (self.textbuffer == testConfigstring)
        
    def testReadNonASCII(self):
        #test to see if we recieve non ascii values ok
        testchar = chr(255)
        self._log.debug('Non ASCII Char == %s' %testchar)
        # tell server to send out our test string
        self.telnetServer.send(testchar)
        # give the server time to send it
        time.sleep(1)
        #check our wrapper to see if we have it
        self.textbuffer = self.telnetWrapper.read()
        self._log.debug('Recieved is : ##%s##' %self.textbuffer)
        assert (self.textbuffer == testchar)   
        
    def testReadline(self):
    
        # tell server to send out our test strings
        for line in testConfiglines:
            self._log.debug("Sending : %s"%line)
            self.telnetServer.send(line)
            time.sleep(1)
        # give the server time to send it

        self.textbuffer = []
        for line in testConfiglines:
            self._log.debug("Expected : %s"%line)
                #check our wrapper to see if we have it
            temp = self.telnetWrapper.readline()
            self._log.debug("Got : %s" %temp)
            self.textbuffer.append(temp)
                
        assert (self.textbuffer[0] == "hello1")
        assert (self.textbuffer[1] == "hello2")
        assert (self.textbuffer[2] == "hello3")
            
    def testDoubleWrite(self):
        #set up sync event
        self.event = threading.Event()
        self.aaa = self.makelargestring('a')
        self.bbb = self.makelargestring('b')
        #syncwrite will start itself in a new thread
        self.syncwrite = syncfunctioncall(self.event,self.telnetWrapper.write,self.bbb)
        # synchronize with syncwrite
        self.event.wait() 
        #write something at the same time as syncwrite
        self.telnetWrapper.write(self.aaa)
        # give the server time to fetch the new data
        time.sleep(1) 
        assert self.aaa in self.telnetServer.data
        assert self.bbb in self.telnetServer.data
        return    

    def testwriteServerdeath(self):
        self.event = threading.Event()
        self.aaa = self.makelargestring('a')
        self.syncdisconnect = syncfunctioncall(self.event,self.telnetServer.stop)
        self.event.wait()
        self.telnetWrapper.write(self.aaa)
        return
        
    def testreadServerdeath(self):
        self.event = threading.Event()
        self.aaa = self.makelargestring('a')
        self.telnetServer.send(self.aaa)
        time.sleep(1)
        self.syncdisconnect = syncfunctioncall(self.event,self.telnetServer.stop)
        self.event.wait()        
        self.telnetWrapper.read()
        return
        
    def testreadlineServerdeath(self):
        self.event = threading.Event()
        self.newline = "newline\n"
        self.telnetServer.send(self.newline)
        time.sleep(1)
        self.syncdisconnect = syncfunctioncall(self.event,self.telnetServer.stop)
        self.event.wait()
        self.telnetWrapper.readline()
        return
        
    def testDummy(self):
        return