コード例 #1
0
ファイル: server.py プロジェクト: krzychusan/TestHard
    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)
コード例 #2
0
ファイル: serverworker.py プロジェクト: krzychusan/TestHard
    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()
コード例 #3
0
ファイル: server.py プロジェクト: krzychusan/TestHard
    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()