import sys import os import zlib from ftplib import FTP, all_errors import time import threading class FtpTester: def __init__(self, ipaddress, filename): self.ipaddress = ipaddress self.filename = filename self.username = 'dev' self.password = 'nutter' self.upload_filename = 'upload.tmp' def __verify_file__(self): file_sent = open(self.filename, 'r').read() file_uploaded = open(self.upload_filename, 'r').read() crc1 = (zlib.crc32(file_sent)) % (1<<32) crc2 = (zlib.crc32(file_uploaded)) % (1<<32) if crc1 == crc2: print "Passed" os.remove(self.upload_filename) return True else: print "Invalid CRC" os.remove(self.upload_filename) return False def set_login_details(self, username, password): self.username = username self.password = password def set_upload_filename(self, filename): self.upload_filename = filename def run_download_test(self): #Connect try: ftp = FTP() #ftp.set_debug_level(1) ftp.connect(self.ipaddress, timeout=30) ftp.login(self.username,self.password) ftp.cwd('/home/dev') except all_errors, e: print "Launching Error - %s" % str(e) ftp.close() return -1 # Remove any old files try: ftp.delete('download.tmp') except all_errors: pass #Handle files try: fp1 = open(self.filename, "r") fp2 = open(self.upload_filename, 'wb') except Exception, e: print "File Error %s" % str(e) ftp.close() return 0 # Download then upload try: ftp.storbinary("STOR download.tmp", fp1) except all_errors, e: print "Download Error %s" % str(e) ftp.close() return 0 fp1.close() try: ftp.retrbinary('RETR download.tmp', fp2.write) fp2.close() except all_errors, e: print "Upload Error %s" % str(e) ftp.close() return 0 try: ftp.delete('download.tmp') except all_errors: pass ftp.close() # Verify files against each other if self.__verify_file__() == True: return 1 else: return 0 def ftp_worker(): passed = 0 fail = 0 total = 0; testState = True test = FtpTester('144.179.1.199', 'udplog2.txt') while testState == True: result = test.run_download_test() if result == -1: testState = False print "Exiting FTP Test" elif result == 1: passed = passed + 1 else: fail = fail + 1 total = total + 1 print "PASSED %d FAILED %d TOTAL %d" % (passed, fail, total) time.sleep(1) return if __name__ == "__main__": #Create FTP test thread t = threading.Thread(name='Ftp', target=ftp_worker) # Start thread t.start() while t.isAlive(): time.sleep(1) print "EXIT"