def __init__(self, repository): self.serverCond = threading.Condition() self.workersLock = threading.Lock() self.workersDone = 0 # Parsowanie konfiguracji serwera config = ConfigParser.RawConfigParser() config.read("./config.txt") self.workersFile = config.get("Worker", "list") # lista serverow self.workerPort = config.getint("Worker", "port") # port na ktorym nasluchuja workerzy self.path = config.get("Rep", "path") # tymczasowy katalog na dysku dla repozytorium self.repository = repository.url # adres repozytorium self.svnauth = repository.Auth # czy wymagana autoryzacja do svna self.build_cmd = repository.build_cmd self.find_tests_cmd = repository.find_tests_cmd self.run_test_cmd = repository.run_test_cmd self.taskName = repository.taskName # self.svndownload = config.getboolean('Rep', 'download') #czy pobierac rep. (moze jest juz) self.svndownload = True if self.svnauth: self.authLogin = repository.login # dane do autoryzacji do svna self.authPassword = repository.password rep = RepoManager() rep = rep.getRepositoriesTypes()[0] self.svn = rep() if self.svnauth: self.svn.setLogin(self.authLogin, self.authPassword) self.ftp = ftpServer.ftpServer(self.path, 2222)
def run(self): #Send ping self.data = pakiet() self.data.typ = pakiet.PING self.data.msg = 'ping' self.buffer.send(self.data) #Recv ping self.data = self.buffer.read() if self.data.typ != pakiet.PING or self.data.msg != 'pong': #wyslij error print 'Bledna odpowiedz na ping!' self.close() return #pobieranie aplikacji testowanej przez workera self.data = pakiet() self.data.typ = pakiet.FTPDOWNLOAD self.data.port = 2222 # TODO: poprawic! self.data.msg = self.socket.getsockname()[0] self.buffer.send(self.data) self.data = self.buffer.read() if self.data.typ != pakiet.FTPDOWNLOAD or self.data.msg != 'ok': print 'Worker nie pobral FTP ', self.data.msg self.close() return self.ftpDownloaded = True log('Worker '+self.ip[:-1]+' pobral FTP') self.data = pakiet() self.data.typ = pakiet.BUILD self.data.msg = 'ant compile' self.buffer.send(self.data) self.data = self.buffer.read() if not self.data or self.data.typ != pakiet.BUILD: log('Blad podczas budowania') #self.close() #return rep = RepoManager() while True: self.server.workersLock.acquire() if len(self.server.jobs) > 0: job_file = self.server.jobs[0] job = self.server.run_test_cmd.replace('$$', job_file) self.server.jobs = self.server.jobs[1:] else: self.server.workersLock.release() self.server.serverCond.acquire() self.server.serverCond.notify() self.server.serverCond.release() break self.server.workersLock.release() try: results = self._test(job_file, job) except ValueError: print 'Blad podczas parsowania wyjscia' continue rep = RepoManager() rep.addResult(self.server.taskName, results) print 'WYNIKI TESTOW' print 'ILE: %d FAILURES: %d, ERRORS: %d LOG:' % (results.tests_count, results.failures, results.errors) print '/-------------\\' print results.log print '\\-------------/' #koniec pracy self.data = pakiet() self.data.typ = pakiet.EXIT self.buffer.send(self.data) self.close()
def close(self): log("Koniec.") if __name__ == "__main__": if len(sys.argv) <= 2: rep = IRepository() rep.name = "http://testhard.unfuddle.com/svn/testhard_project1/" # adres repozytorium rep.svnauth = True # czy wymagana autoryzacja do svna rep.find_tests_cmd = "for i in `seq 1 10`; do echo $i; done" # rep.find_tests_cmd = 'find . -iname "*test*class"' rep.run_test_cmd = 'echo "[junit] Tests run: 1, Failures: 1, Errors: 1, Time elapsed: 1.1 sec $$"' # rep.run_test_cmd = 'ant test' rep.auth = True rep.build_cmd = "ant compile" rep.authLogin = "******" # dane do autoryzacji do svna rep.authPassword = "******" rep.taskName = "qweqweqwe" else: repo_name = sys.argv[1] manager = RepoManager() try: raw_rep = manager.getRepository(repo_name) except IndexError: print "Nie ma repozytorium o podanej nazwie." sys.exit(-1) rep = manager.convertRepository(raw_rep) rep.taskName = sys.argv[2] s = server(rep) s.start()