X-Git-Url: https://git.llucax.com/software/sercom.git/blobdiff_plain/254784d15bc3e1ebd196855eb57916a3f730a99f..ed0b50a76ff1027d10cf7bb00c504168f69fd06c:/sercom/tester.py diff --git a/sercom/tester.py b/sercom/tester.py index 0ee98a7..47b3ec0 100644 --- a/sercom/tester.py +++ b/sercom/tester.py @@ -72,7 +72,12 @@ sp.CalledProcessError = CalledProcessError class Error(StandardError): pass -class ExecutionFailure(Error, RuntimeError): pass +class ExecutionFailure(Error, RuntimeError): #{{{ + def __init__(self, comando, tarea=None, caso_de_prueba=None): + self.comando = comando + self.tarea = tarea + self.caso_de_prueba = caso_de_prueba +#}}} class RsyncError(Error, EnvironmentError): pass @@ -274,7 +279,7 @@ def ejecutar_caso_de_prueba(self, path, entrega): #{{{ if self.rechazar_si_falla: entrega.exito = False if self.terminar_si_falla: - raise ExecutionError(e.comando, e.tarea, prueba) + raise ExecutionFailure(e.comando, e.tarea, self) else: prueba.exito = True finally: @@ -292,7 +297,7 @@ def ejecutar_tarea_fuente(self, path, entrega): #{{{ if self.rechazar_si_falla: entrega.exito = False if self.terminar_si_falla: - raise ExecutionError(e.comando, tarea) + raise ExecutionFailure(e.comando, self) TareaFuente.ejecutar = ejecutar_tarea_fuente #}}} @@ -306,7 +311,7 @@ def ejecutar_tarea_prueba(self, path, prueba): #{{{ if self.rechazar_si_falla: prueba.exito = False if self.terminar_si_falla: - raise ExecutionError(e.comando, tarea) + raise ExecutionFailure(e.comando, self) TareaPrueba.ejecutar = ejecutar_tarea_prueba #}}} @@ -356,19 +361,59 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{ log.error(_(u'Error en el hijo: %s'), e.child_traceback) raise proc.wait() #TODO un sleep grande nos caga todo, ver sercom viejo + if self.retorno != self.RET_ANY: + if self.retorno == self.RET_FAIL: + if proc.returncode == 0: + comando_ejecutado.exito = False + comando_ejecutado.observaciones += _(u'Se esperaba que el ' + u'programa termine con un error (código de retorno ' + u'distinto de 0) pero terminó bien (código de retorno ' + u'0).\n') + log.debug(_(u'Se esperaba que el programa termine ' + u'con un error (código de retorno distinto de 0) pero ' + u'terminó bien (código de retorno 0).\n')) + elif self.retorno != proc.returncode: + comando_ejecutado.exito = False + if proc.returncode < 0: + comando_ejecutado.observaciones += _(u'Se esperaba terminar ' + u'con un código de retorno %s pero se obtuvo una señal %s ' + u'(%s).\n') % (self.retorno, -proc.returncode, + -proc.returncode) # TODO poner con texto + log.debug(_(u'Se esperaba terminar con un código ' + u'de retorno %s pero se obtuvo una señal %s (%s).\n'), + self.retorno, -proc.returncode, -proc.returncode) + else: + comando_ejecutado.observaciones += _(u'Se esperaba terminar ' + u'con un código de retorno %s pero se obtuvo %s.\n') \ + % (self.retorno, proc.returncode) + log.debug(_(u'Se esperaba terminar con un código de retorno ' + u'%s pero se obtuvo %s.\n'), self.retorno, proc.returncode) + if comando_ejecutado.exito is None: + log.debug(_(u'Código de retorno OK')) comando_ejecutado.fin = datetime.now() buffer = StringIO() zip = ZipFile(buffer, 'w') + # Guardamos stdout/stderr if self.guardar_stdouterr: zip.write('/tmp/sercom.tester.%s.stdouterr' % comando_ejecutado.id, '__stdouterr__') else: if self.guardar_stdout: - azipwrite('/tmp/sercom.tester.%s.stdout' + zip.write('/tmp/sercom.tester.%s.stdout' % comando_ejecutado.id, '__stdout__') if self.guardar_stderr: zip.write('/tmp/sercom.tester.%s.stderr' % comando_ejecutado.id, '__stderr__') + # Guardamos otros + for f in self.archivos_a_guardar: + if not os.path.exists(join(path, f)): + comando_ejecutado.exito = False + comando_ejecutado.observaciones += _(u'Se esperaba un archivo "%s" pero no fue ' + u'encontrado') % f + log.debug(_(u'Se esperaba un archivo "%s" pero no fue ' + u'encontrado'), f) + else: + zip.write(join(path, f), f) zip.close() comando_ejecutado.archivos_guardados = buffer.getvalue()